mirror of
https://github.com/believethehype/nostrdvm.git
synced 2025-03-27 01:51:44 +01:00
72 lines
2.7 KiB
Python
72 lines
2.7 KiB
Python
import json
|
|
from datetime import timedelta
|
|
|
|
from nostr_sdk import PublicKey, Options, Keys, Client, ClientSigner
|
|
|
|
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
|
|
|
|
|
|
def build_external_dvm(pubkey, task, kind, fix_cost, per_unit_cost, config,
|
|
external_post_process=PostProcessFunctionType.NONE):
|
|
dvm_config = DVMConfig()
|
|
dvm_config.PUBLIC_KEY = PublicKey.from_hex(pubkey).to_hex()
|
|
dvm_config.FIX_COST = fix_cost
|
|
dvm_config.PER_UNIT_COST = per_unit_cost
|
|
dvm_config.EXTERNAL_POST_PROCESS_TYPE = external_post_process
|
|
|
|
opts = (Options().wait_for_send(True).send_timeout(timedelta(seconds=config.RELAY_TIMEOUT))
|
|
.skip_disconnected_relays(True))
|
|
keys = Keys.from_sk_str(config.PRIVATE_KEY)
|
|
signer = ClientSigner.keys(keys)
|
|
client = Client.with_opts(signer, opts)
|
|
|
|
|
|
for relay in config.RELAY_LIST:
|
|
client.add_relay(relay)
|
|
client.connect()
|
|
|
|
nip89content_str = 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("image"):
|
|
image = nip89content.get("image")
|
|
if nip89content.get("about"):
|
|
about = nip89content.get("about")
|
|
if nip89content.get("nip90Params"):
|
|
nip90params = nip89content["nip90Params"]
|
|
if nip89content.get("encryptionSupported"):
|
|
encryption_supported = nip89content["encryptionSupported"]
|
|
if nip89content.get("cashuAccepted"):
|
|
cashu_accepted = nip89content["cashuAccepted"]
|
|
else:
|
|
print("No NIP89 set for "+ name)
|
|
nip89info = {
|
|
"name": name,
|
|
"image": image,
|
|
"about": about,
|
|
"encryptionSupported": encryption_supported,
|
|
"cashuAccepted": 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 |