From 935621567aad5502fed0c1a771e97f4c875a5c44 Mon Sep 17 00:00:00 2001 From: Kieran Date: Wed, 26 Jul 2023 11:01:35 +0100 Subject: [PATCH] Update api --- src/element/nostr-provider-dialog.tsx | 35 ++++++++++++++++++--------- src/providers/index.ts | 15 ++++++++---- src/providers/nip103.ts | 29 +++++++++++++++------- 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/src/element/nostr-provider-dialog.tsx b/src/element/nostr-provider-dialog.tsx index deaa39b..3cf9fa7 100644 --- a/src/element/nostr-provider-dialog.tsx +++ b/src/element/nostr-provider-dialog.tsx @@ -1,5 +1,5 @@ import { NostrEvent } from "@snort/system"; -import { StreamProvider, StreamProviderInfo } from "providers"; +import { StreamProvider, StreamProviderEndpoint, StreamProviderInfo } from "providers"; import { useEffect, useState } from "react"; import { SendZaps } from "./send-zap"; import { StreamEditor, StreamEditorProps } from "./stream-editor"; @@ -11,9 +11,13 @@ const DummyEvent = { content: "", id: "", pubkey: "", sig: "", kind: LIVE_STREAM export function NostrProviderDialog({ provider, ...others }: { provider: StreamProvider } & StreamEditorProps) { const [topup, setTopup] = useState(false); const [info, setInfo] = useState(); + const [ep, setEndpoint] = useState(); useEffect(() => { - provider.info().then(v => setInfo(v)); + provider.info().then(v => { + setInfo(v); + setEndpoint(v.endpoints[0]); + }); }, [provider]); if (!info) { @@ -38,30 +42,39 @@ export function NostrProviderDialog({ provider, ...others }: { provider: StreamP } function calcEstimate() { - if (!info?.rate || !info?.unit || !info?.balance || !info.balance) return; + if (!ep?.rate || !ep?.unit || !info?.balance || !info.balance) return; - const raw = Math.max(0, info.balance / info.rate); - if (info.unit === "min" && raw > 60) { - return `${(raw / 60).toFixed(0)} hour` + const raw = Math.max(0, info.balance / ep.rate); + if (ep.unit === "min" && raw > 60) { + return `${(raw / 60).toFixed(0)} hour @ ${ep.rate} sats/${ep.unit}` } - return `${raw.toFixed(0)} ${info.unit}` + return `${raw.toFixed(0)} ${ep.unit} @ ${ep.rate} sats/${ep.unit}` } const streamEvent = others.ev ?? info.publishedEvent ?? DummyEvent; return <> + {info.endpoints.length > 1 &&
+

Endpoint

+
+ {info.endpoints.map(a => setEndpoint(a)}> + {a.name} + )} +
+
}

Stream Url

- +

Stream Key

- +
-
@@ -76,7 +89,7 @@ export function NostrProviderDialog({ provider, ...others }: { provider: StreamP Topup
- About {calcEstimate()} @ {info.rate} sats/{info.unit} + About {calcEstimate()} {streamEvent && { provider.updateStreamInfo(ex); diff --git a/src/providers/index.ts b/src/providers/index.ts index ffb4499..c10d084 100644 --- a/src/providers/index.ts +++ b/src/providers/index.ts @@ -44,14 +44,18 @@ export interface StreamProviderInfo { version?: string state: StreamState viewers?: number - ingressUrl?: string - ingressKey?: string - balance?: number publishedEvent?: NostrEvent + balance?: number + endpoints: Array +} + +export interface StreamProviderEndpoint { + name: string + url: string + key: string rate?: number unit?: string } - export class ProviderStore extends ExternalStore> { #providers: Array = [] @@ -86,7 +90,8 @@ export class ProviderStore extends ExternalStore> { } takeSnapshot() { - return [new Nip103StreamProvider("https://api.zap.stream/api/nostr/"), new ManualProvider(), ...this.#providers]; + //const defaultProvider = new Nip103StreamProvider("https://api.zap.stream/api/nostr/"); + return [new ManualProvider(), ...this.#providers]; } #save() { diff --git a/src/providers/nip103.ts b/src/providers/nip103.ts index 25cac3d..657618a 100644 --- a/src/providers/nip103.ts +++ b/src/providers/nip103.ts @@ -1,4 +1,4 @@ -import { StreamProvider, StreamProviderInfo, StreamProviders } from "."; +import { StreamProvider, StreamProviderEndpoint, StreamProviderInfo, StreamProviders } from "."; import { EventKind, NostrEvent } from "@snort/system"; import { Login } from "index"; import { getPublisher } from "login"; @@ -28,12 +28,17 @@ export class Nip103StreamProvider implements StreamProvider { name: title ?? "", state: state, viewers: 0, - ingressUrl: rsp.url, - ingressKey: rsp.key, - balance: rsp.quota.remaining, publishedEvent: rsp.event, - rate: rsp.quota.rate, - unit: rsp.quota.unit + balance: rsp.balance, + endpoints: rsp.endpoints.map(a => { + return { + name: a.name, + url: a.url, + key: a.key, + rate: a.cost.rate, + unit: a.cost.unit, + } as StreamProviderEndpoint + }) } as StreamProviderInfo } @@ -89,14 +94,20 @@ export class Nip103StreamProvider implements StreamProvider { } interface AccountResponse { + balance: number + event?: NostrEvent + endpoints: Array +} + +interface IngestEndpoint { + name: string url: string key: string - event?: NostrEvent - quota: { + cost: { unit: string rate: number - remaining: number } + capabilities: Array } interface TopUpResponse {