From 0ba52bcb2081930972de071d0126c6fd2545f082 Mon Sep 17 00:00:00 2001 From: ryanml Date: Tue, 28 Apr 2020 15:19:04 -0700 Subject: [PATCH 01/16] Adding brave-bitgo-client to deps --- package.json | 1 + yarn.lock | 1109 ++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 1083 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index e3569cf79..13b8e6592 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "bluebird": "^3.5.0", "bn.js": "^4.11.7", "boron": "^0.2.3", + "brave-bitgo-client": "github:brave/bitgo-client#3300bcb9b59cdfbfe739d43db17f8bc655d6eae3", "browser-passworder": "^2.0.3", "browserify-derequire": "^0.9.4", "browserify-unibabel": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index 87e61aea0..022574cc6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1301,6 +1301,13 @@ dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.0.tgz#4fc1d642a9fd0299754e8b5de62c631cf5568205" + integrity sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5": version "7.4.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" @@ -1448,6 +1455,36 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@bitgo/account-lib@^1.0.3": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@bitgo/account-lib/-/account-lib-1.1.0.tgz#5d9784f5d97efdbd07d7230baffeb4ea1a44656e" + integrity sha512-dX+An8tXPi6chqZnzEWyL/msMSVlKt2hE9rDXcQm4PDtIOnd5k00sPbLuKeFir2sSCBsvMuJy+iZQ9fljj2CSQ== + dependencies: + "@bitgo/statics" "^3.4.2" + "@taquito/local-forging" "^6.0.3-beta.0" + "@taquito/signer" "^6.0.3-beta.0" + bignumber.js "^9.0.0" + bitgo-utxo-lib "^1.6.0" + blake2b "git+https://github.com/BitGo/blake2b.git#6268e6dd678661e0acc4359e9171b97eb1ebf8ac" + bs58check "^2.1.2" + elliptic "^6.5.2" + libsodium-wrappers "^0.7.6" + protobufjs "^6.8.9" + tronweb "^2.7.2" + +"@bitgo/statics@^3.4.2", "@bitgo/statics@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@bitgo/statics/-/statics-3.5.0.tgz#1580dbd0ba5920acd649c6514012c9f3f2624112" + integrity sha512-t/KvJmaisndhrkT4HgdSrkaVDE21s2vzs9jFgt8xXfi1n7z6N0ScIBZuF1YO1BF8X9wL183Qj7Fy8yiz0pMeOw== + +"@bitgo/unspents@^0.6.0": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@bitgo/unspents/-/unspents-0.6.2.tgz#e89ff8d4e19d68253e1dc99fec2bb30192054390" + integrity sha512-G9jFHsfnnlQETHZVDpY66s1Pw2x6whDgPVk9iIMQ8rl7mO+hp8DzdIEmfTEGAVqbN605SFz3c1z+mhRwj1vxog== + dependencies: + lodash "~4.17.14" + tcomb "~3.2.29" + "@emotion/cache@^10.0.17": version "10.0.19" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.19.tgz#d258d94d9c707dcadaf1558def968b86bb87ad71" @@ -2030,6 +2067,54 @@ "@nodelib/fs.scandir" "2.1.2" fastq "^1.6.0" +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + "@protobufjs/utf8@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" @@ -2747,6 +2832,46 @@ dependencies: defer-to-connect "^1.0.1" +"@taquito/local-forging@^6.0.3-beta.0": + version "6.0.3-beta.1" + resolved "https://registry.yarnpkg.com/@taquito/local-forging/-/local-forging-6.0.3-beta.1.tgz#7922b03baa650b2641e9f4091fb1e3ec0b040790" + integrity sha512-G1OjOCAyQLkEDO/7r6c1+BseNOm+kvSivG50LEI0+57YmfvbsZih/7O7Zafc6ns0TQy5rPnBwOoRbxYWTomwJQ== + dependencies: + "@taquito/utils" "^6.0.3-beta.1" + bignumber.js "^9.0.0" + +"@taquito/signer@^6.0.3-beta.0": + version "6.0.3-beta.1" + resolved "https://registry.yarnpkg.com/@taquito/signer/-/signer-6.0.3-beta.1.tgz#18a8cae6121d0a0dc322fc6e45b80daf2f8b9e39" + integrity sha512-bEn15cvZmocxgN+APk50hNGorc+Uy4Jkq01WbW0KnXupzY+2wkIFuI2wy4rUe2MUnpO0zus8UexOqFOYBIWrrA== + dependencies: + "@taquito/utils" "^6.0.3-beta.1" + bignumber.js "^9.0.0" + bip39 "^3.0.2" + elliptic "^6.5.1" + libsodium-wrappers "^0.7.5" + pbkdf2 "^3.0.17" + typedarray-to-buffer "^3.1.5" + +"@taquito/utils@^6.0.3-beta.1": + version "6.0.3-beta.1" + resolved "https://registry.yarnpkg.com/@taquito/utils/-/utils-6.0.3-beta.1.tgz#61311a7ff6aca1a81c0e01386357d6fb8aa3456b" + integrity sha512-P4ddjsVSKCgkM77ewHI/Xo5bJmKMU9kCUAO6febu/IrBxYr31UcBv7YjQK5UCVQKE2ZXUG7OwhhGKifezd+AMQ== + dependencies: + blakejs "^1.1.0" + bs58check "^2.1.2" + buffer "^5.2.1" + +"@types/bluebird@^3.5.25": + version "3.5.30" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.30.tgz#ee034a0eeea8b84ed868b1aa60d690b08a6cfbc5" + integrity sha512-8LhzvcjIoqoi1TghEkRMkbbmM+jhHnBokPGkJWjclMK+Ks0MxEBow3/p2/iFTZ+OIbJHQDSfpgdZEb+af3gfVw== + +"@types/cookiejar@*": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.1.tgz#90b68446364baf9efd8e8349bb36bd3852b75b80" + integrity sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw== + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -2789,6 +2914,16 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.124.tgz#16fb067a8fc4be42f044c505d8b5316c6f54de93" integrity sha512-6bKEUVbHJ8z34jisA7lseJZD2g31SIvee3cGX2KEZCS4XXWNbjPZpmO1/2rGNR9BhGtaYr6iYXPl1EzRrDAFTA== +"@types/lodash@^4.14.136": + version "4.14.150" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.150.tgz#649fe44684c3f1fcb6164d943c5a61977e8cf0bd" + integrity sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w== + +"@types/long@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" + integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -2804,11 +2939,21 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== +"@types/node@11.11.6": + version "11.11.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" + integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ== + "@types/node@^10.3.2": version "10.14.14" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.14.tgz#a47955df2acf76ba7f0ac3b205d325da193dc9ad" integrity sha512-xXD08vZsvpv4xptQXj1+ky22f7ZoKu5ZNI/4l+/BXG3X+XaeZsmaFbbTKuhSE3NjjvRuZFxFf9sQBMXIcZNFMQ== +"@types/node@^13.7.0": + version "13.13.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.4.tgz#1581d6c16e3d4803eb079c87d4ac893ee7501c2c" + integrity sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA== + "@types/node@^8.10.11": version "8.10.48" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.48.tgz#e385073561643a9ba6199a1985ffc03530f90781" @@ -2862,6 +3007,14 @@ dependencies: redux "*" +"@types/superagent@^4.1.3": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.7.tgz#a7d92d98c490ee0f802a127fdf149b9a114f77a5" + integrity sha512-JSwNPgRYjIC4pIeOqLwWwfGj6iP1n5NE6kNBEbGx2V8H78xCPwx7QpNp9plaI30+W3cFEzJO7BIIsXE+dbtaGg== + dependencies: + "@types/cookiejar" "*" + "@types/node" "*" + "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" @@ -2884,6 +3037,13 @@ "@types/unist" "*" "@types/vfile-message" "*" +"@types/ws@^7.2.0": + version "7.2.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.4.tgz#b3859f7b9c243b220efac9716ec42c716a72969d" + integrity sha512-9S6Ask71vujkVyeEXKxjBSUV8ZUB0mjL5la4IncBoheu04bDaYyUKErh1BQcY9+WzOUOiKqz/OnpJHYckbMfNg== + dependencies: + "@types/node" "*" + "@webassemblyjs/ast@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" @@ -3332,7 +3492,7 @@ agent-base@4, agent-base@^4.2.0: dependencies: es6-promisify "^5.0.0" -agent-base@^4.3.0: +agent-base@^4.1.0, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== @@ -3452,6 +3612,16 @@ ajv@^6.10.0, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +"algosdk@git+https://github.com/BitGo/algosdk-bitgo.git": + version "1.2.0" + resolved "git+https://github.com/BitGo/algosdk-bitgo.git#0668c1412466beff2591a94c10c8bad06e21d872" + dependencies: + hi-base32 "^0.5.0" + js-sha512 "^0.8.0" + msgpack-lite "git+https://github.com/algorand/msgpack-lite.git" + superagent "^4.1.0" + tweetnacl "^1.0.1" + amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -4290,6 +4460,21 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== +axios@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + +axios@^0.19.0: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -5094,7 +5279,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -5102,6 +5287,13 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" +babel-runtime@^5.8.20: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-5.8.38.tgz#1c0b02eb63312f5f087ff20450827b425c9d4c19" + integrity sha1-HAsC62MxL18If/IEUIJ7QlydTBk= + dependencies: + core-js "^1.0.0" + babel-standalone@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-standalone/-/babel-standalone-6.26.0.tgz#15fb3d35f2c456695815ebf1ed96fe7f015b6886" @@ -5212,7 +5404,14 @@ base-x@3.0.4, base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" -base-x@^1.1.0: +base-x@3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.7.tgz#1c5a7fafe8f66b4114063e8da102799d4e7c408f" + integrity sha512-zAKJGuQPihXW22fkrfOclUUZXM2g92z5GzlSMHxhO6r6Qj+Nm0ccaGNBzDZojzwOMkpjAv4J0fOv1U4go+a4iw== + dependencies: + safe-buffer "^5.0.1" + +base-x@^1.0.1, base-x@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/base-x/-/base-x-1.1.0.tgz#42d3d717474f9ea02207f6d1aa1f426913eeb7ac" integrity sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w= @@ -5279,11 +5478,21 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bech32@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-0.0.3.tgz#736747c4a6531c5d8937d0400498de30e93b2f9c" + integrity sha512-O+K1w8P/aAOLcYwwQ4sbiPYZ51ZIW95lnS4/6nE8Aib/z+OOddQIIPdu2qi94qGDp4HhYy/wJotttXKkak1lXg== + bech32@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.3.tgz#bd47a8986bbb3eec34a56a097a84b8d3e9a2dfcd" integrity sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg== +bech32@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" @@ -5306,11 +5515,21 @@ big.js@^5.1.2, big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bignumber.js@^4.1.0: +bigi@1.4.2, bigi@^1.1.0, bigi@^1.4.0, bigi@^1.4.2, bigi@~1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/bigi/-/bigi-1.4.2.tgz#9c665a95f88b8b08fc05cfd731f561859d725825" + integrity sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU= + +bignumber.js@^4.0.0, bignumber.js@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1" integrity sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA== +bignumber.js@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + bignumber.js@^8.0.1, bignumber.js@^8.0.2, bignumber.js@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.1.1.tgz#4b072ae5aea9c20f6730e4e5d529df1271c4d885" @@ -5397,6 +5616,11 @@ binaryen@77.0.0-nightly.20190407: resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-77.0.0-nightly.20190407.tgz#fbe4f8ba0d6bd0809a84eb519d2d5b5ddff3a7d1" integrity sha512-1mxYNvQ0xywMe582K7V6Vo2zzhZZxMTeGHH8aE/+/AND8f64D8Q1GThVY3RVRwGY/4p+p95ccw9Xbw2ovFXRIg== +binaryen@^37.0.0: + version "37.0.0" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-37.0.0.tgz#c392bc784b6d46da8fc918b1a4ed8257a0cd8b08" + integrity sha512-ACBhSXtQvZvJZ8LNM5R/8HTk57Nr4J+HIrGfIfbIM9OpyaMePsXMgzVt+cMcCgX+sm4bmq5ed0kGgxd9RZ3Kkw== + binaryextensions@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-1.0.1.tgz#1e637488b35b58bda5f4774bf96a5212a8c90755" @@ -5465,7 +5689,17 @@ bip39@^2.5.0: safe-buffer "^5.0.1" unorm "^1.3.3" -bip66@^1.1.0, bip66@^1.1.5: +bip39@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.2.tgz#2baf42ff3071fc9ddd5103de92e8f80d9257ee32" + integrity sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ== + dependencies: + "@types/node" "11.11.6" + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + +bip66@^1.1.0, bip66@^1.1.3, bip66@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI= @@ -5477,6 +5711,11 @@ bitcoin-ops@^1.3.0, bitcoin-ops@^1.4.0: resolved "https://registry.yarnpkg.com/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz#e45de620398e22fd4ca6023de43974ff42240278" integrity sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow== +bitcoin-ops@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bitcoin-ops/-/bitcoin-ops-1.3.0.tgz#6b126b585537bc679b02ed499f14450cffc37e13" + integrity sha1-axJrWFU3vGebAu1JnxRFDP/DfhM= + bitcoinjs-lib@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/bitcoinjs-lib/-/bitcoinjs-lib-5.1.2.tgz#35e334a145670a4f335b20e0ac376a4b15648697" @@ -5499,6 +5738,106 @@ bitcoinjs-lib@^5.0.0: varuint-bitcoin "^1.0.4" wif "^2.0.1" +bitcoinjs-lib@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/bitcoinjs-lib/-/bitcoinjs-lib-3.0.3.tgz#3470eed5d6778b5404b770effbd0fcbb2bd89655" + integrity sha1-NHDu1dZ3i1QEt3Dv+9D8uyvYllU= + dependencies: + bigi "^1.4.0" + bip66 "^1.1.0" + bitcoin-ops "^1.3.0" + bs58check "^2.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.3" + ecurve "^1.0.0" + merkle-lib "^2.0.10" + pushdata-bitcoin "^1.0.1" + randombytes "^2.0.1" + typeforce "^1.8.7" + varuint-bitcoin "^1.0.4" + wif "^2.0.1" + +bitcoinjs-message@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bitcoinjs-message/-/bitcoinjs-message-2.1.0.tgz#5fe36a7d92473bdc929d9183416970bbef1690ad" + integrity sha512-xVL2YvyAJUI8ZwfNpi6Ju5zda3+QYGHTLUvISDb0VHWbsWn9Zyvd1o8XHRC/0r+DNwDIwenpXDSPl1XLCMGnMA== + dependencies: + bech32 "^1.1.3" + bs58check "^2.1.2" + buffer-equals "^1.0.3" + create-hash "^1.1.2" + secp256k1 "^3.0.1" + varuint-bitcoin "^1.0.1" + +bitgo-utxo-lib@^1.6.0, bitgo-utxo-lib@^1.7.0-rc: + version "1.8.0" + resolved "https://registry.yarnpkg.com/bitgo-utxo-lib/-/bitgo-utxo-lib-1.8.0.tgz#22b8ffb8dccf4fe74b6815407f1c1ebf1f4ad82f" + integrity sha512-6FQhml+7PKkR70cF6Kkj0JDKWhJb6czDcxJjyaq12fSKhn1hHjQCS4TrHYVmJuf4JH2xuaANX2Jx6exanTT8fQ== + dependencies: + bech32 "0.0.3" + bigi "^1.4.0" + bip66 "^1.1.0" + bitcoin-ops "^1.3.0" + blake2b "https://github.com/BitGo/blake2b#6268e6dd678661e0acc4359e9171b97eb1ebf8ac" + bs58check "^2.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.3" + debug "~3.1.0" + ecurve "^1.0.0" + merkle-lib "^2.0.10" + pushdata-bitcoin "^1.0.1" + randombytes "^2.0.1" + safe-buffer "^5.0.1" + typeforce "^1.11.3" + varuint-bitcoin "^1.0.4" + wif "^2.0.1" + optionalDependencies: + secp256k1 "^3.5.2" + +bitgo@^11.0.1: + version "11.0.3" + resolved "https://registry.yarnpkg.com/bitgo/-/bitgo-11.0.3.tgz#d2ddd0be692c1c58963e2b94529dd9811dd36966" + integrity sha512-mhy3gLkvj3DwcZeckjNboP0vVfV5VN+QFpr2uypfeH5O1mPwjTDov22GU6mtuxh2Lg4hGIUV6eilgzHr2Lp1Ew== + dependencies: + "@bitgo/account-lib" "^1.0.3" + "@bitgo/statics" "^3.5.0" + "@bitgo/unspents" "^0.6.0" + "@types/bluebird" "^3.5.25" + "@types/superagent" "^4.1.3" + algosdk "git+https://github.com/BitGo/algosdk-bitgo.git" + big.js "^3.1.3" + bigi "^1.4.0" + bignumber.js "^8.0.1" + bitcoinjs-message "^2.0.0" + bitgo-utxo-lib "^1.7.0-rc" + bluebird "^3.5.3" + bs58 "^2.0.1" + bs58check "^1.0.4" + cashaddress "^1.1.0" + create-hmac "^1.1.7" + debug "^3.1.0" + ecurve "^1.0.6" + eol "^0.5.0" + eosjs "^16.0.8" + eosjs-ecc "^4.0.4" + lodash "^4.17.14" + moment "^2.20.1" + prova-lib "^0.2.10" + ripple-address-codec "^4.0.0" + ripple-binary-codec "^0.2.4" + ripple-keypairs "^0.11.0" + ripple-lib "^1.4.1" + sanitize-html "^1.13.0" + secrets.js-grempe "^1.1.0" + stellar-sdk "^0.11.0" + superagent "^3.8.3" + superagent-proxy "^1.0.3" + optionalDependencies: + ethereumjs-abi "^0.6.5" + ethereumjs-tx "^1.3.7" + ethereumjs-util "^4.4.1" + secp256k1 "^3.6.1" + bl@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" @@ -5521,6 +5860,19 @@ bl@^3.0.0: dependencies: readable-stream "^3.0.1" +"blake2b-wasm@https://github.com/BitGo/blake2b-wasm#193cdb71656c1a6c7f89b05d0327bb9b758d071b": + version "2.0.0" + resolved "https://github.com/BitGo/blake2b-wasm#193cdb71656c1a6c7f89b05d0327bb9b758d071b" + dependencies: + nanoassert "^1.0.0" + +"blake2b@git+https://github.com/BitGo/blake2b.git#6268e6dd678661e0acc4359e9171b97eb1ebf8ac": + version "2.1.3" + resolved "git+https://github.com/BitGo/blake2b.git#6268e6dd678661e0acc4359e9171b97eb1ebf8ac" + dependencies: + blake2b-wasm "https://github.com/BitGo/blake2b-wasm#193cdb71656c1a6c7f89b05d0327bb9b758d071b" + nanoassert "^1.0.0" + blakejs@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" @@ -5558,7 +5910,7 @@ bn.js@4.11.6: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= -bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.7, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0: +bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.3, bn.js@^4.11.6, bn.js@^4.11.7, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== @@ -5578,6 +5930,16 @@ bn.js@^2.0.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-2.2.0.tgz#12162bc2ae71fc40a5626c33438f3a875cd37625" integrity sha1-EhYrwq5x/EClYmwzQ486h1zTdiU= +bn.js@^3.1.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-3.3.0.tgz#1138e577889fdc97bbdab51844f2190dfc0ae3d7" + integrity sha1-ETjld4if3Je72rUYRPIZDfwK49c= + +bn.js@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.1.tgz#48efc4031a9c4041b9c99c6941d903463ab62eb5" + integrity sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA== + body-parser@1.19.0, body-parser@^1.15.0, body-parser@^1.16.0, body-parser@^1.16.1: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -5690,6 +6052,12 @@ braces@^1.8.2, braces@^2.3.1, braces@^2.3.2, braces@^3.0.1: split-string "^3.0.2" to-regex "^3.0.1" +"brave-bitgo-client@github:brave/bitgo-client#3300bcb9b59cdfbfe739d43db17f8bc655d6eae3": + version "0.0.1" + resolved "https://codeload.github.com/brave/bitgo-client/tar.gz/3300bcb9b59cdfbfe739d43db17f8bc655d6eae3" + dependencies: + bitgo "^11.0.1" + brave-crypto@^0.2.1, brave-crypto@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/brave-crypto/-/brave-crypto-0.2.2.tgz#ab03e0fa9a41ac1e10acfbe5c26c1a952aa99323" @@ -5714,7 +6082,7 @@ brfs@^1.6.1: static-module "^2.2.0" through2 "^2.0.0" -brorand@^1.0.1: +brorand@^1.0.1, brorand@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= @@ -5755,6 +6123,17 @@ browser-stdout@1.3.0: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= +browserify-aes@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + integrity sha1-Xncl297x/Vkw1OurSFZ85FHEigo= + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" @@ -5967,7 +6346,7 @@ bs58check@<3.0.0, bs58check@^2.0.0, bs58check@^2.1.1, bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" -bs58check@^1.0.8: +bs58check@^1.0.4, bs58check@^1.0.8: version "1.3.4" resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-1.3.4.tgz#c52540073749117714fa042c3047eb8f9151cbf8" integrity sha1-xSVABzdJEXcU+gQsMEfrj5FRy/g= @@ -5975,6 +6354,14 @@ bs58check@^1.0.8: bs58 "^3.1.0" create-hash "^1.1.0" +bs58check@~2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.0.2.tgz#06f63b01c2fa6173033c90eb87f1fe3d2e13d89a" + integrity sha1-BvY7AcL6YXMDPJDrh/H+PS4T2Jo= + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + btoa@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" @@ -6018,6 +6405,11 @@ buffer-equal@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= +buffer-equals@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/buffer-equals/-/buffer-equals-1.0.4.tgz#0353b54fd07fd9564170671ae6f66b9cf10d27f5" + integrity sha1-A1O1T9B/2VZBcGca5vZrnPENJ/U= + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -6060,7 +6452,7 @@ buffer-to-arraybuffer@^0.0.5: resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= -buffer-xor@^1.0.3: +buffer-xor@^1.0.2, buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= @@ -6100,6 +6492,13 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +bytebuffer@5.0.1, bytebuffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" + integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0= + dependencies: + long "~3" + byteman@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/byteman/-/byteman-1.3.5.tgz#d6061f7536c7e7c4bcb756037ef9c4c266ec51fd" @@ -6276,7 +6675,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@3.0.x: +camel-case@3.0.x, camel-case@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= @@ -6356,6 +6755,13 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +cashaddress@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cashaddress/-/cashaddress-1.1.0.tgz#1a7d3b4e3b3bbdef77b666fecf322ea79bcc9799" + integrity sha1-Gn07Tjs7ve93tmb+zzIup5vMl5k= + dependencies: + bigi "^1.4.2" + catharsis@^0.8.10: version "0.8.10" resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.10.tgz#364198c1fbf084ae17028ee33ec7db53ca942ee6" @@ -7297,7 +7703,7 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== -cookiejar@^2.1.0, cookiejar@^2.1.1: +cookiejar@^2.1.0, cookiejar@^2.1.1, cookiejar@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== @@ -7427,6 +7833,11 @@ coveralls@^3.0.0: minimist "^1.2.0" request "^2.79.0" +crc@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.5.0.tgz#98b8ba7d489665ba3979f59b21381374101a1964" + integrity sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ= + crdts@~0.1.2: version "0.1.5" resolved "https://registry.yarnpkg.com/crdts/-/crdts-0.1.5.tgz#89413e8adfc3ab943300a890ee6392db5ba60c06" @@ -7447,7 +7858,7 @@ create-error-class@^3.0.0, create-error-class@^3.0.1: dependencies: capture-stack-trace "^1.0.0" -create-hash@^1.1.0, create-hash@^1.1.1: +create-hash@1.1.3, create-hash@^1.1.0, create-hash@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" integrity sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0= @@ -7457,7 +7868,7 @@ create-hash@^1.1.0, create-hash@^1.1.1: ripemd160 "^2.0.0" sha.js "^2.4.0" -create-hash@^1.1.2, create-hash@^1.2.0: +create-hash@^1.1.2, create-hash@^1.1.3, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -7468,7 +7879,7 @@ create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2: +create-hmac@1.1.6, create-hmac@^1.1.0, create-hmac@^1.1.2: version "1.1.6" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" integrity sha1-rLniIaThe9sHbpBlfEK5PjcmzwY= @@ -7480,7 +7891,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-hmac@^1.1.3, create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hmac@^1.1.3, create-hmac@^1.1.4, create-hmac@^1.1.6, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -7760,6 +8171,11 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" +cursor@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/cursor/-/cursor-0.1.5.tgz#ea778c2b09d33c2e564fd92147076750483ebb2c" + integrity sha1-6neMKwnTPC5WT9khRwdnUEg+uyw= + custom-event@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" @@ -8160,7 +8576,7 @@ debug@2, debug@2.6.9, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, de dependencies: ms "2.0.0" -debug@3.1.0, debug@3.X, debug@~3.1.0: +debug@3.1.0, debug@3.X, debug@=3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== @@ -8199,6 +8615,11 @@ decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" + integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -8856,6 +9277,14 @@ dom-serializer@0, dom-serializer@~0.1.0: domelementtype "~1.1.1" entities "~1.1.1" +dom-serializer@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + dom-serializer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" @@ -8884,6 +9313,11 @@ domelementtype@^1.3.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" @@ -8908,6 +9342,13 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domhandler@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" + integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== + dependencies: + domelementtype "^2.0.1" + domkit@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/domkit/-/domkit-0.0.1.tgz#88399d586794efc1154fec6c22cfe50f19bd4dbb" @@ -8929,6 +9370,15 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" +domutils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.0.0.tgz#15b8278e37bfa8468d157478c58c367718133c08" + integrity sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg== + dependencies: + dom-serializer "^0.2.1" + domelementtype "^2.0.1" + domhandler "^3.0.0" + dot-prop@^4.1.0, dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" @@ -9071,6 +9521,29 @@ ecstatic@^3.0.0: minimist "^1.1.0" url-join "^2.0.5" +ecurve@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/ecurve/-/ecurve-1.0.5.tgz#d148e8fe50a674f983bb5bae09da0ea23e10535e" + integrity sha1-0Ujo/lCmdPmDu1uuCdoOoj4QU14= + dependencies: + bigi "^1.1.0" + +ecurve@^1.0.0, ecurve@^1.0.5, ecurve@^1.0.6, ecurve@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/ecurve/-/ecurve-1.0.6.tgz#dfdabbb7149f8d8b78816be5a7d5b83fcf6de797" + integrity sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w== + dependencies: + bigi "^1.1.0" + safe-buffer "^5.0.1" + +ed25519@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/ed25519/-/ed25519-0.0.4.tgz#e56218ace2fc903d259593aef0b2a9639f475beb" + integrity sha1-5WIYrOL8kD0llZOu8LKpY59HW+s= + dependencies: + bindings "^1.2.1" + nan "^2.0.9" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -9135,6 +9608,19 @@ elliptic@6.3.3: hash.js "^1.0.0" inherits "^2.0.1" +elliptic@6.5.2, elliptic@^6.2.3, elliptic@^6.5.1, elliptic@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + elliptic@=3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-3.0.3.tgz#865c9b420bfbe55006b9f969f97a0d2c44966595" @@ -9344,6 +9830,11 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + envify@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" @@ -9397,6 +9888,60 @@ enzyme@^3.4.4: rst-selector-parser "^2.2.3" string.prototype.trim "^1.1.2" +eol@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/eol/-/eol-0.5.1.tgz#a2f15f9be38ac160f27c4e394fde02a9731a410c" + integrity sha1-ovFfm+OKwWDyfE45T94CqXMaQQw= + +eosjs-api@7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/eosjs-api/-/eosjs-api-7.0.4.tgz#dc3a7206d4ac3e6818f0a950b8d24333175ac7c9" + integrity sha512-oLbM39rcyWYkqu6nIEQ50I92yT2vvD7WZPZ3FujbydG2ssR5Re/uSvbkFfZTB02g3I4D+UDUA1jd65HlM7r3MQ== + dependencies: + camel-case "^3.0.0" + isomorphic-fetch "^2.2.1" + +eosjs-ecc@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eosjs-ecc/-/eosjs-ecc-4.0.4.tgz#431450f30a6f73088ff5d7ba1ebdfe967a5ca4ab" + integrity sha512-9wAYefts4TidHOu+eN9nAisZdWpUzlUimZrB63oP7+/s4xRNJEn2Vvep2ICRODpxpidbshM1L7WaSYW9oiV5gA== + dependencies: + bigi "^1.4.2" + browserify-aes "^1.0.6" + bs58 "^4.0.1" + bytebuffer "^5.0.1" + create-hash "^1.1.3" + create-hmac "^1.1.6" + ecurve "^1.0.5" + randombytes "^2.0.5" + +eosjs-ecc@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eosjs-ecc/-/eosjs-ecc-4.0.7.tgz#f5246da3b84839fcc237204768ef6e5ea56cc814" + integrity sha512-uuqhqnrDy9XTpKfkhiZqRDUTCCI9oWBalVK5IosL7kpYwA9I3lm68INYFLyWsHpF2xwHqPql8MrMYJ3zfOn5Qg== + dependencies: + "@babel/runtime" "7.6.0" + bigi "1.4.2" + browserify-aes "1.0.6" + bs58 "4.0.1" + bytebuffer "5.0.1" + create-hash "1.1.3" + create-hmac "1.1.6" + ecurve "1.0.5" + randombytes "2.0.5" + +eosjs@^16.0.8: + version "16.0.9" + resolved "https://registry.yarnpkg.com/eosjs/-/eosjs-16.0.9.tgz#ee3790f2f038079e71981f20354be8d1d98de873" + integrity sha512-aYgzbgH2RhnmYVzEmK4AD6UIboJI54PGYQUesv2i8rCqYhWij+xQx7PtALJ481cxZnQgmFn8s2KMkgG07P5/Ug== + dependencies: + babel-runtime "6.26.0" + binaryen "^37.0.0" + create-hash "^1.1.3" + eosjs-api "7.0.4" + eosjs-ecc "4.0.4" + fcbuffer "2.2.2" + epimetheus@^1.0.92: version "1.0.92" resolved "https://registry.yarnpkg.com/epimetheus/-/epimetheus-1.0.92.tgz#c4f354341f8ab692f62c3392108b356e1282d191" @@ -9534,6 +10079,11 @@ es6-promise@^4.0.3, es6-promise@^4.0.5: resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" integrity sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ== +es6-promise@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + es6-promise@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" @@ -10544,7 +11094,7 @@ ethereumjs-util@6.1.0, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0: safe-buffer "^5.1.1" secp256k1 "^3.0.1" -ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0, ethereumjs-util@^4.4.0: +ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0, ethereumjs-util@^4.4.0, ethereumjs-util@^4.4.1: version "4.5.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6" integrity sha1-PpQosxfuvaPXJg2FT93alUsfG8Y= @@ -10676,6 +11226,21 @@ ethers@^4.0.20, ethers@^4.0.28: uuid "2.0.1" xmlhttprequest "1.8.0" +ethers@^4.0.7: + version "4.0.47" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.47.tgz#91b9cd80473b1136dd547095ff9171bd1fc68c85" + integrity sha512-hssRYhngV4hiDNeZmVU/k5/E8xmLG8UpcNUzg6mb7lqhgpFPH/t7nuv20RjRrEf0gblzvi2XwR5Te+V3ZFc9pQ== + dependencies: + aes-js "3.0.0" + bn.js "^4.4.0" + elliptic "6.5.2" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + etherscan-link@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/etherscan-link/-/etherscan-link-1.0.2.tgz#c7b9142c4b59509b338a204b6328aea40dd3c64e" @@ -10929,6 +11494,16 @@ event-emitter@^0.3.5, event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" +event-lite@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/event-lite/-/event-lite-0.1.2.tgz#838a3e0fdddef8cc90f128006c8e55a4e4e4c11b" + integrity sha512-HnSYx1BsJ87/p6swwzv+2v6B4X+uxUteoDfRxsAb1S1BePzQqOLevVmkdA15GHJVd9A9Ok6wygUR18Hu0YeV9g== + +event-source-polyfill@0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/event-source-polyfill/-/event-source-polyfill-0.0.12.tgz#e539cd67fdef2760a16aa5262fa98134df52e3af" + integrity sha1-5TnNZ/3vJ2ChaqUmL6mBNN9S468= + event-stream@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" @@ -10982,7 +11557,7 @@ events@^3.0.0: resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== -eventsource@^1.0.7: +eventsource@^1.0.5, eventsource@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== @@ -11410,6 +11985,15 @@ fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.12, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.9" +fcbuffer@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/fcbuffer/-/fcbuffer-2.2.2.tgz#987d10062c46a8bfea27da77c964f43e9e25a014" + integrity sha512-4OhDYe3F3iToKkqao6aj72XcvEjCB4p06U8Wy30lYcLQTp2ispBf2cCyeymKPJQGnbG5wpBa2PraaWWJuZVnUg== + dependencies: + bn.js "^4.11.8" + bytebuffer "^5.0.1" + ieee-float "^0.6.0" + fd-slicer@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" @@ -11847,6 +12431,13 @@ focus-lock@^0.6.3: resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.4.tgz#066af3ed5875d85745ab45ef4fbbb43e8a73514a" integrity sha512-+waElh6m7dbNmEabXQIblZjJMIRQOoHMNqB8RZkyemK+vN1XQ9uHLi740DVwTcK5fzAq3g+tBglLjIqUDHX/Og== +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0: version "1.5.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.0.tgz#234f49cf770b7f35b40e790f636ceba0c3a0ab77" @@ -11933,6 +12524,15 @@ form-data@^2.3.1, form-data@~2.3.1: combined-stream "1.0.6" mime-types "^2.1.12" +form-data@^2.3.3: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -13547,7 +14147,7 @@ heap@0.2.6, heap@~0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= -hi-base32@~0.5.0: +hi-base32@^0.5.0, hi-base32@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/hi-base32/-/hi-base32-0.5.0.tgz#61329f76a31f31008533f1c36f2473e259d64571" integrity sha512-DDRmxSyoYuvjUb9EnXdoiMChBZ7ZcUVJsK5Frd3kqMhuBxvmZdnBeynAVfj7/ECbn++CekcoprvC/rprHPAtow== @@ -13721,6 +14321,16 @@ htmlparser2@^3.3.0, htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^2.0.2" +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -13815,7 +14425,7 @@ https-did-resolver@^0.1.0: did-resolver "0.0.6" xmlhttprequest "^1.8.0" -https-proxy-agent@2.2.1, https-proxy-agent@^2.1.1, https-proxy-agent@^2.2.3, https-proxy-agent@^3.0.0: +https-proxy-agent@2.2.1, https-proxy-agent@^2.1.1, https-proxy-agent@^2.2.1, https-proxy-agent@^2.2.3, https-proxy-agent@^3.0.0, https-proxy-agent@^5.0.0: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== @@ -13918,6 +14528,11 @@ idna-uts46@^1.0.1: dependencies: punycode "^2.1.0" +ieee-float@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/ieee-float/-/ieee-float-0.6.0.tgz#a68a856ba1ef511e7fa0e7e7e155c3a63642a55d" + integrity sha1-poqFa6HvUR5/oOfn4VXDpjZCpV0= + ieee754@^1.1.4, ieee754@^1.1.8: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -14119,6 +14734,11 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +injectpromise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/injectpromise/-/injectpromise-1.0.0.tgz#c621f7df2bbfc1164d714f1fb229adec2079da39" + integrity sha512-qNq5wy4qX4uWHcVFOEU+RqZkoVG65FhvGkyDWbuBxILMjK6A1LFf5A1mgXZkD4nRx5FCorD81X/XvPKp/zVfPA== + inline-source-map@~0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" @@ -14251,6 +14871,11 @@ insert-module-globals@^7.0.0: undeclared-identifiers "^1.1.2" xtend "^4.0.0" +int64-buffer@^0.1.9: + version "0.1.10" + resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.1.10.tgz#277b228a87d95ad777d07c13832022406a473423" + integrity sha1-J3siiofZWtd30HwTgyAiQGpHNCM= + interface-connection@~0.3.2, interface-connection@~0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/interface-connection/-/interface-connection-0.3.3.tgz#d82dd81efee5f2d40d7cb0fd75e6e858f92fa199" @@ -14955,6 +15580,11 @@ is-buffer@^2.0.0, is-buffer@^2.0.3: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== +is-buffer@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + is-builtin-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" @@ -15727,6 +16357,11 @@ js-sha3@^0.8.0, js-sha3@~0.8.0: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-sha512@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha512/-/js-sha512-0.8.0.tgz#dd22db8d02756faccf19f218e3ed61ec8249f7d4" + integrity sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ== + js-tokens@^3.0.0, "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -15737,6 +16372,15 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-xdr@^1.0.5: + version "1.1.4" + resolved "https://registry.yarnpkg.com/js-xdr/-/js-xdr-1.1.4.tgz#678df4c6f8c7960de85bdf3bfa02b89df2730777" + integrity sha512-Xhwys9hyDZQDisxCKZi2nDhvGg6fKhsEgAUaJlzjwo32mZ2gZVIQl3+w4Le5SX5dsKDsboFdM2gnu5JALWetTg== + dependencies: + cursor "^0.1.5" + lodash "^4.17.5" + long "^2.2.3" + js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.5.1, js-yaml@^3.6.1, js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -16025,6 +16669,11 @@ jsonpointer@^4.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= +jsonschema@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.2.tgz#83ab9c63d65bf4d596f91d81195e78772f6452bc" + integrity sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA== + jsonschema@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.4.tgz#a46bac5d3506a254465bc548876e267c6d0d6464" @@ -17113,6 +17762,18 @@ libp2p@~0.25.3: peer-info "^0.15.1" superstruct "^0.6.0" +libsodium-wrappers@^0.7.5, libsodium-wrappers@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.6.tgz#baed4c16d4bf9610104875ad8a8e164d259d48fb" + integrity sha512-OUO2CWW5bHdLr6hkKLHIKI4raEkZrf3QHkhXsJ1yCh6MZ3JDA7jFD3kCATNquuGSG6MjjPHQIQms0y0gBDzjQg== + dependencies: + libsodium "0.7.6" + +libsodium@0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.6.tgz#018b80c5728054817845fbffa554274441bda277" + integrity sha512-hPb/04sEuLcTRdWDtd+xH3RXBihpmbPCsKW/Jtf4PsvdyKh+D6z2D2gvp/5BfoxseP+0FCOg66kE+0oGUE/loQ== + lie@~3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" @@ -17374,7 +18035,7 @@ lodash.castarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" integrity sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU= -lodash.clonedeep@4.5.0, lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.4.1: +lodash.clonedeep@4.5.0, lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.4.1, lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= @@ -17416,6 +18077,11 @@ lodash.escape@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + lodash.filter@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" @@ -17528,6 +18194,11 @@ lodash.memoize@~3.0.3: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" @@ -17596,7 +18267,7 @@ lodash@4.17.14, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.13.1, lodash@^4.14.0, lo resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -lodash@=3.10.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: +lodash@=3.10.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.14: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -17652,11 +18323,21 @@ lolex@^2.2.0, lolex@^2.3.2: resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.3.2.tgz#85f9450425103bf9e7a60668ea25dc43274ca807" integrity sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng== +long@^2.2.3: + version "2.4.0" + resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f" + integrity sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8= + long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +long@~3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= + longest-streak@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105" @@ -17757,6 +18438,14 @@ lru-cache@^3.2.0: dependencies: pseudomap "^1.0.1" +lru-cache@^4.1.2: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -18316,6 +19005,11 @@ mime@^2.0.3, mime@^2.3.1, mime@^2.4.2: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.3.tgz#229687331e86f68924e6cb59e1cdd937f18275fe" integrity sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw== +mime@^2.4.0: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" @@ -18525,6 +19219,11 @@ module-not-found-error@^1.0.0: resolved "https://registry.yarnpkg.com/module-not-found-error/-/module-not-found-error-1.0.1.tgz#cf8b4ff4f29640674d6cdd02b0e3bc523c2bbdc0" integrity sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA= +moment@^2.20.1: + version "2.24.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" + integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + moment@^2.21.0: version "2.22.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.1.tgz#529a2e9bf973f259c9643d237fda84de3a26e8ad" @@ -18593,6 +19292,15 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +"msgpack-lite@git+https://github.com/algorand/msgpack-lite.git": + version "0.1.26" + resolved "git+https://github.com/algorand/msgpack-lite.git#549d9211c47863da5ad1b69276e363617c9a5c78" + dependencies: + event-lite "^0.1.1" + ieee754 "^1.1.8" + int64-buffer "^0.1.9" + isarray "^1.0.0" + multiaddr-to-uri@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-4.0.1.tgz#3b89d2a460a96602a16f3bfe296ee771ecb2558b" @@ -18817,6 +19525,11 @@ nan@^2.0.8, nan@^2.11.0, nan@^2.11.1, nan@^2.12.1, nan@^2.13.2, nan@^2.14.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nan@^2.0.9: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + nan@^2.2.1: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" @@ -18827,6 +19540,11 @@ nano-json-stream-parser@^0.1.2: resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= +nanoassert@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-1.1.0.tgz#4f3152e09540fde28c76f44b19bbcd1d5a42478d" + integrity sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40= + nanoid@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.0.3.tgz#dde999e173bc9d7bd2ee2746b89909ade98e075e" @@ -20207,6 +20925,20 @@ p-whilst@^1.0.0: resolved "https://registry.yarnpkg.com/p-whilst/-/p-whilst-1.0.0.tgz#54668ead7f934799fc00f1e5230fd6addeb8e7e6" integrity sha1-VGaOrX+TR5n8APHlIw/Wrd645+Y= +pac-proxy-agent@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-2.0.2.tgz#90d9f6730ab0f4d2607dcdcd4d3d641aa26c3896" + integrity sha512-cDNAN1Ehjbf5EHkNY5qnRhGPUCp6SnpyVof5fRzN800QV1Y2OkzbH9rmjZkbBRa8igof903yOnjIl6z0SlAhxA== + dependencies: + agent-base "^4.2.0" + debug "^3.1.0" + get-uri "^2.0.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + pac-resolver "^3.0.0" + raw-body "^2.2.0" + socks-proxy-agent "^3.0.0" + pac-proxy-agent@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" @@ -20522,7 +21254,7 @@ pause-stream@0.0.11: dependencies: through "~2.3" -pbkdf2@^3.0.3, pbkdf2@^3.0.9: +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== @@ -21081,6 +21813,15 @@ postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.5, postcss@^7.0.6 source-map "^0.6.1" supports-color "^6.1.0" +postcss@^7.0.27: + version "7.0.27" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" + integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + postmsg-rpc@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/postmsg-rpc/-/postmsg-rpc-2.4.0.tgz#4e2daf6851852364696debd5d6bf6936d1424cdf" @@ -21358,6 +22099,25 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= +protobufjs@^6.8.9: + version "6.9.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.9.0.tgz#c08b2bf636682598e6fabbf0edb0b1256ff090bd" + integrity sha512-LlGVfEWDXoI/STstRDdZZKb/qusoAWUnmLg9R8OLSO473mBLWHowx8clbX5/+mKDEI+v7GzjoK9tRPZMMcoTrg== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" "^13.7.0" + long "^4.0.0" + protocol-buffers-schema@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz#00434f608b4e8df54c59e070efeefc37fb4bb859" @@ -21373,6 +22133,22 @@ protons@^1.0.1: signed-varint "^2.0.1" varint "^5.0.0" +prova-lib@^0.2.10: + version "0.2.10" + resolved "https://registry.yarnpkg.com/prova-lib/-/prova-lib-0.2.10.tgz#324c17227d62c0cbd74b62198f0928560a889a92" + integrity sha512-L1K1BiBteuTL4Q/gyMROmPI4BJVG2KsmEkhmQEOKQw5SA3D54UC3iG6u+DSZKW7nvjsTPSbpzDzaCOmSgtTGuA== + dependencies: + bigi "~1.4.2" + bitcoin-ops "~1.3.0" + bitcoinjs-lib "~3.0.2" + bs58check "~2.0.1" + ecurve "~1.0.5" + lodash "~4.17.4" + typeforce "~1.10.6" + varuint-bitcoin "~1.0.4" + optionalDependencies: + secp256k1 "~3.5.0" + proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -21381,6 +22157,20 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.0" +proxy-agent@2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-2.3.1.tgz#3d49d863d46cf5f37ca8394848346ea02373eac6" + integrity sha512-CNKuhC1jVtm8KJYFTS2ZRO71VCBx3QSA92So/e6NrY6GoJonkx3Irnk4047EsCcswczwqAekRj3s8qLRGahSKg== + dependencies: + agent-base "^4.2.0" + debug "^3.1.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + lru-cache "^4.1.2" + pac-proxy-agent "^2.0.1" + proxy-from-env "^1.0.0" + socks-proxy-agent "^3.0.0" + proxy-agent@3: version "3.1.1" resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" @@ -21859,7 +22649,7 @@ randexp@0.4.6: discontinuous-range "1.0.0" ret "~0.1.10" -randombytes@^2.0.0, randombytes@^2.0.5: +randombytes@2.0.5, randombytes@^2.0.0, randombytes@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" integrity sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg== @@ -23602,6 +24392,84 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +ripple-address-codec@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripple-address-codec/-/ripple-address-codec-2.0.1.tgz#eddbe3a7960d2e02c5c1c74fb9a9fa0d2dfb6571" + integrity sha1-7dvjp5YNLgLFwcdPuan6DS37ZXE= + dependencies: + hash.js "^1.0.3" + x-address-codec "^0.7.0" + +ripple-address-codec@^4.0.0, ripple-address-codec@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ripple-address-codec/-/ripple-address-codec-4.1.1.tgz#48e5d76b00b6b9752b1d376646d5abbcd3c8bd67" + integrity sha512-mcVD8f7+CH6XaBnLkRcmw4KyHMufa0HTJE3TYeaecwleIQASLYVenjQmVJLgmJQcDUS2Ldh/EltqktmiFMFgkg== + dependencies: + base-x "3.0.7" + create-hash "^1.1.2" + +ripple-binary-codec@^0.2.4, ripple-binary-codec@^0.2.5: + version "0.2.6" + resolved "https://registry.yarnpkg.com/ripple-binary-codec/-/ripple-binary-codec-0.2.6.tgz#a8c45c905c12d5dc6fa7e179c3584d56fb8bdb07" + integrity sha512-k0efyjpcde7p+rJ9PXW9tJSYsUDdlC9Z9xU7OPM7fJiHVKlR1E7nfu0jqw9vVXtTG3tujqKeEgtcb8yaa7rMXA== + dependencies: + babel-runtime "^6.6.1" + bn.js "^5.1.1" + create-hash "^1.1.2" + decimal.js "^10.2.0" + inherits "^2.0.1" + lodash "^4.17.15" + ripple-address-codec "^4.0.0" + +ripple-keypairs@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/ripple-keypairs/-/ripple-keypairs-0.11.1.tgz#e8637c9d577a579c311138c7848cdc5928908979" + integrity sha512-xdakxb+/4yo3TWA2ZImEma3g9OZrvoVRMDC9A2dfk6V+tBsDWug1p53bfmSnfTaue7kf2O5ejq2bfmYG8W08FA== + dependencies: + babel-runtime "^5.8.20" + bn.js "^3.1.1" + brorand "^1.0.5" + elliptic "^6.5.2" + hash.js "^1.0.3" + ripple-address-codec "^2.0.1" + +ripple-keypairs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ripple-keypairs/-/ripple-keypairs-1.0.0.tgz#8f1c604f89daeac5e61b7eebbbca2da99da2bacf" + integrity sha512-MQ3d6fU3D+Cqu5ma4dfkfa+KakN2sKpVVVN0FeJyAYPVIGXu8Rcvd1g028TdwYAZcSYk0tGn5UhHxd0gUG3T8g== + dependencies: + bn.js "^5.1.1" + brorand "^1.0.5" + elliptic "^6.5.2" + hash.js "^1.0.3" + ripple-address-codec "^4.0.0" + +ripple-lib-transactionparser@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/ripple-lib-transactionparser/-/ripple-lib-transactionparser-0.8.2.tgz#7aaad3ba1e1aeee1d5bcff32334a7a838f834dce" + integrity sha512-1teosQLjYHLyOQrKUQfYyMjDR3MAq/Ga+MJuLUfpBMypl4LZB4bEoMcmG99/+WVTEiZOezJmH9iCSvm/MyxD+g== + dependencies: + bignumber.js "^9.0.0" + lodash "^4.17.15" + +ripple-lib@^1.4.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ripple-lib/-/ripple-lib-1.7.0.tgz#2f7674688941330fca24b27ab8b243a2a9d8e727" + integrity sha512-Mv5tj742civmPEnS849zZM+89BbAjGB7rPQg2ycYCLJaiqZmGrzwjwdPodi6qJ8+O3qqXSx7qK3xIz4Ca9Wkuw== + dependencies: + "@types/lodash" "^4.14.136" + "@types/ws" "^7.2.0" + bignumber.js "^9.0.0" + https-proxy-agent "^5.0.0" + jsonschema "1.2.2" + lodash "^4.17.4" + lodash.isequal "^4.5.0" + ripple-address-codec "^4.1.1" + ripple-binary-codec "^0.2.5" + ripple-keypairs "^1.0.0" + ripple-lib-transactionparser "0.8.2" + ws "^7.2.0" + rlp@^2.0.0, rlp@^2.2.1: version "2.2.3" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.3.tgz#7f94aef86cec412df87d5ea1d8cb116a47d45f0e" @@ -23789,6 +24657,22 @@ sanitize-filename@^1.6.1: dependencies: truncate-utf8-bytes "^1.0.0" +sanitize-html@^1.13.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.23.0.tgz#e7a5ce7427cd2844dae5b9961cd372e349f91fb5" + integrity sha512-7MgUrbZpaig6zHwuHjpNqhkiuutFPWWoFY/RmdtEnvrFKMLafzSHfFyOozVpKWytkZIUhbYu3VQ/93OmYdo3ag== + dependencies: + chalk "^2.4.1" + htmlparser2 "^4.1.0" + lodash.clonedeep "^4.5.0" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.mergewith "^4.6.2" + postcss "^7.0.27" + srcset "^2.0.1" + xtend "^4.0.1" + sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -23998,6 +24882,39 @@ secp256k1@^3.0.1, secp256k1@^3.6.1, secp256k1@^3.6.2: nan "^2.14.0" safe-buffer "^5.1.2" +secp256k1@^3.5.2: + version "3.8.0" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" + integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== + dependencies: + bindings "^1.5.0" + bip66 "^1.1.5" + bn.js "^4.11.8" + create-hash "^1.2.0" + drbg.js "^1.0.1" + elliptic "^6.5.2" + nan "^2.14.0" + safe-buffer "^5.1.2" + +secp256k1@~3.5.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.5.2.tgz#f95f952057310722184fe9c914e6b71281f2f2ae" + integrity sha512-iin3kojdybY6NArd+UFsoTuapOF7bnJNf2UbcWXaY3z+E1sJDipl60vtzB5hbO/uquBu7z0fd4VC4Irp+xoFVQ== + dependencies: + bindings "^1.2.1" + bip66 "^1.1.3" + bn.js "^4.11.3" + create-hash "^1.1.2" + drbg.js "^1.0.1" + elliptic "^6.2.3" + nan "^2.2.1" + safe-buffer "^5.1.0" + +secrets.js-grempe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/secrets.js-grempe/-/secrets.js-grempe-1.1.0.tgz#bb3b606dd68637ca244681a10fdee6c512049294" + integrity sha1-uztgbdaGN8okRoGhD97mxRIEkpQ= + seedrandom@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" @@ -24221,7 +25138,7 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.8: +sha.js@^2.3.6, sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -24472,6 +25389,11 @@ smart-buffer@4.0.2: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw== +smart-buffer@^1.0.13: + version "1.1.15" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" + integrity sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY= + smart-buffer@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" @@ -24665,6 +25587,14 @@ sockjs-client@1.3.0: json3 "^3.3.2" url-parse "^1.4.3" +socks-proxy-agent@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz#2eae7cf8e2a82d34565761539a7f9718c5617659" + integrity sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA== + dependencies: + agent-base "^4.1.0" + socks "^1.1.10" + socks-proxy-agent@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" @@ -24673,6 +25603,14 @@ socks-proxy-agent@^4.0.1: agent-base "~4.2.1" socks "~2.3.2" +socks@^1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" + integrity sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o= + dependencies: + ip "^1.1.4" + smart-buffer "^1.0.13" + socks@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e" @@ -24939,6 +25877,11 @@ squeak@^1.0.0: console-stream "^0.1.1" lpad-align "^1.0.1" +srcset@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/srcset/-/srcset-2.0.1.tgz#8f842d357487eb797f413d9c309de7a5149df5ac" + integrity sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ== + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -25044,6 +25987,35 @@ stealthy-require@^1.1.0: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stellar-base@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/stellar-base/-/stellar-base-0.9.0.tgz#03a4d71c9bfe49f0c54afd4a8f34517ed49c0924" + integrity sha512-4tyztbyNeLW3bGUMepMqdcywfLUmfAI1A/RSiMgNHRC7vK8Jueh5Dn8RmQPhmAlKsgXhDSmbvpCLwEr2i00Emg== + dependencies: + base32.js "~0.1.0" + bignumber.js "^4.0.0" + crc "3.5.0" + js-xdr "^1.0.5" + lodash "^4.17.10" + sha.js "^2.3.6" + tweetnacl "^1.0.0" + optionalDependencies: + ed25519 "0.0.4" + +stellar-sdk@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/stellar-sdk/-/stellar-sdk-0.11.0.tgz#d5415b1c535df188dbd3ab173f93bb24d18266d5" + integrity sha512-VNiJBea4eqZsuuNoqJu2WfBq0xhfaKex4soowJFQzYbLY0xVUe4qigetMO8dwlJrRevL4c/EDUd4ouKbT1lqAQ== + dependencies: + axios "^0.18.0" + es6-promise "^4.2.4" + event-source-polyfill "0.0.12" + eventsource "^1.0.5" + lodash "^4.17.10" + stellar-base "^0.9.0" + toml "^2.3.0" + urijs "1.19.1" + stifle@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/stifle/-/stifle-1.0.4.tgz#8b3bcdf52419b0a9c79e35adadce50123c1d8e99" @@ -25571,7 +26543,7 @@ superagent-proxy@^1.0.3, superagent-proxy@^2.0.0: debug "^3.1.0" proxy-agent "3" -superagent@^3.8.1: +superagent@^3.8.1, superagent@^3.8.3: version "3.8.3" resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== @@ -25587,6 +26559,21 @@ superagent@^3.8.1: qs "^6.5.1" readable-stream "^2.3.5" +superagent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-4.1.0.tgz#c465c2de41df2b8d05c165cbe403e280790cdfd5" + integrity sha512-FT3QLMasz0YyCd4uIi5HNe+3t/onxMyEho7C3PSqmti3Twgy2rXT4fmkTz6wRL6bTF4uzPcfkUCa8u4JWHw8Ag== + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.2" + debug "^4.1.0" + form-data "^2.3.3" + formidable "^1.2.0" + methods "^1.1.1" + mime "^2.4.0" + qs "^6.6.0" + readable-stream "^3.0.6" + superstruct@^0.6.0, superstruct@~0.6.0, superstruct@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.6.1.tgz#148fc3d627bb59fcfe24aa1bd2a1b8c51b1db072" @@ -25943,6 +26930,11 @@ tarn@^1.1.4: resolved "https://registry.yarnpkg.com/tarn/-/tarn-1.1.5.tgz#7be88622e951738b9fa3fb77477309242cdddc2d" integrity sha512-PMtJ3HCLAZeedWjJPgGnCvcphbCOMbtZpjKgLq3qM5Qq9aQud+XHrL0WlrlgnTyS8U+jrjGbEXprFcQrxPy52g== +tcomb@~3.2.29: + version "3.2.29" + resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-3.2.29.tgz#32404fe9456d90c2cf4798682d37439f1ccc386c" + integrity sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ== + tdigest@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.1.tgz#2e3cb2c39ea449e55d1e6cd91117accca4588021" @@ -26420,6 +27412,11 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toml@^2.3.0: + version "2.3.6" + resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.6.tgz#25b0866483a9722474895559088b436fd11f861b" + integrity sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ== + tosource@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/tosource/-/tosource-1.0.0.tgz#42d88dd116618bcf00d6106dd5446f3427902ff1" @@ -26498,6 +27495,23 @@ trim@0.0.1: resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= +tronweb@^2.7.2: + version "2.10.1" + resolved "https://registry.yarnpkg.com/tronweb/-/tronweb-2.10.1.tgz#f30354d3bcc99b6e7bcbec5ea7635c781b1a50df" + integrity sha512-FAXmpZa6oidvy6HssbF1WnnGaqiJuJXGx7UmccgurTt1IRyySQzaIz+m3gXhhtIzJx9hFYgBQgzbFp6fglFw/w== + dependencies: + "@babel/runtime" "^7.0.0" + axios "^0.19.0" + babel-runtime "^6.26.0" + bignumber.js "^7.2.1" + elliptic "^6.4.1" + ethers "^4.0.7" + eventemitter3 "^3.1.0" + injectpromise "^1.0.0" + lodash "^4.17.14" + semver "^5.6.0" + validator "^10.7.1" + trough@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86" @@ -26623,11 +27637,18 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typeforce@^1.11.3, typeforce@^1.11.5: +typeforce@^1.11.3, typeforce@^1.11.5, typeforce@^1.8.7: version "1.18.0" resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== +typeforce@~1.10.6: + version "1.10.6" + resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.10.6.tgz#71bdca35b4e635b61245371b57c008cedfbec4db" + integrity sha1-cb3KNbTmNbYSRTcbV8AIzt++xNs= + dependencies: + inherits "^2.0.1" + typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" @@ -27011,6 +28032,11 @@ uri-to-multiaddr@^3.0.1: is-ip "^2.0.0" multiaddr "^6.0.3" +urijs@1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a" + integrity sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg== + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -27207,6 +28233,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" +validator@^10.7.1: + version "10.11.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" + integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== + value-equal@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" @@ -27229,6 +28260,13 @@ varint@^5.0.0, varint@~5.0.0: resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.0.tgz#d826b89f7490732fabc0c0ed693ed475dcb29ebf" integrity sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8= +varuint-bitcoin@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz#e76c138249d06138b480d4c5b40ef53693e24e92" + integrity sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw== + dependencies: + safe-buffer "^5.1.1" + varuint-bitcoin@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.0.tgz#7a343f50537607af6a3059312b9782a170894540" @@ -27236,6 +28274,11 @@ varuint-bitcoin@^1.0.4: dependencies: safe-buffer "^5.1.1" +varuint-bitcoin@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.0.4.tgz#d812c5dae16e32f60544b6adee1d4be1307d0283" + integrity sha1-2BLF2uFuMvYFRLat7h1L4TB9AoM= + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -28138,6 +29181,11 @@ ws@^5.1.1: dependencies: async-limiter "~1.0.0" +ws@^7.2.0: + version "7.2.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.5.tgz#abb1370d4626a5a9cd79d8de404aa18b3465d10d" + integrity sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA== + ws@~6.1.0: version "6.1.4" resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" @@ -28145,6 +29193,13 @@ ws@~6.1.0: dependencies: async-limiter "~1.0.0" +x-address-codec@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/x-address-codec/-/x-address-codec-0.7.2.tgz#2a2f7bb00278520bd13733a7959a05443d6802e0" + integrity sha1-Ki97sAJ4UgvRNzOnlZoFRD1oAuA= + dependencies: + base-x "^1.0.1" + x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" From 5e9287bada2ef324d9e32c28ca0b2a265c063047 Mon Sep 17 00:00:00 2001 From: yan Date: Tue, 28 Apr 2020 15:20:03 -0700 Subject: [PATCH 02/16] Adding BitGo controller --- brave/app/scripts/controllers/bitgo.js | 190 +++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 brave/app/scripts/controllers/bitgo.js diff --git a/brave/app/scripts/controllers/bitgo.js b/brave/app/scripts/controllers/bitgo.js new file mode 100644 index 000000000..2590bab95 --- /dev/null +++ b/brave/app/scripts/controllers/bitgo.js @@ -0,0 +1,190 @@ +const ObservableStore = require('obs-store') +const bgUtil = require('brave-bitgo-client') + +const supportedCoins = { + btc: 'Bitcoin', + bch: 'Bitcoin Cash', + btg: 'Bitcoin Gold', + bsv: 'Bitcoin SV', + zec: 'ZCash', + xlm: 'Stellar', + xrp: 'Ripple', + ltc: 'Litecoin', + dash: 'Dash', + algo: 'Algorand', + trx: 'Tron', + eos: 'Eos' +} + +const uint8ToArrayBuf = (array) => { + return array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset) +} + +const promiseGetSeed = (key) => { + return new Promise((resolve) => { + if (window.chrome && window.chrome.braveWallet) { + window.chrome.braveWallet.getBitGoSeed(key, resolve) + } else { + // polyfill + const seed = new Uint8Array(32) + window.crypto.getRandomValues(seed) + resolve(uint8ToArrayBuf(seed)) + } + }) +} + +class BitGoController { + constructor (opts = {}) { + const initState = opts.initState || {} + this.proxyOrigin = opts.isProduction + ? 'https://bitgo-proxy.brave.com/' // TODO: update this + : 'http://localhost:3000/' + this.store = new ObservableStore(initState) + // keyringController must be initialized with the password and unlocked + // TODO: refactor KeyringController so we're not calling a private interface + if (opts.password) { + opts.keyringController.submitPassword(opts.password) + } + this.encryptionKey = opts.keyringController._getSubkey('ethwallet-encryptor') + // to get project ID, call chrome.braveWallet.getProjectID + this.braveServiceKey = opts.projectId + } + + request (path, opts) { + const url = `${this.proxyOrigin}${path}` + const headers = new window.Headers() + headers.append('x-brave-key', this.braveServiceKey) + const req = new window.Request(url, Object.assign({ headers }, opts)) + return window.fetch(req) + } + + async createWallet (coin) { + if (!supportedCoins[coin]) { + throw new Error(`Coin type ${coin} is not supported.`) + } + const seed = await promiseGetSeed(uint8ToArrayBuf(this.encryptionKey)) + const userKeychain = bgUtil.createKeychain(coin, seed) + const backupKeychain = bgUtil.createKeychain(coin, seed) + const req = { + coin, + userPub: userKeychain.pub, + backupPub: backupKeychain.pub + } + const response = await this.request('create-wallet', { + method: 'POST', + body: JSON.stringify(req) + }) + if (!response.ok) { + return + } + const resp = await response.json() + if (!resp.error) { + const state = this.store().getState() + const bitgoWallets = state.bitgoWallets || {} + bitgoWallets[resp.id] = Object.assign(req, resp) + this.store.updateState({ + bitgoWallets + }) + } + return resp + } + + async getBalance (id) { + const bitgoWallets = this.store().getState().bitgoWallets + const bitgoWallet = bitgoWallets[id] + if (!bitgoWallet) { + return + } + const response = await this.request('get-balance', { + method: 'GET', + body: JSON.stringify({ + id, + coin: bitgoWallet.coin + }) + }) + if (!response.ok) { + return + } + const resp = await response.json() + if (!resp.error) { + Object.assign(bitgoWallet, resp) + this.store.updateState({ + bitgoWallets + }) + } + return resp + } + + async getTransfers (id) { + const bitgoWallets = this.store().getState().bitgoWallets + const bitgoWallet = bitgoWallets[id] + if (!bitgoWallet) { + return + } + const response = await this.request('get-transaction-history', { + method: 'GET', + body: JSON.stringify({ + id, + coin: bitgoWallet.coin + }) + }) + if (!response.ok) { + return + } + const resp = await response.json() + if (!resp.error) { + bitgoWallet.transfers = response.transfers + this.store.updateState({ + bitgoWallets + }) + } + return resp + } + + async sendTx (id, amount, destinationAddress) { + const bitgoWallets = this.store().getState().bitgoWallets + const bitgoWallet = bitgoWallets[id] + if (!bitgoWallet) { + return + } + const coin = bitgoWallet.coin + const response = await this.request('get-tx-prebuild', { + method: 'GET', + body: JSON.stringify({ + id, + coin + }) + }) + if (!response.ok) { + return + } + const resp = await response.json() + if (!resp.error) { + const seed = await promiseGetSeed(uint8ToArrayBuf(this.encryptionKey)) + const userKeychain = bgUtil.createKeychain(coin, seed) + const backupKeychain = bgUtil.createKeychain(coin, seed) + const halfSigned = await bgUtil.signTransaction(coin, + userKeychain, backupKeychain, bitgoWallet.bitgoPub, + resp, destinationAddress, amount, { + chain: bitgoWallet.chain, + index: bitgoWallet.index, + coinSpecific: {} + }) + const sendResponse = await this.request('send-tx', { + method: 'POST', + body: JSON.stringify({ + id, + coin, + halfSigned + }) + }) + if (!sendResponse.ok) { + return + } + const sendResp = await sendResponse.json() + return sendResp + } + } +} + +module.exports = BitGoController From 8fd8aed66ad5dc85c06cce9e086304cd6b04eac9 Mon Sep 17 00:00:00 2001 From: ryanml Date: Wed, 29 Apr 2020 10:45:57 -0700 Subject: [PATCH 03/16] pinning sanitize-html@1.13.0, initializing controller --- brave/app/scripts/metamask-controller.js | 30 +++++++ package.json | 3 +- yarn.lock | 106 +++++------------------ 3 files changed, 54 insertions(+), 85 deletions(-) diff --git a/brave/app/scripts/metamask-controller.js b/brave/app/scripts/metamask-controller.js index 2a7a9644c..06eddb712 100644 --- a/brave/app/scripts/metamask-controller.js +++ b/brave/app/scripts/metamask-controller.js @@ -1,8 +1,38 @@ const MetamaskController = require('../../../app/scripts/metamask-controller') +const BitGoController = require('./controllers/bitgo') const nodeify = require('../../../app/scripts/lib/nodeify') module.exports = class BraveController extends MetamaskController { + constructor (opts) { + super(opts) + + if (this.keyringController.password) { + this.createBitGoController() + } + } + + createBitGoController () { + chrome.braveWallet.getProjectId((braveProjectId) => { + this.bitGoController = new BitGoController({ + ...this.opts, + keyringController: this.keyringController, + password: this.keyRingController.password, + projectId: braveProjectId + }) + }) + } + + async createNewVaultAndKeychain (password) { + await super.createNewVaultAndKeychain(password) + this.createBitGoController() + } + + async createNewVaultAndRestore (password) { + await super.createNewVaultAndRestore(password) + this.createBitGoController() + } + getApi () { const api = super.getApi() api.setBatTokenAdded = nodeify(this.preferencesController.setBatTokenAdded, this.preferencesController) diff --git a/package.json b/package.json index 13b8e6592..fa9227141 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,8 @@ "swarm-js": "^0.1.40", "minimist": "^1.2.3", "node-sass": "^4.13.1", - "kind-of": "^6.0.3" + "kind-of": "^6.0.3", + "sanitize-html": "1.13.0" }, "dependencies": { "3box": "^1.10.2", diff --git a/yarn.lock b/yarn.lock index 022574cc6..0be910c56 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5873,6 +5873,14 @@ bl@^3.0.0: blake2b-wasm "https://github.com/BitGo/blake2b-wasm#193cdb71656c1a6c7f89b05d0327bb9b758d071b" nanoassert "^1.0.0" +"blake2b@https://github.com/BitGo/blake2b#6268e6dd678661e0acc4359e9171b97eb1ebf8ac": + version "2.1.3" + uid "6268e6dd678661e0acc4359e9171b97eb1ebf8ac" + resolved "https://github.com/BitGo/blake2b#6268e6dd678661e0acc4359e9171b97eb1ebf8ac" + dependencies: + blake2b-wasm "https://github.com/BitGo/blake2b-wasm#193cdb71656c1a6c7f89b05d0327bb9b758d071b" + nanoassert "^1.0.0" + blakejs@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" @@ -9277,14 +9285,6 @@ dom-serializer@0, dom-serializer@~0.1.0: domelementtype "~1.1.1" entities "~1.1.1" -dom-serializer@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" @@ -9313,11 +9313,6 @@ domelementtype@^1.3.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" @@ -9342,13 +9337,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" - integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== - dependencies: - domelementtype "^2.0.1" - domkit@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/domkit/-/domkit-0.0.1.tgz#88399d586794efc1154fec6c22cfe50f19bd4dbb" @@ -9370,15 +9358,6 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.0.0.tgz#15b8278e37bfa8468d157478c58c367718133c08" - integrity sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg== - dependencies: - dom-serializer "^0.2.1" - domelementtype "^2.0.1" - domhandler "^3.0.0" - dot-prop@^4.1.0, dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" @@ -9830,11 +9809,6 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= -entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== - envify@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" @@ -14297,7 +14271,7 @@ htmlparser2@3.8.x: entities "1.0" readable-stream "1.1" -htmlparser2@^3.10.0: +htmlparser2@^3.10.0, htmlparser2@^3.9.0: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -14321,16 +14295,6 @@ htmlparser2@^3.3.0, htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^2.0.2" -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -18035,7 +17999,7 @@ lodash.castarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" integrity sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU= -lodash.clonedeep@4.5.0, lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.4.1, lodash.clonedeep@^4.5.0: +lodash.clonedeep@4.5.0, lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.4.1: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= @@ -18077,11 +18041,6 @@ lodash.escape@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= - lodash.filter@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" @@ -18194,11 +18153,6 @@ lodash.memoize@~3.0.3: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= -lodash.mergewith@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" - integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== - lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" @@ -21813,15 +21767,6 @@ postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.5, postcss@^7.0.6 source-map "^0.6.1" supports-color "^6.1.0" -postcss@^7.0.27: - version "7.0.27" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" - integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - postmsg-rpc@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/postmsg-rpc/-/postmsg-rpc-2.4.0.tgz#4e2daf6851852364696debd5d6bf6936d1424cdf" @@ -23738,6 +23683,11 @@ regex-parser@^2.2.9: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.9.tgz#a372f45a248b62976a568037c1b6e60a60599192" integrity sha512-VncXxOF6uFlYog5prG2j+e2UGJeam5MfNiJnB/qEgo4KTnMm2XrELCg4rNZ6IlaEUZnGlb8aB6lXowCRQtTkkA== +regexp-quote@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/regexp-quote/-/regexp-quote-0.0.0.tgz#1e0f4650c862dcbfed54fd42b148e9bb1721fcf2" + integrity sha1-Hg9GUMhi3L/tVP1CsUjpuxch/PI= + regexp-tree@^0.1.6: version "0.1.10" resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" @@ -24657,21 +24607,14 @@ sanitize-filename@^1.6.1: dependencies: truncate-utf8-bytes "^1.0.0" -sanitize-html@^1.13.0: - version "1.23.0" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.23.0.tgz#e7a5ce7427cd2844dae5b9961cd372e349f91fb5" - integrity sha512-7MgUrbZpaig6zHwuHjpNqhkiuutFPWWoFY/RmdtEnvrFKMLafzSHfFyOozVpKWytkZIUhbYu3VQ/93OmYdo3ag== +sanitize-html@1.13.0, sanitize-html@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.13.0.tgz#4ee17cbec516bfe32f2ce6686a569d7e6b4f3631" + integrity sha1-TuF8vsUWv+MvLOZoaladfmtPNjE= dependencies: - chalk "^2.4.1" - htmlparser2 "^4.1.0" - lodash.clonedeep "^4.5.0" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.mergewith "^4.6.2" - postcss "^7.0.27" - srcset "^2.0.1" - xtend "^4.0.1" + htmlparser2 "^3.9.0" + regexp-quote "0.0.0" + xtend "^4.0.0" sass-graph@^2.2.4: version "2.2.4" @@ -25877,11 +25820,6 @@ squeak@^1.0.0: console-stream "^0.1.1" lpad-align "^1.0.1" -srcset@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/srcset/-/srcset-2.0.1.tgz#8f842d357487eb797f413d9c309de7a5149df5ac" - integrity sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ== - sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" From 7486b3c08024710ffb6d92736e4bb8bd6e10b092 Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 30 Apr 2020 11:54:44 -0700 Subject: [PATCH 04/16] Adding redux actions, state storage for BitGo --- brave/app/scripts/controllers/bitgo.js | 5 +- brave/app/scripts/metamask-controller.js | 12 ++++- brave/ui/app/ducks/metamask/metamask.js | 24 +++++++++ brave/ui/app/store/actions.js | 69 ++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 2 deletions(-) diff --git a/brave/app/scripts/controllers/bitgo.js b/brave/app/scripts/controllers/bitgo.js index 2590bab95..4a7490347 100644 --- a/brave/app/scripts/controllers/bitgo.js +++ b/brave/app/scripts/controllers/bitgo.js @@ -187,4 +187,7 @@ class BitGoController { } } -module.exports = BitGoController +module.exports = { + BitGoController, + supportedCoins +} diff --git a/brave/app/scripts/metamask-controller.js b/brave/app/scripts/metamask-controller.js index 06eddb712..104b7ddd7 100644 --- a/brave/app/scripts/metamask-controller.js +++ b/brave/app/scripts/metamask-controller.js @@ -1,5 +1,5 @@ const MetamaskController = require('../../../app/scripts/metamask-controller') -const BitGoController = require('./controllers/bitgo') +const { BitGoController, supportedCoins } = require('./controllers/bitgo') const nodeify = require('../../../app/scripts/lib/nodeify') module.exports = class BraveController extends MetamaskController { @@ -35,9 +35,19 @@ module.exports = class BraveController extends MetamaskController { getApi () { const api = super.getApi() + + // Brave modifications api.setBatTokenAdded = nodeify(this.preferencesController.setBatTokenAdded, this.preferencesController) api.setHardwareConnect = nodeify(this.preferencesController.setHardwareConnect, this.preferencesController) api.setRewardsDisclosureAccepted = nodeify(this.preferencesController.setRewardsDisclosureAccepted, this.preferencesController) + + // BitGo + api.createBitGoWallet = nodeify(this.bitGoController.createWallet, this.bitGoController) + api.getBitGoWalletBalance = nodeify(this.bitGoController.getBalance, this.bitGoController) + api.getBitGoWalletTransfers = nodeify(this.bitGoController.getTransfers, this.bitGoController) + api.sendBitGoTransaction = nodeify(this.bitGoController.sendTx, this.bitGoController) + api.getSupportedCoins = (cb) => cb(null, supportedCoins) + return api } } diff --git a/brave/ui/app/ducks/metamask/metamask.js b/brave/ui/app/ducks/metamask/metamask.js index d46fa303e..ebbe86bc9 100644 --- a/brave/ui/app/ducks/metamask/metamask.js +++ b/brave/ui/app/ducks/metamask/metamask.js @@ -8,11 +8,35 @@ module.exports = function (state, action) { newState.batTokenAdded = newState.batTokenAdded || false newState.rewardsDisclosureAccepted = newState.rewardsDisclosureAccepted || false + // BitGo + newState.bitGoBalances = newState.bitGoBalances || {} + newState.bitGoTransfers = newState.bitGoTransfers || {} + switch (action.type) { case actions.SET_BAT_TOKEN_ADDED: return extend(newState, { batTokenAdded: action.value, }) + case actions.SET_BITGO_BALANCE: + const updatedBitGoBalances = { + ...newState.bitGoBalances + } + + updatedBitGoBalances[action.coin] = action.balance + + return extend(newState, { + bitGoBalances: updatedBitGoBalances + }) + case actions.SET_BITGO_TRANSFERS: + const updatedBitGoTransfers = { + ...newState.bitGoTransfers + } + + updatedBitGoTransfers[action.coin] = action.transfers + + return extend(newState, { + bitGoTransfers: updatedBitGoTransfers + }) default: return newState } diff --git a/brave/ui/app/store/actions.js b/brave/ui/app/store/actions.js index fd2ca1923..24d6b19d2 100644 --- a/brave/ui/app/store/actions.js +++ b/brave/ui/app/store/actions.js @@ -9,6 +9,15 @@ MetaMaskActions.setRewardsDisclosureAccepted = setRewardsDisclosureAccepted MetaMaskActions.showModal = showModal +// BitGo +MetaMaskActions.createBitGoWallet = createBitGoWallet +MetaMaskActions.getBitGoWalletBalance = getBitGoWalletBalance +MetaMaskActions.getBitGoWalletTransfers = getBitGoWalletTransfers +MetaMaskActions.sendBitGoTransaction = sendBitGoTransaction + +MetaMaskActions.SET_BITGO_BALANCE = 'SET_BITGO_BALANCE' +MetaMaskActions.SET_BITGO_TRANSFERS = 'SET_BITGO_TRANSFERS' + var background = null // eslint-disable-line no-var const parentSetBackground = MetaMaskActions._setBackgroundConnection @@ -19,6 +28,66 @@ function setBackgroundConnection (newConnection) { MetaMaskActions._setBackgroundConnection = setBackgroundConnection +function createBitGoWallet (coin) { + return (dispatch) => { + return new Promise((resolve, reject) => { + background.createBitGoWallet(coin, (err) => { + if (err) { + dispatch(MetaMaskActions.displayWarning(err.message)) + return reject(err) + } + resolve() + }) + }) + } +} + +function getBitGoWalletBalance (coin) { + return (dispatch) => { + background.getBitGoWalletBalance(coin, (err, balance) => { + if (err) { + log.error(err) + return dispatch(actions.displayWarning(`Could not get BitGo balances for ${coin}`)) + } + dispatch({ + coin, + balance, + type: MetaMaskActions.SET_BITGO_BALANCE + }) + }) + } +} + +function getBitGoWalletTransfers (coin) { + return (dispatch) => { + background.getBitGoWalletTransfers(coin, (err, transfers) => { + if (err) { + log.error(err) + return dispatch(actions.displayWarning(`Could not get BitGo transfers for ${coin}`)) + } + dispatch({ + coin, + transfers, + type: MetaMaskActions.SET_BITGO_TRANSFERS + }) + }) + } +} + +function sendBitGoTransaction (coin, amount, recipientAddress) { + return (dispatch) => { + return new Promise((resolve, reject) => { + background.sendBitGoTransaction(coin, amount, recipientAddress, (err) => { + if (err) { + dispatch(MetaMaskActions.displayWarning(err.message)) + return reject(err) + } + resolve() + }) + }) + } +} + function setBatTokenAdded () { return (dispatch) => { background.setBatTokenAdded((err) => { From 748e54db5c818b36b7403f829e50ef4b426d590d Mon Sep 17 00:00:00 2001 From: ryanml Date: Wed, 12 Jun 2019 21:49:40 -0700 Subject: [PATCH 05/16] Adds Browser Wallet and Connect Wallet dropdowns to header --- brave/gulpfile.js/brave-replace-paths.js | 6 + .../app/app-header/app-header.component.js | 193 ++++++++++++++++++ .../app/app-header/app-header.container.js | 49 +++++ .../ui/app/components/app/app-header/index.js | 1 + .../app/dropdowns/assets/carat-down.js | 19 ++ .../app/dropdowns/assets/import-icon.js | 22 ++ .../app/dropdowns/assets/plus-icon.js | 22 ++ .../components/app/dropdowns/assets/styles.js | 73 +++++++ .../brave-dropdown-header.component.js | 54 +++++ .../brave-dropdown-items.component.js | 49 +++++ .../components/account-items.component.js | 117 +++++++++++ .../assets/carat-down.js | 19 ++ .../brave-wallet-dropdown/assets/plus.js | 22 ++ .../brave-wallet-dropdown/styles.js | 59 ++++++ 14 files changed, 705 insertions(+) create mode 100644 brave/ui/app/components/app/app-header/app-header.component.js create mode 100644 brave/ui/app/components/app/app-header/app-header.container.js create mode 100644 brave/ui/app/components/app/app-header/index.js create mode 100644 brave/ui/app/components/app/dropdowns/assets/carat-down.js create mode 100644 brave/ui/app/components/app/dropdowns/assets/import-icon.js create mode 100644 brave/ui/app/components/app/dropdowns/assets/plus-icon.js create mode 100644 brave/ui/app/components/app/dropdowns/assets/styles.js create mode 100644 brave/ui/app/components/app/dropdowns/brave-dropdown-header.component.js create mode 100644 brave/ui/app/components/app/dropdowns/brave-dropdown-items.component.js create mode 100644 brave/ui/app/components/app/dropdowns/components/account-items.component.js create mode 100644 brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/assets/carat-down.js create mode 100644 brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/assets/plus.js create mode 100644 brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/styles.js diff --git a/brave/gulpfile.js/brave-replace-paths.js b/brave/gulpfile.js/brave-replace-paths.js index 65bf1e558..cff84251c 100644 --- a/brave/gulpfile.js/brave-replace-paths.js +++ b/brave/gulpfile.js/brave-replace-paths.js @@ -249,6 +249,12 @@ const createBraveReplacePathsTask = () => { `'${bravePrefix}ui/app/pages/unlock-page/unlock-page.container'` ) ) + .pipe( + replace( + /\'(.*)\/app-header\'/gm, + `'${bravePrefix}ui/app/components/app/app-header'` + ) + ) .pipe(gulp.dest(file => file.base)) }) } diff --git a/brave/ui/app/components/app/app-header/app-header.component.js b/brave/ui/app/components/app/app-header/app-header.component.js new file mode 100644 index 000000000..96108d86f --- /dev/null +++ b/brave/ui/app/components/app/app-header/app-header.component.js @@ -0,0 +1,193 @@ +const NetworkIndicator = require('../../../../../../ui/app/components/app/network') + +import React from 'react' +import classnames from 'classnames' + +import { + CONNECT_HARDWARE_ROUTE, + NEW_ACCOUNT_ROUTE, + IMPORT_ACCOUNT_ROUTE +} from '../../../../../../ui/app/helpers/constants/routes' +import { Item } from '../dropdowns/components/menu' +import AppHeader from '../../../../../../ui/app/components/app/app-header/app-header.component' + +import ImportIcon from '../dropdowns/assets/import-icon' +import PlusIcon from '../dropdowns/assets/plus-icon' +import BraveAccountItems from '../dropdowns/components/account-items.component' +import BraveDropdownHeader from '../dropdowns/brave-dropdown-header.component' +import BraveDropdownItems from '../dropdowns/brave-dropdown-items.component' + +module.exports = class BraveAppHeader extends AppHeader { + constructor(props) { + super(props) + } + + state = { + activeDropdown: '' + } + + get styles () { + return { + connectItem: { + margin: '0 auto', + padding: '5px 10px' + }, + connectImg: { + width: '95px' + } + } + } + + handleClick = (index) => { + if (this.props.isUnlocked) { + this.setState({ activeDropdown: index }) + } + } + + handleOutsideClick = (index, event) => { + const dropdownParent = document.querySelector(`.${index}-dropdown`) + if (dropdownParent && !dropdownParent.contains(event.target)) { + this.setState({ activeDropdown: '' }) + } + } + + onCreateAccount = () => { + this.setState({ activeDropdown: '' }) + this.props.history.push(NEW_ACCOUNT_ROUTE) + } + + onImportAccount = () => { + this.setState({ activeDropdown: '' }) + this.props.history.push(IMPORT_ACCOUNT_ROUTE) + } + + onHardwareConnect = () => { + this.setState({ activeDropdown: '' }) + this.props.history.push(CONNECT_HARDWARE_ROUTE) + } + + get itemStyle () { + return { + fontWeight: 'bold', + color: 'rgb(59, 62, 79)', + borderTop: '1px solid #dedede' + } + } + + get browserItems () { + return [ + { + markup: ( + + ) + }, + { + markup: ( + } + onClick={this.onCreateAccount} + text={this.context.t('createAccount')} + /> + ), + style: this.itemStyle + }, + { + markup: ( + } + onClick={this.onImportAccount} + text={this.context.t('importAccount')} + /> + ), + style: this.itemStyle + } + ] + } + + get connectItems () { + return [ + { + markup: ( +
+ +
+ ), + onClick: this.onHardwareConnect + }, + { + markup: ( +
+ +
+ ), + onClick: this.onHardwareConnect, + style: this.itemStyle + } + ] + } + + render() { + const { + network, + provider, + hideNetworkIndicator, + disabled, + isUnlocked + } = this.props + + return ( +
+
+ + +
+
+
+
+ + +
+
+ {!hideNetworkIndicator && ( +
+ this.handleNetworkIndicatorClick(event)} + disabled={disabled} + /> +
+ )} + {this.renderAccountMenu()} +
+
+
+
+ ) + } +} diff --git a/brave/ui/app/components/app/app-header/app-header.container.js b/brave/ui/app/components/app/app-header/app-header.container.js new file mode 100644 index 000000000..40e7409cc --- /dev/null +++ b/brave/ui/app/components/app/app-header/app-header.container.js @@ -0,0 +1,49 @@ +const actions = require('../../../store/actions') +const { showAccountDetail } = actions + +import { connect } from 'react-redux' +import { withRouter } from 'react-router-dom' +import { compose } from 'recompose' + +import AppHeader from './app-header.component' +import { getMetaMaskAccounts } from '../../../../../../ui/app/selectors/selectors' + +const mapStateToProps = state => { + const { appState, metamask } = state + const { networkDropdownOpen } = appState + const { + network, + provider, + selectedAddress, + isUnlocked, + isAccountMenuOpen, + keyrings, + identities + } = metamask + + return { + networkDropdownOpen, + network, + provider, + selectedAddress, + isUnlocked, + isAccountMenuOpen, + keyrings, + identities, + accounts: getMetaMaskAccounts(state) + } +} + +const mapDispatchToProps = dispatch => { + return { + showAccountDetail: (address) => dispatch(showAccountDetail(address)), + showNetworkDropdown: () => dispatch(actions.showNetworkDropdown()), + hideNetworkDropdown: () => dispatch(actions.hideNetworkDropdown()), + toggleAccountMenu: () => dispatch(actions.toggleAccountMenu()), + } +} + +export default compose( + withRouter, + connect(mapStateToProps, mapDispatchToProps) +)(AppHeader) diff --git a/brave/ui/app/components/app/app-header/index.js b/brave/ui/app/components/app/app-header/index.js new file mode 100644 index 000000000..6de2f9c78 --- /dev/null +++ b/brave/ui/app/components/app/app-header/index.js @@ -0,0 +1 @@ +export { default } from './app-header.container' diff --git a/brave/ui/app/components/app/dropdowns/assets/carat-down.js b/brave/ui/app/components/app/dropdowns/assets/carat-down.js new file mode 100644 index 000000000..97f749a97 --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/assets/carat-down.js @@ -0,0 +1,19 @@ +import React, { PureComponent } from 'react' + +module.exports = class CaratDownIcon extends PureComponent { + render () { + return ( + + + + + + + + + + + + ) + } +} \ No newline at end of file diff --git a/brave/ui/app/components/app/dropdowns/assets/import-icon.js b/brave/ui/app/components/app/dropdowns/assets/import-icon.js new file mode 100644 index 000000000..752b20476 --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/assets/import-icon.js @@ -0,0 +1,22 @@ +import React, { PureComponent } from 'react' + +module.exports = class ImportIcon extends PureComponent { + render () { + return ( + + + + + + + + + + + + + + + ) + } +} \ No newline at end of file diff --git a/brave/ui/app/components/app/dropdowns/assets/plus-icon.js b/brave/ui/app/components/app/dropdowns/assets/plus-icon.js new file mode 100644 index 000000000..b52533db5 --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/assets/plus-icon.js @@ -0,0 +1,22 @@ +import React, { PureComponent } from 'react' + +module.exports = class PlusIcon extends PureComponent { + render () { + return ( + + + + + + + + + + + + + + + ) + } +} \ No newline at end of file diff --git a/brave/ui/app/components/app/dropdowns/assets/styles.js b/brave/ui/app/components/app/dropdowns/assets/styles.js new file mode 100644 index 000000000..a437501f5 --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/assets/styles.js @@ -0,0 +1,73 @@ +module.exports = { + container: { + general: { + marginRight: '7px', + padding: '3px 9px', + borderRadius: '20px', + border: '1px solid #d3d3d3' + }, + active: { + background: 'rgb(94, 97, 117)' + }, + inactive: { + background: 'inherit' + } + }, + + title: { + general: { + fontSize: '14px', + fontWeight: '500', + letterSpacing: '0.5px' + }, + active: { + color: 'white' + }, + inactive: {} + }, + + dropdownContainer: { + background: '#fff', + minWidth: '275px', + position: 'absolute', + top: '15px', + borderRadius: '5px', + boxShadow: 'grey 0px 0px 2px 1px' + }, + + dropdownItem: { + borderBottom: '1px solid #dedede' + }, + + caratContainer: { + display: 'inline-block', + padding: '5px', + position: 'relative', + top: '-1px' + }, + + plusContainer: { + display: 'inline-block', + padding: '5px', + position: 'relative', + top: '2px' + }, + + leftPadding: { + width: '7px', + display: 'inline-block' + }, + + menu: { + position: 'absolute', + top: '65px', + width: '309px', + zIndex: '55px', + background: '#fff' + }, + + innerMenu: { + padding: '18px 8px', + background: '#fff' + } +} \ No newline at end of file diff --git a/brave/ui/app/components/app/dropdowns/brave-dropdown-header.component.js b/brave/ui/app/components/app/dropdowns/brave-dropdown-header.component.js new file mode 100644 index 000000000..b42737540 --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/brave-dropdown-header.component.js @@ -0,0 +1,54 @@ +import React, { PureComponent } from 'react' + +import styles from './assets/styles' +import PlusIcon from './assets/plus-icon' +import CaratDownIcon from './assets/carat-down' + +module.exports = class BraveDropdownHeader extends PureComponent { + + render () { + const { + active, + isConnect, + title, + type, + onClick + } = this.props + + const activeKey = active ? 'active' : 'inactive' + + return ( +
+ + { + isConnect + ?
+ +
+ :
+ } + {title} +
+ +
+
+
+ ) + } +} \ No newline at end of file diff --git a/brave/ui/app/components/app/dropdowns/brave-dropdown-items.component.js b/brave/ui/app/components/app/dropdowns/brave-dropdown-items.component.js new file mode 100644 index 000000000..dc554407d --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/brave-dropdown-items.component.js @@ -0,0 +1,49 @@ +import React, { PureComponent } from 'react' + +import { + Dropdown, + DropdownMenuItem +} from '../../../../../../ui/app/components/app/dropdowns/components/dropdown' +import styles from './assets/styles' + +module.exports = class BraveDropdownItems extends PureComponent { + + render () { + const { + type, + items, + isOpen, + onClickOutside + } = this.props + + return ( + + {items.map((item, inc) => { + const style = item.style || {} + const onClick = item.onClick || (() => {}) + + return ( + {}} + style={{ + ...item.style, + textAlign: 'center' + }} + > + {item.markup} + + ) + })} + + ) + } +} diff --git a/brave/ui/app/components/app/dropdowns/components/account-items.component.js b/brave/ui/app/components/app/dropdowns/components/account-items.component.js new file mode 100644 index 000000000..2f799aada --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/components/account-items.component.js @@ -0,0 +1,117 @@ +import React, { PureComponent } from 'react' + +import Tooltip from '../../../../../../../ui/app/components/ui/tooltip' +import Identicon from '../../../../../../../ui/app/components/ui/identicon' + +import UserPreferencedCurrencyDisplay from '../../../../../../../ui/app/components/app/user-preferenced-currency-display' +import { PRIMARY } from '../../../../../../../ui/app/helpers/constants/common' + +export default class BraveAccountItems extends PureComponent { + + renderAccountItems = () => { + const { + identities, + accounts, + keyrings, + showAccountDetail, + } = this.props + + const accountOrder = keyrings.reduce((list, keyring) => list.concat(keyring.accounts), []) + + return accountOrder.filter(address => !!identities[address]).map(address => { + const identity = identities[address] + + const balanceValue = accounts[address] ? accounts[address].balance : '' + const simpleAddress = identity.address.substring(2).toLowerCase() + + const keyring = keyrings.find(kr => { + return kr.accounts.includes(simpleAddress) || kr.accounts.includes(identity.address) + }) + + return ( +
{ + showAccountDetail(identity.address) + }} + key={identity.address} + > + +
+
+ { identity.name || '' } +
+ +
+ { this.renderKeyringType(keyring) } + { this.renderRemoveAccount(keyring, identity) } +
+ ) + }) + } + + render () { + return ( +
{this.renderAccountItems()}
+ ) + } + + renderRemoveAccount (keyring, identity) { + const { t } = this.context + const { type } = keyring + const isRemovable = type !== 'HD Key Tree' + + return isRemovable && ( + + this.removeAccount(e, identity)} + /> + + ) + } + + removeAccount (e, identity) { + e.preventDefault() + e.stopPropagation() + const { showRemoveAccountConfirmationModal } = this.props + showRemoveAccountConfirmationModal(identity) + } + + renderKeyringType (keyring) { + const { t } = this.context + + if (!keyring) { + return null + } + + const { type } = keyring + let label + + switch (type) { + case 'Trezor Hardware': + case 'Ledger Hardware': + label = t('hardware') + break + case 'Simple Key Pair': + label = t('imported') + break + } + + return label && ( +
+ { label } +
+ ) + } +} diff --git a/brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/assets/carat-down.js b/brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/assets/carat-down.js new file mode 100644 index 000000000..02f14cf1c --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/assets/carat-down.js @@ -0,0 +1,19 @@ +import React, { PureComponent } from 'react' + +module.exports = class CaratDownIcon extends PureComponent { + render () { + return ( + + + + + + + + + + + + ) + } +} diff --git a/brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/assets/plus.js b/brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/assets/plus.js new file mode 100644 index 000000000..eb7c68296 --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/assets/plus.js @@ -0,0 +1,22 @@ +import React, { PureComponent } from 'react' + +module.exports = class PlusIcon extends PureComponent { + render () { + return ( + + + + + + + + + + + + + + + ) + } +} diff --git a/brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/styles.js b/brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/styles.js new file mode 100644 index 000000000..bcf933e47 --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/components/brave-wallet-dropdown/styles.js @@ -0,0 +1,59 @@ +module.exports = { + container: { + general: { + marginRight: '5px', + padding: '5px 9px', + borderRadius: '8px' + }, + active: { + background: 'rgb(94, 97, 117)' + }, + inactive: { + background: 'inherit' + } + }, + + title: { + general: { + fontSize: '14px', + fontWeight: '500', + letterSpacing: '0.5px' + }, + active: { + color: 'white' + }, + inactive: {} + }, + + dropdownContainer: { + background: '#fff', + minWidth: '275px', + position: 'absolute', + top: '15px', + borderRadius: '5px', + boxShadow: 'grey 0px 0px 2px 1px' + }, + + dropdownItem: { + borderBottom: '1px solid #dedede' + }, + + caratContainer: { + display: 'inline-block', + padding: '5px', + position: 'relative', + top: '-1px' + }, + + plusContainer: { + display: 'inline-block', + padding: '5px', + position: 'relative', + top: '2px' + }, + + leftPadding: { + width: '7px', + display: 'inline-block' + } +} \ No newline at end of file From 1662fe5b414af4b7fd08f5328d76d416f301f2d1 Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 13 Feb 2020 15:31:17 -0700 Subject: [PATCH 06/16] Adding connect account view, bitgo to dropdown --- .../app/app-header/app-header.component.js | 61 ++++++++++++------- .../connect-wallet.component.js | 13 +++- .../components/app/connect-wallet/index.scss | 33 +++++++++- .../app/dropdowns/assets/bitgo-logo.js | 18 ++++++ .../components/app/dropdowns/assets/styles.js | 7 ++- .../brave-dropdown-header.component.js | 6 +- .../brave-dropdown-items.component.js | 6 +- .../app/provider-page-container/index.scss | 4 ++ brave/ui/app/helpers/constants/routes.js | 1 + .../connect-accounts.component.js | 54 ++++++++++++++++ ui/app/pages/routes/index.js | 7 ++- 11 files changed, 178 insertions(+), 32 deletions(-) create mode 100644 brave/ui/app/components/app/dropdowns/assets/bitgo-logo.js create mode 100644 brave/ui/app/pages/connect-accounts/connect-accounts.component.js diff --git a/brave/ui/app/components/app/app-header/app-header.component.js b/brave/ui/app/components/app/app-header/app-header.component.js index 96108d86f..cafe139cb 100644 --- a/brave/ui/app/components/app/app-header/app-header.component.js +++ b/brave/ui/app/components/app/app-header/app-header.component.js @@ -4,15 +4,18 @@ import React from 'react' import classnames from 'classnames' import { + DEFAULT_ROUTE, CONNECT_HARDWARE_ROUTE, NEW_ACCOUNT_ROUTE, - IMPORT_ACCOUNT_ROUTE + IMPORT_ACCOUNT_ROUTE, + BRAVE_CONNECT_WALLETS_ROUTE } from '../../../../../../ui/app/helpers/constants/routes' import { Item } from '../dropdowns/components/menu' import AppHeader from '../../../../../../ui/app/components/app/app-header/app-header.component' import ImportIcon from '../dropdowns/assets/import-icon' import PlusIcon from '../dropdowns/assets/plus-icon' +import BitGoLogoIcon from '../dropdowns/assets/bitgo-logo' import BraveAccountItems from '../dropdowns/components/account-items.component' import BraveDropdownHeader from '../dropdowns/brave-dropdown-header.component' import BraveDropdownItems from '../dropdowns/brave-dropdown-items.component' @@ -44,9 +47,9 @@ module.exports = class BraveAppHeader extends AppHeader { } } - handleOutsideClick = (index, event) => { - const dropdownParent = document.querySelector(`.${index}-dropdown`) - if (dropdownParent && !dropdownParent.contains(event.target)) { + handleMouseLeave = (selector, { target }) => { + const dropdownItems = document.querySelector(selector) + if (dropdownItems && !dropdownItems.contains(target)) { this.setState({ activeDropdown: '' }) } } @@ -106,6 +109,14 @@ module.exports = class BraveAppHeader extends AppHeader { get connectItems () { return [ + { + markup: ( +
{}} style={this.styles.connectItem}> + +
+ ), + onClick: () => {} + }, { markup: (
@@ -132,7 +143,8 @@ module.exports = class BraveAppHeader extends AppHeader { provider, hideNetworkIndicator, disabled, - isUnlocked + isUnlocked, + history } = this.props return ( @@ -142,13 +154,13 @@ module.exports = class BraveAppHeader extends AppHeader { type={'browser'} items={this.browserItems} isOpen={this.state.activeDropdown === 'browser'} - onClickOutside={this.handleOutsideClick.bind(this, 'browser')} + onMouseLeave={this.handleMouseLeave.bind(this, 'browser-dropdown')} />
-
- - -
+ { history.push(DEFAULT_ROUTE) }} + onMouseEnter={this.handleClick.bind(this, 'browser')} + onMouseLeave={this.handleMouseLeave.bind(this, 'brave-browser-menu')} + active={this.state.activeDropdown === 'browser'} + /> + { + this.setState({ activeDropdown: '' }) + history.push(BRAVE_CONNECT_WALLETS_ROUTE) + }} + onMouseEnter={this.handleClick.bind(this, 'connect')} + onMouseLeave={this.handleMouseLeave.bind(this, 'brave-connect-menu')} + active={this.state.activeDropdown === 'connect'} + />
{!hideNetworkIndicator && (
diff --git a/brave/ui/app/components/app/connect-wallet/connect-wallet.component.js b/brave/ui/app/components/app/connect-wallet/connect-wallet.component.js index 59b2a7fa8..7806baf73 100644 --- a/brave/ui/app/components/app/connect-wallet/connect-wallet.component.js +++ b/brave/ui/app/components/app/connect-wallet/connect-wallet.component.js @@ -1,5 +1,6 @@ import React, { PureComponent } from 'react' import PropTypes from 'prop-types' +import BitGoLogoIcon from '../dropdowns/assets/bitgo-logo' module.exports = class ConnectWallet extends PureComponent { static contextTypes = { @@ -29,6 +30,16 @@ module.exports = class ConnectWallet extends PureComponent { const { type } = this.props switch (type) { + case 'bitgo': + walletText = { + title: ( +
+ +
+ ), + subText: 'Use BitGo to purchase and manage non-Ethereum assets within Brave Crypto Wallets.' + } + break case 'browser': walletText = { title: t('newLocalWallet'), @@ -79,7 +90,7 @@ module.exports = class ConnectWallet extends PureComponent { onRestore, } = this.props const { t } = this.context - const innerText = type === 'browser' ? t('create') : t('connect') + const innerText = type === 'browser' ? t('create') : 'Create Wallet' const hwButtonStyle = type !== 'browser' ? { marginRight: '-15px' } : {} return ( diff --git a/brave/ui/app/components/app/connect-wallet/index.scss b/brave/ui/app/components/app/connect-wallet/index.scss index 150ad7af7..c208ef090 100644 --- a/brave/ui/app/components/app/connect-wallet/index.scss +++ b/brave/ui/app/components/app/connect-wallet/index.scss @@ -36,15 +36,46 @@ font-weight: bold; color: rgb(59, 62, 79); cursor: pointer; + width: 120px; } .restore { cursor: pointer; font-size: 14px; font-weight: bold; + margin-left: 65px; + margin-top: 7px; + display: block; } .hardware-img { width: 100px; } -} \ No newline at end of file +} + +.app-header { + + &--back-drop { + + &::after { + height: 0px; + background: inherit; + } + } + + @media screen and (min-width: 576px) { + height: 75px; + justify-content: center; + + &--back-drop { + &::after { + content: ''; + position: absolute; + width: 100%; + height: 0px; + background: inherit; + bottom: -32px; + } + } + } +} diff --git a/brave/ui/app/components/app/dropdowns/assets/bitgo-logo.js b/brave/ui/app/components/app/dropdowns/assets/bitgo-logo.js new file mode 100644 index 000000000..9d316e3c2 --- /dev/null +++ b/brave/ui/app/components/app/dropdowns/assets/bitgo-logo.js @@ -0,0 +1,18 @@ +import React, { PureComponent } from 'react' + +module.exports = class BitGoLogoIcon extends PureComponent { + render () { + return ( + + + + + + + + + + + ) + } +} diff --git a/brave/ui/app/components/app/dropdowns/assets/styles.js b/brave/ui/app/components/app/dropdowns/assets/styles.js index a437501f5..d420df605 100644 --- a/brave/ui/app/components/app/dropdowns/assets/styles.js +++ b/brave/ui/app/components/app/dropdowns/assets/styles.js @@ -2,11 +2,12 @@ module.exports = { container: { general: { marginRight: '7px', - padding: '3px 9px', - borderRadius: '20px', - border: '1px solid #d3d3d3' + padding: '6px 9px 3px 9px', + borderRadius: '8px', + background: '#5E6175' }, active: { + cursor: 'pointer', background: 'rgb(94, 97, 117)' }, inactive: { diff --git a/brave/ui/app/components/app/dropdowns/brave-dropdown-header.component.js b/brave/ui/app/components/app/dropdowns/brave-dropdown-header.component.js index b42737540..0e3ea5121 100644 --- a/brave/ui/app/components/app/dropdowns/brave-dropdown-header.component.js +++ b/brave/ui/app/components/app/dropdowns/brave-dropdown-header.component.js @@ -12,7 +12,9 @@ module.exports = class BraveDropdownHeader extends PureComponent { isConnect, title, type, - onClick + onClick, + onMouseEnter, + onMouseLeave } = this.props const activeKey = active ? 'active' : 'inactive' @@ -20,6 +22,8 @@ module.exports = class BraveDropdownHeader extends PureComponent { return (
@@ -35,7 +35,7 @@ module.exports = class BraveDropdownItems extends PureComponent { key={`item-${inc}`} closeMenu={() => {}} style={{ - ...item.style, + ...style, textAlign: 'center' }} > diff --git a/brave/ui/app/components/app/provider-page-container/index.scss b/brave/ui/app/components/app/provider-page-container/index.scss index 80cf1965b..2298454ce 100644 --- a/brave/ui/app/components/app/provider-page-container/index.scss +++ b/brave/ui/app/components/app/provider-page-container/index.scss @@ -5,3 +5,7 @@ display: none; } } + +div.app-header { + background: inherit; +} \ No newline at end of file diff --git a/brave/ui/app/helpers/constants/routes.js b/brave/ui/app/helpers/constants/routes.js index 3f47d3574..ebedf1da6 100644 --- a/brave/ui/app/helpers/constants/routes.js +++ b/brave/ui/app/helpers/constants/routes.js @@ -1,5 +1,6 @@ const Routes = require('../../../../../ui/app/helpers/constants/routes') Routes.INITIALIZE_SELECT_ACTION_ROUTE = Routes.INITIALIZE_WELCOME_ROUTE +Routes.BRAVE_CONNECT_WALLETS_ROUTE = '/connect-wallets' module.exports = Routes diff --git a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js new file mode 100644 index 000000000..f69a37049 --- /dev/null +++ b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js @@ -0,0 +1,54 @@ +import React, { PureComponent } from 'react' +import PropTypes from 'prop-types' +import ConnectWallet from '../../components/app/connect-wallet' +import { + BRAVE_CONNECT_WALLETS_ROUTE, + INITIALIZE_CREATE_PASSWORD_ROUTE +} from '../../helpers/constants/routes' + +module.exports = class BraveConnectAccounts extends PureComponent { + static contextTypes = { + t: PropTypes.func, + } + + static propTypes = { + history: PropTypes.object, + } + + onCreate = () => { + this.props.history.push(INITIALIZE_CREATE_PASSWORD_ROUTE) + } + + onConnectFinish = () => { + this.props.history.push(BRAVE_CONNECT_WALLETS_ROUTE) + } + + render () { + const { t } = this.context + + return ( +
+
+
+ {'Wallets'} +
+
+ + + +
+
+
+ ) + } +} diff --git a/ui/app/pages/routes/index.js b/ui/app/pages/routes/index.js index 01e61b1b4..e231acb2b 100644 --- a/ui/app/pages/routes/index.js +++ b/ui/app/pages/routes/index.js @@ -50,6 +50,9 @@ import { submittedPendingTransactionsSelector, } from '../../selectors/transactions' +// Brave +import BraveConnectAccounts from '../../../../brave/ui/app/pages/connect-accounts/connect-accounts.component' + // Routes import { DEFAULT_ROUTE, @@ -67,7 +70,8 @@ import { CONFIRM_TRANSACTION_ROUTE, INITIALIZE_ROUTE, INITIALIZE_UNLOCK_ROUTE, -} from '../../helpers/constants/routes' + BRAVE_CONNECT_WALLETS_ROUTE +} from '~/brave/ui/app/helpers/constants/routes' // enums import { @@ -117,6 +121,7 @@ class Routes extends Component { + ) From b746a3bf7a8bb14dd7795bf529285538cdeabf65 Mon Sep 17 00:00:00 2001 From: ryanml Date: Fri, 21 Feb 2020 10:18:05 -0700 Subject: [PATCH 07/16] Adding initial provider view --- brave/app/scripts/metamask-controller.js | 3 +- .../app/app-header/app-header.component.js | 16 ++- brave/ui/app/helpers/constants/routes.js | 1 + .../connect-accounts.component.js | 110 +++++++++++++++++- .../first-time-flow/welcome-modal/index.scss | 53 +++++++++ brave/ui/app/pages/provider-wallet/index.scss | 71 +++++++++++ .../provider-wallet.component.js | 35 ++++++ ui/app/pages/routes/index.js | 5 +- 8 files changed, 286 insertions(+), 8 deletions(-) create mode 100644 brave/ui/app/pages/provider-wallet/index.scss create mode 100644 brave/ui/app/pages/provider-wallet/provider-wallet.component.js diff --git a/brave/app/scripts/metamask-controller.js b/brave/app/scripts/metamask-controller.js index 104b7ddd7..eee97ea3c 100644 --- a/brave/app/scripts/metamask-controller.js +++ b/brave/app/scripts/metamask-controller.js @@ -1,5 +1,5 @@ const MetamaskController = require('../../../app/scripts/metamask-controller') -const { BitGoController, supportedCoins } = require('./controllers/bitgo') +const { BitGoController } = require('./controllers/bitgo') const nodeify = require('../../../app/scripts/lib/nodeify') module.exports = class BraveController extends MetamaskController { @@ -46,7 +46,6 @@ module.exports = class BraveController extends MetamaskController { api.getBitGoWalletBalance = nodeify(this.bitGoController.getBalance, this.bitGoController) api.getBitGoWalletTransfers = nodeify(this.bitGoController.getTransfers, this.bitGoController) api.sendBitGoTransaction = nodeify(this.bitGoController.sendTx, this.bitGoController) - api.getSupportedCoins = (cb) => cb(null, supportedCoins) return api } diff --git a/brave/ui/app/components/app/app-header/app-header.component.js b/brave/ui/app/components/app/app-header/app-header.component.js index cafe139cb..150fac1ac 100644 --- a/brave/ui/app/components/app/app-header/app-header.component.js +++ b/brave/ui/app/components/app/app-header/app-header.component.js @@ -146,6 +146,8 @@ module.exports = class BraveAppHeader extends AppHeader { isUnlocked, history } = this.props + const isBitGoView = window.location.hash === '#bitgo-account-view' + const isConnectWallets = window.location.hash === '#connect-wallets' return (
@@ -177,6 +179,18 @@ module.exports = class BraveAppHeader extends AppHeader { onMouseLeave={this.handleMouseLeave.bind(this, 'brave-browser-menu')} active={this.state.activeDropdown === 'browser'} /> + { + isBitGoView + ? {}} + onMouseEnter={() => {}} + onMouseLeave={() => {}} + active={true} + /> + : null + }
{!hideNetworkIndicator && ( diff --git a/brave/ui/app/helpers/constants/routes.js b/brave/ui/app/helpers/constants/routes.js index ebedf1da6..9e860bb8f 100644 --- a/brave/ui/app/helpers/constants/routes.js +++ b/brave/ui/app/helpers/constants/routes.js @@ -2,5 +2,6 @@ const Routes = require('../../../../../ui/app/helpers/constants/routes') Routes.INITIALIZE_SELECT_ACTION_ROUTE = Routes.INITIALIZE_WELCOME_ROUTE Routes.BRAVE_CONNECT_WALLETS_ROUTE = '/connect-wallets' +Routes.BRAVE_BITGO_WALLET_INDEX = '/bitgo-account-view' module.exports = Routes diff --git a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js index f69a37049..ad3e47df1 100644 --- a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js +++ b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js @@ -1,10 +1,15 @@ import React, { PureComponent } from 'react' import PropTypes from 'prop-types' +import BitGoLogoIcon from '../../components/app/dropdowns/assets/bitgo-logo' import ConnectWallet from '../../components/app/connect-wallet' +import CloseIcon from '../first-time-flow/welcome-modal/assets/close-icon' +import CloseIconDark from '../first-time-flow/welcome-modal/assets/close-icon-dark' import { BRAVE_CONNECT_WALLETS_ROUTE, - INITIALIZE_CREATE_PASSWORD_ROUTE + INITIALIZE_CREATE_PASSWORD_ROUTE, + BRAVE_BITGO_WALLET_INDEX } from '../../helpers/constants/routes' +const { supportedCoins } = require('../../../../app/scripts/controllers/bitgo') module.exports = class BraveConnectAccounts extends PureComponent { static contextTypes = { @@ -15,6 +20,24 @@ module.exports = class BraveConnectAccounts extends PureComponent { history: PropTypes.object, } + constructor (props) { + super(props) + + this.bitGoCurrencies = Object.keys(supportedCoins).map((coin) => { + return supportedCoins[coin] + }) + + const checkedAssets = {} + this.bitGoCurrencies.map((asset) => { + checkedAssets[asset] = false + }) + + this.state = { + checkedAssets, + showBitGoModal: false + } + } + onCreate = () => { this.props.history.push(INITIALIZE_CREATE_PASSWORD_ROUTE) } @@ -23,11 +46,90 @@ module.exports = class BraveConnectAccounts extends PureComponent { this.props.history.push(BRAVE_CONNECT_WALLETS_ROUTE) } + onCreateBitGoWallets = () => { + this.props.history.push(BRAVE_BITGO_WALLET_INDEX) + } + + onConnectBitGoWallets = () => { + this.setState({ showBitGoModal: !this.state.showBitGoModal }) + } + + checkAsset = (asset) => { + const { checkedAssets } = this.state + checkedAssets[asset] = !checkedAssets[asset] + this.setState({ checkedAssets }) + } + + getCryptoImage = (asset) => { + return ( + + ) + } + + renderBitGoModal () { + const { checkedAssets } = this.state + + return ( +
+
+
+
+ +
+
+ +
+
+
+ +

+ {'Select all crypto assets you would like to interact with.'} +

+

{'A new wallet will be generated for each coin checked. Two of three private keys are stored on BitGo. The third key will be stored securely on Brave.'}

+
+ {this.bitGoCurrencies.map((asset) => { + const isChecked = checkedAssets[asset] + + return ( +
+
+
+
+
+ {this.getCryptoImage(asset)} +
+
+ {asset} +
+
+
+ ) + })} +
+
+
+ +
+
+
+ ) + } + render () { - const { t } = this.context + const { showBitGoModal } = this.state return ( -
+
+ { + showBitGoModal + ? this.renderBitGoModal() + : null + }
{'Wallets'} @@ -35,7 +137,7 @@ module.exports = class BraveConnectAccounts extends PureComponent {
+
+
+
+ Total Value + $0.00 +
+
+
+
+
+ +
+ {'0 BTC'} +
+
+
+ +
+ {'0 XRP'} +
+
+
+
+
+
+ ) + } +} diff --git a/ui/app/pages/routes/index.js b/ui/app/pages/routes/index.js index e231acb2b..a52ae0df4 100644 --- a/ui/app/pages/routes/index.js +++ b/ui/app/pages/routes/index.js @@ -52,6 +52,7 @@ import { // Brave import BraveConnectAccounts from '../../../../brave/ui/app/pages/connect-accounts/connect-accounts.component' +import BraveProviderWallet from '../../../../brave/ui/app/pages/provider-wallet/provider-wallet.component' // Routes import { @@ -70,7 +71,8 @@ import { CONFIRM_TRANSACTION_ROUTE, INITIALIZE_ROUTE, INITIALIZE_UNLOCK_ROUTE, - BRAVE_CONNECT_WALLETS_ROUTE + BRAVE_CONNECT_WALLETS_ROUTE, + BRAVE_BITGO_WALLET_INDEX } from '~/brave/ui/app/helpers/constants/routes' // enums @@ -122,6 +124,7 @@ class Routes extends Component { + ) From 003f756a99d1843b5eccc01982b7bc122ad5a8aa Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 30 Apr 2020 14:18:45 -0700 Subject: [PATCH 08/16] Fixing bitgo controller creation issues --- brave/app/scripts/controllers/bitgo.js | 22 +++++++++++++--------- brave/app/scripts/metamask-controller.js | 22 ++++++++-------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/brave/app/scripts/controllers/bitgo.js b/brave/app/scripts/controllers/bitgo.js index 4a7490347..08104ed53 100644 --- a/brave/app/scripts/controllers/bitgo.js +++ b/brave/app/scripts/controllers/bitgo.js @@ -1,5 +1,5 @@ const ObservableStore = require('obs-store') -const bgUtil = require('brave-bitgo-client') +const bgUtil = require('brave-bitgo-client').util const supportedCoins = { btc: 'Bitcoin', @@ -39,15 +39,13 @@ class BitGoController { this.proxyOrigin = opts.isProduction ? 'https://bitgo-proxy.brave.com/' // TODO: update this : 'http://localhost:3000/' - this.store = new ObservableStore(initState) - // keyringController must be initialized with the password and unlocked - // TODO: refactor KeyringController so we're not calling a private interface - if (opts.password) { - opts.keyringController.submitPassword(opts.password) - } - this.encryptionKey = opts.keyringController._getSubkey('ethwallet-encryptor') - // to get project ID, call chrome.braveWallet.getProjectID + this.password = opts.password this.braveServiceKey = opts.projectId + this.store = new ObservableStore(initState) + this.keyringController = opts.keyringController + chrome.braveWallet.getProjectID((projectId) => { + this.braveServiceKey = projectId + }) } request (path, opts) { @@ -58,6 +56,12 @@ class BitGoController { return window.fetch(req) } + async unlockAndSetKey (password) { + this.password = password + await this.keyringController.submitPassword(this.password) + this.encryptionKey = await this.keyringController._getSubkey('ethwallet-encryptor') + } + async createWallet (coin) { if (!supportedCoins[coin]) { throw new Error(`Coin type ${coin} is not supported.`) diff --git a/brave/app/scripts/metamask-controller.js b/brave/app/scripts/metamask-controller.js index eee97ea3c..955046c8e 100644 --- a/brave/app/scripts/metamask-controller.js +++ b/brave/app/scripts/metamask-controller.js @@ -7,30 +7,24 @@ module.exports = class BraveController extends MetamaskController { constructor (opts) { super(opts) + this.bitGoController = new BitGoController({ + ...this.opts, + keyringController: this.keyringController + }) + if (this.keyringController.password) { - this.createBitGoController() + this.bitGoController.unlockAndSetKey(this.keyringController.password) } } - createBitGoController () { - chrome.braveWallet.getProjectId((braveProjectId) => { - this.bitGoController = new BitGoController({ - ...this.opts, - keyringController: this.keyringController, - password: this.keyRingController.password, - projectId: braveProjectId - }) - }) - } - async createNewVaultAndKeychain (password) { await super.createNewVaultAndKeychain(password) - this.createBitGoController() + this.bitGoController.unlockAndSetKey(password) } async createNewVaultAndRestore (password) { await super.createNewVaultAndRestore(password) - this.createBitGoController() + this.bitGoController.unlockAndSetKey(password) } getApi () { From 81f43da8cf6a20f0c42d7561e5236403a1124c3c Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 30 Apr 2020 16:49:51 -0700 Subject: [PATCH 09/16] Wiring createBitGoWallet to ConnectAccounts --- brave/app/scripts/controllers/bitgo.js | 2 ++ .../connect-accounts.component.js | 27 ++++++++++--------- .../connect-accounts.container.js | 20 ++++++++++++++ brave/ui/app/pages/connect-accounts/index.js | 1 + ui/app/pages/routes/index.js | 10 +++---- 5 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 brave/ui/app/pages/connect-accounts/connect-accounts.container.js create mode 100644 brave/ui/app/pages/connect-accounts/index.js diff --git a/brave/app/scripts/controllers/bitgo.js b/brave/app/scripts/controllers/bitgo.js index 08104ed53..2fe7d9a8d 100644 --- a/brave/app/scripts/controllers/bitgo.js +++ b/brave/app/scripts/controllers/bitgo.js @@ -74,10 +74,12 @@ class BitGoController { userPub: userKeychain.pub, backupPub: backupKeychain.pub } + console.log({req}) const response = await this.request('create-wallet', { method: 'POST', body: JSON.stringify(req) }) + console.log({response}) if (!response.ok) { return } diff --git a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js index ad3e47df1..960156e5f 100644 --- a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js +++ b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js @@ -18,18 +18,17 @@ module.exports = class BraveConnectAccounts extends PureComponent { static propTypes = { history: PropTypes.object, + createBitGoWallet: PropTypes.func, } constructor (props) { super(props) - this.bitGoCurrencies = Object.keys(supportedCoins).map((coin) => { - return supportedCoins[coin] - }) const checkedAssets = {} - this.bitGoCurrencies.map((asset) => { - checkedAssets[asset] = false + + Object.keys(supportedCoins).map((key) => { + checkedAssets[key] = false }) this.state = { @@ -47,6 +46,9 @@ module.exports = class BraveConnectAccounts extends PureComponent { } onCreateBitGoWallets = () => { + for (let coin in this.state.checkedAssets) { + this.props.createBitGoWallet(coin) + } this.props.history.push(BRAVE_BITGO_WALLET_INDEX) } @@ -87,22 +89,22 @@ module.exports = class BraveConnectAccounts extends PureComponent {

{'A new wallet will be generated for each coin checked. Two of three private keys are stored on BitGo. The third key will be stored securely on Brave.'}

- {this.bitGoCurrencies.map((asset) => { - const isChecked = checkedAssets[asset] + {Object.keys(supportedCoins).map((key) => { + const isChecked = checkedAssets[key] return (
+ onClick={this.checkAsset.bind(this, key)}>
- {this.getCryptoImage(asset)} + {this.getCryptoImage(key)}
- {asset} + {supportedCoins[key]}
@@ -124,7 +126,7 @@ module.exports = class BraveConnectAccounts extends PureComponent { const { showBitGoModal } = this.state return ( -
+
{ showBitGoModal ? this.renderBitGoModal() @@ -138,7 +140,6 @@ module.exports = class BraveConnectAccounts extends PureComponent { { + return {} +} + +const mapDispatchToProps = dispatch => { + return { + createBitGoWallet: (coin) => dispatch(createBitGoWallet(coin)), + } +} + +export default compose( + withRouter, + connect(mapStateToProps, mapDispatchToProps) +)(ConnectAccounts) diff --git a/brave/ui/app/pages/connect-accounts/index.js b/brave/ui/app/pages/connect-accounts/index.js new file mode 100644 index 000000000..b706399ab --- /dev/null +++ b/brave/ui/app/pages/connect-accounts/index.js @@ -0,0 +1 @@ +export { default } from './connect-accounts.container' diff --git a/ui/app/pages/routes/index.js b/ui/app/pages/routes/index.js index a52ae0df4..8ec3c8565 100644 --- a/ui/app/pages/routes/index.js +++ b/ui/app/pages/routes/index.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types' import { connect } from 'react-redux' import { Route, Switch, withRouter, matchPath } from 'react-router-dom' import { compose } from 'recompose' -import actions from '../../store/actions' +import actions from '~/brave/ui/app/store/actions' import log from 'loglevel' import IdleTimer from 'react-idle-timer' import {getNetworkIdentifier, preferencesSelector} from '../../selectors/selectors' @@ -20,12 +20,12 @@ const Sidebar = require('../../components/app/sidebars').default const { WALLET_VIEW_SIDEBAR } = require('../../components/app/sidebars/sidebar.constants') // other views -import Home from '../home' +import Home from '~/brave/ui/app/pages/home' import Settings from '../settings' import Authenticated from '../../helpers/higher-order-components/authenticated' import Initialized from '../../helpers/higher-order-components/initialized' import Lock from '../lock' -const RestoreVaultPage = require('../keychains/restore-vault').default +const RestoreVaultPage = require('~/brave/ui/app/pages/keychains/restore-vault').default const RevealSeedConfirmation = require('../keychains/reveal-seed') const MobileSyncPage = require('../mobile-sync') const AddTokenPage = require('../add-token') @@ -43,7 +43,7 @@ const Modal = require('../../components/app/modals').Modal // Global Alert const Alert = require('../../components/ui/alert') -import AppHeader from '../../components/app/app-header' +import AppHeader from '~/brave/ui/app/components/app/app-header' import UnlockPage from '../unlock-page' import { @@ -51,7 +51,7 @@ import { } from '../../selectors/transactions' // Brave -import BraveConnectAccounts from '../../../../brave/ui/app/pages/connect-accounts/connect-accounts.component' +import BraveConnectAccounts from '../../../../brave/ui/app/pages/connect-accounts/connect-accounts' import BraveProviderWallet from '../../../../brave/ui/app/pages/provider-wallet/provider-wallet.component' // Routes From 8f6d47d651bb7c0f3feb09ec3a5dc231eead6c87 Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 30 Apr 2020 18:31:53 -0700 Subject: [PATCH 10/16] Adding BitGo asset icons --- brave/app/images/bch-large.png | Bin 0 -> 2223 bytes brave/app/images/bch-small.png | Bin 0 -> 2223 bytes brave/app/images/btc-large.png | Bin 0 -> 2002 bytes brave/app/images/btc-small.png | Bin 0 -> 2002 bytes brave/app/images/dash-large.png | Bin 0 -> 1752 bytes brave/app/images/dash-small.png | Bin 0 -> 1752 bytes brave/app/images/ltc-large.png | Bin 0 -> 1474 bytes brave/app/images/ltc-small.png | Bin 0 -> 1474 bytes brave/app/images/trx-large.png | Bin 0 -> 2514 bytes brave/app/images/trx-small.png | Bin 0 -> 1281 bytes brave/app/images/xlm-large.png | Bin 0 -> 1453 bytes brave/app/images/xlm-small.png | Bin 0 -> 1453 bytes brave/app/images/xrp-large.png | Bin 0 -> 2080 bytes brave/app/images/xrp-small.png | Bin 0 -> 2080 bytes brave/app/images/zec-large.png | Bin 0 -> 1583 bytes brave/app/images/zec-small.png | Bin 0 -> 1583 bytes .../connect-accounts.component.js | 11 ++++++++--- .../connect-accounts.container.js | 2 +- ui/app/pages/routes/index.js | 2 +- 19 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 brave/app/images/bch-large.png create mode 100644 brave/app/images/bch-small.png create mode 100644 brave/app/images/btc-large.png create mode 100644 brave/app/images/btc-small.png create mode 100644 brave/app/images/dash-large.png create mode 100644 brave/app/images/dash-small.png create mode 100644 brave/app/images/ltc-large.png create mode 100644 brave/app/images/ltc-small.png create mode 100644 brave/app/images/trx-large.png create mode 100644 brave/app/images/trx-small.png create mode 100644 brave/app/images/xlm-large.png create mode 100644 brave/app/images/xlm-small.png create mode 100644 brave/app/images/xrp-large.png create mode 100644 brave/app/images/xrp-small.png create mode 100644 brave/app/images/zec-large.png create mode 100644 brave/app/images/zec-small.png diff --git a/brave/app/images/bch-large.png b/brave/app/images/bch-large.png new file mode 100644 index 0000000000000000000000000000000000000000..92a86222c8a1fb5d466c251059d528930574b95c GIT binary patch literal 2223 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 literal 0 HcmV?d00001 diff --git a/brave/app/images/btc-small.png b/brave/app/images/btc-small.png new file mode 100644 index 0000000000000000000000000000000000000000..5e6a58a3d127811924d27b2a71a2b5ff3c8d7efc GIT binary patch literal 2002 zcmV;@2QB!CP)Nkl6|CA?YXF_WTE>~qXlotY z0u#ym($=w~NqH>8OMAwZN=z0TIAo{h?F7Pv0qGXfpd4q8>Kj#Qk*i)b+=hDe|-l<08CLYzBlt|YH=yf=baIKsJ6;=%zBVd zmxo(KD33dX(s#+{aErMV6_RaEO}3b45yoE{cA>G~SZ`6qvi1W(gMqh}Dq=-e{U3<{ zm|~6jo@(&L4-}GJn|csrb~&n>u{UBy&w{GjGGvpvKDU68{)TLG>JwJX&&yC10O$6X zpmGG{PUCL40#MB5H=!LbqsI?M%Bj|VvT|A5=H9kGGop{x)>tt=j83~RWaxNb1Ylcs z0Sd7S5;v}+;xju)+_EWJUSqzm&BF)xw)GK`$(xnHkkE+-)?>!ah5=Q5>}J%=p5L}* zk8ev|4JHnNo;Vz~R5ylXNv!N`hPrq0)k!VK`s-n}16ttD}~7 z1T!1XE_Q`mqGsxYyoltoBvLGACUX5aN*fY>$J-wTLe!Fd@eo!&^Cj}MGFa9A70C@LPsx4?)h($-}OMjkQq6X*o2QoBOuadG~$d%_2hFT#@9r=a6OoD(b@!xw#5N+<*pamq_i=T?2I7{}FI7N^9V9@JTiO&*c{sVDz@{0zmbdr)e}jy=YiBCMDA)ol38272DmT0kaLUI zJG{fUjk>PKW)JT|Po>dQX*j$+8u9)Rc~F{KJ9;?u9&^-PrK;_rb2>voJ;fo@x?L?>5GmmOgc;(W z*Yw0&aHgYpa9F5Xqb!zXWczRr^3ANR{{|4)z7GSbZbYh5;X5Pe$Gyp>^mhwt74yzC z*Kb9bUrq*Pz@}tV`cpvzMQXadh~=-nVW|4`%6Qu zbSP|1R&`w;>1Ak7lFh`jZK(%T%su6$R~iH!uJ}s&>muj{{7S=_wRMX`Wn;Ozk{5)M zQMF6@zhWzflK)~Wn_8blyh*C8gW^+M2DqxML%haPML^V#YSz@$W=(vBqF+KJ_|OqL zsh$>OeTB_G)V+TSgNy&nDIc3B#wvwp_LU2OfmE6a#9EDgXcg07*qoM6N<$f+?idfdBvi literal 0 HcmV?d00001 diff --git a/brave/app/images/dash-large.png b/brave/app/images/dash-large.png new file mode 100644 index 0000000000000000000000000000000000000000..541c289905dddba6d98cec341ed3ff7de2d36d6a GIT binary patch literal 1752 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 literal 0 HcmV?d00001 diff --git a/brave/app/images/xlm-large.png b/brave/app/images/xlm-large.png new file mode 100644 index 0000000000000000000000000000000000000000..38de9c6ce2ce59847b952ade7c42388e460c0afd GIT binary patch literal 1453 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 literal 0 HcmV?d00001 diff --git a/brave/app/images/xrp-small.png b/brave/app/images/xrp-small.png new file mode 100644 index 0000000000000000000000000000000000000000..8a9dce2192ffcb05e6b92d27c51682e6912b5322 GIT binary patch literal 2080 zcmV+*2;cXKP)6N2s|Hk!J%A-j|dbg!MI!h~Jm& z{83Gy)dK<OX*o!*nx=x;s0K}P4;(=8U$4l+Er z5CfCKXNt@&+LBf3PkF*E%~JlS0k00IvfszqaR^A`A7-nT|P@s}uDboe%e z`Jo9fI4Qd8Mtwu>*Si)ve3kJDGCIeeZW!hP5gFVy;RPmz&&1Suh1=$S?k(TP&{8oB zUH@%?fR>?#@CvBcAK&85I3_p!cOv*THoH|KLz2dxj<{0zx5MqS?lg>DW}gGPr+Xp` zPNtAuv^m?}+SUeS#M1nPFmZh;LR|NT7MN72vRYjOk8he^?Y3E47YH*NR}0b(A~i9F z$Hoq9?TEb}mU6Sk8PWiI$At6a@7;^E`gz~~?*-0ZZM)Em5ZBZcwixRsHE;sJ<`3?pOo01ApPQQP1O8e+%t z3=(_wXalivU-4b*iZUvGV%F}86MHHR0E-w?5${v+o!Ypsm^TlXvr_;FpUp-Nj%V}JQ;3VY4YAH%#M=dDyq3S4M6jq4dCZbLK64K6a8O=ofvKu< zGI@9s01-ATGbi1H)i9{6byDwaB0S7OYC;V29vR9nA0JDE?e_AuW_KZbKRg?3^DQuN z)~ZUHbn4^|_9LZ$usm}Vh6siTi>IZtcv`y8I;JYG3x765V za`sB~-3x|5R)KN|eUBve>OpE^41<&6Xf{p0F0bLjwHnHA)`z+&1j?3}^*Q!T-LI4a-ie=ZTM_Dv= zSSXskB`vqAP~OR91Veq@FSFI9YqcEs_$ww3>qmTC3(TOTSo-&k z=HJDagMv_{(P0=*SuUT*cP5X^d`N_Q192b%zg_&@b`UwQ6;RW`A!qacXHaA+h}Y?Sd`b zoP7v*q1z%0Trb=S0Uf+pjmgbBD8h`cjVVB><`r(8JJ(y5&*5XWy5=eRMb||Ypj1y? zZ)kYZSGG@(Tap(!5U}el%O6%J<7CO#>DFy5q=TU==_u_ub$kR zwF;!eorm8$n=!fed7ys^=4v%aHJHMacRsQClHXJ8$*oztT^6|yWizTiySUR*b)al+ zG-SBH5D?@?HTOTYJ2Bj5SqZvSkig#)yhzbHkZsP!=5_8@s6f>D&zwZ38>Y?%nU3K5 zuvk1fh literal 0 HcmV?d00001 diff --git a/brave/app/images/zec-large.png b/brave/app/images/zec-large.png new file mode 100644 index 0000000000000000000000000000000000000000..83554a5d63c0c1bee668433fddedf0412ebc66b1 GIT binary patch literal 1583 zcmV+~2GIG5P)Ye~V*|H!TSsszA%uy9sJwNX5K+tsYNm8#E&+^*Ng9^!BU>|rBO#n%Zy0zWLYiVhBZ+nj)wvn~HoxLwie@Q>|JkN9f z=ilDjd-~ih(!6b@-|UMrds2Y_+sNL&%G>ox&ENChZawkNB(`Lk9df7a@> zc=&89Lce^dOP2__ijcMdcmWtav;wV*stELqu1pp}!e(^kvq4|o9l)rOgpeKqU^JU~ zD638>eHkG)&b$H`HA2AS7M7(ORo30L-(;+IF?7H)g~7`#tI7cC@HNA08N7@?x>vHx zQL&N;4#P#r*WmZnO*qHqbfI*`rx1?9v@wp~K=iMljLL&Rj=(hMg95~}4QI(l$nHdO z-A+vtP!(M6*$!1U{*3?tGZqN~Rhh~%5kf+7-7eURw0qAhy*n@*>@_Vzpemt)Z< z_iu)y7Of#V3B)^`D%2m;ClgDf}V zaLq^IybYRTiHIMUdtL#+mgzC5+}M?90&ICM6nl1PUgS72j7yzcz)HkwSqK6Lt;;5% zxOOK<(%$O2a_lw4Lw{H%HwJ-&f&t5nOk1!e<1bYBTq|PzT~Ru^OBSEpsW3Pw2z1O$5|LAc+ZMkH zPE_XyFNhXk?e#<#yImqtR91}THQC8pjuQ{%r`~Z>P zzcwNd2Fng%KO~BqdqV^|Y$yvxiv2Gk&|#PNNLT;>1K%1=B&2-nsxrV>?E(OD>^K0h z!L!lSy&{t^O9}ZKVAM$I6P*EOWVeHmno3oytW2LaW6#(wO7eD)Vmq&QU(1$X0b5>K zT3l;8D15FJG5^uDx$$rx)aXS$vH){P2%1^p?HmHeZ3mS%^bGd5)w~bTc0KtLk$~o& zlvewmh+c#|bV^^r86e=zF%v+_PGhd3><06IB}y7t_rt)06@|g~l5&rKQ{3De62wn~ zS+z(p39?&YgjprRTB^S=JU*P(YgaUOcM!16tX?7#ggkUA>7~YWo(CEbu+8o5`avVE zOAp%yKR<;sGTjiS0HCjU%|5!N{xe3f>Z)R8rNhg=0gsr`hcOEp*M5*VDod$4zsu7Oz^JT+xZgF#Qy`b?l1a%o+f7c%xIUa7Y0WG zUYB}{EfZO9K2&PyDHHu|HLC#BWcA<~ had)M+`=C|Y{{Sl0DCbb#SD63+002ovPDHLkV1hQm=LP@( literal 0 HcmV?d00001 diff --git a/brave/app/images/zec-small.png b/brave/app/images/zec-small.png new file mode 100644 index 0000000000000000000000000000000000000000..83554a5d63c0c1bee668433fddedf0412ebc66b1 GIT binary patch literal 1583 zcmV+~2GIG5P)Ye~V*|H!TSsszA%uy9sJwNX5K+tsYNm8#E&+^*Ng9^!BU>|rBO#n%Zy0zWLYiVhBZ+nj)wvn~HoxLwie@Q>|JkN9f z=ilDjd-~ih(!6b@-|UMrds2Y_+sNL&%G>ox&ENChZawkNB(`Lk9df7a@> zc=&89Lce^dOP2__ijcMdcmWtav;wV*stELqu1pp}!e(^kvq4|o9l)rOgpeKqU^JU~ zD638>eHkG)&b$H`HA2AS7M7(ORo30L-(;+IF?7H)g~7`#tI7cC@HNA08N7@?x>vHx zQL&N;4#P#r*WmZnO*qHqbfI*`rx1?9v@wp~K=iMljLL&Rj=(hMg95~}4QI(l$nHdO z-A+vtP!(M6*$!1U{*3?tGZqN~Rhh~%5kf+7-7eURw0qAhy*n@*>@_Vzpemt)Z< z_iu)y7Of#V3B)^`D%2m;ClgDf}V zaLq^IybYRTiHIMUdtL#+mgzC5+}M?90&ICM6nl1PUgS72j7yzcz)HkwSqK6Lt;;5% zxOOK<(%$O2a_lw4Lw{H%HwJ-&f&t5nOk1!e<1bYBTq|PzT~Ru^OBSEpsW3Pw2z1O$5|LAc+ZMkH zPE_XyFNhXk?e#<#yImqtR91}THQC8pjuQ{%r`~Z>P zzcwNd2Fng%KO~BqdqV^|Y$yvxiv2Gk&|#PNNLT;>1K%1=B&2-nsxrV>?E(OD>^K0h z!L!lSy&{t^O9}ZKVAM$I6P*EOWVeHmno3oytW2LaW6#(wO7eD)Vmq&QU(1$X0b5>K zT3l;8D15FJG5^uDx$$rx)aXS$vH){P2%1^p?HmHeZ3mS%^bGd5)w~bTc0KtLk$~o& zlvewmh+c#|bV^^r86e=zF%v+_PGhd3><06IB}y7t_rt)06@|g~l5&rKQ{3De62wn~ zS+z(p39?&YgjprRTB^S=JU*P(YgaUOcM!16tX?7#ggkUA>7~YWo(CEbu+8o5`avVE zOAp%yKR<;sGTjiS0HCjU%|5!N{xe3f>Z)R8rNhg=0gsr`hcOEp*M5*VDod$4zsu7Oz^JT+xZgF#Qy`b?l1a%o+f7c%xIUa7Y0WG zUYB}{EfZO9K2&PyDHHu|HLC#BWcA<~ had)M+`=C|Y{{Sl0DCbb#SD63+002ovPDHLkV1hQm=LP@( literal 0 HcmV?d00001 diff --git a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js index 960156e5f..3fc2ad741 100644 --- a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js +++ b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js @@ -46,9 +46,14 @@ module.exports = class BraveConnectAccounts extends PureComponent { } onCreateBitGoWallets = () => { - for (let coin in this.state.checkedAssets) { - this.props.createBitGoWallet(coin) + const { checkedAssets } = this.state + + for (let coin in checkedAssets) { + if (checkedAssets[coin]) { + this.props.createBitGoWallet(coin) + } } + this.props.history.push(BRAVE_BITGO_WALLET_INDEX) } @@ -64,7 +69,7 @@ module.exports = class BraveConnectAccounts extends PureComponent { getCryptoImage = (asset) => { return ( - + ) } diff --git a/brave/ui/app/pages/connect-accounts/connect-accounts.container.js b/brave/ui/app/pages/connect-accounts/connect-accounts.container.js index 459d31be8..f5683e207 100644 --- a/brave/ui/app/pages/connect-accounts/connect-accounts.container.js +++ b/brave/ui/app/pages/connect-accounts/connect-accounts.container.js @@ -1,7 +1,7 @@ import { connect } from 'react-redux' import { withRouter } from 'react-router-dom' import { compose } from 'recompose' -import { createBitGoWallet } from '../../../store/actions' +import { createBitGoWallet } from '../../store/actions' import ConnectAccounts from './connect-accounts.component' const mapStateToProps = ({ metamask }) => { diff --git a/ui/app/pages/routes/index.js b/ui/app/pages/routes/index.js index 8ec3c8565..3c6bd9eba 100644 --- a/ui/app/pages/routes/index.js +++ b/ui/app/pages/routes/index.js @@ -51,7 +51,7 @@ import { } from '../../selectors/transactions' // Brave -import BraveConnectAccounts from '../../../../brave/ui/app/pages/connect-accounts/connect-accounts' +import BraveConnectAccounts from '../../../../brave/ui/app/pages/connect-accounts' import BraveProviderWallet from '../../../../brave/ui/app/pages/provider-wallet/provider-wallet.component' // Routes From 3498efa71c1aa056f25fece36e7a0ccb99378e44 Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 30 Apr 2020 18:51:19 -0700 Subject: [PATCH 11/16] Don't show the option to create wallets that already exist --- brave/ui/app/ducks/metamask/metamask.js | 8 ++++++++ .../connect-accounts.component.js | 16 ++++++++++++---- .../connect-accounts.container.js | 6 +++++- brave/ui/app/pages/provider-wallet/index.scss | 2 +- brave/ui/app/store/actions.js | 5 +++++ 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/brave/ui/app/ducks/metamask/metamask.js b/brave/ui/app/ducks/metamask/metamask.js index ebbe86bc9..737bfa457 100644 --- a/brave/ui/app/ducks/metamask/metamask.js +++ b/brave/ui/app/ducks/metamask/metamask.js @@ -11,6 +11,7 @@ module.exports = function (state, action) { // BitGo newState.bitGoBalances = newState.bitGoBalances || {} newState.bitGoTransfers = newState.bitGoTransfers || {} + newState.bitGoCreatedWallets = newState.bitGoCreatedWallets || [] switch (action.type) { case actions.SET_BAT_TOKEN_ADDED: @@ -37,6 +38,13 @@ module.exports = function (state, action) { return extend(newState, { bitGoTransfers: updatedBitGoTransfers }) + + case actions.SET_BITGO_WALLET_CREATED: + const updatedBitGoCreatedWallets = newState.bitGoCreatedWallets.push(action.coin) + + return extend(newState, { + bitGoCreatedWallets: updatedBitGoCreatedWallets + }) default: return newState } diff --git a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js index 3fc2ad741..85c169234 100644 --- a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js +++ b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js @@ -19,15 +19,23 @@ module.exports = class BraveConnectAccounts extends PureComponent { static propTypes = { history: PropTypes.object, createBitGoWallet: PropTypes.func, + bitGoCreatedWallets: PropTypes.array, } constructor (props) { super(props) - const checkedAssets = {} + const { bitGoCreatedWallets } = this.props + this.bitGoCreateableAssets = {} + + for (let coin in supportedCoins) { + if (!bitGoCreatedWallets.includes(coin)) { + this.bitGoCreateableAssets[coin] = supportedCoins[coin] + } + } - Object.keys(supportedCoins).map((key) => { + Object.keys(this.bitGoCreateableAssets).map((key) => { checkedAssets[key] = false }) @@ -94,7 +102,7 @@ module.exports = class BraveConnectAccounts extends PureComponent {

{'A new wallet will be generated for each coin checked. Two of three private keys are stored on BitGo. The third key will be stored securely on Brave.'}

- {Object.keys(supportedCoins).map((key) => { + {Object.keys(this.bitGoCreateableAssets).map((key) => { const isChecked = checkedAssets[key] return ( @@ -109,7 +117,7 @@ module.exports = class BraveConnectAccounts extends PureComponent { {this.getCryptoImage(key)}
- {supportedCoins[key]} + {this.bitGoCreateableAssets[key]}
diff --git a/brave/ui/app/pages/connect-accounts/connect-accounts.container.js b/brave/ui/app/pages/connect-accounts/connect-accounts.container.js index f5683e207..ae8e1d232 100644 --- a/brave/ui/app/pages/connect-accounts/connect-accounts.container.js +++ b/brave/ui/app/pages/connect-accounts/connect-accounts.container.js @@ -5,7 +5,11 @@ import { createBitGoWallet } from '../../store/actions' import ConnectAccounts from './connect-accounts.component' const mapStateToProps = ({ metamask }) => { - return {} + const { bitGoCreatedWallets } = metamask + + return { + bitGoCreatedWallets + } } const mapDispatchToProps = dispatch => { diff --git a/brave/ui/app/pages/provider-wallet/index.scss b/brave/ui/app/pages/provider-wallet/index.scss index d28593243..dcb296c73 100644 --- a/brave/ui/app/pages/provider-wallet/index.scss +++ b/brave/ui/app/pages/provider-wallet/index.scss @@ -1,5 +1,5 @@ .provider-wallet { - width: 62vw; + width: 1000px; background: white; min-height: 800px; diff --git a/brave/ui/app/store/actions.js b/brave/ui/app/store/actions.js index 24d6b19d2..b5a8a790a 100644 --- a/brave/ui/app/store/actions.js +++ b/brave/ui/app/store/actions.js @@ -17,6 +17,7 @@ MetaMaskActions.sendBitGoTransaction = sendBitGoTransaction MetaMaskActions.SET_BITGO_BALANCE = 'SET_BITGO_BALANCE' MetaMaskActions.SET_BITGO_TRANSFERS = 'SET_BITGO_TRANSFERS' +MetaMaskActions.SET_BITGO_WALLET_CREATED = 'SET_BITGO_WALLET_CREATED' var background = null // eslint-disable-line no-var const parentSetBackground = MetaMaskActions._setBackgroundConnection @@ -36,6 +37,10 @@ function createBitGoWallet (coin) { dispatch(MetaMaskActions.displayWarning(err.message)) return reject(err) } + dispatch({ + coin, + type: MetaMaskActions.SET_BITGO_WALLET_CREATED + }) resolve() }) }) From 3c5f5e92d152fcb5737bd3fab1de11dd048b0ac4 Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 30 Apr 2020 19:52:15 -0700 Subject: [PATCH 12/16] Fixing vault creation/restoration issue --- brave/app/scripts/metamask-controller.js | 11 +---- brave/ui/app/store/actions.js | 54 ++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/brave/app/scripts/metamask-controller.js b/brave/app/scripts/metamask-controller.js index 955046c8e..3fc7e100e 100644 --- a/brave/app/scripts/metamask-controller.js +++ b/brave/app/scripts/metamask-controller.js @@ -17,16 +17,6 @@ module.exports = class BraveController extends MetamaskController { } } - async createNewVaultAndKeychain (password) { - await super.createNewVaultAndKeychain(password) - this.bitGoController.unlockAndSetKey(password) - } - - async createNewVaultAndRestore (password) { - await super.createNewVaultAndRestore(password) - this.bitGoController.unlockAndSetKey(password) - } - getApi () { const api = super.getApi() @@ -40,6 +30,7 @@ module.exports = class BraveController extends MetamaskController { api.getBitGoWalletBalance = nodeify(this.bitGoController.getBalance, this.bitGoController) api.getBitGoWalletTransfers = nodeify(this.bitGoController.getTransfers, this.bitGoController) api.sendBitGoTransaction = nodeify(this.bitGoController.sendTx, this.bitGoController) + api.unlockAndSetKey = nodeify(this.bitGoController.unlockAndSetKey, this.bitGoController) return api } diff --git a/brave/ui/app/store/actions.js b/brave/ui/app/store/actions.js index b5a8a790a..e17229308 100644 --- a/brave/ui/app/store/actions.js +++ b/brave/ui/app/store/actions.js @@ -14,6 +14,8 @@ MetaMaskActions.createBitGoWallet = createBitGoWallet MetaMaskActions.getBitGoWalletBalance = getBitGoWalletBalance MetaMaskActions.getBitGoWalletTransfers = getBitGoWalletTransfers MetaMaskActions.sendBitGoTransaction = sendBitGoTransaction +MetaMaskActions.createNewVault = createNewVault +MetaMaskActions.createNewVaultAndRestore = createNewVaultAndRestore MetaMaskActions.SET_BITGO_BALANCE = 'SET_BITGO_BALANCE' MetaMaskActions.SET_BITGO_TRANSFERS = 'SET_BITGO_TRANSFERS' @@ -93,6 +95,58 @@ function sendBitGoTransaction (coin, amount, recipientAddress) { } } +function createNewVault (password) { + return new Promise((resolve, reject) => { + background.createNewVaultAndKeychain(password, error => { + if (error) { + return reject(error) + } + background.unlockAndSetKey(password, (err) => { + if (err) { + return dispatch(MetaMaskActions.displayWarning(err.message)) + } + }) + resolve(true) + }) + }) +} + +function createNewVaultAndRestore (password, seed) { + return (dispatch) => { + dispatch(MetaMaskActions.showLoadingIndication()) + log.debug(`background.createNewVaultAndRestore`) + let vault + return new Promise((resolve, reject) => { + background.createNewVaultAndRestore(password, seed, (err, _vault) => { + if (err) { + return reject(err) + } + vault = _vault + resolve() + }) + }) + .then(() => { + background.unlockAndSetKey(password, (err) => { + if (err) { + return dispatch(MetaMaskActions.displayWarning(err.message)) + } + return true + }) + }) + .then(() => dispatch(MetaMaskActions.unMarkPasswordForgotten())) + .then(() => { + dispatch(MetaMaskActions.showAccountsPage()) + dispatch(MetaMaskActions.hideLoadingIndication()) + return vault + }) + .catch(err => { + dispatch(MetaMaskActions.displayWarning(err.message)) + dispatch(MetaMaskActions.hideLoadingIndication()) + return Promise.reject(err) + }) + } +} + function setBatTokenAdded () { return (dispatch) => { background.setBatTokenAdded((err) => { From ceb7e775f80b6fee9f3278402f2e75880e2426c0 Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 30 Apr 2020 20:29:34 -0700 Subject: [PATCH 13/16] Wiring data to the provider content --- .../connect-accounts.component.js | 5 + brave/ui/app/pages/provider-wallet/index.js | 1 + .../provider-wallet.component.js | 98 ++++++++++++++++--- .../provider-wallet.container.js | 36 +++++++ ui/app/pages/routes/index.js | 12 +-- 5 files changed, 132 insertions(+), 20 deletions(-) create mode 100644 brave/ui/app/pages/provider-wallet/index.js create mode 100644 brave/ui/app/pages/provider-wallet/provider-wallet.container.js diff --git a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js index 85c169234..524225c23 100644 --- a/brave/ui/app/pages/connect-accounts/connect-accounts.component.js +++ b/brave/ui/app/pages/connect-accounts/connect-accounts.component.js @@ -76,6 +76,11 @@ module.exports = class BraveConnectAccounts extends PureComponent { } getCryptoImage = (asset) => { + // temporary + if (asset === 'bsv' || asset === 'btg' || asset === 'eos' || asset === 'algo') { + asset = 'btc' + } + return ( ) diff --git a/brave/ui/app/pages/provider-wallet/index.js b/brave/ui/app/pages/provider-wallet/index.js new file mode 100644 index 000000000..81441dc27 --- /dev/null +++ b/brave/ui/app/pages/provider-wallet/index.js @@ -0,0 +1 @@ +export { default } from './provider-wallets.container' diff --git a/brave/ui/app/pages/provider-wallet/provider-wallet.component.js b/brave/ui/app/pages/provider-wallet/provider-wallet.component.js index 97bb0949b..949f4f8ef 100644 --- a/brave/ui/app/pages/provider-wallet/provider-wallet.component.js +++ b/brave/ui/app/pages/provider-wallet/provider-wallet.component.js @@ -1,6 +1,88 @@ import React, { PureComponent } from 'react' module.exports = class BraveProviderWallet extends PureComponent { + static contextTypes = { + t: PropTypes.func, + } + + static propTypes = { + bitGoBalances: PropTypes.object, + bitGoTransfers: PropTypes.object, + bitGoCreatedWallets: PropTypes.array, + getBitGoWalletBalance: PropTypes.func, + getBitGoWalletTransfers: PropTypes.func, + sendBitGoTransaction: PropTypes.func, + } + + constructor (props) { + super (props) + + this.refreshTimer = null + + const { bitGoCreatedWallets } = this.props + const currentAsset = bitGoCreatedWallets.length ? bitGoCreatedWallets[0] : '' + + this.state = { + currentAsset + } + } + + componentDidMount () { + this.updateBitGoInfo() + this.refreshTimer = setInterval(this.updateBitGoInfo, 150000) + } + + componentWillUnmount() { + clearInterval(this.refreshTimer) + } + + updateBitGoInfo = () => { + const { + getBitGoWalletBalance, + getBitGoWalletTransfers, + } = this.props + + getBitGoWalletBalance() + getBitGoWalletTransfers() + } + + getCryptoIcon = (asset, large = true) => { + const ext = large ? 'large' : 'small' + + return ( + + ) + } + + renderAssetList = () => { + const { + bitGoBalances, + bitGoCreatedWallets, + } = this.props + + return ( +
+ {bitGoCreatedWallets.map((asset) => { + const balance = bitGoBalances[asset] || '0.00' + const activeClass = this.state.currentAsset === asset ? 'active' : '' + + return ( +
+
+ {this.getCryptoIcon(asset)} +
+ {`${balance} ${asset.toUpperCase()}`} +
+ ) + })} +
+ ) + } + + renderTransactions = () => { + const { bitGoTransfers } = this.props + return null + } render () { return ( @@ -12,22 +94,10 @@ module.exports = class BraveProviderWallet extends PureComponent { $0.00
-
-
-
- -
- {'0 BTC'} -
-
-
- -
- {'0 XRP'} -
-
+ {this.renderAssetList()}
+ {this.renderTransactions()}
) diff --git a/brave/ui/app/pages/provider-wallet/provider-wallet.container.js b/brave/ui/app/pages/provider-wallet/provider-wallet.container.js new file mode 100644 index 000000000..b263d72e4 --- /dev/null +++ b/brave/ui/app/pages/provider-wallet/provider-wallet.container.js @@ -0,0 +1,36 @@ +import { connect } from 'react-redux' +import { withRouter } from 'react-router-dom' +import { compose } from 'recompose' +import { + getBitGoWalletBalance, + getBitGoWalletTransfers, + sendBitGoTransaction +} from '../../store/actions' +import ProviderWallet from './provider-wallet.component' + +const mapStateToProps = ({ metamask }) => { + const { + bitGoBalances, + bitGoTransfers, + bitGoCreatedWallets + } = metamask + + return { + bitGoBalances, + bitGoTransfers, + bitGoCreatedWallets + } +} + +const mapDispatchToProps = dispatch => { + return { + getBitGoWalletBalance: (coin) => dispatch(getBitGoWalletBalance(coin)), + getBitGoWalletTransfers: (coin) => dispatch(getBitGoWalletTransfers(coin)), + sendBitGoTransaction: (coin, amount, recipientAddress) => dispatch(sendBitGoTransaction(coin, amount, recipientAddress)), + } +} + +export default compose( + withRouter, + connect(mapStateToProps, mapDispatchToProps) +)(ProviderWallet) diff --git a/ui/app/pages/routes/index.js b/ui/app/pages/routes/index.js index 3c6bd9eba..81382b93a 100644 --- a/ui/app/pages/routes/index.js +++ b/ui/app/pages/routes/index.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types' import { connect } from 'react-redux' import { Route, Switch, withRouter, matchPath } from 'react-router-dom' import { compose } from 'recompose' -import actions from '~/brave/ui/app/store/actions' +import actions from '../../store/actions' import log from 'loglevel' import IdleTimer from 'react-idle-timer' import {getNetworkIdentifier, preferencesSelector} from '../../selectors/selectors' @@ -20,12 +20,12 @@ const Sidebar = require('../../components/app/sidebars').default const { WALLET_VIEW_SIDEBAR } = require('../../components/app/sidebars/sidebar.constants') // other views -import Home from '~/brave/ui/app/pages/home' +import Home from '../home' import Settings from '../settings' import Authenticated from '../../helpers/higher-order-components/authenticated' import Initialized from '../../helpers/higher-order-components/initialized' import Lock from '../lock' -const RestoreVaultPage = require('~/brave/ui/app/pages/keychains/restore-vault').default +const RestoreVaultPage = require('../keychains/restore-vault').default const RevealSeedConfirmation = require('../keychains/reveal-seed') const MobileSyncPage = require('../mobile-sync') const AddTokenPage = require('../add-token') @@ -43,7 +43,7 @@ const Modal = require('../../components/app/modals').Modal // Global Alert const Alert = require('../../components/ui/alert') -import AppHeader from '~/brave/ui/app/components/app/app-header' +import AppHeader from '../../components/app/app-header' import UnlockPage from '../unlock-page' import { @@ -52,7 +52,7 @@ import { // Brave import BraveConnectAccounts from '../../../../brave/ui/app/pages/connect-accounts' -import BraveProviderWallet from '../../../../brave/ui/app/pages/provider-wallet/provider-wallet.component' +import BraveProviderWallet from '../../../../brave/ui/app/pages/provider-wallet' // Routes import { @@ -73,7 +73,7 @@ import { INITIALIZE_UNLOCK_ROUTE, BRAVE_CONNECT_WALLETS_ROUTE, BRAVE_BITGO_WALLET_INDEX -} from '~/brave/ui/app/helpers/constants/routes' +} from '../../helpers/constants/routes' // enums import { From 0de270a69c8ccb40aa6f29881897e4107d224d06 Mon Sep 17 00:00:00 2001 From: ryanml Date: Fri, 1 May 2020 09:38:03 -0700 Subject: [PATCH 14/16] Addressing review comments --- brave/app/scripts/controllers/bitgo.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/brave/app/scripts/controllers/bitgo.js b/brave/app/scripts/controllers/bitgo.js index 2fe7d9a8d..4378b6176 100644 --- a/brave/app/scripts/controllers/bitgo.js +++ b/brave/app/scripts/controllers/bitgo.js @@ -37,10 +37,8 @@ class BitGoController { constructor (opts = {}) { const initState = opts.initState || {} this.proxyOrigin = opts.isProduction - ? 'https://bitgo-proxy.brave.com/' // TODO: update this + ? 'https://bitgo-proxy.brave.com/' : 'http://localhost:3000/' - this.password = opts.password - this.braveServiceKey = opts.projectId this.store = new ObservableStore(initState) this.keyringController = opts.keyringController chrome.braveWallet.getProjectID((projectId) => { From e84c51a6555098e6a07f8aa1d853048fce0c4399 Mon Sep 17 00:00:00 2001 From: ryanml Date: Fri, 1 May 2020 10:33:14 -0700 Subject: [PATCH 15/16] Typo --- brave/ui/app/pages/provider-wallet/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brave/ui/app/pages/provider-wallet/index.js b/brave/ui/app/pages/provider-wallet/index.js index 81441dc27..007a5bac6 100644 --- a/brave/ui/app/pages/provider-wallet/index.js +++ b/brave/ui/app/pages/provider-wallet/index.js @@ -1 +1 @@ -export { default } from './provider-wallets.container' +export { default } from './provider-wallet.container' From de81875bff6543d101e0922edd978cc933ade316 Mon Sep 17 00:00:00 2001 From: ryanml Date: Fri, 1 May 2020 11:03:14 -0700 Subject: [PATCH 16/16] Removing logs, fetching projectId before bitgo creation --- brave/app/scripts/controllers/bitgo.js | 6 +----- brave/app/scripts/metamask-controller.js | 17 ++++++++++------- .../provider-wallet.component.js | 1 + 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/brave/app/scripts/controllers/bitgo.js b/brave/app/scripts/controllers/bitgo.js index 4378b6176..ec69e6dbc 100644 --- a/brave/app/scripts/controllers/bitgo.js +++ b/brave/app/scripts/controllers/bitgo.js @@ -41,9 +41,7 @@ class BitGoController { : 'http://localhost:3000/' this.store = new ObservableStore(initState) this.keyringController = opts.keyringController - chrome.braveWallet.getProjectID((projectId) => { - this.braveServiceKey = projectId - }) + this.braveServiceKey = opts.projectId } request (path, opts) { @@ -72,12 +70,10 @@ class BitGoController { userPub: userKeychain.pub, backupPub: backupKeychain.pub } - console.log({req}) const response = await this.request('create-wallet', { method: 'POST', body: JSON.stringify(req) }) - console.log({response}) if (!response.ok) { return } diff --git a/brave/app/scripts/metamask-controller.js b/brave/app/scripts/metamask-controller.js index 3fc7e100e..6748fb2e8 100644 --- a/brave/app/scripts/metamask-controller.js +++ b/brave/app/scripts/metamask-controller.js @@ -7,14 +7,17 @@ module.exports = class BraveController extends MetamaskController { constructor (opts) { super(opts) - this.bitGoController = new BitGoController({ - ...this.opts, - keyringController: this.keyringController + chrome.braveWallet.getProjectID((projectId) => { + this.bitGoController = new BitGoController({ + ...this.opts, + projectId: projectId, + keyringController: this.keyringController + }) + + if (this.keyringController.password) { + this.bitGoController.unlockAndSetKey(this.keyringController.password) + } }) - - if (this.keyringController.password) { - this.bitGoController.unlockAndSetKey(this.keyringController.password) - } } getApi () { diff --git a/brave/ui/app/pages/provider-wallet/provider-wallet.component.js b/brave/ui/app/pages/provider-wallet/provider-wallet.component.js index 949f4f8ef..5885e1414 100644 --- a/brave/ui/app/pages/provider-wallet/provider-wallet.component.js +++ b/brave/ui/app/pages/provider-wallet/provider-wallet.component.js @@ -1,4 +1,5 @@ import React, { PureComponent } from 'react' +import PropTypes from 'prop-types' module.exports = class BraveProviderWallet extends PureComponent { static contextTypes = {