diff --git a/internal_filesystem/lib/userlist.py b/internal_filesystem/lib/userlist.py new file mode 100644 index 00000000..2e112354 --- /dev/null +++ b/internal_filesystem/lib/userlist.py @@ -0,0 +1,29 @@ +# for micropython compatibility + +class UserList: + def __init__(self, initlist=None): + self.data = list(initlist) if initlist is not None else [] + + # Support basic list operations + def __getitem__(self, index): + return self.data[index] + + def __setitem__(self, index, value): + self.data[index] = value + + def __len__(self): + return len(self.data) + + def __iter__(self): + return iter(self.data) + + def append(self, item): + self.data.append(item) + + def extend(self, other): + self.data.extend(other) + + def __repr__(self): + return f"{self.__class__.__name__}({self.data!r})" + + diff --git a/internal_filesystem/lib/websocket.py b/internal_filesystem/lib/websocket.py index d5112035..0250a1ab 100644 --- a/internal_filesystem/lib/websocket.py +++ b/internal_filesystem/lib/websocket.py @@ -147,8 +147,9 @@ class WebSocketApp: while self.running and self.ping_interval: self.last_ping_tm = time.time() try: - await self.ws.send_bytes(self.ping_payload.encode() if isinstance(self.ping_payload, str) else self.ping_payload) - _log_debug("Sending ping") + + #await self.ws.send_bytes(self.ping_payload.encode() if isinstance(self.ping_payload, str) else self.ping_payload) + _log_debug("NOT Sending ping because it seems corrupt") except Exception as e: _log_debug(f"Failed to send ping: {e}") await asyncio.sleep(self.ping_interval) @@ -219,6 +220,8 @@ class WebSocketApp: reconnect = reconnect while self.running: + print("self.running") + time.sleep(1) try: await self._connect_and_run() except Exception as e: @@ -253,6 +256,7 @@ class WebSocketApp: self._start_ping_thread() async for msg in ws: + print(f"received msg: {msg.type} - {msg.data}") if not self.running: break diff --git a/internal_filesystem/lib/websocket_nostr_receive.py b/internal_filesystem/lib/websocket_nostr_receive.py new file mode 100644 index 00000000..f76109b1 --- /dev/null +++ b/internal_filesystem/lib/websocket_nostr_receive.py @@ -0,0 +1,51 @@ +import json +import ssl +import time +from nostr.filter import Filter, Filters +from nostr.event import Event, EventKind +from nostr.relay_manager import RelayManager +from nostr.message_type import ClientMessageType + +#filters = Filters([Filter(authors=[], kinds=[EventKind.TEXT_NOTE])]) +#filters = Filters([Filter(authors="04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9", kinds=[EventKind.TEXT_NOTE])]) +timestamp = round(time.time()-1000) +#filters = Filters([Filter(authors="04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9", kinds=[9735], since=timestamp)]) +filters = Filters([Filter(kinds=[9735], since=timestamp)]) + +subscription_id = "ihopethisworks2" + str(time.time()) +request = [ClientMessageType.REQUEST, subscription_id] +json.dumps(request) +request.extend(filters.to_json_array()) +message = json.dumps(request) +# ["REQ", "ihopethisworks3", {"kinds": [1], "authors": "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9"}] +print(f"sending this: {message}") + + +relay_manager = RelayManager() +#relay_manager.add_relay("wss://nostr-pub.wellorder.net") +relay_manager.add_relay("wss://relay.damus.io") +relay_manager.add_subscription(subscription_id, filters) +time.sleep(2) # allow the connections to open + +print("opening connections") +relay_manager.open_connections({"cert_reqs": ssl.CERT_NONE}) # NOTE: This disables ssl certificate verification +time.sleep(2) # allow the connections to open + +print("publishing:") +relay_manager.publish_message(message) +time.sleep(1) # allow the messages to send + +print("printing events:") +#while relay_manager.message_pool.has_events(): +for _ in range(60): + time.sleep(1) + print(".") + try: + event_msg = relay_manager.message_pool.get_event() + print(event_msg.event.content) + except Exception as e: + print(f"pool.get_event() got error: {e}") + + +print("closing:") +relay_manager.close_connections() diff --git a/internal_filesystem/lib/websocket_nostr_test.py b/internal_filesystem/lib/websocket_nostr_test.py index 5d72a767..3b473914 100644 --- a/internal_filesystem/lib/websocket_nostr_test.py +++ b/internal_filesystem/lib/websocket_nostr_test.py @@ -1,16 +1,23 @@ -from websocket import WebSocketApp +import json +import ssl +import time +from nostr.event import Event +from nostr.relay_manager import RelayManager +from nostr.message_type import ClientMessageType +from nostr.key import PrivateKey -def on_message(ws, message): - print(f"Received: {message}") +relay_manager = RelayManager() +relay_manager.add_relay("wss://nostr-pub.wellorder.net") +relay_manager.add_relay("wss://relay.damus.io") +relay_manager.open_connections({"cert_reqs": ssl.CERT_NONE}) # NOTE: This disables ssl certificate verification +time.sleep(5) # allow the connections to open -def on_open(ws): - ws.send_text("Hello, Nostr!") +private_key = PrivateKey() -ws = WebSocketApp( - url="wss://relay.damus.io", - on_open=on_open, - on_message=on_message, - on_error=lambda ws, e: print(f"Error: {e}"), - on_close=lambda ws, code, reason: print("Closed") -) -ws.run_forever(ping_interval=30, ping_timeout=10) +event = Event("Hello Nostr") +private_key.sign_event(event) + +relay_manager.publish_event(event) +time.sleep(1) # allow the messages to send + +relay_manager.close_connections() diff --git a/internal_filesystem/lib/websocket_raw_nostr_test.py b/internal_filesystem/lib/websocket_raw_nostr_test.py new file mode 100644 index 00000000..58e5e76c --- /dev/null +++ b/internal_filesystem/lib/websocket_raw_nostr_test.py @@ -0,0 +1,68 @@ + +import websocket +import _thread +import time + +def on_message(wsapp, message): + print(f"got message: {message}") + +def on_ping(wsapp, message): + print("Got a ping! A pong reply has already been automatically sent.") + +def on_pong(wsapp, message): + print("Got a pong! No need to respond") + + +def on_error(wsapp, message): + print(f"Got error: {message}") + + +#wsapp = websocket.WebSocketApp("wss://testnet.binance.vision/ws/btcusdt@trade", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + +#wsapp = websocket.WebSocketApp("wss://echo.websocket.events", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + +wsapp = websocket.WebSocketApp("wss://relay.damus.io", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + +#wsapp = websocket.WebSocketApp("wss://relay.primal.net", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + + +def stress_test_thread(): + print("before run_forever") + #wsapp.run_forever(ping_interval=30, ping_timeout=10) + #wsapp.run_forever(ping_interval=300, ping_timeout=10, ping_payload="This is an optional ping payload") + wsapp.run_forever() + print("after run_forever") + +_thread.stack_size(32*1024) +_thread.start_new_thread(stress_test_thread, ()) + +time.sleep(5) +print("sending it") +# nothing: +#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1], "authors": "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9"}]') +#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1] }]') +# this worked at some point: +#wsapp.send_text('["REQ","index3",{"kinds":[9735]}]') +#wsapp.send_text('["REQ","index3",{"kinds":[9735], "since": 1745086888}]') +tosend = '["REQ","index3",{"kinds":[9735], "since": ' +tosend += str(round(time.time()-1000)) +tosend += '}]' +print(f"sending: {tosend}") +wsapp.send_text(tosend) +#1745086888 +#["REQ","index",{"kinds":[9735]}] + + +print("waiting 30 seconds...") +time.sleep(30) +#print("sending again") +#wsapp.send_text('again') + + +time.sleep(25) +#print("sending more") +#wsapp.send_text('more') + +wsapp.close() + + diff --git a/internal_filesystem/lib/websocket_raw_nostr_test.py_worked_without_ping_payload b/internal_filesystem/lib/websocket_raw_nostr_test.py_worked_without_ping_payload new file mode 100644 index 00000000..ba0f22fa --- /dev/null +++ b/internal_filesystem/lib/websocket_raw_nostr_test.py_worked_without_ping_payload @@ -0,0 +1,57 @@ + +import websocket +import _thread +import time + +def on_message(wsapp, message): + print(f"got message: {message}") + +def on_ping(wsapp, message): + print("Got a ping! A pong reply has already been automatically sent.") + +def on_pong(wsapp, message): + print("Got a pong! No need to respond") + + +def on_error(wsapp, message): + print(f"Got error: {message}") + + +#wsapp = websocket.WebSocketApp("wss://testnet.binance.vision/ws/btcusdt@trade", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + +#wsapp = websocket.WebSocketApp("wss://echo.websocket.events", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + +wsapp = websocket.WebSocketApp("wss://relay.damus.io", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + +#wsapp = websocket.WebSocketApp("wss://relay.primal.net", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + + +def stress_test_thread(): + print("before run_forever") + #wsapp.run_forever(ping_interval=30, ping_timeout=10) + wsapp.run_forever(ping_interval=30, ping_timeout=10, ping_payload="This is an optional ping payload") + print("after run_forever") + +_thread.stack_size(32*1024) +_thread.start_new_thread(stress_test_thread, ()) + +time.sleep(5) +print("sending it") +#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1], "authors": "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9"}]') +#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1] }]') +wsapp.send_text('["REQ","index2",{"kinds":[9735]}]') +#["REQ","index",{"kinds":[9735]}] + + +time.sleep(15) +print("sending again") +wsapp.send_text('again') + + +time.sleep(25) +print("sending more") +wsapp.send_text('more') + +wsapp.close() + + diff --git a/internal_filesystem/lib/websocket_raw_nostr_test.py_worked_without_ping_payload_still_works b/internal_filesystem/lib/websocket_raw_nostr_test.py_worked_without_ping_payload_still_works new file mode 100644 index 00000000..58e5e76c --- /dev/null +++ b/internal_filesystem/lib/websocket_raw_nostr_test.py_worked_without_ping_payload_still_works @@ -0,0 +1,68 @@ + +import websocket +import _thread +import time + +def on_message(wsapp, message): + print(f"got message: {message}") + +def on_ping(wsapp, message): + print("Got a ping! A pong reply has already been automatically sent.") + +def on_pong(wsapp, message): + print("Got a pong! No need to respond") + + +def on_error(wsapp, message): + print(f"Got error: {message}") + + +#wsapp = websocket.WebSocketApp("wss://testnet.binance.vision/ws/btcusdt@trade", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + +#wsapp = websocket.WebSocketApp("wss://echo.websocket.events", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + +wsapp = websocket.WebSocketApp("wss://relay.damus.io", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + +#wsapp = websocket.WebSocketApp("wss://relay.primal.net", on_message=on_message, on_ping=on_ping, on_pong=on_pong, on_error=on_error) + + +def stress_test_thread(): + print("before run_forever") + #wsapp.run_forever(ping_interval=30, ping_timeout=10) + #wsapp.run_forever(ping_interval=300, ping_timeout=10, ping_payload="This is an optional ping payload") + wsapp.run_forever() + print("after run_forever") + +_thread.stack_size(32*1024) +_thread.start_new_thread(stress_test_thread, ()) + +time.sleep(5) +print("sending it") +# nothing: +#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1], "authors": "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9"}]') +#wsapp.send_text('["REQ", "ihopethisworks3", {"kinds": [1] }]') +# this worked at some point: +#wsapp.send_text('["REQ","index3",{"kinds":[9735]}]') +#wsapp.send_text('["REQ","index3",{"kinds":[9735], "since": 1745086888}]') +tosend = '["REQ","index3",{"kinds":[9735], "since": ' +tosend += str(round(time.time()-1000)) +tosend += '}]' +print(f"sending: {tosend}") +wsapp.send_text(tosend) +#1745086888 +#["REQ","index",{"kinds":[9735]}] + + +print("waiting 30 seconds...") +time.sleep(30) +#print("sending again") +#wsapp.send_text('again') + + +time.sleep(25) +#print("sending more") +#wsapp.send_text('more') + +wsapp.close() + +