diff --git a/nostr_dvm/subscription.py b/nostr_dvm/subscription.py index 04316c6..e17d619 100644 --- a/nostr_dvm/subscription.py +++ b/nostr_dvm/subscription.py @@ -176,7 +176,7 @@ class Subscription: # TODO add details about DVM in message invoice = zaprequest(lud16, splitted_amount, tier, None, - PublicKey.parse(zap[1]), self.keys, DVMConfig.RELAY_LIST) + PublicKey.parse(zap[1]), self.keys, self.dvm_config.RELAY_LIST) print(invoice) if invoice is not None: nwc_event_id = await nwc_zap(nwc, invoice, self.keys, zap[2]) diff --git a/nostr_dvm/tasks/content_discovery_currently_latest_longform.py b/nostr_dvm/tasks/content_discovery_currently_latest_longform.py index 944584a..a1207a1 100644 --- a/nostr_dvm/tasks/content_discovery_currently_latest_longform.py +++ b/nostr_dvm/tasks/content_discovery_currently_latest_longform.py @@ -177,7 +177,7 @@ class DicoverContentLatestLongForm(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).opts(opts).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/tasks/content_discovery_currently_latest_wiki.py b/nostr_dvm/tasks/content_discovery_currently_latest_wiki.py index 53f9a40..68ed059 100644 --- a/nostr_dvm/tasks/content_discovery_currently_latest_wiki.py +++ b/nostr_dvm/tasks/content_discovery_currently_latest_wiki.py @@ -177,7 +177,7 @@ class DicoverContentLatestWiki(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).opts(opts).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/tasks/content_discovery_currently_popular.py b/nostr_dvm/tasks/content_discovery_currently_popular.py index 35a86f1..ac09e91 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular.py @@ -174,7 +174,7 @@ class DicoverContentCurrentlyPopular(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_by_top_zaps.py b/nostr_dvm/tasks/content_discovery_currently_popular_by_top_zaps.py index 683a63a..1b0a56c 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_by_top_zaps.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_by_top_zaps.py @@ -218,7 +218,7 @@ class DicoverContentCurrentlyPopularZaps(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_followers.py b/nostr_dvm/tasks/content_discovery_currently_popular_followers.py index ae84170..afa7f8b 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_followers.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_followers.py @@ -99,7 +99,7 @@ class DicoverContentCurrentlyPopularFollowers(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().database(database).signer(keys).opts(opts).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) # ropts = RelayOptions().ping(False) @@ -194,7 +194,7 @@ class DicoverContentCurrentlyPopularFollowers(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_gallery.py b/nostr_dvm/tasks/content_discovery_currently_popular_gallery.py index f2d9455..3bc1857 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_gallery.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_gallery.py @@ -154,7 +154,7 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface): for relay in relays: await cli.add_relay(relay) - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() @@ -243,7 +243,7 @@ class DicoverContentCurrentlyPopularGallery(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_mostr.py b/nostr_dvm/tasks/content_discovery_currently_popular_mostr.py index 4794496..b4cc5c1 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_mostr.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_mostr.py @@ -187,7 +187,7 @@ class DicoverContentCurrentlyPopularMostr(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() @@ -240,7 +240,7 @@ def build_example(name, identifier, admin_config, options, cost=0, update_rate=1 dvm_config.SHOWLOG = True dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db - dvm_config.RECONCILE_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] + dvm_config.SYNC_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] # Activate these to use a subscription based model instead # dvm_config.SUBSCRIPTION_REQUIRED = True # dvm_config.SUBSCRIPTION_DAILY_COST = 1 @@ -286,7 +286,7 @@ def build_example_subscription(name, identifier, admin_config, options, update_r dvm_config = build_default_config(identifier) dvm_config.USE_OWN_VENV = False dvm_config.SHOWLOG = True - dvm_config.RECONCILE_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] + dvm_config.SYNC_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 3 minutes dvm_config.UPDATE_DATABASE = update_db # Activate these to use a subscription based model instead diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_nonfollowers.py b/nostr_dvm/tasks/content_discovery_currently_popular_nonfollowers.py index 8b1afac..829c77e 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_nonfollowers.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_nonfollowers.py @@ -148,7 +148,7 @@ class DicoverContentCurrentlyPopularNonFollowers(DVMTaskInterface): self.database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().database(self.database).signer(keys).opts(opts).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) # ropts = RelayOptions().ping(False) @@ -230,7 +230,7 @@ class DicoverContentCurrentlyPopularNonFollowers(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/tasks/content_discovery_currently_popular_topic.py b/nostr_dvm/tasks/content_discovery_currently_popular_topic.py index fdf7f12..91c1d73 100644 --- a/nostr_dvm/tasks/content_discovery_currently_popular_topic.py +++ b/nostr_dvm/tasks/content_discovery_currently_popular_topic.py @@ -207,7 +207,7 @@ class DicoverContentCurrentlyPopularbyTopic(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/tasks/content_discovery_update_db_only.py b/nostr_dvm/tasks/content_discovery_update_db_only.py index dc9c4f9..7487ace 100644 --- a/nostr_dvm/tasks/content_discovery_update_db_only.py +++ b/nostr_dvm/tasks/content_discovery_update_db_only.py @@ -139,7 +139,7 @@ class DicoverContentDBUpdateScheduler(DVMTaskInterface): cli = ClientBuilder().signer(keys).database(self.database).opts(opts).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() @@ -149,7 +149,7 @@ class DicoverContentDBUpdateScheduler(DVMTaskInterface): filtering = cli.filtering() index_map, G = await build_wot_network(self.dvm_config.WOT_BASED_ON_NPUBS, depth=self.dvm_config.WOT_DEPTH, max_batch=500, - max_time_request=10) + max_time_request=10, dvm_config=self.dvm_config) # Do we actually need pagerank here? # print('computing global pagerank...') diff --git a/nostr_dvm/tasks/people_discovery_mywot.py b/nostr_dvm/tasks/people_discovery_mywot.py index 454c0be..0c1d9f5 100644 --- a/nostr_dvm/tasks/people_discovery_mywot.py +++ b/nostr_dvm/tasks/people_discovery_mywot.py @@ -134,7 +134,7 @@ class DiscoverPeopleMyWOT(DVMTaskInterface): user_id = PublicKey.parse(options["user"]).to_hex() index_map, G = await build_wot_network(options["user"], depth=int(options["hops"]), max_batch=500, - max_time_request=10) + max_time_request=10, dvm_config=self.dvm_config) if use_files: save_network(index_map, G, options["user"]) @@ -207,7 +207,7 @@ class DiscoverPeopleMyWOT(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/tasks/people_discovery_wot.py b/nostr_dvm/tasks/people_discovery_wot.py index 2ddbf29..591afdc 100644 --- a/nostr_dvm/tasks/people_discovery_wot.py +++ b/nostr_dvm/tasks/people_discovery_wot.py @@ -212,7 +212,7 @@ class DiscoverPeopleWOT(DVMTaskInterface): database = NostrDatabase.lmdb(self.db_name) cli = ClientBuilder().signer(keys).database(database).build() - for relay in self.dvm_config.RECONCILE_DB_RELAY_LIST: + for relay in self.dvm_config.SYNC_DB_RELAY_LIST: await cli.add_relay(relay) await cli.connect() diff --git a/nostr_dvm/utils/admin_utils.py b/nostr_dvm/utils/admin_utils.py index 76eb5a0..b399f9a 100644 --- a/nostr_dvm/utils/admin_utils.py +++ b/nostr_dvm/utils/admin_utils.py @@ -95,7 +95,7 @@ async def admin_make_database_updates(adminconfig: AdminConfig = None, dvmconfig nut_wallet = await nutzap_wallet.get_nut_wallet(client, keys) lud16 = adminconfig.LUD16 npub = keys.public_key().to_hex() - await nutzap_wallet.melt_cashu(nut_wallet, DVMConfig.NUZAP_MINTS[0], nut_wallet.balance, client, keys, lud16, + await nutzap_wallet.melt_cashu(nut_wallet, dvmconfig.NUZAP_MINTS[0], nut_wallet.balance, client, keys, lud16, npub) await nutzap_wallet.get_nut_wallet(client, keys) diff --git a/nostr_dvm/utils/dvmconfig.py b/nostr_dvm/utils/dvmconfig.py index e6c0cfe..21e545a 100644 --- a/nostr_dvm/utils/dvmconfig.py +++ b/nostr_dvm/utils/dvmconfig.py @@ -2,10 +2,10 @@ import os from nostr_sdk import Keys, LogLevel +from nostr_dvm.utils import outbox_utils from nostr_dvm.utils.nip88_utils import NIP88Config from nostr_dvm.utils.nip89_utils import NIP89Config from nostr_dvm.utils.nostr_utils import check_and_set_private_key -from nostr_dvm.utils.outbox_utils import AVOID_OUTBOX_RELAY_LIST from nostr_dvm.utils.zap_utils import check_and_set_ln_bits_keys @@ -21,8 +21,10 @@ class DVMConfig: "wss://relay.nostr.net" ] - RECONCILE_DB_RELAY_LIST = ["wss://relay.damus.io", "wss://nostr.oxtr.dev", - "wss://relay.nostr.net", "wss://relay.primal.net"] + SYNC_DB_RELAY_LIST = ["wss://relay.damus.io", "wss://nostr.oxtr.dev", + "wss://relay.nostr.net", + "wss://relay.primal.net" + ] # Straight Censorship (reply guy spam) WOT_FILTERING = False @@ -32,7 +34,7 @@ class DVMConfig: ] WOT_DEPTH = 2 - AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + AVOID_OUTBOX_RELAY_LIST = outbox_utils.AVOID_OUTBOX_RELAY_LIST # If a DVM has a paid subscription, overwrite list without the paid one. RELAY_TIMEOUT = 5 diff --git a/nostr_dvm/utils/nostr_utils.py b/nostr_dvm/utils/nostr_utils.py index 49bbe10..e9979f6 100644 --- a/nostr_dvm/utils/nostr_utils.py +++ b/nostr_dvm/utils/nostr_utils.py @@ -124,7 +124,7 @@ async def get_inbox_relays(event_to_send: Event, client: Client, dvm_config): if ((tag.as_vec()[0] == 'r' and len(tag.as_vec()) == 2) or ((tag.as_vec()[0] == 'r' and len(tag.as_vec()) == 3) and tag.as_vec()[2] == "read")): rtag = tag.as_vec()[1] - if rtag.rstrip("/") not in dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST: + if rtag.rstrip("/") not in dvm_config.AVOID_OUTBOX_RELAY_LIST: if rtag.startswith("ws") and " " not in rtag: relays.append(rtag) return relays @@ -148,7 +148,7 @@ async def get_dm_relays(event_to_send: Event, client: Client, dvm_config): if ((tag.as_vec()[0] == 'r' and len(tag.as_vec()) == 2) or ((tag.as_vec()[0] == 'r' and len(tag.as_vec()) == 3) and tag.as_vec()[2] == "read")): rtag = tag.as_vec()[1] - if rtag.rstrip("/") not in dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST: + if rtag.rstrip("/") not in dvm_config.AVOID_OUTBOX_RELAY_LIST: if rtag.startswith("ws") and " " not in rtag: relays.append(rtag) return relays @@ -190,7 +190,7 @@ async def send_event_outbox(event: Event, client, dvm_config) -> EventId: if tag.as_vec()[0] == 'relays': for index, param in enumerate(tag.as_vec()): if index != 0: - if tag.as_vec()[index].rstrip("/") not in dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST: + if tag.as_vec()[index].rstrip("/") not in dvm_config.AVOID_OUTBOX_RELAY_LIST: try: relays.append(tag.as_vec()[index]) except: @@ -214,9 +214,7 @@ async def send_event_outbox(event: Event, client, dvm_config) -> EventId: relaylimits = RelayLimits.disable() connection = Connection().embedded_tor().target(ConnectionTarget.ONION) # connection = Connection().addr("127.0.0.1:9050").target(ConnectionTarget.ONION) - opts = (( - Options().relay_limits(relaylimits)).connection(connection).connection_timeout(timedelta(seconds=30))) - + opts = Options().relay_limits(relaylimits).connection(connection).connection_timeout(timedelta(seconds=30)) sk = SecretKey.from_hex(dvm_config.PRIVATE_KEY) keys = Keys.parse(sk.to_hex()) outboxclient = Client.with_opts(keys, opts) @@ -261,6 +259,7 @@ async def send_event_outbox(event: Event, client, dvm_config) -> EventId: event_id = None print(e) + await outboxclient.disconnect() await outboxclient.shutdown() return event_id @@ -272,7 +271,7 @@ async def send_event(event: Event, client: Client, dvm_config): if tag.as_vec()[0] == 'relays': for index, param in enumerate(tag.as_vec()): if index != 0: - if tag.as_vec()[index].rstrip("/") not in dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST: + if tag.as_vec()[index].rstrip("/") not in dvm_config.AVOID_OUTBOX_RELAY_LIST: try: relays.append(tag.as_vec()[index]) except: @@ -280,6 +279,9 @@ async def send_event(event: Event, client: Client, dvm_config): index] + " couldn't be added to outbox relays") break + if len(relays) == 0: + relays = dvm_config.RELAY_LIST + for relay in relays: if relay not in dvm_config.RELAY_LIST: await client.add_relay(relay) @@ -292,8 +294,7 @@ async def send_event(event: Event, client: Client, dvm_config): for relay in relays: if relay not in dvm_config.RELAY_LIST: - if relay not in dvm_config.RELAY_LIST: - await client.remove_relay(relay) + await client.force_remove_relay(relay) return event_id except Exception as e: print(e) diff --git a/setup.py b/setup.py index ed6dbe7..54dc80a 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -VERSION = '0.9.10' +VERSION = '0.9.11' DESCRIPTION = 'A framework to build and run Nostr NIP90 Data Vending Machines' LONG_DESCRIPTION = ('A framework to build and run Nostr NIP90 Data Vending Machines. See the github repository for more information') diff --git a/tests/discovery.py b/tests/discovery.py index 419852a..4380d43 100644 --- a/tests/discovery.py +++ b/tests/discovery.py @@ -38,12 +38,16 @@ update_profile = False global_update_rate = 180 # set this high on first sync so db can fully sync before another process trys to. use_logger = True log_level = LogLevel.ERROR +max_sync_duration_in_h = 6 -RECONCILE_DB_RELAY_LIST = [ "wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.oxtr.dev"] +SYNC_DB_RELAY_LIST = [ "wss://relay.damus.io", + #"wss://relay.primal.net", + "wss://nostr.oxtr.dev"] -RELAY_LIST = ["wss://relay.primal.net", - "wss://nostr.mom", "wss://nostr.oxtr.dev", +RELAY_LIST = [#"wss://relay.primal.net", + "wss://nostr.mom", + "wss://nostr.oxtr.dev", "wss://relay.nostr.net" ] @@ -59,7 +63,7 @@ def build_db_scheduler(name, identifier, admin_config, options, image, descripti dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db dvm_config.LOGLEVEL = LogLevel.INFO - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.DATABASE = database dvm_config.WOT_FILTERING = True @@ -107,7 +111,7 @@ def build_example_gallery(name, identifier, admin_config, options, image, cost=0 # dvm_config.SHOWLOG = True dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg @@ -145,8 +149,8 @@ def build_example_nostrband(name, identifier, admin_config, image, about, custom dvm_config: DVMConfig = build_default_config(identifier) dvm_config.USE_OWN_VENV = False dvm_config.CUSTOM_PROCESSING_MESSAGE = custom_processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.LOGLEVEL = LogLevel.INFO admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -177,8 +181,8 @@ def build_longform(name, identifier, admin_config, options, cost=0, update_rate= dvm_config.SHOWLOG = True dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.LOGLEVEL = LogLevel.INFO # Activate these to use a subscription based model instead @@ -229,8 +233,8 @@ def build_wiki(name, identifier, admin_config, options, cost=0, update_rate=180, dvm_config.SHOWLOG = True dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.LOGLEVEL = LogLevel.INFO # Activate these to use a subscription based model instead @@ -284,8 +288,8 @@ def build_example_topic(name, identifier, admin_config, options, image, descript dvm_config.FIX_COST = cost dvm_config.LOGLEVEL = LogLevel.INFO dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.DATABASE = database admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -326,8 +330,8 @@ def build_example_popular(name, identifier, admin_config, options, image, cost=0 dvm_config.UPDATE_DATABASE = update_db dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.DATABASE = database admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -369,8 +373,8 @@ def build_example_popular_followers(name, identifier, admin_config, options, ima dvm_config.UPDATE_DATABASE = update_db dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -416,8 +420,8 @@ def build_example_popular_non_followers(name, identifier, admin_config, options, # Activate these to use a subscription based model instead dvm_config.FIX_COST = 10 dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.SUBSCRIPTION_REQUIRED = False admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -484,8 +488,8 @@ def build_example_top_zapped(name, identifier, admin_config, options, image, cos dvm_config.UPDATE_DATABASE = update_db dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.DATABASE = database admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -530,9 +534,9 @@ def build_example_mostr(name, identifier, admin_config, options, image, cost=0, # dvm_config.SHOWLOG = True dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = ["wss://nfrelay.app/?user=activitypub"] + dvm_config.SYNC_DB_RELAY_LIST = ["wss://nfrelay.app/?user=activitypub"] dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg @@ -574,7 +578,8 @@ def build_example_oneperfollow(name, identifier, admin_config, options, image, c dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = False dvm_config.FIX_COST = cost - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -617,7 +622,7 @@ def playground(): admin_config_db_scheduler= AdminConfig() options_animal = { "db_name": main_db, - "db_since": 6 * 60 * 60, # 48h since gmt, + "db_since": max_sync_duration_in_h * 60 * 60, # 48h since gmt, "personalized": False, "logger": False} image = "" @@ -1162,7 +1167,7 @@ def playground(): subscription_config.PRIVATE_KEY = check_and_set_private_key("dvm_subscription") npub = Keys.parse(subscription_config.PRIVATE_KEY).public_key().to_bech32() invoice_key, admin_key, wallet_id, lnaddress = check_and_set_ln_bits_keys("dvm_subscription", npub) - subscription_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + subscription_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST subscription_config.RELAY_LIST = RELAY_LIST subscription_config.LNBITS_INVOICE_KEY = invoice_key subscription_config.LNBITS_ADMIN_KEY = admin_key # The dvm might pay failed jobs back diff --git a/tests/discovery_custom_feed.py b/tests/discovery_custom_feed.py index eebbe40..679aaac 100644 --- a/tests/discovery_custom_feed.py +++ b/tests/discovery_custom_feed.py @@ -17,13 +17,13 @@ update_profile = True global_update_rate = 60 # set this high on first sync so db can fully sync before another process trys to. use_logger = True # these do not support nengentropy -#RECONCILE_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] # , "wss://relay.snort.social"] +#SYNC_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] # , "wss://relay.snort.social"] if use_logger: init_logger(LogLevel.ERROR) -RECONCILE_DB_RELAY_LIST = [ "wss://relay.nostr.net", "wss://relay.nostr.bg", "wss://relay.damus.io", "wss://nostr.oxtr.dev"] +SYNC_DB_RELAY_LIST = [ "wss://relay.nostr.net", "wss://relay.nostr.bg", "wss://relay.damus.io", "wss://nostr.oxtr.dev"] RELAY_LIST = ["wss://relay.primal.net", "wss://nostr.mom", "wss://nostr.oxtr.dev", "wss://relay.nostr.net" @@ -39,7 +39,7 @@ def build_example_topic(name, identifier, admin_config, options, image, descript dvm_config.FIX_COST = cost dvm_config.LOGLEVEL = LogLevel.DEBUG dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST admin_config.LUD16 = dvm_config.LN_ADDRESS diff --git a/tests/discovery_mostr.py b/tests/discovery_mostr.py index dde3dbd..a5c0e71 100644 --- a/tests/discovery_mostr.py +++ b/tests/discovery_mostr.py @@ -18,7 +18,7 @@ update_profile = False global_update_rate = 60 # set this high on first sync so db can fully sync before another process trys to. use_logger = True # these do not support nengentropy -#RECONCILE_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] # , "wss://relay.snort.social"] +#SYNC_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] # , "wss://relay.snort.social"] if use_logger: init_logger(LogLevel.DEBUG) @@ -32,7 +32,7 @@ def build_example_mostr(name, identifier, admin_config, options, image, cost=0, # dvm_config.SHOWLOG = True dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db - dvm_config.RECONCILE_DB_RELAY_LIST = ["wss://nfrelay.app/?user=activitypub"] + dvm_config.SYNC_DB_RELAY_LIST = ["wss://nfrelay.app/?user=activitypub"] dvm_config.LOGLEVEL = LogLevel.DEBUG dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg diff --git a/tests/discovery_one_per_follow.py b/tests/discovery_one_per_follow.py index 2fcdf2e..b230ffd 100644 --- a/tests/discovery_one_per_follow.py +++ b/tests/discovery_one_per_follow.py @@ -17,7 +17,7 @@ update_profile = False global_update_rate = 60 # set this high on first sync so db can fully sync before another process trys to. use_logger = True # these do not support nengentropy -#RECONCILE_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] # , "wss://relay.snort.social"] +#SYNC_DB_RELAY_LIST = ["wss://relay.momostr.pink", "wss://relay.mostr.pub/"] # , "wss://relay.snort.social"] if use_logger: init_logger(LogLevel.ERROR) diff --git a/tests/discovery_people.py b/tests/discovery_people.py index 91a8954..4d91656 100644 --- a/tests/discovery_people.py +++ b/tests/discovery_people.py @@ -19,7 +19,7 @@ global_update_rate = 1200 # set this high on first sync so db can fully sync use_logger = True -#RECONCILE_DB_RELAY_LIST = ["wss://relay.damus.io"] # , "wss://relay.snort.social"] +#SYNC_DB_RELAY_LIST = ["wss://relay.damus.io"] # , "wss://relay.snort.social"] if use_logger: @@ -36,7 +36,7 @@ def build_example_wot(name, identifier, admin_config, options, image, cost=0, up # dvm_config.SHOWLOG = True dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db - #dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + #dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.LOGLEVEL = LogLevel.DEBUG dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg diff --git a/tests/discovery_test.py b/tests/discovery_test.py index 89b919f..aee8b64 100644 --- a/tests/discovery_test.py +++ b/tests/discovery_test.py @@ -43,7 +43,7 @@ if use_logger: -RECONCILE_DB_RELAY_LIST = [ "wss://relay.nostr.net", "wss://relay.nostr.bg", "wss://relay.damus.io", "wss://nostr.oxtr.dev"] +SYNC_DB_RELAY_LIST = [ "wss://relay.nostr.net", "wss://relay.nostr.bg", "wss://relay.damus.io", "wss://nostr.oxtr.dev"] RELAY_LIST = ["wss://relay.primal.net", "wss://nostr.mom", "wss://nostr.oxtr.dev", "wss://relay.nostr.net" @@ -59,7 +59,7 @@ def build_db_scheduler(name, identifier, admin_config, options, image, descripti dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db dvm_config.LOGLEVEL = LogLevel.INFO - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST # Activate these to use a subscription based model instead @@ -106,7 +106,7 @@ def build_example_gallery(name, identifier, admin_config, options, image, cost=0 dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db dvm_config.LOGLEVEL = LogLevel.DEBUG - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg @@ -144,7 +144,7 @@ def build_example_nostrband(name, identifier, admin_config, image, about, custom dvm_config: DVMConfig = build_default_config(identifier) dvm_config.USE_OWN_VENV = False dvm_config.CUSTOM_PROCESSING_MESSAGE = custom_processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.LOGLEVEL = LogLevel.INFO admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -175,8 +175,8 @@ def build_longform(name, identifier, admin_config, options, cost=0, update_rate= dvm_config.SHOWLOG = True dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.LOGLEVEL = LogLevel.INFO # Activate these to use a subscription based model instead @@ -227,8 +227,8 @@ def build_wiki(name, identifier, admin_config, options, cost=0, update_rate=180, dvm_config.SHOWLOG = True dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = RECONCILE_DB_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.SYNC_DB_RELAY_LIST = SYNC_DB_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.LOGLEVEL = LogLevel.INFO # Activate these to use a subscription based model instead @@ -282,7 +282,7 @@ def build_example_topic(name, identifier, admin_config, options, image, descript dvm_config.FIX_COST = cost dvm_config.LOGLEVEL = LogLevel.INFO dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -324,7 +324,7 @@ def build_example_popular(name, identifier, admin_config, options, image, cost=0 dvm_config.UPDATE_DATABASE = update_db dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -365,7 +365,7 @@ def build_example_popular_followers(name, identifier, admin_config, options, ima dvm_config.UPDATE_DATABASE = update_db dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -410,7 +410,7 @@ def build_example_popular_non_followers(name, identifier, admin_config, options, # Activate these to use a subscription based model instead dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST dvm_config.SUBSCRIPTION_REQUIRED = True admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -477,7 +477,7 @@ def build_example_top_zapped(name, identifier, admin_config, options, image, cos dvm_config.UPDATE_DATABASE = update_db dvm_config.FIX_COST = cost dvm_config.CUSTOM_PROCESSING_MESSAGE = processing_msg - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST dvm_config.RELAY_LIST = RELAY_LIST admin_config.LUD16 = dvm_config.LN_ADDRESS @@ -522,7 +522,7 @@ def build_example_mostr(name, identifier, admin_config, options, image, cost=0, dvm_config.SCHEDULE_UPDATES_SECONDS = update_rate # Every 10 minutes dvm_config.UPDATE_DATABASE = update_db dvm_config.RELAY_LIST = RELAY_LIST - dvm_config.RECONCILE_DB_RELAY_LIST = ["wss://nfrelay.app/?user=activitypub"] + dvm_config.SYNC_DB_RELAY_LIST = ["wss://nfrelay.app/?user=activitypub"] dvm_config.LOGLEVEL = LogLevel.DEBUG dvm_config.FIX_COST = cost diff --git a/tests/search.py b/tests/search.py index e23ba0d..618d2fd 100644 --- a/tests/search.py +++ b/tests/search.py @@ -145,7 +145,7 @@ def build_advanced_search_wine(name, identifier): def build_user_search(name, identifier): dvm_config = build_default_config(identifier) - dvm_config.RECONCILE_DB_RELAY_LIST = ["wss://relay.damus.io"] + dvm_config.SYNC_DB_RELAY_LIST = ["wss://relay.damus.io"] npub = Keys.parse(dvm_config.PRIVATE_KEY).public_key().to_bech32() dvm_config.RELAY_LIST = RELAY_LIST invoice_key, admin_key, wallet_id, lnaddress = check_and_set_ln_bits_keys(identifier, npub) diff --git a/tests/wot.py b/tests/wot.py index 3583522..4eba286 100644 --- a/tests/wot.py +++ b/tests/wot.py @@ -29,7 +29,7 @@ async def getmetadata(npub): keys = Keys.parse("nsec1zmzllu40a7mr7ztl78uwfwslnp0pn0pww868adl05x52d4la237s6m8qfj") client = ClientBuilder().signer(keys).build() await client.add_relay("wss://relay.damus.io") - await client.add_relay("wss://relay.primal.net") + #await client.add_relay("wss://relay.primal.net") await client.add_relay("wss://purplepag.es") await client.connect() diff --git a/tutorials/06_dvm_config.py b/tutorials/06_dvm_config.py index 7992e1b..44229f4 100644 --- a/tutorials/06_dvm_config.py +++ b/tutorials/06_dvm_config.py @@ -57,7 +57,7 @@ def run_dvm(identifier, announce): # but if they do, you can select which ones should be used to sync to your local database. # This example doesn't use reconciliation, but you might want to take a look at tasks/content_discovery_currently.popular.py for example. - dvm_config.RECONCILE_DB_RELAY_LIST = ["wss://relay.damus.io", "wss://nostr.oxtr.dev", + dvm_config.SYNC_DB_RELAY_LIST = ["wss://relay.damus.io", "wss://nostr.oxtr.dev", "wss://relay.nostr.net", "wss://relay.primal.net"] # related to that dvm_config.UPDATE_DATABASE can be used to signal if the dvm should update it's own database at all. @@ -84,7 +84,7 @@ def run_dvm(identifier, announce): # The reason is, some relays might be paid, or use auth, and we might not able to write there, so we just avoid doing it. # In utils/output_utils.py is a list of relays that won't work, but there might be others, or you might want to define your own list, # so you can overwrite it here. Otherwise, defaults will be used. - dvm_config.AVOID_PAID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST + dvm_config.AVOID_OUTBOX_RELAY_LIST = AVOID_OUTBOX_RELAY_LIST # Finally some DVMs might support Web of Trust filtering. # You find an example in tasks/content_discovery_update_db_only.py