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

View file

@ -46,15 +46,27 @@ export class Wizard {
const relays = this.settings.nostrRelaySettings ? this.settings.nostrRelaySettings.relays : []; const relays = this.settings.nostrRelaySettings ? this.settings.nostrRelaySettings.relays : [];
const relayUrl = (relays && relays.length > 0) ? relays[0] : ''; const relayUrl = (relays && relays.length > 0) ? relays[0] : '';
const defaultApp = apps.find(a => a.name === this.settings.defaultAppName) || apps[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 { return {
admin_npub: this.adminManager.GetAdminNpub(), admin_npub: this.adminManager.GetAdminNpub(),
http_url: this.settings.serviceUrl, http_url: this.settings.serviceUrl,
lnd_state: WizardTypes.LndState.OFFLINE, lnd_state: lndState,
nprofile: this.nprofile, nprofile: this.nprofile,
provider_name: appNamesList, provider_name: appNamesList,
relay_connected: false, relay_connected: this.adminManager.GetNostrConnected(),
relays: this.relays, relays: this.relays,
watchdog_ok: false, watchdog_ok: watchdogOk,
source_name: this.settings.defaultAppName || appNamesList, source_name: this.settings.defaultAppName || appNamesList,
relay_url: relayUrl, relay_url: relayUrl,
automate_liquidity: this.settings.liquiditySettings.liquidityProviderPub !== 'null', automate_liquidity: this.settings.liquiditySettings.liquidityProviderPub !== 'null',
@ -83,6 +95,8 @@ export class Wizard {
} }
} }
} }
WizardState = async (): Promise<WizardTypes.StateResponse> => { WizardState = async (): Promise<WizardTypes.StateResponse> => {
return { return {
config_sent: this.pendingConfig !== null, config_sent: this.pendingConfig !== null,

View file

@ -34,6 +34,11 @@ $(() => {
$("#reset-box").show(); $("#reset-box").show();
$('.continue-button').attr('id', 'set-show-nostr'); $('.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").click(() => {
$('.show-nodey').show() $('.show-nodey').show()
$('#show-nodey-text').hide() $('#show-nodey-text').hide()
@ -73,6 +78,21 @@ $(() => {
$('#show-nostr-text').show() $('#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(() => { $("#cancel-show-nostr").click(() => {
$('.show-nostr').hide() $('.show-nostr').hide()
$('#show-nostr-text').show() $('#show-nostr-text').show()

View file

@ -69,6 +69,27 @@
</div> </div>
</div> </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 class="status-element" style="margin-top: 15px;">
<div>Administrator:</div> <div>Administrator:</div>
<div id="adminNpub" style="line-break: anywhere;"> <div id="adminNpub" style="line-break: anywhere;">
@ -165,8 +186,11 @@
const lndText = lndStateNum === 2 ? 'ONLINE' : (lndStateNum === 1 ? 'SYNCING' : 'OFFLINE') const lndText = lndStateNum === 2 ? 'ONLINE' : (lndStateNum === 1 ? 'SYNCING' : 'OFFLINE')
const lndDot = lndStateNum === 2 ? 'green-dot' : (lndStateNum === 1 ? 'yellow-dot' : 'red-dot') const lndDot = lndStateNum === 2 ? 'green-dot' : (lndStateNum === 1 ? 'yellow-dot' : 'red-dot')
const relayConnected = !!relayUrl 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-nodey-text").innerHTML = name
document.getElementById("show-nostr-text").innerHTML = relayUrl || '—' 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("adminNpub").innerText = admin
document.getElementById("relayStatus").innerHTML = `<span class="${relayConnected ? 'green-dot' : 'red-dot'}">&#9679;</span> ${relayConnected ? 'Connected' : 'Disconnected'}` 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}` document.getElementById("lndStatus").innerHTML = `<span class="${lndDot}">&#9679;</span> ${lndText}`