fix: harden node upgrades and prepare 1.9.0-alpha

This commit is contained in:
archipelago
2026-10-05 12:43:49 -04:00
parent 138a541d01
commit daac47cac4
129 changed files with 9910 additions and 794 deletions
+23
View File
@@ -0,0 +1,23 @@
<template>
<main class="min-h-screen text-white p-6">
<div class="max-w-md mx-auto py-8 space-y-4">
<p class="text-xs text-orange-200">UI PREVIEW · SAMPLE DATA · NO WALLET ACCESS</p>
<h1 class="text-2xl font-semibold">Bump a transaction</h1>
<p class="text-sm text-white/55">Open the transaction list and tap the small Bump button. You can try both supported methods and the custom fee review without spending anything.</p>
<div class="flex gap-2">
<button class="rounded-lg px-4 py-2 bg-white/10 text-sm" @click="open('cpfp')">Preview CPFP</button>
<button class="rounded-lg px-4 py-2 bg-white/10 text-sm" @click="open('rbf')">Preview RBF</button>
</div>
</div>
<TransactionsModal :key="revision" :show="show" :transactions="transactions" @close="show = false" />
</main>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import TransactionsModal from '@/components/TransactionsModal.vue'
import { choose } from './rpc'
const show = ref(false)
const revision = ref(0)
const transactions = [{ tx_hash: 'a'.repeat(64), amount_sats: 161794, direction: 'outgoing' as const, num_confirmations: 0, time_stamp: Math.floor(Date.now()/1000)-120, total_fees: 144, dest_addresses: [], label: '', block_height: 0 }]
function open(method: string) { choose(method); revision.value++; show.value = true }
</script>
+1
View File
@@ -0,0 +1 @@
export function useTxExplorer() { return { openTx() {} } }
+1
View File
@@ -0,0 +1 @@
<!doctype html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Archy · Bump preview</title></head><body style="background:#080808"><div id="app"></div><script type="module" src="./main.ts"></script></body></html>
+7
View File
@@ -0,0 +1,7 @@
import { createApp } from 'vue'
import { createI18n } from 'vue-i18n'
import { createRouter, createWebHashHistory } from 'vue-router'
import '../../src/style.css'
import Preview from './Preview.vue'
const router = createRouter({ history: createWebHashHistory(), routes: [{path: '/:pathMatch(.*)*', component: {template: '<div />'}}] })
createApp(Preview).use(router).use(createI18n({ legacy: false, locale: 'en', messages: {en: {common: {done: 'Done', copy: 'Copy'}, transactions: {title: 'Transactions', unconfirmed: 'Pending', minutesAgo: '{count}m ago', confirmations: '{count} confirmations'}}} })).mount('#app')
+19
View File
@@ -0,0 +1,19 @@
// Standalone preview only. No network calls and no wallet access.
export let method = 'cpfp'
let submitted = false
let sweepFee = 618
export function choose(value: string) { method = value; submitted = false }
export const rpcClient = { async call(request: { method: string; params?: Record<string, unknown> }) {
if (request.method === 'lnd.bump-status') return submitted
? { status: 'mempool', message: 'Preview: fee bump accepted. No real transaction was sent.', bump_txid: 'b'.repeat(64), actual_sweep_fee_sats: sweepFee, quote: { method } }
: { status: 'none' }
if (request.method === 'lnd.bump-submit') { submitted = true; return { status: 'registered', message: 'Preview: bump registered. No real transaction was sent.' } }
if (request.method !== 'lnd.bump-quote') throw new Error('Wallet access is disabled in this preview')
const rate = Number(request.params?.sat_per_vbyte || 3)
const budget = Math.max(rate * 254 - 144, method === 'rbf' ? 763 : 112)
sweepFee = budget
return { quote_id: 'preview', txid: request.params?.txid, expires_at: Math.floor(Date.now()/1000)+60,
method, recipient_sats: 161650, current_fee_sats: method === 'rbf' ? 794 : 144,
additional_fee_sats: budget - (method === 'rbf' ? 650 : 0), total_fee_sats: 144 + budget,
budget_sats: budget, rate_sat_vb: rate }
} }