{"name":"rendezvous.nu","source":"// examples/rendezvous.nu — a deployable rendezvous (signaling) server for\n// TODO §7.4 Phase 3. Peers REGISTER their pubkey → candidate endpoints +\n// chosen relay; any peer LOOKs another up by pubkey to learn where to try a\n// direct path (and the relay fallback). NO application data flows here.\n//\n//   ./nurl.sh examples/rendezvous.nu [host] [port]      # default 0.0.0.0:47703\n//\n// A peer uses the client API (stdlib/net/rendezvous.nu):\n//\n//     ?? ( rz_client_connect rz_host rz_port ) { T rc → {\n//         : s rp ( peer_record_new my_pubkey my_relay_host my_relay_port )\n//         : *PeerRecord r # *PeerRecord rp\n//         ( peer_record_add_endpoint r host_cand_ip host_cand_port )   // from net/nat\n//         ( peer_record_add_endpoint r srflx_ip srflx_port )\n//         ( rz_register_self rc r )                       // publish\n//         : s peer ( rz_lookup_peer rc other_pubkey )     // discover a peer\n//         // → feed peer's endpoints to transport_try_direct, relay as fallback\n//     } F e → {} }\n\n$ `stdlib/core/string.nu`\n$ `stdlib/core/vec.nu`\n$ `stdlib/ext/env.nu`\n$ `stdlib/net/rendezvous.nu`\n\n@ main → i {\n    : i argc ( env_args_count )\n    : String host ? > argc 1 ( env_arg 1 ) ( string_from `0.0.0.0` )\n    : i port ? > argc 2 {\n        : String ps ( env_arg 2 ) : i p ( nurl_str_to_int ( string_data ps ) ) ( string_free ps ) p\n    } 47703\n\n    ?? ( rz_server_start ( string_data host ) port ) {\n        T rs → {\n            : *RzServer p # *RzServer ( nurl_alloc Z RzServer )\n            = . p lst . rs lst\n            = . p records . rs records\n            ( nurl_print `rendezvous listening on ` ) ( nurl_print ( string_data host ) )\n            ( nurl_print `:` ) ( nurl_print_int port )\n            ( rz_server_run p )\n            ( rz_server_free p )\n        }\n        F e → ( nurl_print `rendezvous failed to bind\\n` )\n    }\n    ( string_free host )\n    ^ 0\n}\n","bytes":1923}