import json, websocket, urllib.request, ssl

# 公网登录
req = urllib.request.Request("https://knowledge.yunwoai.com/api/login",
    data=json.dumps({"username":"cxbsoft","password":"cf5584aca177a811ffda8f4789e2e143"}).encode(),
    headers={"Content-Type":"application/json"})
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
token = json.load(urllib.request.urlopen(req, timeout=15, context=ctx))["data"]["token"]

# 公网 WS
ws = websocket.create_connection(f"wss://knowledge.yunwoai.com/api/user/friend-agent/ws?token={token}", timeout=30)
ws.send(json.dumps({"type":"req","request_id":"pub-1","method":"chains.nodes","payload":{"chain_id":"main","limit":1000,"include_compressed":True}}))
r = json.loads(ws.recv())
nodes = r.get("result", []) if isinstance(r.get("result"), list) else r.get("result",{}).get("nodes",[])
types = {}
for n in nodes: types[n.get("node_type","?")] = types.get(n.get("node_type","?"),0)+1
seqs = [n.get("sequence") for n in nodes]
print("public WS nodes:", len(nodes), types)
print("seq range:", min(seqs) if seqs else None, "-", max(seqs) if seqs else None)
ws.close()
