on master help sign in
Merge branch 'master' into mino-onboarding-invites
696403aFang
CHANGELOG+15
@@ -1,6 +1,21 @@
1
1
2# Changelog
2# Changelog
3
3
4+- 1.4.1 (2019-05-17)
5+ This release fixes two issues.
6+
7+ * After setting keys, always generate the corresponding keyfile (#138)
8+ * Ship with latest azimuth-js to support updates "Issue Child" page (#138)
9+
10+- 1.4.0 (2019-05-15)
11+ This release adds support for discontinuity flagging (aka "personal breach") and brings a couple quality of life improvements.
12+
13+ * Support flagging for discontinuity during key configuration (#130)
14+ * Autocomplete available ship names on the "Issue Child" page (#128)
15+ * Implement explicit "unset" action for proxy addresses (#127)
16+ * Make it easier to select Ledger accounts (#129)
17+ * Various smaller code improvements (#126, #131, #133, #134)
18+
4- 1.3.1 (2019-04-23)
19- 1.3.1 (2019-04-23)
5 This release fixes an issue with the script for serving Bridge over HTTPS.
20 This release fixes an issue with the script for serving Bridge over HTTPS.
6
21
package-lock.json+48−1
@@ -1,6 +1,6 @@
1{
1{
2 "name": "bridge",
2 "name": "bridge",
3− "version": "1.3.1",
3+ "version": "1.4.0",
4 "lockfileVersion": 1,
4 "lockfileVersion": 1,
5 "requires": true,
5 "requires": true,
6 "dependencies": {
6 "dependencies": {
@@ -2000,6 +2000,28 @@
2000 "requires": {
2000 "requires": {
2001 "azimuth-solidity": "1.1.0",
2001 "azimuth-solidity": "1.1.0",
2002 "ethereumjs-util": "^5.2.0"
2002 "ethereumjs-util": "^5.2.0"
2003+<<<<<<< HEAD
2004+=======
2005+ },
2006+ "dependencies": {
2007+ "azimuth-solidity": {
2008+ "version": "1.1.0",
2009+ "resolved": "https://registry.npmjs.org/azimuth-solidity/-/azimuth-solidity-1.1.0.tgz",
2010+ "integrity": "sha512-YhVWKql1ZZ9Zae96nYA7QLwQlTzGspkNOErq170sl/UJwncQbvAyibSv+heMaS18n4soPDiRSpa1vHFoGoIX1A==",
2011+ "requires": {
2012+ "babel-polyfill": "^6.26.0",
2013+ "babel-register": "^6.26.0",
2014+ "openzeppelin-solidity": "1.12.0",
2015+ "truffle": "4.1.11"
2016+ },
2017+ "dependencies": {
2018+ "openzeppelin-solidity": {
2019+ "version": "1.12.0",
2020+ "bundled": true
2021+ }
2022+ }
2023+ }
2024+>>>>>>> master
2003 }
2025 }
2004 },
2026 },
2005 "azimuth-solidity": {
2027 "azimuth-solidity": {
@@ -20139,6 +20161,7 @@
20139 "resolved": "https://registry.npmjs.org/web3-providers/-/web3-providers-1.0.0-beta.54.tgz",
20161 "resolved": "https://registry.npmjs.org/web3-providers/-/web3-providers-1.0.0-beta.54.tgz",
20140 "integrity": "sha512-P55MQHkfU2VLt3t+3IbqRUVwOziLOMiXxKulVYXzTu9M8p9aogl1tvPjKXpRUGygCY3LsWTpt/UlJR8Aaia+CQ==",
20162 "integrity": "sha512-P55MQHkfU2VLt3t+3IbqRUVwOziLOMiXxKulVYXzTu9M8p9aogl1tvPjKXpRUGygCY3LsWTpt/UlJR8Aaia+CQ==",
20141 "requires": {
20163 "requires": {
20164+<<<<<<< HEAD
20142 "@babel/runtime": "^7.3.1",
20165 "@babel/runtime": "^7.3.1",
20143 "@types/node": "^10.12.18",
20166 "@types/node": "^10.12.18",
20144 "eventemitter3": "3.1.0",
20167 "eventemitter3": "3.1.0",
@@ -20161,6 +20184,30 @@
20161 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
20184 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
20162 "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA=="
20185 "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA=="
20163 }
20186 }
20187+=======
20188+ "web3-core-helpers": "1.0.0-beta.33",
20189+ "xhr2": "0.1.4"
20190+ }
20191+ },
20192+ "web3-providers-ipc": {
20193+ "version": "1.0.0-beta.33",
20194+ "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.33.tgz",
20195+ "integrity": "sha1-Twrcmv6dEsBm5L5cPFNvUHPLB8Y=",
20196+ "requires": {
20197+ "oboe": "2.1.3",
20198+ "underscore": "1.8.3",
20199+ "web3-core-helpers": "1.0.0-beta.33"
20200+ }
20201+ },
20202+ "web3-providers-ws": {
20203+ "version": "1.0.0-beta.33",
20204+ "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.33.tgz",
20205+ "integrity": "sha1-j93qQuGbvyUh7IeVRkV6Yjqdye8=",
20206+ "requires": {
20207+ "underscore": "1.8.3",
20208+ "web3-core-helpers": "1.0.0-beta.33",
20209+ "websocket": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible"
20210+>>>>>>> master
20164 }
20211 }
20165 },
20212 },
20166 "web3-shh": {
20213 "web3-shh": {
package.json+1−1
@@ -1,6 +1,6 @@
1{
1{
2 "name": "bridge",
2 "name": "bridge",
3− "version": "1.3.1",
3+ "version": "1.4.1",
4 "description": "An application for interacting with Azimuth",
4 "description": "An application for interacting with Azimuth",
5 "repository": {
5 "repository": {
6 "type": "git",
6 "type": "git",
src/bridge/Bridge.js+5−2
@@ -187,9 +187,10 @@ class Bridge extends React.Component {
187 }
187 }
188 }
188 }
189
189
190− setNetworkSeedCache(networkSeed) {
190+ setNetworkSeedCache(networkSeed, revision) {
191 this.setState({
191 this.setState({
192− networkSeedCache: networkSeed
192+ networkSeedCache: networkSeed,
193+ networkRevisionCache: revision
193 })
194 })
194 }
195 }
195
196
@@ -270,6 +271,7 @@ class Bridge extends React.Component {
270 urbitWallet,
271 urbitWallet,
271 authMnemonic,
272 authMnemonic,
272 networkSeedCache,
273 networkSeedCache,
274+ networkRevisionCache,
273 pointCursor,
275 pointCursor,
274 pointCache,
276 pointCache,
275 txnHashCursor,
277 txnHashCursor,
@@ -337,6 +339,7 @@ class Bridge extends React.Component {
337 pointCursor={ pointCursor }
339 pointCursor={ pointCursor }
338 pointCache={ pointCache }
340 pointCache={ pointCache }
339 networkSeedCache= { networkSeedCache }
341 networkSeedCache= { networkSeedCache }
342+ networkRevisionCache={ networkRevisionCache }
340 setNetworkSeedCache= { this.setNetworkSeedCache }
343 setNetworkSeedCache= { this.setNetworkSeedCache }
341 // txn
344 // txn
342 setTxnHashCursor={ this.setTxnHashCursor }
345 setTxnHashCursor={ this.setTxnHashCursor }
src/bridge/components/CheckboxButton.js+3−1
@@ -16,7 +16,8 @@ const CheckboxButton = props => {
16 return (
16 return (
17 <div
17 <div
18 className={`flex items-center ${props.className}`}
18 className={`flex items-center ${props.className}`}
19− style={props.style}>
19+ style={{cursor: 'pointer', ...props.style}}
20+ onClick={props.onToggle}>
20
21
21 <ProtoButton
22 <ProtoButton
22 // {...getDomProps(props)}
23 // {...getDomProps(props)}
@@ -38,6 +39,7 @@ const CheckboxButton = props => {
38
39
39 </ProtoButton>
40 </ProtoButton>
40
41
42+ <div>{ props.label }</div>
41 { props.children }
43 { props.children }
42
44
43 </div>
45 </div>
src/bridge/components/StatelessTransaction.js+3−6
@@ -515,13 +515,10 @@ class StatelessTransaction extends React.Component {
515 <CheckboxButton
515 <CheckboxButton
516 className={ 'mt-8' }
516 className={ 'mt-8' }
517 disabled={ !canApprove }
517 disabled={ !canApprove }
518− onClick={ setUserApproval }
518+ onToggle={ setUserApproval }
519 state={ userApproval }
519 state={ userApproval }
520− >
521− <div onClick={ setUserApproval }>
522− { `I approve this transaction and wish to send.` }
520+ label='I approve this transaction and wish to send.'
523− </div>
524− </CheckboxButton>
521+ ></CheckboxButton>
525
522
526 const sending = (txStatus !== SUBMISSION_STATES.PROMPT);
523 const sending = (txStatus !== SUBMISSION_STATES.PROMPT);
527 const sendTxnSpinner = sending ? '' : 'hide';
524 const sendTxnSpinner = sending ? '' : 'hide';
src/bridge/views/GenKeyfile.js+4−1
@@ -40,7 +40,10 @@ class GenKeyfile extends React.Component {
40 ? pointCache[point]
40 ? pointCache[point]
41 : (() => { throw BRIDGE_ERROR.MISSING_POINT })()
41 : (() => { throw BRIDGE_ERROR.MISSING_POINT })()
42
42
43+ // in case we did SetKeys earlier this session, make sure to generate the
44+ // newer keyfile, rather than the one that will expire soon
45+ const revision = (this.props.networkRevisionCache ||
43− const revision = parseInt(pointDetails.keyRevisionNumber)
46+ parseInt(pointDetails.keyRevisionNumber));
44
47
45 return {
48 return {
46 point,
49 point,
src/bridge/views/Point/Actions.js+1−1
@@ -237,7 +237,7 @@ const Actions = (props) => {
237 pushRoute(ROUTE_NAMES.SET_KEYS)
237 pushRoute(ROUTE_NAMES.SET_KEYS)
238 }}
238 }}
239 >
239 >
240− { 'Set public keys' }
240+ { 'Set network keys' }
241 </Button>
241 </Button>
242
242
243 <Button
243 <Button
src/bridge/views/Points.js+1−1
@@ -168,7 +168,7 @@ class Points extends React.Component {
168 ? <React.Fragment>
168 ? <React.Fragment>
169 <H2>{ 'You Are a Management Proxy For' }</H2>
169 <H2>{ 'You Are a Management Proxy For' }</H2>
170 <P>
170 <P>
171− { `You can configure or set public keys and conduct sponsorship
171+ { `You can configure or set network keys and conduct sponsorship
172 related operations for these points.` }
172 related operations for these points.` }
173 </P>
173 </P>
174 <PointList
174 <PointList
src/bridge/views/SetKeys.js+18−8
@@ -2,7 +2,7 @@ import React from 'react'
2import Maybe from 'folktale/maybe'
2import Maybe from 'folktale/maybe'
3import * as azimuth from 'azimuth-js'
3import * as azimuth from 'azimuth-js'
4import * as ob from 'urbit-ob'
4import * as ob from 'urbit-ob'
5−import { Row, Col, H1, P, Warning } from '../components/Base'
5+import { Row, Col, H1, P, Warning, CheckboxButton } from '../components/Base'
6
6
7import StatelessTransaction from '../components/StatelessTransaction'
7import StatelessTransaction from '../components/StatelessTransaction'
8import { BRIDGE_ERROR } from '../lib/error'
8import { BRIDGE_ERROR } from '../lib/error'
@@ -33,15 +33,19 @@ class SetKeys extends React.Component {
33 nondeterministicSeed: false,
33 nondeterministicSeed: false,
34 point: point,
34 point: point,
35 cryptoSuiteVersion: 1,
35 cryptoSuiteVersion: 1,
36− continuity: false,
36+ discontinuity: false,
37 isManagementSeed: false,
37 isManagementSeed: false,
38 }
38 }
39
39
40− this.handleNetworkSeedInput = this.handleNetworkSeedInput.bind(this)
40+ this.toggleDiscontinuity = this.toggleDiscontinuity.bind(this);
41 // Transaction
41 // Transaction
42 this.createUnsignedTxn = this.createUnsignedTxn.bind(this)
42 this.createUnsignedTxn = this.createUnsignedTxn.bind(this)
43 }
43 }
44
44
45+ toggleDiscontinuity() {
46+ this.setState({ discontinuity: !this.state.discontinuity });
47+ }
48+
45 componentDidMount() {
49 componentDidMount() {
46 const { props } = this
50 const { props } = this
47
51
@@ -94,10 +98,6 @@ class SetKeys extends React.Component {
94 })
98 })
95 }
99 }
96
100
97− handleNetworkSeedInput(networkSeed) {
98− this.setState({ networkSeed })
99− }
100−
101 createUnsignedTxn() {
101 createUnsignedTxn() {
102 const { state, props } = this
102 const { state, props } = this
103
103
@@ -130,7 +130,7 @@ class SetKeys extends React.Component {
130 pencr,
130 pencr,
131 pauth,
131 pauth,
132 1,
132 1,
133− false
133+ state.discontinuity
134 )
134 )
135
135
136 return Maybe.Just(txn)
136 return Maybe.Just(txn)
@@ -185,6 +185,15 @@ class SetKeys extends React.Component {
185 </Warning>
185 </Warning>
186 : <div /> }
186 : <div /> }
187
187
188+ <CheckboxButton
189+ className='mt-8'
190+ onToggle={ this.toggleDiscontinuity }
191+ state={ state.discontinuity }
192+ label={`I have lost important off-chain data relating to this point
193+ and need to do a hard reset.
194+ (For example, rebooting an Arvo ship.)`}
195+ ></CheckboxButton>
196+
188 <StatelessTransaction
197 <StatelessTransaction
189 // Upper scope
198 // Upper scope
190 web3={props.web3}
199 web3={props.web3}
@@ -201,6 +210,7 @@ class SetKeys extends React.Component {
201 canGenerate={ canGenerate }
210 canGenerate={ canGenerate }
202 createUnsignedTxn={this.createUnsignedTxn}
211 createUnsignedTxn={this.createUnsignedTxn}
203 networkSeed={ state.networkSeed }
212 networkSeed={ state.networkSeed }
213+ newRevision={ (parseInt(pointDetails.keyRevisionNumber) + 1) }
204 setNetworkSeedCache={ props.setNetworkSeedCache } />
214 setNetworkSeedCache={ props.setNetworkSeedCache } />
205
215
206 </Col>
216 </Col>