{"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//         : PeerRecord r ( peer_record_new my_pubkey my_relay_host my_relay_port )\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//         ?? ( rz_lookup_peer rc other_pubkey ) {         // discover a peer\n//             T peer → …  // feed peer_record_endpoints to transport_try_direct\n//             F → …       // not registered: the relay is the fallback\n//         }\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 ) ) p\n    } 47703\n\n    ?? ( rz_server_start ( string_data host ) port ) {\n        T rs → {\n            ( nurl_print `rendezvous listening on ` ) ( nurl_print ( string_data host ) )\n            ( nurl_print `:` ) ( nurl_println_int port )\n            ( rz_server_run rs )\n        }\n        F e → ( nurl_print `rendezvous failed to bind\\n` )\n    }\n    ^ 0\n}\n","bytes":1770}