aboutsummaryrefslogtreecommitdiffstats
path: root/lib/payments.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/payments.ts')
-rw-r--r--lib/payments.ts16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/payments.ts b/lib/payments.ts
index 2c18f399..f2a05d50 100644
--- a/lib/payments.ts
+++ b/lib/payments.ts
@@ -21,7 +21,7 @@ const isWithdrawLocked = (type: string): string | null => {
import { generate } from "$lib/invoices";
import ln from "$lib/ln";
import { quoteRoutingFee, xpayLayers } from "$lib/lnquote";
-import { err, l, shortError, warn } from "$lib/logging";
+import { err, l, quiet, shortError, suppressed, warn } from "$lib/logging";
import { handleZap } from "$lib/nostr";
import { notify, nwcNotify } from "$lib/notifications";
import { squarePayment } from "$lib/square";
@@ -143,13 +143,19 @@ export const debit = async ({
if (type !== PaymentType.internal) {
const lockedKind = isWithdrawLocked(type);
if (lockedKind) {
- warn("Blocking", user.username, amount, hash, user.id, type, "withdraw-lock", lockedKind);
+ const n = quiet(`block:${user.id}:lock`, 5 * 60 * 1000);
+ if (n !== null)
+ warn("Blocking", user.username, amount, hash, user.id, type, "withdraw-lock", lockedKind, suppressed(n));
fail("External withdrawals temporarily disabled");
}
}
if (frozen || (amount > userLimit && !whitelisted)) {
- warn("Blocking", user.username, amount, hash, user.id, type, frozen, userLimit);
+ // Per-account throttle: a frozen throwaway retrying sends every few
+ // seconds is expected noise, one line per 5 min keeps the tripwire.
+ const n = quiet(`block:${user.id}:frozen`, 5 * 60 * 1000);
+ if (n !== null)
+ warn("Blocking", user.username, amount, hash, user.id, type, frozen, userLimit, suppressed(n));
fail("Problem sending payment");
}
@@ -166,7 +172,9 @@ export const debit = async ({
await withLimitLock(type, async () => {
const serverLimit = Number.parseInt((await g(`${type}:limit`)) ?? "0", 10) || 0;
if (amount > serverLimit) {
- warn("Blocking", user.username, amount, hash, user.id, type, "serverLimit", serverLimit);
+ const n = quiet(`block:${user.id}:server`, 5 * 60 * 1000);
+ if (n !== null)
+ warn("Blocking", user.username, amount, hash, user.id, type, "serverLimit", serverLimit, suppressed(n));
fail("Problem sending payment");
}
await db.decrBy(`${type}:limit`, amount);