Forked from PSF version of the repo

This commit is contained in:
Chris Troutner
2022-02-05 16:46:25 -08:00
commit 5ff198c391
25 changed files with 63770 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
FEE=1.5
+1
View File
@@ -0,0 +1 @@
FEE=1.5
+13
View File
@@ -0,0 +1,13 @@
{
"extends": "standard",
"env": {
"node": true,
"mocha": true
},
"parserOptions": {
"ecmaVersion": 10
},
"rules": {
"no-unused-vars": "off"
}
}
+76
View File
@@ -0,0 +1,76 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# dotenv environment variable files
.env*
# gatsby files
.cache/
public
# Mac files
.DS_Store
# Yarn
yarn-error.log
.pnp/
.pnp.js
# Yarn Integrity file
.yarn-integrity
android/
resources/android/
# Explit files to keep
!.env.development
!.env.production
+4
View File
@@ -0,0 +1,4 @@
.cache
package.json
package-lock.json
public
+5
View File
@@ -0,0 +1,5 @@
{
"arrowParens": "avoid",
"semi": false,
"no-unused-vars": false
}
+33
View File
@@ -0,0 +1,33 @@
# This is a node.js v8+ JavaScript project
language: node_js
node_js:
- "10"
# Build on Ubuntu Trusty (14.04)
# https://docs.travis-ci.com/user/reference/trusty/#javascript-and-nodejs-images
dist: xenial
sudo: required
# Use Docker
services:
- docker
before_install:
#- npm install -g mocha
# https://github.com/greenkeeperio/greenkeeper-lockfile/issues/156
#install: case $TRAVIS_BRANCH in greenkeeper*) npm i;; *) npm ci;; esac;
install:
- npm install
script: "npm run test"
# Send coverage data to Coveralls
after_success:
- npm run coverage
deploy:
provider: script
skip_cleanup: true
script:
- npx semantic-release && ./deploy-production.sh
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Permissionless Software Foundation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+9
View File
@@ -0,0 +1,9 @@
# wallet.fullstack.cash
This is the front end [GatsbyJS](https://www.gatsbyjs.org) based website that runs [wallet.fullstack.cash](https://wallet.fullstack.cash). This site is based on the [bch-wallet-starter](https://github.com/Permissionless-Software-Foundation/bch-wallet-starter) Gatsby Starter, and includes the [gatsby-plugin-bch-sweep](https://github.com/Permissionless-Software-Foundation/gatsby-plugin-bch-sweep) Gatsby Plugin for sweeping BCH and tokens from a paper wallet.
## Android App
This wallet app has been compiled into an Android app that can be side-loaded onto a phone. It's not available in the Play store. Sideloading the APK file is the only way to install this wallet as a native app.
- [wallet.fullstack.cash.apk](./wallet.fullstack.cash.apk)
## License
[MIT](./LICENSE.md)
+14
View File
@@ -0,0 +1,14 @@
{
"appId": "com.example.app",
"appName": "wallet.fullstack.cash",
"bundledWebRuntime": false,
"npmClient": "npm",
"webDir": "public",
"plugins": {
"SplashScreen": {
"launchShowDuration": 0
}
},
"cordova": {},
"linuxAndroidStudioPath": "/home/trout/work/android/android-studio/bin/studio.sh"
}
+13
View File
@@ -0,0 +1,13 @@
# Triggers a webhook to update the server
#!/bin/bash
#echo $DEPLOY_SECRET
echo "Deploy to production...."
export DATA="{\"ref\":\"$DEPLOY_SECRET\"}"
#echo $DATA
curl -X POST http://fullstack.cash:9000/hooks/wallet.fullstack.cash -H "Content-Type: application/json" -d $DATA
echo "...Finished deploying to production."
+26
View File
@@ -0,0 +1,26 @@
/**
* Configure your Gatsby site with this file.
*
* See: https://www.gatsbyjs.org/docs/gatsby-config/
*/
module.exports = {
/* Your site config here */
plugins: [
'fullstack-gatsby-theme-bch-wallet',
// 'bch-wallet-plugin-postoffice',
// {
// resolve: 'gatsby-plugin-compile-es6-packages',
// options: {
// modules: ['bch-wallet-plugin-postoffice']
// }
// },
// require.resolve('/home/trout/work/psf/gatsby-plugin-bch-sweep')
'gatsby-plugin-bch-sweep',
'gatsby-plugin-bch-create-token'
],
// https://www.gatsbyjs.com/docs/reference/release-notes/v2.28/#feature-flags-in-gatsby-configjs
flags: {
DEV_SSR: false
}
}
+63122
View File
File diff suppressed because it is too large Load Diff
+64
View File
@@ -0,0 +1,64 @@
{
"name": "wallet.fullstack.cash",
"description": "A Gatsby IPFS-enabled web app and BCH web wallet.",
"version": "1.0.0",
"license": "MIT",
"author": "Chris Troutner <chris.troutner@gmail.com>",
"contributors": [
"Daniel Gonzalez <danielhumgon@gmail.com>",
"Andre Cabrera <andrecabrera@protonmail.ch>"
],
"scripts": {
"build": "gatsby build",
"build:ipfs": "gatsby build --prefix-paths",
"android:setup": "npx cap add android; npx cap update android; npx cap update android; npx cap copy android; capacitor-resources -p android",
"android:open": "npx cap open android",
"develop": "gatsby develop",
"lint": "standard --env mocha --fix",
"start": "npm run develop",
"serve": "gatsby serve",
"clean": "gatsby clean",
"test": "npm run lint"
},
"dependencies": {
"@capacitor/android": "2.4.6",
"@capacitor/cli": "2.4.6",
"@capacitor/core": "2.4.6",
"gatsby": "4.4.0",
"gatsby-plugin-bch-create-token": "1.1.1",
"gatsby-plugin-bch-sweep": "1.5.5",
"fullstack-gatsby-theme-bch-wallet": "1.0.1"
},
"repository": {
"type": "git",
"url": "https://github.com/Permissionless-Software-Foundation/wallet.fullstack.cash"
},
"bugs": {
"url": "https://github.com/Permissionless-Software-Foundation/wallet.fullstack.cash/issues"
},
"devDependencies": {
"capacitor-resources": "2.0.5",
"eslint": "7.24.0",
"eslint-config-prettier": "8.2.0",
"eslint-config-standard": "16.0.2",
"eslint-plugin-prettier": "3.4.0",
"eslint-plugin-standard": "5.0.0",
"husky": "4.3.8",
"mocha": "9.1.3",
"semantic-release": "17.4.2",
"standard": "16.0.3"
},
"release": {
"publish": [
{
"path": "@semantic-release/npm",
"npmPublish": false
}
]
},
"husky": {
"hooks": {
"pre-commit": "npm run lint"
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

+147
View File
@@ -0,0 +1,147 @@
/*
About
*/
import React from 'react'
import { Row, Col, Content, Box } from 'adminlte-2-react'
class About extends React.Component {
render () {
return (
<Content
title='About'
subTitle=''
browserTitle='About | wallet.fullstack.cash'
>
<Row>
<Col xs={12}>
<Box
title='wallet.fullstack.cash'
type='primary'
closable
collapsable
>
<p>
This is the official web wallet provided by{' '}
<a
href='https://fullstack.cash'
target='_blank'
rel='noopener noreferrer'
>
FullStack.cash
</a>
. You can access this web wallet over Tor and IPFS. See the
links in the footer at the bottom of the page.
</p>
<p>
This wallet app can be used as a normal wallet, but it's real
purpose is to serve as 'boilerplate' application that JavaScript
developers can fork and customize to build their own ideas.
Learn more about the code and infrastructure powering this
wallet at{' '}
<a
href='https://fullstack.cash'
target='_blank'
rel='noopener noreferrer'
>
FullStack.cash
</a>{' '}
Please solicit feedback on this app in our{' '}
<a
href='https://t.me/bch_js_toolkit'
target='_blank'
rel='noopener noreferrer'
>
Telegram Channel
</a>
</p>
<p>
The code for this web wallet can be found{' '}
<a
href='https://github.com/Permissionless-Software-Foundation/wallet.fullstack.cash'
target='_blank'
rel='noopener noreferrer'
>
on GitHub
</a>
. It's based on the{' '}
<a
href='https://github.com/Permissionless-Software-Foundation/bch-wallet-starter'
target='_blank'
rel='noopener noreferrer'
>
bch-wallet-starter Gatsby Starter
</a>
, the{' '}
<a
href='https://github.com/Permissionless-Software-Foundation/gatsby-ipfs-web-wallet'
target='_blank'
rel='noopener noreferrer'
>
gatsby-ipfs-web-wallet Gatsby Theme
</a>
, and the{' '}
<a
href='https://github.com/Permissionless-Software-Foundation/minimal-slp-wallet'
target='_blank'
rel='noopener noreferrer'
>
minimal-slp-wallet
</a>{' '}
wallet engine. We encourage other businesses to copy and modify
the wallet code for their own use.
</p>
<p>
This wallet has full support for Bitcoin Cash (BCH) and eCash
(BCHA) blockchains. That includes SLP tokens, including
nonfungible tokens (NFT) on both blockchains. When a transaction
is made with this wallet, an output of 2000 satoshis is added.
This is a convenience fee that goes towards burning PSF tokens.
It helps support the developers who work on this web wallet and
other software sponsored by the{' '}
<a
href='https://psfoundation.cash'
target='_blank'
rel='noopener noreferrer'
>
Permissionless Software Foundation
</a>
.
</p>
<p>
This app can be compiled into a native Android or iOS app using{' '}
<a
href='https://react-freelancer.ch/blog/build-mobile-apps-using-gatsby-and-capacitor'
target='_blank'
rel='noopener noreferrer'
>
Capacitor
</a>
. The Android APK for this app can be{' '}
<a
href='https://github.com/Permissionless-Software-Foundation/wallet.fullstack.cash'
target='_blank'
rel='noopener noreferrer'
>
downloaded from the GitHub repository
</a>
. But, the Android app will run into rate limits unless you add
a JWT token from FullStack.cash into the Configuration View. We
don't actively support use of this web app as a phone app, but
instead provide the APK as proof
that other businesses can fork this wallet app to kick-off
development of their own phone app.
</p>
</Box>
</Col>
</Row>
</Content>
)
}
}
export default About
+39
View File
@@ -0,0 +1,39 @@
/*
This is a demonstration component. It helps to show how you can create new
menu items and Views in your own BCH web wallet dashboard app.
This file controls the View (the part on the right side of the dashboard) of
the component. The menu item is controlled by the menu-components.js file.
*/
import React from 'react'
import { Row, Col, Content, Box, Button } from 'adminlte-2-react'
class DemoComponent extends React.Component {
render () {
return (
<Content
title='Demo Component'
subTitle='Getting started with adminlte-2-react'
browserTitle='Demo Component'
>
<Row>
<Col xs={12}>
<Box
title='A Box'
type='primary'
closable
collapsable
footer={<Button type='danger' text='Danger Button' />}
>
This is the View portion of the Demo Component. This view is
controlled by the src/demo-component/index.js file.
</Box>
</Col>
</Row>
</Content>
)
}
}
export default DemoComponent
@@ -0,0 +1,72 @@
/*
This file is how you add new menu items to your site. It uses the Gatsby
concept of Component Shadowing:
https://www.gatsbyjs.org/blog/2019-04-29-component-shadowing/
It over-rides he default file in the gatsby-ipfs-web-wallet Theme.
*/
import React from 'react'
import { Sidebar } from 'adminlte-2-react'
import Wallet from 'fullstack-gatsby-theme-bch-wallet/src/components/admin-lte/wallet'
import Tokens from 'fullstack-gatsby-theme-bch-wallet/src/components/admin-lte/tokens'
import Configure from 'fullstack-gatsby-theme-bch-wallet/src/components/admin-lte/configure'
import SendReceive from 'fullstack-gatsby-theme-bch-wallet/src/components/admin-lte/send-receive'
import About from '../../about'
import Sweep from 'gatsby-plugin-bch-sweep/src/components/sweep/index'
import CreateToken from 'gatsby-plugin-bch-create-token/src/components/create-token'
const { Item } = Sidebar
const MenuComponents = props => {
return [
{
key: 'Tokens',
component: <Tokens key='Tokens' {...props} />,
menuItem: <Item icon='fas-coins' key='Tokens' text='Tokens' />
},
{
key: 'Send/Receive BCH',
component: <SendReceive key='Send/Receive BCH' {...props} />,
menuItem: (
<Item
icon='fa-exchange-alt'
key='Send/Receive BCH'
text='Send/Receive BCH'
/>
)
},
{
key: 'Sweep',
component: <Sweep key='Sweep' {...props} />,
menuItem: <Item icon='fas-arrow-circle-up' key='Sweep' text='Sweep' />
},
{
key: 'Wallet',
component: <Wallet key='Wallet' interface='rest-api' {...props} />,
// component: <Wallet key="Wallet" interface="consumer-api" {...props} />,
menuItem: <Item icon='fa-wallet' key='Wallet' text='Wallet' />
},
{
key: 'Create Token',
component: <CreateToken key='Create Token' {...props} />,
menuItem: (
<Item icon='fas-plus-square' key='Create Token' text='Create Token' />
)
},
{
key: 'Configure',
component: <Configure key='Configure' {...props} />,
menuItem: <Item icon='fas-cog' key='Configure' text='Configure' />
},
{
key: 'About',
component: <About key='About' {...props} />,
menuItem: <Item icon='fas-question' key='About' text='About' />
}
]
}
export default MenuComponents
@@ -0,0 +1,24 @@
/*
This file is intended to be overwritten. It provides a common place to store
site configuration data.
*/
const config = {
title: 'FullStack.cash',
titleShort: 'PSF',
balanceText: 'BCH Balance',
balanceIcon: 'fab-bitcoin',
// The BCH address used in a memo.cash account. Used for tracking the IPFS
// hash of the mirror of this site.
memoAddr: 'bitcoincash:qq8mk8etntclfdkny2aknh4ylc0uaewalszh5eytnr',
// Footer Information
hostText: 'FullStack.cash',
hostUrl: 'https://fullstack.cash/',
sourceCode: 'https://github.com/Permissionless-Software-Foundation/wallet.fullstack.cash',
torUrl: '6akyufxp2fiyqk5526kwxvas63xo5kag657jlztnaqnemjctkfp2xhid.onion',
clearWebUrl: 'https://wallet.fullstack.cash'
}
module.exports = config
+73
View File
@@ -0,0 +1,73 @@
import React from 'react'
import PropTypes from 'prop-types'
// import { withPrefix, Link } from 'gatsby'
// window && typeof window !== 'undefined' && window.test = 'testing'
export default function HTML (props) {
return (
<html {...props.htmlAttributes}>
<head>
<meta charSet='utf-8' />
<meta httpEquiv='x-ua-compatible' content='ie=edge' />
<meta
name='viewport'
content='width=device-width, initial-scale=1, shrink-to-fit=no'
/>
{/* Loading animation should be loaded very first thing. */}
<div
className='test'
key='loader'
id='___loader'
style={{
alignItems: 'center',
backgroundColor: '#F2F2F2',
display: 'flex',
justifyContent: 'center',
position: 'absolute',
left: 0,
top: 0,
right: 0,
bottom: 0,
zIndex: 9000,
flexDirection: 'column'
}}
>
<img src='https://i.imgur.com/8n8PYAi.gif' alt='' width='250' />
Loading...
</div>
{/* minimal-slp-wallet-web */}
{/* <script src='https://unpkg.com/minimal-slp-wallet@3.6.1' /> */}
<script src='https://unpkg.com/minimal-slp-wallet' />
{/* bch-message-lib */}
<script src='https://unpkg.com/bch-message-lib' />
{/* bch-token-sweep */}
<script src='https://unpkg.com/bch-token-sweep' />
{props.headComponents}
</head>
<body {...props.bodyAttributes}>
{props.preBodyComponents}
<div
key='body'
id='___gatsby'
dangerouslySetInnerHTML={{ __html: props.body }}
/>
{props.postBodyComponents}
</body>
</html>
)
}
HTML.propTypes = {
htmlAttributes: PropTypes.object,
headComponents: PropTypes.array,
bodyAttributes: PropTypes.object,
preBodyComponents: PropTypes.array,
body: PropTypes.string,
postBodyComponents: PropTypes.array
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

+13
View File
@@ -0,0 +1,13 @@
# Manual Testing
This file describes the different manual tests that should be done to 'smoke test' releases of [wallet.FullStack.cash](https://wallet.fullstack.cash).
## Outline
This is a brief outline summary of the manual tests:
- Wallet
- Create a new wallet
- Import a wallet
- Android
- Delete and reinstall app
- Ensure correct app icon appears after install
- Ensure 12-word seed is imported correctly, with correct balances for BCH and tokens.
Binary file not shown.