test: payments launch checklist passed

- Added 'consumed' to payment status enum (was missing from schema)
- Fixed orphan recovery to also find 'consumed' payments on restart
- Verified: NWC + Lightning Address wallet connect, invoice creation,
  21-sat entry fee, 42-sat winner payout, Cashu tokens, bet settlement,
  refund on cancelled/timeout, stuck payment recovery

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-09 00:43:16 +00:00
co-authored by Claude Opus 4.6
parent 50b85f5171
commit f964274c02
2 changed files with 4 additions and 3 deletions
+1 -1
View File
@@ -73,7 +73,7 @@ export const payments = sqliteTable('payments', {
amountSats: integer('amount_sats').notNull(), amountSats: integer('amount_sats').notNull(),
method: text('method', { enum: ['lightning', 'cashu'] }).notNull(), method: text('method', { enum: ['lightning', 'cashu'] }).notNull(),
status: text('status', { status: text('status', {
enum: ['pending', 'confirmed', 'failed', 'refunded'], enum: ['pending', 'confirmed', 'consumed', 'failed', 'refunded'],
}).notNull().default('pending'), }).notNull().default('pending'),
invoice: text('invoice'), invoice: text('invoice'),
preimage: text('preimage'), preimage: text('preimage'),
+3 -2
View File
@@ -589,10 +589,11 @@ export async function redeemCashuToken(token: string, botId: string): Promise<{
/** Recover orphaned payments on startup */ /** Recover orphaned payments on startup */
export async function recoverOrphanedPayments(): Promise<void> { export async function recoverOrphanedPayments(): Promise<void> {
// Find confirmed entry payments without a fight — refund them // Find confirmed/consumed entry payments without a fight — refund them
// 'consumed' payments were in the queue when server restarted
const orphaned = await db.select().from(schema.payments) const orphaned = await db.select().from(schema.payments)
.where(and( .where(and(
eq(schema.payments.status, 'confirmed'), sql`${schema.payments.status} IN ('confirmed', 'consumed')`,
eq(schema.payments.direction, 'in'), eq(schema.payments.direction, 'in'),
isNull(schema.payments.fightId), isNull(schema.payments.fightId),
)) ))