diff --git a/src/components/RelayHubStatus.vue b/src/components/RelayHubStatus.vue index 42ea0fd..1225231 100644 --- a/src/components/RelayHubStatus.vue +++ b/src/components/RelayHubStatus.vue @@ -60,6 +60,41 @@
Local: {{ activeSubscriptions.size }}
Global: {{ totalSubscriptionCount }}
+ + +
+
Subscription Details:
+
+
+
+ ID: {{ sub.id }} +
+
+ Filters: {{ sub.filters.length }} filter(s) +
+
+ {{ JSON.stringify(filter) }} +
+
+
+
+ Relays: {{ sub.relays.join(', ') }} +
+
+
+
+ +
+ No active subscriptions found +
@@ -76,6 +111,7 @@ const { connectedRelayCount, totalRelayCount, totalSubscriptionCount, + subscriptionDetails, connectionHealth, connect, disconnect, @@ -254,8 +290,77 @@ const { .subscription-count { font-size: 1.5rem; - font-weight: 600; + font-weight: bold; color: #3b82f6; + margin-bottom: 1rem; +} + +.subscription-details { + margin-top: 1rem; + padding: 1rem; + background-color: #f1f5f9; + border-radius: 0.375rem; +} + +.subscription-details h5 { + margin: 0 0 0.75rem 0; + color: #475569; + font-size: 0.875rem; + font-weight: 600; +} + +.subscription-list { + /* Individual subscription items handle their own spacing */ +} + +.subscription-item { + padding: 0.75rem; + background-color: white; + border: 1px solid #e2e8f0; + border-radius: 0.375rem; + margin-bottom: 0.75rem; +} + +.subscription-item:last-child { + margin-bottom: 0; +} + +.subscription-id { + margin-bottom: 0.5rem; + font-family: monospace; + font-size: 0.875rem; +} + +.subscription-filters { + margin-bottom: 0.5rem; +} + +.filter-details { + margin-top: 0.25rem; + margin-left: 1rem; +} + +.filter-item { + margin-bottom: 0.25rem; +} + +.filter-item code { + background-color: #f8fafc; + padding: 0.125rem 0.25rem; + border-radius: 0.25rem; + font-size: 0.75rem; + color: #475569; +} + +.subscription-relays { + font-size: 0.875rem; + color: #64748b; +} + +.no-subscriptions { text-align: center; + color: #94a3b8; + font-style: italic; + padding: 1rem; } diff --git a/src/composables/useRelayHub.ts b/src/composables/useRelayHub.ts index d649bd4..7432fdb 100644 --- a/src/composables/useRelayHub.ts +++ b/src/composables/useRelayHub.ts @@ -14,6 +14,9 @@ export function useRelayHub() { const connectedRelayCount = ref(0) const totalRelayCount = ref(0) const totalSubscriptionCount = ref(0) + + // Reactive subscription details + const subscriptionDetails = ref>([]) // Computed properties const connectionHealth = computed(() => { @@ -231,6 +234,7 @@ export function useRelayHub() { connectedRelayCount.value = relayHub.connectedRelayCount totalRelayCount.value = relayHub.totalRelayCount totalSubscriptionCount.value = relayHub.totalSubscriptionCount + subscriptionDetails.value = relayHub.subscriptionDetails } // Update immediately and then every 10 seconds @@ -280,6 +284,7 @@ export function useRelayHub() { connectedRelayCount, totalRelayCount, totalSubscriptionCount, + subscriptionDetails, connectionHealth, // Methods diff --git a/src/lib/nostr/relayHub.ts b/src/lib/nostr/relayHub.ts index df759c3..7ad64e0 100644 --- a/src/lib/nostr/relayHub.ts +++ b/src/lib/nostr/relayHub.ts @@ -97,6 +97,17 @@ export class RelayHub extends EventEmitter { return this.subscriptions.size } + get subscriptionDetails(): Array<{ id: string; filters: any[]; relays?: string[] }> { + return Array.from(this.subscriptions.entries()).map(([id, subscription]) => { + // Try to extract subscription details if available + return { + id, + filters: subscription.filters || [], + relays: subscription.relays || [] + } + }) + } + get relayStatuses(): RelayStatus[] { return Array.from(this.relayConfigs.values()).map(config => { const relay = this.connectedRelays.get(config.url) diff --git a/src/pages/RelayHubDemo.vue b/src/pages/RelayHubDemo.vue index 38fefe3..e95b888 100644 --- a/src/pages/RelayHubDemo.vue +++ b/src/pages/RelayHubDemo.vue @@ -10,10 +10,36 @@ -
+
+

Relay Hub Status

+ +
+

Subscription Details

+
+
+
+ {{ sub.id }} +
+
+
Filters: {{ sub.filters.length }} filter(s)
+
+ Relays: {{ sub.relays.join(', ') }} +
+
+
+
+
+ No active subscriptions +
+
+

Connection Test

@@ -140,6 +166,7 @@ const { connectionStatus, connectionHealth, connectedRelayCount, + subscriptionDetails, initialize, connect, subscribe