btc: more frontend template stuff

This commit is contained in:
Isaac Visintainer 2021-03-27 11:18:09 -07:00 committed by ixv
parent fc1dbe4f30
commit d32e78799f
9 changed files with 10183 additions and 0 deletions

View File

@ -0,0 +1,31 @@
<!doctype html>
<html>
<head>
<title>Wallet</title>
<meta charset="utf-8" />
<meta name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no,maximum-scale=1"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-touch-fullscreen" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<!--
<link rel="apple-touch-icon" href="/~btc/img/touch_icon.png">
<link rel="icon" type="image/png" href="/~btc/img/Favicon.png">
-->
<link rel="manifest"
href='data:application/manifest+json,{
"name": "Wallet",
"short_name": "Wallet",
"description": "A%20bitcoin%20wallet%20for%20urbit",
"display": "standalone",
"background_color": "%23FFFFFF",
"theme_color": "%23000000"}' />
</head>
<body>
<div id="root"></div>
<div id="portal-root"></div>
<script src="/~landscape/js/channel.js"></script>
<script src="/~landscape/js/session.js"></script>
<script src="/~btc/js/bundle/index.js"></script>
</body>
</html>

9885
pkg/btc-wallet/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,71 @@
{
"name": "urbit-bitcoin-wallet",
"version": "0.1.0",
"main": "node install.js",
"scripts": {
"start": "webpack-dev-server --config config/webpack.dev.js",
"build:dev": "cross-env NODE_ENV=production webpack --config config/webpack.dev.js",
"build:prod": "cross-env NODE_ENV=production webpack --config config/webpack.prod.js"
},
"author": "Tlon Corp",
"license": "MIT",
"devDependencies": {
"@babel/core": "^7.9.0",
"@babel/plugin-proposal-class-properties": "^7.8.3",
"@babel/plugin-proposal-object-rest-spread": "^7.9.5",
"@babel/plugin-proposal-optional-chaining": "^7.9.0",
"@babel/plugin-transform-runtime": "^7.10.5",
"@babel/preset-env": "^7.9.5",
"@babel/preset-react": "^7.9.4",
"@babel/preset-typescript": "^7.13.0",
"@welldone-software/why-did-you-render": "^6.1.1",
"babel-loader": "^8.1.0",
"babel-plugin-root-import": "^6.5.0",
"clean-webpack-plugin": "^3.0.0",
"cross-env": "^7.0.2",
"file-loader": "^6.0.0",
"html-webpack-plugin": "^4.2.0",
"react-hot-loader": "^4.12.21",
"sass": "^1.26.5",
"sass-loader": "^8.0.2",
"typescript": "^4.2.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11",
"webpack-dev-server": "^3.10.3"
},
"dependencies": {
"@babel/runtime": "^7.10.5",
"@reach/disclosure": "^0.10.5",
"@reach/menu-button": "^0.10.5",
"@reach/tabs": "^0.10.5",
"@tlon/indigo-light": "^1.0.5",
"@tlon/indigo-react": "^1.2.8",
"bitcoinjs-lib": "^5.2.0",
"bs58check": "^2.1.2",
"buffer": "^6.0.3",
"classnames": "^2.2.6",
"css-loader": "^3.5.3",
"formik": "^2.2.0",
"fs-extra": "^8.1.0",
"lodash": "^4.17.11",
"markdown-to-jsx": "^7.0.1",
"moment": "^2.20.1",
"mousetrap": "^1.6.3",
"mv": "^2.1.1",
"promise": "^8.0.3",
"prompt": "^1.0.0",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-router-dom": "^5.0.0",
"replace-in-file": "^4.1.1",
"style-loader": "^1.2.1",
"styled-components": "^5.2.0",
"styled-system": "^5.1.5",
"urbit-key-generation": "^0.18.0",
"urbit-ob": "^5.0.0",
"urbit-sigil-js": "^1.3.13"
},
"resolutions": {
"natives": "1.1.3"
}
}

View File

@ -0,0 +1,52 @@
import _ from 'lodash';
class UrbitApi {
setAuthTokens(authTokens) {
this.authTokens = authTokens;
this.bindPaths = [];
}
bind(path, method, ship = this.authTokens.ship, appl = "btc-wallet", success, fail) {
this.bindPaths = _.uniq([...this.bindPaths, path]);
window.subscriptionId = window.urb.subscribe(ship, appl, path,
(err) => {
fail(err);
},
(event) => {
success({
data: event,
from: {
ship,
path
}
});
},
(err) => {
fail(err);
});
}
btcWalletCommand(data) {
this.action("btc-wallet", "btc-wallet-command", data);
}
action(appl, mark, data) {
return new Promise((resolve, reject) => {
window.urb.poke(ship, appl, mark, data,
(json) => {
resolve(json);
},
(err) => {
reject(err);
});
});
}
scry(app, path) {
return fetch(`/~/scry/${app}/${path}.json`).then(r => r.json());
}
}
export let api = new UrbitApi();
window.api = api;

View File

@ -0,0 +1,63 @@
import React, { Component } from 'react';
import { BrowserRouter, Route } from "react-router-dom";
import _ from 'lodash';
import { api } from '../api.js';
import { store } from '../store.js';
import styled, { ThemeProvider, createGlobalStyle } from 'styled-components';
import light from './themes/light';
import dark from './themes/dark';
import { Text, Box } from '@tlon/indigo-react';
//import StartupModal from './lib/startupModal.js';
//import Header from './lib/header.js'
//import Balance from './lib/balance.js'
//import Transactions from './lib/transactions.js'
export class Root extends Component {
constructor(props) {
super(props);
this.ship = window.ship;
this.state = store.state;
store.setStateHandler(this.setState.bind(this));
}
componentDidUpdate(){
console.log('state', this.state);
}
render() {
return (
<BrowserRouter>
<ThemeProvider theme={light}>
{// <StartupModal api={api} state={this.state}/> }
<Box display='flex'
flexDirection='column'
position='absolute'
alignItems='center'
backgroundColor='lightOrange'
height='100%'
width='100%'
px={[0,4]}
pb={[0,4]}
>
<Box
display='flex'
flexDirection='column'
height='100%'
width='400px'
>
{ /*
<Header />
<Balance state={this.state}/>
<Transactions state={this.state}/>
*/ }
</Box>
</Box>
</ThemeProvider>
</BrowserRouter>
)
}
}

View File

@ -0,0 +1,11 @@
import _ from 'lodash';
export class InitialReducer {
reduce(json, state) {
console.log('json', json);
let data = _.get(json, 'initial', false);
console.log('data', data);
if (data) {
}
}
}

View File

@ -0,0 +1,7 @@
import _ from 'lodash';
export class UpdateReducer {
reduce(json, state) {
}
}

View File

@ -0,0 +1,34 @@
import { InitialReducer } from './reducers/initial';
import { UpdateReducer } from './reducers/update';
class Store {
constructor() {
this.state = {
providerPerms: {},
provider: true,
hasWallet: true,
wallet: {},
};
this.initialReducer = new InitialReducer();
this.updateReducer = new UpdateReducer();
this.setState = () => { };
}
setStateHandler(setState) {
this.setState = setState;
}
handleEvent(data) {
let json = data.data;
console.log(json);
this.initialReducer.reduce(json, this.state);
this.updateReducer.reduce(json, this.state);
this.setState(this.state);
}
}
export let store = new Store();
window.store = store;

View File

@ -0,0 +1,29 @@
import { api } from './api';
import { store } from './store';
export class Subscription {
start() {
if (api.authTokens) {
this.initializeBtcWallet();
} else {
console.error("~~~ ERROR: Must set api.authTokens before operation ~~~");
}
}
initializeBtcWallet() {
api.bind('/all', 'PUT', api.authTokens.ship, 'btc-wallet',
this.handleEvent.bind(this),
this.handleError.bind(this));
}
handleEvent(diff) {
store.handleEvent(diff);
}
handleError(err) {
console.error(err);
this.initializeBtcWallet();
}
}
export let subscription = new Subscription();