diff --git a/api/paidAction/index.js b/api/paidAction/index.js
index 424198be..fcbfb4e3 100644
--- a/api/paidAction/index.js
+++ b/api/paidAction/index.js
@@ -258,8 +258,10 @@ export async function createLightningInvoice (actionType, args, context) {
expiry: INVOICE_EXPIRE_SECS
}, { models })
+ // the sender (me) decides if the wrapped invoice has a description
+ // whereas the recipient decides if their invoice has a description
const { invoice: wrappedInvoice, maxFee } = await wrapInvoice(
- bolt11, { msats: cost, description }, { lnd })
+ bolt11, { msats: cost, description }, { me, lnd })
return {
bolt11,
diff --git a/components/comment.js b/components/comment.js
index 176ab6f1..62e455f3 100644
--- a/components/comment.js
+++ b/components/comment.js
@@ -180,7 +180,8 @@ export default function Comment ({
}
>
}
- onEdit={e => { setEdit(!edit) }}
+ edit={edit}
+ toggleEdit={e => { setEdit(!edit) }}
editText={edit ? 'cancel' : 'edit'}
/>}
diff --git a/components/item-info.js b/components/item-info.js
index ba0c3732..921d57f5 100644
--- a/components/item-info.js
+++ b/components/item-info.js
@@ -30,7 +30,7 @@ import classNames from 'classnames'
export default function ItemInfo ({
item, full, commentsText = 'comments',
- commentTextSingular = 'comment', className, embellishUser, extraInfo, onEdit, editText,
+ commentTextSingular = 'comment', className, embellishUser, extraInfo, edit, toggleEdit, editText,
onQuoteReply, extraBadges, nested, pinnable, showActionDropdown = true, showUser = true,
setDisableRetry, disableRetry
}) {
@@ -151,8 +151,8 @@ export default function ItemInfo ({
showActionDropdown &&
<>
@@ -311,7 +311,7 @@ function PaymentInfo ({ item, disableRetry, setDisableRetry }) {
)
}
-function EditInfo ({ item, canEdit, setCanEdit, onEdit, editText, editThreshold }) {
+function EditInfo ({ item, edit, canEdit, setCanEdit, toggleEdit, editText, editThreshold }) {
const router = useRouter()
if (canEdit) {
@@ -320,7 +320,7 @@ function EditInfo ({ item, canEdit, setCanEdit, onEdit, editText, editThreshold
\
onEdit ? onEdit() : router.push(`/items/${item.id}/edit`)}
+ onClick={() => toggleEdit ? toggleEdit() : router.push(`/items/${item.id}/edit`)}
>
{editText || 'edit'}
{(!item.invoice?.actionState || item.invoice?.actionState === 'PAID')
@@ -334,5 +334,21 @@ function EditInfo ({ item, canEdit, setCanEdit, onEdit, editText, editThreshold
)
}
+ if (edit && !canEdit) {
+ // if we're still editing after timer ran out
+ return (
+ <>
+ \
+ toggleEdit ? toggleEdit() : router.push(`/items/${item.id}`)}
+ >
+ cancel
+ 00:00
+
+ >
+ )
+ }
+
return null
}
diff --git a/components/wallet-card.js b/components/wallet-card.js
index aedd792c..e1ae443c 100644
--- a/components/wallet-card.js
+++ b/components/wallet-card.js
@@ -51,10 +51,18 @@ export default function WalletCard ({ wallet, draggable, onDragStart, onDragEnte
{title}
{badges?.map(
- badge =>
-
- {badge}
- )}
+ badge => {
+ let style = ''
+ switch (badge) {
+ case 'receive': style = styles.receive; break
+ case 'send': style = styles.send; break
+ }
+ return (
+
+ {badge}
+
+ )
+ })}
diff --git a/prisma/migrations/20241101151907_fix_territory_revenue/migration.sql b/prisma/migrations/20241101151907_fix_territory_revenue/migration.sql
new file mode 100644
index 00000000..0a92b67f
--- /dev/null
+++ b/prisma/migrations/20241101151907_fix_territory_revenue/migration.sql
@@ -0,0 +1,28 @@
+-- fix revenue for users who have multiple revenue entries for the same day
+WITH revenue_days AS (
+ SELECT coalesce(sum(msats), 0) as revenue_msats, "userId", created_at
+ FROM "SubAct"
+ WHERE type = 'REVENUE'
+ GROUP BY "userId", created_at
+ HAVING COUNT(*) > 1
+),
+revenue_total AS (
+ SELECT coalesce(sum(revenue_msats), 0) as revenue_msats, "userId"
+ FROM revenue_days
+ GROUP BY "userId"
+)
+UPDATE users SET msats = users.msats + revenue_total.revenue_msats
+FROM revenue_total
+WHERE users.id = revenue_total."userId";
+
+-- fix stacked msats for users who have territory revenue
+-- prior to this, we were not updating stacked msats for territory revenue
+WITH territory_revenue AS (
+ SELECT coalesce(sum(msats), 0) as revenue_msats, "userId"
+ FROM "SubAct"
+ WHERE type = 'REVENUE'
+ GROUP BY "userId"
+)
+UPDATE users SET "stackedMsats" = users."stackedMsats" + territory_revenue.revenue_msats
+FROM territory_revenue
+WHERE users.id = territory_revenue."userId";
diff --git a/styles/wallet.module.css b/styles/wallet.module.css
index e4e8744a..133734d4 100644
--- a/styles/wallet.module.css
+++ b/styles/wallet.module.css
@@ -40,6 +40,14 @@
margin-right: 0.2rem;
}
+.receive {
+ color: #20c997 !important;
+}
+
+.send {
+ color: var(--bs-primary) !important;
+}
+
.attach {
color: var(--bs-body-color) !important;
text-align: center;
diff --git a/wallets/blink/index.js b/wallets/blink/index.js
index 6cbc3ff8..dc93d042 100644
--- a/wallets/blink/index.js
+++ b/wallets/blink/index.js
@@ -28,7 +28,7 @@ export const fields = [
export const card = {
title: 'Blink',
subtitle: 'use [Blink](https://blink.sv/) for payments',
- badges: ['send only']
+ badges: ['send']
}
export const fieldValidation = blinkSchema
diff --git a/wallets/cln/index.js b/wallets/cln/index.js
index 644b7748..31e05606 100644
--- a/wallets/cln/index.js
+++ b/wallets/cln/index.js
@@ -36,7 +36,7 @@ export const fields = [
export const card = {
title: 'CLN',
subtitle: 'autowithdraw to your Core Lightning node via [CLNRest](https://docs.corelightning.org/docs/rest)',
- badges: ['receive only']
+ badges: ['receive']
}
export const fieldValidation = CLNAutowithdrawSchema
diff --git a/wallets/lightning-address/index.js b/wallets/lightning-address/index.js
index ff502a3a..9a881d03 100644
--- a/wallets/lightning-address/index.js
+++ b/wallets/lightning-address/index.js
@@ -15,7 +15,7 @@ export const fields = [
export const card = {
title: 'lightning address',
subtitle: 'autowithdraw to a lightning address',
- badges: ['receive only']
+ badges: ['receive']
}
export const fieldValidation = lnAddrAutowithdrawSchema
diff --git a/wallets/lnbits/index.js b/wallets/lnbits/index.js
index 3473f47e..a4425911 100644
--- a/wallets/lnbits/index.js
+++ b/wallets/lnbits/index.js
@@ -29,7 +29,7 @@ export const fields = [
export const card = {
title: 'LNbits',
subtitle: 'use [LNbits](https://lnbits.com/) for payments',
- badges: ['send & receive']
+ badges: ['send', 'receive']
}
export const fieldValidation = lnbitsSchema
diff --git a/wallets/lnc/index.js b/wallets/lnc/index.js
index e349b6dd..b86153da 100644
--- a/wallets/lnc/index.js
+++ b/wallets/lnc/index.js
@@ -33,7 +33,7 @@ export const fields = [
export const card = {
title: 'LNC',
subtitle: 'use Lightning Node Connect for LND payments',
- badges: ['send only', 'budgetable']
+ badges: ['send', 'budgetable']
}
export const fieldValidation = lncSchema
diff --git a/wallets/lnd/index.js b/wallets/lnd/index.js
index c884b909..21123cb5 100644
--- a/wallets/lnd/index.js
+++ b/wallets/lnd/index.js
@@ -37,7 +37,7 @@ export const fields = [
export const card = {
title: 'LND',
subtitle: 'autowithdraw to your Lightning Labs node',
- badges: ['receive only']
+ badges: ['receive']
}
export const fieldValidation = LNDAutowithdrawSchema
diff --git a/wallets/nwc/index.js b/wallets/nwc/index.js
index fe443968..cd125769 100644
--- a/wallets/nwc/index.js
+++ b/wallets/nwc/index.js
@@ -27,7 +27,7 @@ export const fields = [
export const card = {
title: 'NWC',
subtitle: 'use Nostr Wallet Connect for payments',
- badges: ['send & receive', 'budgetable']
+ badges: ['send', 'receive', 'budgetable']
}
export const fieldValidation = nwcSchema
diff --git a/wallets/phoenixd/index.js b/wallets/phoenixd/index.js
index 51625937..5a24e304 100644
--- a/wallets/phoenixd/index.js
+++ b/wallets/phoenixd/index.js
@@ -33,7 +33,7 @@ export const fields = [
export const card = {
title: 'phoenixd',
subtitle: 'use [phoenixd](https://phoenix.acinq.co/server) for payments',
- badges: ['send & receive']
+ badges: ['send', 'receive']
}
// phoenixd::TODO
diff --git a/wallets/webln/index.js b/wallets/webln/index.js
index 6bfb26d5..75ca3dd8 100644
--- a/wallets/webln/index.js
+++ b/wallets/webln/index.js
@@ -20,7 +20,7 @@ export const fieldValidation = ({ enabled }) => {
export const card = {
title: 'WebLN',
subtitle: 'use a [WebLN provider](https://www.webln.guide/ressources/webln-providers) for payments',
- badges: ['send only']
+ badges: ['send']
}
export default function WebLnProvider ({ children }) {
diff --git a/wallets/wrap.js b/wallets/wrap.js
index ae63a6ed..b470587b 100644
--- a/wallets/wrap.js
+++ b/wallets/wrap.js
@@ -22,7 +22,7 @@ const ZAP_SYBIL_FEE_MULT = 10 / 7 // the fee for the zap sybil service
maxFee: number
}
*/
-export default async function wrapInvoice (bolt11, { msats, description, descriptionHash }, { lnd }) {
+export default async function wrapInvoice (bolt11, { msats, description, descriptionHash }, { me, lnd }) {
try {
console.group('wrapInvoice', description)
@@ -112,6 +112,11 @@ export default async function wrapInvoice (bolt11, { msats, description, descrip
wrapped.description = inv.description
}
+ if (me?.hideInvoiceDesc) {
+ wrapped.description = undefined
+ wrapped.description_hash = undefined
+ }
+
// validate the expiration
if (new Date(inv.expires_at) < new Date(Date.now() + INCOMING_EXPIRATION_BUFFER_MSECS)) {
throw new Error('Invoice expiration is too soon')
diff --git a/worker/territory.js b/worker/territory.js
index 21bb87b7..d7a7f479 100644
--- a/worker/territory.js
+++ b/worker/territory.js
@@ -72,10 +72,17 @@ export async function territoryRevenue ({ models }) {
FROM revenue
WHERE revenue > 1000
RETURNING *
+ ),
+ "SubActResultTotal" AS (
+ SELECT coalesce(sum(msats), 0) as total_msats, "userId"
+ FROM "SubActResult"
+ GROUP BY "userId"
)
- UPDATE users SET msats = users.msats + "SubActResult".msats
- FROM "SubActResult"
- WHERE users.id = "SubActResult"."userId"`,
+ UPDATE users
+ SET msats = users.msats + "SubActResultTotal".total_msats,
+ "stackedMsats" = users."stackedMsats" + "SubActResultTotal".total_msats
+ FROM "SubActResultTotal"
+ WHERE users.id = "SubActResultTotal"."userId"`,
{ models }
)
}