nostrdvm/nostr_dvm/utils/external_dvm_utils.py

78 lines
2.8 KiB
Python

import asyncio
import json
from datetime import timedelta
from nostr_sdk import PublicKey, Options, Keys, Client, NostrSigner
from nostr_dvm.interfaces.dvmtaskinterface import DVMTaskInterface
from nostr_dvm.utils.dvmconfig import DVMConfig
from nostr_dvm.utils.nip89_utils import NIP89Config, nip89_fetch_events_pubkey
from nostr_dvm.utils.output_utils import PostProcessFunctionType
async def build_client(config):
keys = Keys.parse(config.PRIVATE_KEY)
client = Client(NostrSigner.keys(keys))
for relay in config.RELAY_LIST:
await client.add_relay(relay)
await client.connect()
return client
def build_external_dvm(pubkey, task, kind, fix_cost, per_unit_cost, config,
external_post_process=PostProcessFunctionType.NONE):
pubkey = PublicKey.parse(pubkey).to_hex()
dvm_config = DVMConfig()
dvm_config.PUBLIC_KEY = pubkey
dvm_config.FIX_COST = fix_cost
dvm_config.PER_UNIT_COST = per_unit_cost
dvm_config.EXTERNAL_POST_PROCESS_TYPE = external_post_process
client = asyncio.run(build_client(config))
nip89content_str = asyncio.run(nip89_fetch_events_pubkey(client, pubkey, kind))
name = "External DVM"
image = "https://image.nostr.build/c33ca6fc4cc038ca4adb46fdfdfda34951656f87ee364ef59095bae1495ce669.jpg"
about = "An External DVM with no info"
nip90params = {}
encryption_supported = False
cashu_accepted = False
if nip89content_str is not None:
print(nip89content_str)
nip89content = json.loads(nip89content_str)
if nip89content.get("name"):
name = nip89content.get("name")
if nip89content.get("picture"):
image = nip89content.get("picture")
elif nip89content.get("image"):
image = nip89content.get("image")
if nip89content.get("about"):
about = nip89content.get("about")
if nip89content.get("nip90Params"):
nip90params = nip89content["nip90Params"]
if nip89content.get("supportsEncryption"):
encryption_supported = nip89content["supportsEncryption"]
if nip89content.get("acceptsNutZaps"):
cashu_accepted = nip89content["acceptsNutZaps"]
else:
print("No NIP89 set for " + name)
nip89info = {
"name": name,
"picture": image,
"about": about,
"supportsEncryption": encryption_supported,
"acceptsNutZaps": cashu_accepted,
"nip90Params": nip90params
}
nip89config = NIP89Config()
nip89config.KIND = kind
nip89config.CONTENT = json.dumps(nip89info)
interface = DVMTaskInterface(name=name, dvm_config=dvm_config, nip89config=nip89config, task=task)
interface.SUPPORTS_ENCRYPTION = encryption_supported
interface.ACCEPTS_CASHU = cashu_accepted
return interface