wiz status check

This commit is contained in:
shocknet-justin 2025-10-09 11:05:13 -04:00
parent 6da5577b27
commit 0f5be06e94
5 changed files with 74 additions and 4 deletions

View file

@ -80,7 +80,10 @@ export default (serverMethods: Types.ServerMethods, mainHandler: Main, nostrSett
}, event.startAtNano, event.startAtMs)
})
return { Stop: () => nostr.Stop, Send: (...args) => nostr.Send(...args), Ping: () => nostr.Ping() }
// Mark nostr connected/ready after initial subscription tick
mainHandler.adminManager.setNostrConnected(true)
return { Stop: () => { mainHandler.adminManager.setNostrConnected(false); return nostr.Stop }, Send: (...args) => nostr.Send(...args), Ping: () => nostr.Ping() }
}

View file

@ -22,6 +22,7 @@ export class AdminManager {
interval: NodeJS.Timer
appNprofile: string
lnd: LND
nostrConnected: boolean = false
constructor(mainSettings: MainSettings, storage: Storage) {
this.storage = storage
this.dataDir = mainSettings.storageSettings.dataDir
@ -42,6 +43,14 @@ export class AdminManager {
this.lnd = lnd
}
setNostrConnected = (connected: boolean) => {
this.nostrConnected = connected
}
GetNostrConnected = () => {
return this.nostrConnected
}
setAppNprofile = (nprofile: string) => {
this.appNprofile = nprofile
const enrollToken = this.ReadAdminEnrollToken()

View file

@ -46,15 +46,27 @@ export class Wizard {
const relays = this.settings.nostrRelaySettings ? this.settings.nostrRelaySettings.relays : [];
const relayUrl = (relays && relays.length > 0) ? relays[0] : '';
const defaultApp = apps.find(a => a.name === this.settings.defaultAppName) || apps[0]
// Determine LND state and watchdog
let lndState: WizardTypes.LndState = WizardTypes.LndState.OFFLINE
let watchdogOk = false
try {
const info = await this.adminManager.LndGetInfo()
const online = info.synced_to_chain && info.synced_to_graph
lndState = online ? WizardTypes.LndState.ONLINE : WizardTypes.LndState.SYNCING
watchdogOk = !info.watchdog_barking
} catch {
lndState = WizardTypes.LndState.OFFLINE
watchdogOk = false
}
return {
admin_npub: this.adminManager.GetAdminNpub(),
http_url: this.settings.serviceUrl,
lnd_state: WizardTypes.LndState.OFFLINE,
lnd_state: lndState,
nprofile: this.nprofile,
provider_name: appNamesList,
relay_connected: false,
relay_connected: this.adminManager.GetNostrConnected(),
relays: this.relays,
watchdog_ok: false,
watchdog_ok: watchdogOk,
source_name: this.settings.defaultAppName || appNamesList,
relay_url: relayUrl,
automate_liquidity: this.settings.liquiditySettings.liquidityProviderPub !== 'null',
@ -83,6 +95,8 @@ export class Wizard {
}
}
}
WizardState = async (): Promise<WizardTypes.StateResponse> => {
return {
config_sent: this.pendingConfig !== null,

View file

@ -34,6 +34,11 @@ $(() => {
$("#reset-box").show();
$('.continue-button').attr('id', 'set-show-nostr');
});
$("#show-avatar").click(() => {
$('.show-avatar').show()
$('#show-avatar-text').hide()
$('input[name="show-avatar"]').focus();
});
$("#show-nodey").click(() => {
$('.show-nodey').show()
$('#show-nodey-text').hide()
@ -73,6 +78,21 @@ $(() => {
$('#show-nostr-text').show()
})
})
$("#save-show-avatar").click(() => {
var targetInputVal = $('input[name="show-avatar"]').val()
postConfig({ avatar_url: targetInputVal }).then(ok => {
if (ok) {
$('#show-avatar-text').text(targetInputVal || '—')
if (targetInputVal) { $('#avatarImg').attr('src', targetInputVal) }
}
$('.show-avatar').hide()
$('#show-avatar-text').show()
})
})
$("#cancel-show-avatar").click(() => {
$('.show-avatar').hide()
$('#show-avatar-text').show()
})
$("#cancel-show-nostr").click(() => {
$('.show-nostr').hide()
$('#show-nostr-text').show()

View file

@ -69,6 +69,27 @@
</div>
</div>
</div>
<div class="status-element" style="margin-top: 15px;">
<div style="text-align: left;">Avatar:</div>
<div class="fc-grey editable-content">
<div class="show-avatar" style="display: flex; flex-direction: column; display: none;">
<input type="text" value="" name="show-avatar" placeholder="https://example.com/avatar.png" />
<div style="display: flex;justify-content: end;">
<button class="small-btn" id="cancel-show-avatar">Cancel</button>
<button class="small-btn" id="save-show-avatar">Save</button>
</div>
</div>
<div style="display:flex;align-items:center;gap:12px;">
<img id="avatarImg" src="" alt="avatar" style="width:48px;height:48px;border-radius:6px;object-fit:cover;box-shadow:0 0 2px rgba(0,0,0,1);" />
<div id="show-avatar-text" style="word-break:break-all;"></div>
<div class="question-box">
<button class="icon-button" id="show-avatar">
<img src="img/pencil.svg" style="cursor: pointer;" />
</button>
</div>
</div>
</div>
</div>
<div class="status-element" style="margin-top: 15px;">
<div>Administrator:</div>
<div id="adminNpub" style="line-break: anywhere;">
@ -165,8 +186,11 @@
const lndText = lndStateNum === 2 ? 'ONLINE' : (lndStateNum === 1 ? 'SYNCING' : 'OFFLINE')
const lndDot = lndStateNum === 2 ? 'green-dot' : (lndStateNum === 1 ? 'yellow-dot' : 'red-dot')
const relayConnected = !!relayUrl
const avatar = j.avatar_url || (j.app_id ? `https://robohash.org/${encodeURIComponent(j.app_id)}.png?size=128x128&set=set3` : '')
document.getElementById("show-nodey-text").innerHTML = name
document.getElementById("show-nostr-text").innerHTML = relayUrl || '—'
document.getElementById("show-avatar-text").innerHTML = avatar || '—'
if (avatar) { document.getElementById("avatarImg").src = avatar }
document.getElementById("adminNpub").innerText = admin
document.getElementById("relayStatus").innerHTML = `<span class="${relayConnected ? 'green-dot' : 'red-dot'}">&#9679;</span> ${relayConnected ? 'Connected' : 'Disconnected'}`
document.getElementById("lndStatus").innerHTML = `<span class="${lndDot}">&#9679;</span> ${lndText}`