From 6f3541be967ed0a0fdfc332d9594e45eb6bda8b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?dni=20=E2=9A=A1?=
Date: Fri, 24 Mar 2023 21:07:45 +0100
Subject: [PATCH 01/24] add release workflow
---
.github/workflows/release.yml | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
create mode 100644 .github/workflows/release.yml
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..92df069
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,19 @@
+name: release github version
+on:
+ push:
+ tags:
+ - "[0-9]+.[0-9]+"
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Create GitHub Release
+ id: create_release
+ uses: actions/create-release@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ tag_name: ${{ github.ref }}
+ release_name: ${{ github.ref }}
+ draft: false
+ prerelease: false
From 2e886fb38e119a4388a56eb32a7c3b49ab00826d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?dni=20=E2=9A=A1?=
Date: Sat, 25 Mar 2023 10:13:55 +0100
Subject: [PATCH 02/24] fix release versioning
---
.github/workflows/release.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 92df069..3e1da5a 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -2,7 +2,7 @@ name: release github version
on:
push:
tags:
- - "[0-9]+.[0-9]+"
+ - "[0-9]+.[0-9]+.[0-9]+"
jobs:
build:
runs-on: ubuntu-latest
From 0b621dae21db45989bd98e00f2e27c10973b219f Mon Sep 17 00:00:00 2001
From: Tiago Vasconcelos
Date: Mon, 24 Apr 2023 10:39:53 +0100
Subject: [PATCH 03/24] Update README.md
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8b0554c..45e4fd8 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
-# Split Payments
+# Split Payments - [LNbits](https://github.com/lnbits/lnbits) extension
+For more about LNBits extension check [this tutorial](https://github.com/lnbits/lnbits/wiki/LNbits-Extensions)
## Have payments split between multiple wallets
From e69d236af9f2620ad9189e672f18ba6c6dc17766 Mon Sep 17 00:00:00 2001
From: arbadacarba <63317640+arbadacarbaYK@users.noreply.github.com>
Date: Wed, 3 May 2023 05:32:44 +0200
Subject: [PATCH 04/24] Update README.md (#6)
---
README.md | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index 45e4fd8..6b443e5 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
# Split Payments - [LNbits](https://github.com/lnbits/lnbits) extension
-For more about LNBits extension check [this tutorial](https://github.com/lnbits/lnbits/wiki/LNbits-Extensions)
+For more about LNBits extension check [this tutorial](https://github.com/lnbits/lnbits/wiki/LNbits-Documentation#use-cases-of-lnbits)
## Have payments split between multiple wallets
@@ -13,16 +13,16 @@ LNbits Split Payments extension allows for distributing payments across multiple
2. Add the wallet or wallets info to split payments to
- - get the wallet id, or an invoice key from a different wallet. It can be a completely different user as long as it's under the same LNbits instance/domain. You can get the wallet information on the API Info section on every wallet page\
+ - get the LNURLp, a LNaddress, wallet id, or an invoice key from a different wallet. It can be a completely different user on another instance/domain. You can get the wallet information on the API Info section on every wallet page\
 - set a wallet _Alias_ for your own identification\
-- set how much, in percentage, this wallet will receive from every payment sent to the source wallets
+- set how much, in percentage, this wallet will receive from every payment sent to the source wallet
-3. When done, click "SAVE TARGETS" to make the splits effective
+3. When done with adding or deleting a set of targets, click "SAVE TARGETS" to make the splits effective.
-4. You can have several wallets to split to, as long as the sum of the percentages is under or equal to 100%
+4. You can have several wallets to split to, as long as the sum of the percentages is under or equal to 100%. It can only reach 100% if the targets are all internal ones.
-5. When the source wallet receives a payment, the extension will automatically split the corresponding values to every wallet\
+5. When the source wallet receives a payment, the extension will automatically split the corresponding values to every wallet.
- on receiving a 20 sats payment\

- source wallet gets 18 sats\
@@ -30,6 +30,16 @@ LNbits Split Payments extension allows for distributing payments across multiple
- Ben's wallet (the wallet from the example) instantly, and feeless, gets the corresponding 10%, or 2 sats\

+IMPORTANT:
+
+- If you split to a LNURLp or LNaddress through the LNURLp extension make sure your receipients allow comments ! Split&Scrub add a comment in your transaction - and if it is not allowed, the split/scrub will not take place.
+- Make sure the LNURLp / LNaddress of the receipient has its min-sats set very low (e.g. 1 sat). If the wallet does not belong to you you can [check with a Decoder](https://lightningdecoder.com/), if that is the case already
+- Yes, there is fees - internal and external! Updating your own wallets on your own instance will not cost any fees but sending to an external instance will. Please notice that you should therefore not split up to 100% if you send to a wallet that is external (leave 1-2% reserve for routing fees!). External fees are deducted from the individual payment percentage of the receipient
+
+
+
+
+
## Sponsored by
[](https://cryptograffiti.com/)
From 1e6e8e48c474951231a1622057a45ab4197cbe6d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?dni=20=E2=9A=A1?=
Date: Sat, 23 Sep 2023 22:57:32 +0200
Subject: [PATCH 05/24] [FEAT] add better release workflow (#11)
---
.github/workflows/release.yml | 60 +++++++++++++++++++++++++++++------
1 file changed, 50 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3e1da5a..7ec9b48 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,19 +1,59 @@
-name: release github version
on:
push:
tags:
- - "[0-9]+.[0-9]+.[0-9]+"
+ - "v[0-9]+.[0-9]+.[0-9]+"
+
jobs:
- build:
+
+ release:
runs-on: ubuntu-latest
steps:
- - name: Create GitHub Release
- id: create_release
- uses: actions/create-release@v1
+ - uses: actions/checkout@v3
+ - name: Create github release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ tag: ${{ github.ref_name }}
+ run: |
+ gh release create "$tag" --generate-notes
+
+ pullrequest:
+ needs: [release]
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
with:
- tag_name: ${{ github.ref }}
- release_name: ${{ github.ref }}
- draft: false
- prerelease: false
+ token: ${{ secrets.EXT_GITHUB }}
+ repository: lnbits/lnbits-extensions
+ path: './lnbits-extensions'
+
+ - name: setup git user
+ run: |
+ git config --global user.name "alan"
+ git config --global user.email "alan@lnbits.com"
+
+ - name: Create pull request in extensions repo
+ env:
+ GH_TOKEN: ${{ secrets.EXT_GITHUB }}
+ repo_name: "${{ github.event.repository.name }}"
+ tag: "${{ github.ref_name }}"
+ branch: "update-${{ github.event.repository.name }}-${{ github.ref_name }}"
+ title: "[UPDATE] ${{ github.event.repository.name }} to ${{ github.ref_name }}"
+ body: "https://github.com/lnbits/${{ github.event.repository.name }}/releases/${{ github.ref_name }}"
+ archive: "https://github.com/lnbits/${{ github.event.repository.name }}/archive/refs/tags/${{ github.ref_name }}.zip"
+ run: |
+ cd lnbits-extensions
+ git checkout -b $branch
+
+ # if there is another open PR
+ git pull origin $branch || echo "branch does not exist"
+
+ sh util.sh update_extension $repo_name $tag
+
+ git add -A
+ git commit -am "$title"
+ git push origin $branch
+
+ # check if pr exists before creating it
+ gh config set pager cat
+ check=$(gh pr list -H $branch | wc -l)
+ test $check -ne 0 || gh pr create --title "$title" --body "$body" --repo lnbits/lnbits-extensions
From a2efae3c3073fbc4d0526e9a348cf78e439f32a5 Mon Sep 17 00:00:00 2001
From: Tiago Vasconcelos
Date: Tue, 26 Sep 2023 12:43:51 +0100
Subject: [PATCH 06/24] Fix deleting last target (#7)
* fix deleting last target
---
README.md | 8 ++++----
static/js/index.js | 6 ++++--
tasks.py | 2 +-
templates/splitpayments/index.html | 6 ++++--
4 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index 6b443e5..86d7656 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
# Split Payments - [LNbits](https://github.com/lnbits/lnbits) extension
+
For more about LNBits extension check [this tutorial](https://github.com/lnbits/lnbits/wiki/LNbits-Documentation#use-cases-of-lnbits)
## Have payments split between multiple wallets
@@ -18,11 +19,11 @@ LNbits Split Payments extension allows for distributing payments across multiple
- set how much, in percentage, this wallet will receive from every payment sent to the source wallet
-3. When done with adding or deleting a set of targets, click "SAVE TARGETS" to make the splits effective.
+3. When done with adding or deleting a set of targets, click "SAVE TARGETS" to make the splits effective.
4. You can have several wallets to split to, as long as the sum of the percentages is under or equal to 100%. It can only reach 100% if the targets are all internal ones.
-5. When the source wallet receives a payment, the extension will automatically split the corresponding values to every wallet.
+5. When the source wallet receives a payment, the extension will automatically split the corresponding values to every wallet.
- on receiving a 20 sats payment\

- source wallet gets 18 sats\
@@ -33,13 +34,12 @@ LNbits Split Payments extension allows for distributing payments across multiple
IMPORTANT:
- If you split to a LNURLp or LNaddress through the LNURLp extension make sure your receipients allow comments ! Split&Scrub add a comment in your transaction - and if it is not allowed, the split/scrub will not take place.
-- Make sure the LNURLp / LNaddress of the receipient has its min-sats set very low (e.g. 1 sat). If the wallet does not belong to you you can [check with a Decoder](https://lightningdecoder.com/), if that is the case already
+- Make sure the LNURLp / LNaddress of the receipient has its min-sats set very low (e.g. 1 sat). If the wallet does not belong to you you can [check with a Decoder](https://lightningdecoder.com/), if that is the case already
- Yes, there is fees - internal and external! Updating your own wallets on your own instance will not cost any fees but sending to an external instance will. Please notice that you should therefore not split up to 100% if you send to a wallet that is external (leave 1-2% reserve for routing fees!). External fees are deducted from the individual payment percentage of the receipient
-
## Sponsored by
[](https://cryptograffiti.com/)
diff --git a/static/js/index.js b/static/js/index.js
index 7e334ac..1ea7a8c 100644
--- a/static/js/index.js
+++ b/static/js/index.js
@@ -34,8 +34,10 @@ new Vue({
},
methods: {
clearTarget(index) {
+ if(this.targets.length == 1) {
+ return this.deleteTargets()
+ }
this.targets.splice(index, 1)
- console.log(this.targets)
this.$q.notify({
message: 'Removed item. You must click to save manually.',
timeout: 500
@@ -84,7 +86,7 @@ new Vue({
},
deleteTargets() {
LNbits.utils
- .confirmDialog('Are you sure you want to delete the targets?')
+ .confirmDialog('Are you sure you want to delete all targets?')
.onOk(() => {
this.targets = []
LNbits.api
diff --git a/tasks.py b/tasks.py
index 9bf381d..13b1659 100644
--- a/tasks.py
+++ b/tasks.py
@@ -9,7 +9,7 @@ from loguru import logger
from lnbits import bolt11
from lnbits.core.crud import get_standalone_payment
from lnbits.core.models import Payment
-from lnbits.core.services import create_invoice, pay_invoice, fee_reserve
+from lnbits.core.services import create_invoice, fee_reserve, pay_invoice
from lnbits.helpers import get_current_extension_name
from lnbits.tasks import register_invoice_listener
diff --git a/templates/splitpayments/index.html b/templates/splitpayments/index.html
index 307efc5..d14dcfc 100644
--- a/templates/splitpayments/index.html
+++ b/templates/splitpayments/index.html
@@ -118,10 +118,12 @@
This is valid for every payment, doesn't matter how it was created.
- Targets can be LNBits wallets from this LNBits instance or any valid LNURL or LN Address.
+ Targets can be LNBits wallets from this LNBits instance or any valid
+ LNURL or LN Address.
- LNURLp and LN Addresses must allow comments > 100 chars and also have a flexible amount.
+ LNURLp and LN Addresses must allow comments > 100 chars and also
+ have a flexible amount.
To remove a wallet from the targets list just press the X and save.
From 4623b2e0a7723e19a1a030f49bb26bcee4340c0d Mon Sep 17 00:00:00 2001
From: Tiago Vasconcelos
Date: Tue, 26 Sep 2023 12:44:12 +0100
Subject: [PATCH 07/24] allow custom path (#9)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* allow custom path
* bump
---------
Co-authored-by: dni ⚡
---
__init__.py | 4 +---
config.json | 3 ++-
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/__init__.py b/__init__.py
index 95b48bc..aeca6cd 100644
--- a/__init__.py
+++ b/__init__.py
@@ -2,7 +2,6 @@ import asyncio
from typing import List
from fastapi import APIRouter
-from fastapi.staticfiles import StaticFiles
from lnbits.db import Database
from lnbits.helpers import template_renderer
@@ -15,7 +14,6 @@ scheduled_tasks: List[asyncio.Task] = []
splitpayments_static_files = [
{
"path": "/splitpayments/static",
- "app": StaticFiles(packages=[("lnbits", "extensions/splitpayments/static")]),
"name": "splitpayments_static",
}
]
@@ -25,7 +23,7 @@ splitpayments_ext: APIRouter = APIRouter(
def splitpayments_renderer():
- return template_renderer(["lnbits/extensions/splitpayments/templates"])
+ return template_renderer(["splitpayments/templates"])
from .tasks import wait_for_paid_invoices
diff --git a/config.json b/config.json
index c5aee53..a95c729 100644
--- a/config.json
+++ b/config.json
@@ -2,5 +2,6 @@
"name": "Split Payments",
"short_description": "Split incoming payments across wallets",
"tile": "/splitpayments/static/image/split-payments.png",
- "contributors": ["fiatjaf", "cryptograffiti"]
+ "contributors": ["fiatjaf", "cryptograffiti"],
+ "min_lnbits_version": "0.11.0"
}
From 82d4c65d1e8eb46ccbd7e668033b9a38be673c8b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?dni=20=E2=9A=A1?=
Date: Fri, 29 Sep 2023 11:32:11 +0200
Subject: [PATCH 08/24] feat: trim frontend values (#12)
---
templates/splitpayments/index.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/templates/splitpayments/index.html b/templates/splitpayments/index.html
index d14dcfc..c4eb5ce 100644
--- a/templates/splitpayments/index.html
+++ b/templates/splitpayments/index.html
@@ -34,7 +34,7 @@
Date: Wed, 17 Apr 2024 22:41:59 +0200
Subject: [PATCH 09/24] fix: properly start/stop tasks (#18)
https://github.com/lnbits/lnbits/issues/2411
---
__init__.py | 18 ++++++++++++------
views_api.py | 17 ++---------------
2 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/__init__.py b/__init__.py
index aeca6cd..3e6365b 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,16 +1,14 @@
import asyncio
-from typing import List
+from loguru import logger
from fastapi import APIRouter
from lnbits.db import Database
from lnbits.helpers import template_renderer
-from lnbits.tasks import catch_everything_and_restart
+from lnbits.tasks import create_permanent_unique_task
db = Database("ext_splitpayments")
-scheduled_tasks: List[asyncio.Task] = []
-
splitpayments_static_files = [
{
"path": "/splitpayments/static",
@@ -31,7 +29,15 @@ from .views import * # noqa: F401,F403
from .views_api import * # noqa: F401,F403
+scheduled_tasks: list[asyncio.Task] = []
+
+def splitpayments_stop():
+ for task in scheduled_tasks:
+ try:
+ task.cancel()
+ except Exception as ex:
+ logger.warning(ex)
+
def splitpayments_start():
- loop = asyncio.get_event_loop()
- task = loop.create_task(catch_everything_and_restart(wait_for_paid_invoices))
+ task = create_permanent_unique_task("ext_splitpayments", wait_for_paid_invoices)
scheduled_tasks.append(task)
diff --git a/views_api.py b/views_api.py
index 48e5b31..ce7f342 100644
--- a/views_api.py
+++ b/views_api.py
@@ -6,9 +6,9 @@ from loguru import logger
from starlette.exceptions import HTTPException
from lnbits.core.crud import get_wallet, get_wallet_for_key
-from lnbits.decorators import WalletTypeInfo, check_admin, require_admin_key
+from lnbits.decorators import WalletTypeInfo, require_admin_key
-from . import scheduled_tasks, splitpayments_ext
+from . import splitpayments_ext
from .crud import get_targets, set_targets
from .models import Target, TargetPutList
@@ -81,16 +81,3 @@ async def api_targets_delete(
source_wallet: WalletTypeInfo = Depends(require_admin_key),
) -> None:
await set_targets(source_wallet.wallet.id, [])
-
-
-# deinit extension invoice listener
-@splitpayments_ext.delete(
- "/api/v1", status_code=HTTPStatus.OK, dependencies=[Depends(check_admin)]
-)
-async def api_stop():
- for t in scheduled_tasks:
- try:
- t.cancel()
- except Exception as ex:
- logger.warning(ex)
- return {"success": True}
From 979d09d244b79a2eba3c84e8232528f541f45976 Mon Sep 17 00:00:00 2001
From: benarc
Date: Thu, 9 May 2024 12:09:47 +0100
Subject: [PATCH 10/24] Added extra description
---
config.json | 54 +++++++++++++++++++++++++++++++++++++++++++--
description.md | 15 +++++++++++++
static/image/1.png | Bin 0 -> 100688 bytes
static/image/2.png | Bin 0 -> 25323 bytes
static/image/3.png | Bin 0 -> 101690 bytes
toc.md | 22 ++++++++++++++++++
6 files changed, 89 insertions(+), 2 deletions(-)
create mode 100644 description.md
create mode 100644 static/image/1.png
create mode 100644 static/image/2.png
create mode 100644 static/image/3.png
create mode 100644 toc.md
diff --git a/config.json b/config.json
index a95c729..e310c59 100644
--- a/config.json
+++ b/config.json
@@ -2,6 +2,56 @@
"name": "Split Payments",
"short_description": "Split incoming payments across wallets",
"tile": "/splitpayments/static/image/split-payments.png",
- "contributors": ["fiatjaf", "cryptograffiti"],
- "min_lnbits_version": "0.11.0"
+ "min_lnbits_version": "0.11.0",
+ "contributors": [
+ {
+ "name": "cryptograffiti",
+ "uri": "https://github.com/cryptograffiti",
+ "role": "Idea/Sponsor"
+ },
+ {
+ "name": "fiatjaf",
+ "uri": "https://github.com/fiatjaf",
+ "role": "Developer"
+ },
+ {
+ "name": "dni",
+ "uri": "https://github.com/dni",
+ "role": "Developer"
+ },
+ {
+ "name": "talvasconcelos",
+ "uri": "https://github.com/talvasconcelos",
+ "role": "Developer"
+ },
+ {
+ "name": "prusnak",
+ "uri": "https://github.com/prusnak",
+ "role": "Developer"
+ },
+ {
+ "name": "arbadacarbaYK",
+ "uri": "https://github.com/arbadacarbaYK",
+ "role": "Developer"
+ },
+ {
+ "name": "arcbtc",
+ "uri": "https://github.com/arcbtc",
+ "role": "Developer"
+ }
+ ],
+ "images": [
+ {
+ "uri": "https://raw.githubusercontent.com/lnbits/splitpayments/main/static/image/1.png"
+ },
+ {
+ "uri": "https://raw.githubusercontent.com/lnbits/splitpayments/main/static/image/2.png"
+ },
+ {
+ "uri": "https://raw.githubusercontent.com/lnbits/splitpayments/main/static/image/3.png"
+ }
+ ],
+ "description_md": "https://raw.githubusercontent.com/lnbits/splitpayments/main/description.md",
+ "terms_and_conditions_md": "https://raw.githubusercontent.com/lnbits/splitpayments/main/toc.md",
+ "license": "MIT"
}
diff --git a/description.md b/description.md
new file mode 100644
index 0000000..906fc26
--- /dev/null
+++ b/description.md
@@ -0,0 +1,15 @@
+Split Payments across multiple wallets/lnaddresses/lnurlps seamlessly!
+Once configured, it continuously splits your payments across different wallets.
+
+Usage:
+* Enable the Extension: Start by enabling the Split Payments extension.
+* Select the Source Wallet: Identify and select the wallet that will receive and subsequently distribute the payments.
+* Add Wallet Information for Payment Splitting: Enter the details of the wallets where the payments will be split. This could include LNURLp, LNaddress, wallet ID, or an invoice key from a different wallet. Wallet details can be found under the API Info section on each wallet's page. Optionally, assign an alias to each wallet for easier identification.
+* Set Distribution Percentages: Specify the percentage of each payment that each wallet should receive. Ensure the total distribution does not exceed 100%.
+* Save Your Settings: After adding or deleting wallet information, click “SAVE TARGETS” to activate the payment splits.
+
+Note:
+You can distribute payments to multiple wallets as long as their combined percentage is at or below 100%. Distribution can only total exactly 100% if all target wallets are internal.
+
+Automatic Payment Splitting:
+When the source wallet receives a payment, the extension automatically allocates the specified percentages to each designated wallet.
diff --git a/static/image/1.png b/static/image/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a6d5164ccc163e29743533d994eb4b00ceddaf4
GIT binary patch
literal 100688
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