Giter Club home page Giter Club logo

juggernaut-desktop's Introduction


Juggernaut utilizes the Lightning Network to provide end-to-end encrypted, onion-routed, censorship resistanst, peer-to-peer messaging with native payment capabilities.


Install

Download the latest release for your OS and follow the instructions below.

macOS

Double click the .dmg file and then drag Juggernaut.app into your Applications folder.

Windows

Just double click the .exe file to get started.

Linux

You must first make the file executable and then double click or run via cli ./file.AppImage

Getting Help / Support

If you are having problems with Juggernaut, please report the issue on Github or Telegram with screenshots and how to reproduce the issue.

Requirements

  • LND 0.9.x (or greater) with KeySend Enabled

    How to enable Keysend

    On lnd.conf add :

    • accept-keysend=1

    Or run lnd with this argument:

    • --accept-keysend

    Keysend is currently an experimental feature. Your node will now accept payments from any node on the network without having to provide them with a n invoice first. Note: This is still an experimental feature so please be careful.

Running From Source

  • download the source git clone [email protected]:LN-Juggernaut/juggernaut-desktop.git
  • navigate to project directory cd juggernaut-desktop
  • install dependencies yarn
  • start the project yarn dev

Building From Source

You can run yarn package to build an executable that will be output in the release directory.

Running more than one instance while testing

Currently the only way I've been able to do this for testing is to run one using yarn dev and the other using a built release from yarn package. If anyone knows how to run two separate instances of an electron app in development, please let me know!

Maintainers

License

MIT © Juggernaut

Contributors ✨

Thanks goes to these wonderful people (emoji key):


John Cantrell

💻

Ștefan D. Mihăilă

💻 🎨

curly60e

📖

This project follows the all-contributors specification. Contributions of any kind welcome!

juggernaut-desktop's People

Contributors

allcontributors[bot] avatar curly60e avatar johncantrell97 avatar stefan-mihaila avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

juggernaut-desktop's Issues

Balance Sync

Currently there's an issue where the (confirmed and unconfirmed) balance displayed in the main menu does not update after launching into a wallet. You need to logout and log back in for it to update.

We currently subscribe (via polling) getInfo grpc call that will return updated balance information every 5 seconds. We should add a listener and handler for this event in walletSlice to update this value.

Also remember to remove the listener in walletAPI (disconnectWallet).

To reproduce/test this issue you can:

  1. launch into wallet
  2. note your balance
  3. open or close a channel
  4. check balance again (and after some blocks)

Linux error: The SUID sandbox helper binary was found, but is not configured correctly

When running the appimage I get the error

[33758:0504/194420.968349:FATAL:setuid_sandbox_host.cc(157)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /tmp/.mount_Juggerop9unT/chrome-sandbox is owned by root and has mode 4755. Trace/breakpoint trap

Expected Behavior

Start the appimage, expect something [?]. The app to pop up? ;)

Current Behavior

I chmod +x the appimage, run it, get error as above.

Possible Solution

Compile myself? I am not able to go to that /tmp/ location to set suid, that gets deleted after use...

Steps to Reproduce (for bugs)

  1. wget url/Juggernaut-linux-x86_64-v0.1.2.AppImage

  2. chmod +x ./Juggernaut-linux-x86_64-v0.1.2.AppImage

  3. ./Juggernaut-linux-x86_64-v0.1.2.AppImage

  4. Get error

Context

App does not run.

Your Environment

  • Node version : Not sure, do not think I have node on this system.

  • Version or Branch used : release v0.1.2

  • Operating System and version :CentOS Linux release 7.8.2003 (Core) / 3.10.0-1062.9.1.el7.x86_64

  • Link to your project :N/A

Windows Code Signing

We currently support code signing for mac releases. I have finally received a code signing certificate for windows. Need to get it setup as part of the build and release process.

Groups

I was thinking, how about adding groups, how difficult could be?
I know this is new, but if all want to move from Signal, Telegram, and all other chat to this "Groups" should be cool to add.

long alias needs better display

For people with really long aliases we need to truncate them (overflow: ellipsis; maybe?) in the ConversationListItem view. It covers the timestamp and looks bad.

Cannot connect to node due to password error

Expected Behavior

Expected to be able to connect. LNCONNECT URI works - but it is requesting a password?

Current Behavior

image

Context

I have tried all of my passwords for this node - wallets, users, etc... nothing seems to work here. What password is it requesting?

Your Environment

  • Node version : lncli version 0.13.1-beta commit=v0.13.1-beta
  • Operating System and version : OS X

Create Lightning Invoices

We need a screen for someone to generate a lightning invoice. Will need to set amount of satoshis and optional memo as a starting point.

Once the invoice is generated we should display information about the invoice including a qr code and a way to copy invoice to clipboard.

failure to launch

If a node you are trying to launch into is offline or you can't connect for any reason you will be stuck with an infinite spinner and the only way to get out of this is to restart the app. We should handle this with either an error message somewhere. Ideally this would be shown in a dialog alert popup but I can't remember if the queue is available outside of the main chat ui. Alternatively, an error message on the wallet list screen is probably sufficient.

MacOS Cannot read property show of null

Expected Behavior

In MacOS if I close the app by clicking the x (which minimizes the app) and then reopening it again the app should be displayed

Current Behavior

Instead of the app reappearing, the following error occurs:
image

Possible Solution

Steps to Reproduce (for bugs)

  1. Open App

  2. Close app by clicking x

  3. Re-open app

Context

Download 0.1.1 release

Your Environment

Release: 0.1.1
OS: MacOS 10.15.3

Relax Message Validation

Would be great to get the message validation relaxed so that other chat interfaces con talk with Juggernaut.

Notifications

I don't see coming notifications when I receive messages.
That should be a cool feature to add.

Cleanup Github / Boilerplate

There are some remnants of the electron-react-boilerplate project lingering around that should be cleaned up. Things like CODE_OF_CONDUCT.md, README, and .github directory.

internationalization

This is a big one but better to get it done sooner rather than later. Currently all strings in the application are hardcoded in english. Need to pick one of the popular react intl libraries and extract all strings to a config for english with the ability to add translations easily. Part of this should also be setting up a process for getting translations done for other languages.

Protocol Handlers

We should support handling bitcoin and lightning protocol urls. Electron can register as a handler for certain protocols as part of its build process. We can listen for these handlers and surface them in the renderer via IPC from the main process.

This will likely need to be added once we already have the ability to pay/create invoices and send bitcoin to addresses in the product.

Depends on #38 and #39

Emojis

The messenger already supports unicode characters (🚀) if you copy and paste them from somewhere else. I think it would be a fun feature to add a little emoji menu panel either next to the + or next to the lightning send icon to easily add them to your message.

Fix the "File" Menus

As part of being a native desktop app you have control over the "File", "Edit", "Help" menus. We should figure out what makes sense to put in these or at least remove the defaults that electron ships with until we figure out what makes sense.

Long Message Breaks the UI

If you send a really long message the UI is broken making it very hard to move around the application.

Expected Behavior

Long messages should appear as normal

Current Behavior

Long messages overflow and break the UI

Possible Solution

Having a max-width on the message container can maybe solve this. Or a max message length but not ideal

Steps to Reproduce (for bugs)

Write a really long message

Send really long message

Connect to Umbrel node (LND 0.13.1) get wallet locked

Jugernaut v 0.1.2 + Umbrel (lnd 0.13.1)= wallet locked

Expected Behavior

I have Juggernaut configured with my Umbrel node, working just fine.
Updated Umbrel with latest version that contain lnd 0.13.1 and now is not connecting anymore.

Current Behavior

asking for password, and result is "wallet locked"
RTL/Thunderhub/Zeus, umbrel dashboard all OK, wallet open
Zap desktop connected to node also was wallet locked. I updated Zap (that contain now lnd 0.13.1) and worked.

Possible Solution

update Juggernaut to use lnd 0.13.1

Open Channel From Conversation

If you want to open a channel with someone you already have a conversation with you currently have to open the list of nodes and then search and try to find them by alias. It would be nice if in the conversation menu (adjust fee limit, delete conversation) we added a new option to open a channel. This should take them directly to the open channel form with their node as the remote/destination node.

Desktop Notifications

We will want to notify a user of incoming transactions, channel events, and messages via desktop notifications. Electron makes this easy to implement. I think we will want these to be controlled via settings in the settings page described in #41

I would not want to release this with them enabled by default and without the ability to disable them. Would be too annoying for a lot of users (imo)

Node Share on chat

Be able to share full node address on messages (+ button) with the other side, and maybe add a button on the other side shared "Open a channel with this node"

Emoji Picker Category selector doesn't work

We are using css to hide the category picker provided by emoji-mart plugin. There appears to be an issue with how we are rendering the picker inside of a popup menu causing the category functionality to break.

The category buttons do not work unless you select an emoji first. Once an emoji is selected the category picker begins to work properly.

I also noticed if I set the picker menu hardcoded to open always instead of based on the emojiMenuOpen variable this issue doesn't exist.

This is pretty low priority issue.

Pay / Send Money

This should be a screen that lets someone pay a lightning invoice or pay to a bitcoin address. We should parse the Bolt11 request and display some information about the payment before sending.

If they pay to a bitcoin address then we will need to let them select how much to send (+probably some kind of fee, target confirmations, urgency selector).

Might as well think about how we would support keysend payments here. Insert a node pubkey and an amount and let them send a payment. Some point would be cool to let them set custom record data here as well.

Links in messages

Juggernaut should detect links in messages and present a clickable option to visit the site. Well, I guess there are some security implications also when any stranger on the lightning network can send you links, so maybe should we handle that somehow, either by disabling links from untrusted contacts or adding an option in the future settings menu?

What about link previews?

amount ... pBTC not expressible in msat

Prerequisites

  • Using yarn
  • Using node 10.x
  • Using an up-to-date master branch
  • Using latest version of devtools. See wiki for howto update
  • Link to stacktrace in a Gist (for bugs)
  • For issue in production release, devtools output of DEBUG_PROD=true yarn build && yarn start
  • Tried solutions mentioned in #400

Expected Behavior

I should be able to use my node with correct lndconnect string

Current Behavior

My node is correctly added, but after clicking Launch I get "unable to decode payment request: amount ... pBTC not expressible in msat"

Screenshot 2020-04-20 at 23 52 16

Your Environment

  • Node version : v13.12.0
  • Version or Branch used : Release Version 0.1.1 (0.1.1)
  • Operating System and version : macOS Catalina
  • lnd: 0.10.0-beta.rc2

my lnd works fine with Zap desktop and mobile using same lndconnect string

Viewing messages -->SendMany

I found an issue if you use both programs, I cannot see some of the messages sended or received from SendMany. And some I sent from my Raspberry I now they are gone if I load the program from Windows.

image

image

Transaction / Invoice / Payment List

As a functional wallet we will need a transaction list screen where someone can view all of the transactions relevant to the wallet.

This should include on-chain btc tx send/receive, lightning invoices, and lightning payments. This list will probably need this list to be filterable by type and searchable in some fashion as well.

Key information is date/time of when it happened, the amount in satoshis, some kind of label, and type.

We will definitely want to have 'keysend' or 'messages' as a filter that is by default removed from the list as to not clog this view up with potentially hundreds or thousands of 1 satoshi payments generated from messages.

Can look to Zap or other lightning wallets for some inspiration here.

Open channel remote balance clarification

Since users have the possibility to set the remote balance, I think Juggernaut should make it extra clear of what remote balance means, otherwise users might not realise that they're actually sending sats to the other side when doing this.

Maybe it would actually make sense at a point in the future to not show some things in the UI, like the remote balance and target confirmations, unless the user enables an "Advanced" mode in settings.

`yarn` fails

Prerequisites

  • Using yarn
  • Using node 10.x
  • [x ] Using an up-to-date master branch
  • Using latest version of devtools. See wiki for howto update
  • Link to stacktrace in a Gist (for bugs)
  • For issue in production release, devtools output of DEBUG_PROD=true yarn build && yarn start
  • Tried solutions mentioned in #400

Expected Behavior

yarn installs deps

Current Behavior

yarn
yarn install v1.22.4
[1/5] 🔍  Validating package.json...
[2/5] 🔍  Resolving packages...
success Already up-to-date.
$ yarn build-dll && electron-builder install-app-deps
yarn run v1.22.4
$ webpack -r @babel/register --config webpack/webpack.config.dll.js
/Users/cypherpunk/juggernaut-desktop/node_modules/webpack-cli/bin/cli.js:93
				throw err;
				^

Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main resolved in /Users/cypherpunk/juggernaut-desktop/node_modules/@babel/helper-compilation-targets/package.json
    at applyExports (internal/modules/cjs/loader.js:524:9)
    at resolveExports (internal/modules/cjs/loader.js:541:12)
    at Function.Module._findPath (internal/modules/cjs/loader.js:661:22)
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:963:27)
    at Function.Module._load (internal/modules/cjs/loader.js:859:27)
    at Module.require (internal/modules/cjs/loader.js:1036:19)
    at require (/Users/cypherpunk/juggernaut-desktop/node_modules/webpack-cli/node_modules/v8-compile-cache/v8-compile-cache.js:161:20)
    at Object.<anonymous> (/Users/cypherpunk/juggernaut-desktop/node_modules/@babel/preset-env/lib/debug.js:8:33)
    at Module._compile (/Users/cypherpunk/juggernaut-desktop/node_modules/webpack-cli/node_modules/v8-compile-cache/v8-compile-cache.js:192:30)
    at Module._compile (/Users/cypherpunk/juggernaut-desktop/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:1167:10)
    at Object.newLoader [as .js] (/Users/cypherpunk/juggernaut-desktop/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:996:32)
    at Function.Module._load (internal/modules/cjs/loader.js:896:14)
    at Module.require (internal/modules/cjs/loader.js:1036:19)
    at require (/Users/cypherpunk/juggernaut-desktop/node_modules/webpack-cli/node_modules/v8-compile-cache/v8-compile-cache.js:161:20)
    at Object.<anonymous> (/Users/cypherpunk/juggernaut-desktop/node_modules/@babel/preset-env/lib/index.js:11:14)
    at Module._compile (/Users/cypherpunk/juggernaut-desktop/node_modules/webpack-cli/node_modules/v8-compile-cache/v8-compile-cache.js:192:30)
    at Module._compile (/Users/cypherpunk/juggernaut-desktop/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:1167:10)
    at Object.newLoader [as .js] (/Users/cypherpunk/juggernaut-desktop/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:996:32)
    at Function.Module._load (internal/modules/cjs/loader.js:896:14)
    at Module.require (internal/modules/cjs/loader.js:1036:19)
    at require (/Users/cypherpunk/juggernaut-desktop/node_modules/webpack-cli/node_modules/v8-compile-cache/v8-compile-cache.js:161:20)
    at requireModule (/Users/cypherpunk/juggernaut-desktop/node_modules/@babel/core/lib/config/files/plugins.js:165:12)
    at loadPreset (/Users/cypherpunk/juggernaut-desktop/node_modules/@babel/core/lib/config/files/plugins.js:83:17)
    at createDescriptor (/Users/cypherpunk/juggernaut-desktop/node_modules/@babel/core/lib/config/config-descriptors.js:154:9)
    at /Users/cypherpunk/juggernaut-desktop/node_modules/@babel/core/lib/config/config-descriptors.js:109:50
    at Array.map (<anonymous>) {
  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

Possible Solution

Steps to Reproduce (for bugs)

  1. git clone

  2. cd

  3. yarn

Context

Your Environment

  • Node version : v13.12.0
  • Version or Branch used : master
  • Operating System and version : MacOS Catalina
  • Link to your project :

LND 0.10.x support

There have been breaking changes to the router.SendPayment grpc subservice that Juggernaut uses to send messages. I haven't tested this yet but I believe what happens is that your message sends successfully but either you get an error message or it spins indefinitely.

I believe it has something to do with the streaming response of the call not triggering the same success state as before (or maybe it triggers error flow even though there wasn't actually an error).

This will require a little investigation to figure out exactly what happens with the (data, status, error) callbacks when you send a payment.

We also want to make sure whatever fix we put in place doesn't break 0.9.x support.

User Settings

We will need a user settings screen. These will probably end up being specific to a certain wallet/node instead of completely global.

We can maybe start with something like default satoshis (or millisatoshis) to send with each message. Open to ideas that make sense to include here.

If we have #17 done then could have a language selection in here.

I think this will be more useful once we add in some notifications (incoming transactions, channel events, messages received, etc). Not everyone will want these notifications so they should be controlled via this settings page.

Dark Mode

It will be cool to add a Dark Mode.

Could not connect to your node with those details

After upgrading my raspiblitz, I should now be able to use juggernaut with it. But when I enter all the information, and click the save button, I get the error: "Could not connect to your node with those details"
I tried all three Macaroons that I got from the raspiblitz (admin, invoice, readonly).
I tried pasting the macaroon and tls cert as hex into the fields as well as scp from the raspi and enter the file names into the fields.
I was not sure what to use for port. So I tried with 10009, 8080, 9735 and without specifying a port.

Expected Behavior

It should establish a connection with the node.

Current Behavior

I get the error: "Could not connect to your node with those details"

Your Environment

Node: https://github.com/rootzoll/raspiblitz
RaspiBlitz v1.5
bitcoin v0.19.1
LND 0.9.2-beta
The public address of the lightning node is an onion address
Accept Keysend is enabled

Client: Ubuntu 18.04
Juggernaut-linux-x86_64-v0.1.1.AppImage

Both on the same subnet

Search Messages

Currently the search only searches your conversation list. Seems like most people would want this to also search your messages. We currently are not building any kind of index from the set of messages, they all just live in the indexedDB.

Simplest approach would be to just query over all messages where the search query is contained in the content. This will likely be pretty slow as the number of messages increases and also doesn't allow for surfacing 'similar' content to your search (off by some distance).

At some point I had implemented https://github.com/nextapps-de/flexsearch in the project to search aliases/pubkeys but in the end I removed it for a simpler approach.

We would probably want to use something like that for a real search but open to ideas here.

I assume we would also not want to rebuild the index every time we open the app though that might be the simplest way to start. Flexsearch and most of these libraries allow you to export/import the index to a file that we could use to initialize on start.

Channel Details View

We should have a view that shows all sorts of details you might want to see about each channel you have open. Can look to all the other lightning wallets for ideas here.

Spinner missing while paying payment request

When I was testing on a local polar network payments happen so fast so it's hard to notice this but on mainnet payments can be much slower. When you click the pay button on a payment request it turns into just an empty yellow circle while you are paying it. This should probably show a spinner while it is pending.

Sent Messages From Other Machines Missing

If you run Juggernaut on more than one machine you will be missing sent messages on the devices you did not send them from.

On wallet launch we only fetch sentMessages on the FIRST launch of the wallet. The reason was that I assumed you would only ever have one client and therefore when you send a message we would always capture it.

The simplest fix is to just import all sent messages on every launch of the wallet. There are unique constraints on the database so there won't be duplicate messages but it's potentially a lot of processing each launch. There's currently no way to filter for messages after some date / settle_index / some other id and we'd be forced to fetch all messages.

In LND 0.10 they introduced "fake" paging for listPayments. We could use this on 0.10 and stop fetching the next page anytime we reach a message we already have. This reminds me we also need to figure out a good solution for handling features that are only available in certain versions of LND while still supporting multiple versions.

The other way to fix this would be to add a 'sync / refresh' messages button that a user can click that will initiate the sync. This solution has the benefit of not needing to sync all payments on every launch of the wallet for users who are only using 1 client.

I guess the ultimate solution would be to have a toggle on whether or not they want to sync on every launch (if they use multiple clients often then they would turn this on) and include a manual sync somewhere in settings (that we don'e have).

Thoughts on how we should solve this as at least a temporary solution until we have user settings?

Browser Extension

Would it be possible to create a browser extension for juggernaut that may also connect with the desktop app? It would be really cool if you could use juggernaut to replace joule. In a lot of ways this feels reminiscent to AOL’s AIM, but the new frontier. Use juggernaut to chat with friends, to serve as your login tool for websites and pay invoices for lightning enabled websites.

Contacts

Allow someone to create and manage a contact list. They can add things like name, avatar, twitter handle, etc and associate it with a certain pubkey. This will enable a better UI for people who want to manage a list of people they talk to (instead of dealing with potentially long / unclear pubkeys or aliases). This will also enable features like 'only allow messages from contacts' or maybe in the future 'charge people more to receive messages unless they are in my contacts', etc.

It's both a UI enhancement and a way to whitelist certain nodes.

Recommended Nodes

It's hard to take a stance on "recommended" nodes as an open source project but for new users it's really difficult to figure out who they should open channels with. In the current implementation we sort the list of nodes based on some calculated metrics (fee rate, liquidity, network reachability, etc).

It probably makes sense to run or identify some good "messenger" nodes. I want to stand up at least one solid and extremely low fee "juggernaut" node that people can use. There are some other obvious suggestions if people need good nodes for "payments". (Zap, Yalls, Bitrefill, etc)

Curious to hear what people think about these ideas but I like the idea because it simplifies onboarding for new users while still allowing people to do what they want.

Download Mirror for Asia

Suggest to add a list of download mirrors (especially for Asia) as github downloads for both Windows and Linux appear incredibly slow (even on a 1 gbps fibre link in Singapore)
Current estimates:

  • Linux: 12 hrs
  • Windows: 2-4 hrs

Usually, this would not take more than 30 sec...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.