Loëck Vézien
7 years ago
No known key found for this signature in database
GPG Key ID: CBCDCE384E853AC4
4 changed files with
48 additions and
24 deletions
-
package.json
-
src/components/Home.js
-
src/main/index.js
-
src/main/ledger.js
|
|
@ -27,16 +27,18 @@ |
|
|
|
}, |
|
|
|
"dependencies": { |
|
|
|
"electron-devtools-installer": "^2.2.3", |
|
|
|
"electron": "1.7.9", |
|
|
|
"history": "^4.7.2", |
|
|
|
"ledger-node-js-hid": "github:loeck/ledger-node-js-hid", |
|
|
|
"ledgerco": "^1.2.1", |
|
|
|
"react": "^16.2.0", |
|
|
|
"react-dom": "^16.2.0", |
|
|
|
"react-redux": "^5.0.6", |
|
|
|
"react-router": "^4.2.0", |
|
|
|
"react-router-dom": "^4.2.2", |
|
|
|
"react-router-redux": "5.0.0-alpha.9", |
|
|
|
"redux": "^3.7.2", |
|
|
|
"react-router": "^4.2.0", |
|
|
|
"react": "^16.2.0", |
|
|
|
"redux-thunk": "^2.2.0", |
|
|
|
"redux": "^3.7.2", |
|
|
|
"source-map-support": "^0.5.0", |
|
|
|
"styled-components": "^2.2.4", |
|
|
|
"styled-system": "^1.1.1", |
|
|
@ -48,7 +50,6 @@ |
|
|
|
"babel-plugin-transform-class-properties": "^6.24.1", |
|
|
|
"babel-preset-flow": "^6.23.0", |
|
|
|
"babel-preset-react": "^6.24.1", |
|
|
|
"electron": "1.7.9", |
|
|
|
"electron-builder": "^19.49.0", |
|
|
|
"electron-rebuild": "^1.6.0", |
|
|
|
"electron-webpack": "1.11.0", |
|
|
|
|
|
@ -1,33 +1,33 @@ |
|
|
|
import React, { Component } from 'react' |
|
|
|
import ledgerco from 'ledgerco' |
|
|
|
import { ipcRenderer } from 'electron' |
|
|
|
|
|
|
|
class App extends Component { |
|
|
|
state = { |
|
|
|
publicKey: null, |
|
|
|
devices: [], |
|
|
|
} |
|
|
|
|
|
|
|
componentWillMount() { |
|
|
|
this.getWalletPublicKey() |
|
|
|
} |
|
|
|
|
|
|
|
getWalletPublicKey() { |
|
|
|
ledgerco.comm_node.create_async().then(comm => { |
|
|
|
comm.device.setNonBlocking(1) |
|
|
|
|
|
|
|
const btc = new ledgerco.btc(comm) |
|
|
|
|
|
|
|
btc.getWalletPublicKey_async("44'/0'/0'/0").then(res => |
|
|
|
this.setState({ |
|
|
|
publicKey: res.publicKey, |
|
|
|
}), |
|
|
|
) |
|
|
|
}) |
|
|
|
componentDidMount() { |
|
|
|
ipcRenderer.send('listenDevices') |
|
|
|
|
|
|
|
ipcRenderer.on('addDevice', (e, device) => |
|
|
|
this.setState(prev => ({ |
|
|
|
devices: [...prev.devices, device].filter( |
|
|
|
(v, i, s) => s.findIndex(t => t.path === v.path) === i, |
|
|
|
), |
|
|
|
})), |
|
|
|
) |
|
|
|
|
|
|
|
ipcRenderer.on('removeDevice', (e, device) => |
|
|
|
this.setState(prev => ({ |
|
|
|
devices: prev.devices.filter(d => d.path !== device.path), |
|
|
|
})), |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
render() { |
|
|
|
const { publicKey } = this.state |
|
|
|
const { devices } = this.state |
|
|
|
|
|
|
|
return <div>publicKey: {publicKey}</div> |
|
|
|
return <div>{devices.map(device => device.path)}</div> |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1,4 +1,5 @@ |
|
|
|
// @flow
|
|
|
|
|
|
|
|
require('../globals') |
|
|
|
require('./ledger') |
|
|
|
require('./app') |
|
|
|
|
|
@ -0,0 +1,22 @@ |
|
|
|
import { ipcMain } from 'electron' |
|
|
|
import { isLedgerDevice } from 'ledgerco/lib/utils' |
|
|
|
|
|
|
|
import HID from 'ledger-node-js-hid' |
|
|
|
|
|
|
|
ipcMain.on('listenDevices', event => { |
|
|
|
HID.listenDevices.start() |
|
|
|
|
|
|
|
HID.listenDevices.events.on('add', device => { |
|
|
|
console.log('add', device, isLedgerDevice(device)) |
|
|
|
if (isLedgerDevice(device)) { |
|
|
|
event.sender.send('addDevice', device) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
HID.listenDevices.events.on('remove', device => { |
|
|
|
console.log('remove', device, isLedgerDevice(device)) |
|
|
|
if (isLedgerDevice(device)) { |
|
|
|
event.sender.send('removeDevice', device) |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |