* Add exclusion constraint to prevent duplicate items within 10m
* Fix missing extension
* More user-friendly error message
* Use MD5 for slightly better performance
* Always use MD5 for columns of type TEXT
* shift constraint into the future
---------
Co-authored-by: k00b <k00b@stacker.news>
* Use same naming scheme between ln containers and env vars
* Add router_lnd container
* Only open channels to router_lnd
* Use 1sat base fee and 0ppm fee rate
* Add script to test routing
* Also fund router_lnd wallet
* Receiver fallbacks
* Rename to predecessorId
* Remove useless wallet table join
* Missing renaming to predecessor
* Fix payment stuck on sender error
We want to await the invoice poll promise so we can check for receiver errors, but in case of sender errors, the promise will never settle.
* Don't log failed forwards as sender errors
* fix check for receiver error
---------
Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
Co-authored-by: k00b <k00b@stacker.news>
* Inject wallet logger interface
* Include method in NWC logs
* Fix wrong page total
* Poll for new logs every second
* Fix overlapping pagination
* Remove unused total
* Better logs for incoming payments
* Use _setLogs instead of wrapper
* Remove inconsistent receive log
* Remove console.log from wallet logger on server
* Fix missing 'wallet detached' log
* Fix confirm_withdrawl code
* Remove duplicate autowithdrawal log
* Add context to log
* Add more context
* Better table styling
* Move CSS for wallet logs into one file
* remove unused logNav class
* rename classes
* Align key with second column
* Fix TypeError if context empty
* Check content-type header before calling res.json()
* Fix duplicate 'failed to create invoice'
* Parse details from LND error
* Fix invalid DOM property 'colspan'
* P2P zap logs with context
* Remove unnecessary withdrawal error log
* the code assignment was broken anyway
* we already log withdrawal errors using .catch on payViaPaymentRequest
* Don't show outgoing fee to receiver to avoid confusion
* Fix typo in comment
* Log if invoice was canceled by payer
* Automatically populate context from bolt11
* Fix missing context
* Fix wrap errors not logged
* Only log cancel if client canceled
* Remove unused imports
* Log withdrawal/forward success/error in payment flow
* Fix boss not passed to checkInvoice
* Fix TypeError
* Fix database timeouts caused by logger
The logger shares the same connection pool with any currently running transaction.
This means that we enter a classic deadlock when we await logger calls: the logger call is waiting for a connection but the currently running transaction is waiting for the logger call to finish before it can release a connection.
* Fix cache returning undefined
* Fix typo in comment
* Add padding-right to key in log context
* Always use 'incoming payment failed:'
---------
Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
* cache or remove unecessary calls to lnd
* avoid redundant grpc calls in state machine
* store preimage whenever available
* enhancements post self-code review
* small refinements
* fixes
* fix lnurl-verify
* prevent wallet logger throwing on idb close
* fix promise in race while waiting for payment
* user vault
* code cleanup and fixes
* improve ui
* prevent name collisions between users on the same device
* some improvements
* implement storage migration
* comments and cleanup
* make connect button primary instead of warning
* move show passphrase in new line (improvement for small screen devices)
* make show passphrase field readOnly
* fixes
* fix vault key unsync
* implicit migration
* move device sync under general tab
* fix locally disabled wallets and default wallet selection
* improve text
* remove useless SSR check
* add auth checks
* Rename variables
* Fix missing await
* Refactor local<>vault storage interface
I've changed quite some things here. Attempt of a summary:
* storageKey is now only controlled by useVaultStorageState
I've noticed that dealing with how storage keys are generated (to apply user scope) was handled in two places: the existing wallet code and in the new vault code.
This was confusing and error-prone. I've fixed that by completely relying on the new vault code to generate correct storage keys.
* refactored migration
Migration now simply encrypts any existing local wallets and sends them to the server. On success, the local unencrypted version is deleted.
The previous code seemed to unnecessarily generate new local entries prefixed by 'vault:'.
However, since we either use unencrypted local state OR use the encrypted vault on the server for the data, I didn't see any need for these.
Migration seems to work just as well as before.
* removed unnecessary state
In the <DeviceSync> component, enabled & connected were using a unnecessary combo of useState+useEffect.
They were only using variables that are always available during render so simple assignments were enough.
* other minor changes include:
* early returns
* remove unnecessary SSR checks in useEffect or useCallback
* formatting, comments
* remove unnecessary me? to expose possible bugs
* Fix missing dependency for useZap
This didn't cause any bugs because useWallet returns everything we need on first render.
This caused a bug with E2EE device sync branch though since there the wallet is loaded async.
This meant that during payment, the wallet config was undefined.
* Assume JSON during encryption and decryption
* Fix stale value from cache served on next fetches
* Add wallet.perDevice field
This adds 'perDevice' as a new wallet field to force local storage. For example, WebLN should not be synced across devices.
* Remove debug buttons
* Rename userVault -> vault
* Update console.log's
* revert some of the migration and key handling changes. restore debug buttons for testing
* Fix existing wallets not loaded
* Pass in localOnly and generate localStorageKey once
* Small refactor of migration
* Fix wallet drag and drop
* Add passphrase copy button
* Fix priorityOnly -> skipTests
* Disable autocompletion for reset confirmation prompt
* Show wrong passphrase as input error
* Move code into components/device-sync.js
* Import/export passphrase via QR code
* Fix modal back button invisible in light mode
* Fix modal closed even on connect error
* Use me-2 for cancel/close button
* Some rephrasing
* Fix wallet detach
* Remove debug buttons
* Fix QR code scan in dark mode
* Don't allow custom passphrases
* More rephrasing
* Only use schema if not enabled
* Fix typo in comment
* Replace 'generate passphrase' button with reload icon
* Add comment about IV reuse in GCM
* Use 600k iterations as recommended by OWASP
* Set extractable to false where not needed
* use-vault fallbacks to local storage only for anonymous users
* fix localStorage reset on logout
* add copy button
* move reset out of modals
* hide server side errors
* hardened passphrase storage
* do not show passphrase even if hardened storage is disabled (ie. indexeddb not supported)
* show qr code button on passphrase creation
* use toast for serverside error
* Move key (de)serialization burden to get/setLocalKey functions
* password textarea and remove qr
* don't print plaintext vault values into console
---------
Co-authored-by: ekzyis <ek@stacker.news>
Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
Co-authored-by: k00b <k00b@stacker.news>
* reuse boost for jobs
* wip
* allow job stopping
* restore upvote.js
* expire boost
* boost beyond edit window
* fix boost bolt styling
* rank comments with boost
* no random sort for jobs
* top boost for month at top of territory
* boost hints
* more boost help
* squash migrations
* for same boost, prioritize older
* show ad only if active
* fix itemCreate/Update boost expiration jobs
* fix fee button precedence
* Rename vars around edit permission
* Allow anon edits with hash+hmac
* Fix missing time zone for invoice.confirmedAt of comments
* Fix missing invoice update on item update
---------
Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
* Add NWC receives
* Refactor sendPayment+createInvoice with nwcCall function
* Update badge
* Add method support checks
* Add timeout to NWC test invoice
* Fix NWC isConfigured state
All NWC fields are marked as optional but NWC should only be considered configured if one of them is set.
* Fix relay.fetch() throws 'crypto is not defined' in node
nip04.encrypt() was failing in worker because 'crypto is not defined'. Updating to nostr-tools v2.7.2 fixed that.
However, now crypto.randomUUID() in relay.fetch() was throwing 'crypto is not defined'. Importing crypto from 'crypto' fixed that.
However, with the import, randomUUID() does not work so I switched to randomBytes().
Running relay.fetch() now works in browser and node.
* recv must not support pay_invoice
* Fix Relay connection check
* this.url was undefined
* error was an object
* Fix additional isConfigured check runs always
It was meant to only catch false positives, not turn negatives into false positives.
* Rename testConnectServer to testCreateInvoice
* Rename testConnectClient to testSendPayment
* Only run testSendPayment if send is configured
The return value of testSendPayment was used before but it only returned something for LNC.
And for LNC, we only wanted to save the transformation during validation, so it was not needed.
* Always use withTimeout in NWC test functions
* Fix fragment name
* Use get_info command exclusively
* Check permissions more efficiently
* Log NWC request-response flow
* Fix variable name
* Call ws.send after listener is added
* Fix websocket not closed after timeout
* Also check that pay_keysend etc. are not supported
* fix lnc session key save
---------
Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
Co-authored-by: k00b <k00b@stacker.news>
* not-custodial zap scaffolding
* invoice forward state machine
* small refinements to state machine
* make wrap invoice work
* get state machine working end to end
* untested logic layout for paidAction invoice wraps
* perform pessimisitic actions before outgoing payment
* working end to end
* remove unneeded params from wallets/server/createInvoice
* fix cltv relative/absolute confusion + cancelling forwards
* small refinements
* add p2p wrap info to paidAction docs
* fallback to SN invoice when wrap fails
* fix paidAction retry description
* consistent naming scheme for state machine
* refinements
* have sn pay bounded outbound fee
* remove debug logging
* reenable lnc permissions checks
* don't p2p zap on item forward splits
* make createInvoice params json encodeable
* direct -> p2p badge on notifications
* allow no tls in dev for core lightning
* fix autowithdraw to create invoice with msats
* fix autowithdraw msats/sats inconsitency
* label p2p zaps properly in satistics
* add fees to autowithdrawal notifications
* add RETRYING as terminal paid action state
* Update api/paidAction/README.md
Co-authored-by: ekzyis <ek@stacker.news>
* Update api/paidAction/README.md
Co-authored-by: ekzyis <ek@stacker.news>
* Update api/lnd/index.js
Co-authored-by: ekzyis <ek@stacker.news>
* ek suggestions
* add bugetable to nwc card
* get paranoid with numbers
* better finalize retries and better max timeout height
* refine forward failure transitions
* more accurate satistics p2p status
* make sure paidaction cancel in state machine only
* dont drop bolt11s unless status is not null
* only allow PENDING_HELD to transition to FORWARDING
* add mermaid state machine diagrams to paid action doc
* fix cancel transition name
* cleanup readme
* move forwarding outside of transition
* refine testServerConnect and make sure ensureB64 transforms
* remove unused params from testServerConnect
---------
Co-authored-by: ekzyis <ek@stacker.news>
Co-authored-by: k00b <k00b@stacker.news>
* Support receiving with LNbits
* Remove hardcoded LNbits url on server
* Fix saveConfig ignoring save errors
* saveConfig was meant to only ignore validation errors, not save errors
* on server save errors, we redirected as if save was successful
* this is now fixed with a promise chain
* logging payments vs receivals was also moved to correct place
* Fix enabled falsely disabled on SSR
If a wallet was configured for payments but not for receivals and you refreshed the configuration form, enabled was disabled even though payments were enabled.
This was the case since we don't know during SSR if it's enabled since this information is stored on the client.
* Fix missing 'receivals disabled' log message
* Move 'wallet detached for payments' log message
* Fix stale walletId during detach
If page was reloaded, walletId in clearConfig was stale since callback dependency was missing.
* Add missing callback dependencies for saveConfig
* Verify that invoiceKey != adminKey
* Verify LNbits keys are hex-encoded
* Fix local config polluted with server data
* Fix creation of duplicate wallets
* Remove unused dependency
* Fix missing error message in logs
* Fix setPriority
* Rename: localConfig -> clientConfig
* Add description to LNbits autowithdrawals
* Rename: receivals -> receives
* Use try/catch instead of promise chain in saveConfig
* add connect label to lnbits for no url found for lnbits
* Fix adminKey not saved
* Remove hardcoded LNbits url on server again
* Add LNbits ATTACH.md
* Delete old docs to attach LNbits with polar
* Add missing callback dependencies
* Set editable: false
* Only set readOnly if field is configured
---------
Co-authored-by: keyan <keyan.kousha+huumn@gmail.com>
Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>