[{"data":1,"prerenderedAt":786},["ShallowReactive",2],{"navigation_docs":3,"-guide-websocket":172,"-guide-websocket-surround":781},[4,30,100,134],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":29},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,21,25],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":5,"path":19,"stem":20},"\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":22,"path":23,"stem":24},"Build from source","\u002Fgetting-started\u002Fbuild-from-source","1.getting-started\u002F4.build-from-source",{"title":26,"path":27,"stem":28},"Troubleshooting","\u002Fgetting-started\u002Ftroubleshooting","1.getting-started\u002F5.troubleshooting",false,{"title":31,"icon":32,"path":33,"stem":34,"children":35,"page":29},"Guide","i-lucide-book-open","\u002Fguide","2.guide",[36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96],{"title":37,"path":38,"stem":39},"Interface","\u002Fguide\u002Finterface","2.guide\u002F01.interface",{"title":41,"path":42,"stem":43},"Workspace","\u002Fguide\u002Fworkspace","2.guide\u002F02.workspace",{"title":45,"path":46,"stem":47},"Collections","\u002Fguide\u002Fcollections","2.guide\u002F03.collections",{"title":49,"path":50,"stem":51},"HTTP requests","\u002Fguide\u002Fhttp-requests","2.guide\u002F04.http-requests",{"title":53,"path":54,"stem":55},"Variables","\u002Fguide\u002Fvariables","2.guide\u002F05.variables",{"title":57,"path":58,"stem":59},"Authorization","\u002Fguide\u002Fauthorization","2.guide\u002F06.authorization",{"title":61,"path":62,"stem":63},"Scripts and tests","\u002Fguide\u002Fscripts-and-tests","2.guide\u002F07.scripts-and-tests",{"title":65,"path":66,"stem":67},"Collection runner","\u002Fguide\u002Fcollection-runner","2.guide\u002F08.collection-runner",{"title":69,"path":70,"stem":71},"Import and export","\u002Fguide\u002Fimport-export","2.guide\u002F09.import-export",{"title":73,"path":74,"stem":75},"Code snippets","\u002Fguide\u002Fcode-snippets","2.guide\u002F10.code-snippets",{"title":77,"path":78,"stem":79},"gRPC","\u002Fguide\u002Fgrpc","2.guide\u002F11.grpc",{"title":81,"path":82,"stem":83},"WebSocket","\u002Fguide\u002Fwebsocket","2.guide\u002F12.websocket",{"title":85,"path":86,"stem":87},"Cookies, proxy and certificates","\u002Fguide\u002Fcookies-proxy-certificates","2.guide\u002F13.cookies-proxy-certificates",{"title":89,"path":90,"stem":91},"Settings","\u002Fguide\u002Fsettings","2.guide\u002F14.settings",{"title":93,"path":94,"stem":95},"Keyboard shortcuts","\u002Fguide\u002Fkeyboard-shortcuts","2.guide\u002F15.keyboard-shortcuts",{"title":97,"path":98,"stem":99},"Privacy and security","\u002Fguide\u002Fprivacy-and-security","2.guide\u002F16.privacy-and-security",{"title":101,"icon":102,"path":103,"stem":104,"children":105,"page":29},"Reference","i-lucide-square-terminal","\u002Freference","3.reference",[106,110,114,118,122,126,130],{"title":107,"path":108,"stem":109},"Command line","\u002Freference\u002Fcli","3.reference\u002F1.cli",{"title":111,"path":112,"stem":113},"Automation tools","\u002Freference\u002Fautomation-tools","3.reference\u002F2.automation-tools",{"title":115,"path":116,"stem":117},"Scripting API","\u002Freference\u002Fscripting-api","3.reference\u002F3.scripting-api",{"title":119,"path":120,"stem":121},"Dynamic variables","\u002Freference\u002Fdynamic-variables","3.reference\u002F4.dynamic-variables",{"title":123,"path":124,"stem":125},"UI control channel","\u002Freference\u002Fui-control-channel","3.reference\u002F5.ui-control-channel",{"title":127,"path":128,"stem":129},"Workspace format","\u002Freference\u002Fworkspace-format","3.reference\u002F6.workspace-format",{"title":131,"path":132,"stem":133},"Feature status","\u002Freference\u002Ffeature-status","3.reference\u002F7.feature-status",{"title":135,"icon":136,"path":137,"stem":138,"children":139,"page":29},"Contributing","i-lucide-git-pull-request","\u002Fcontributing","4.contributing",[140,144,148,152,156,160,164,168],{"title":141,"path":142,"stem":143},"Contributing overview","\u002Fcontributing\u002Foverview","4.contributing\u002F1.overview",{"title":145,"path":146,"stem":147},"Development","\u002Fcontributing\u002Fdevelopment","4.contributing\u002F2.development",{"title":149,"path":150,"stem":151},"Architecture","\u002Fcontributing\u002Farchitecture","4.contributing\u002F3.architecture",{"title":153,"path":154,"stem":155},"Known gaps","\u002Fcontributing\u002Fgaps","4.contributing\u002F4.gaps",{"title":157,"path":158,"stem":159},"Adding a feature","\u002Fcontributing\u002Fadding-a-feature","4.contributing\u002F5.adding-a-feature",{"title":161,"path":162,"stem":163},"Assets and clean-room","\u002Fcontributing\u002Fassets-and-clean-room","4.contributing\u002F6.assets-and-clean-room",{"title":165,"path":166,"stem":167},"Releasing","\u002Fcontributing\u002Freleasing","4.contributing\u002F7.releasing",{"title":169,"path":170,"stem":171},"Writing the documentation","\u002Fcontributing\u002Fdocumentation","4.contributing\u002F8.documentation",{"id":173,"title":81,"body":174,"description":774,"extension":775,"links":776,"meta":777,"navigation":778,"path":82,"seo":779,"stem":83,"__hash__":780},"docs\u002F2.guide\u002F12.websocket.md",{"type":175,"value":176,"toc":763},"minimark",[177,181,226,231,245,248,252,340,347,354,416,420,446,456,460,463,507,531,534,543,546,560,563,566,653,657,660,674,677,681,750],[178,179,180],"p",{},"Postguy connects to WebSocket servers. It sends text and binary frames, answers pings and records every event in a log.",[182,183,184,185,189,190,194,195,194,198,194,201,204,205,208,209,212,213,208,216,219,220,225],"note",{},"WebSocket support is ",[186,187,188],"strong",{},"basic",". The parity file marks ",[191,192,193],"code",{},"e.connect",", ",[191,196,197],{},"e.composer",[191,199,200],{},"e.timeline",[191,202,203],{},"e.binary"," and ",[191,206,207],{},"e.settings"," as ",[191,210,211],{},"partial",", and ",[191,214,215],{},"e.saved-messages",[191,217,218],{},"planned",". The app's panel is minimal. The richer features (binary frames, ping, reading the log by sequence number) are reachable through the ",[221,222,224],"a",{"href":223},"#headless","automation tools",". Scripts and the collection runner skip WebSocket requests.",[227,228,230],"h2",{"id":229},"create-a-websocket-request","Create a WebSocket request",[232,233,234,238],"ol",{},[235,236,237],"li",{},"Select a collection or folder in the sidebar.",[235,239,240,241,244],{},"Open the plus menu and choose ",[191,242,243],{},"New WebSocket request",".",[178,246,247],{},"The protocol is fixed when a request is created.",[227,249,251],{"id":250},"the-request-tab","The request tab",[253,254,255,268],"table",{},[256,257,258],"thead",{},[259,260,261,265],"tr",{},[262,263,264],"th",{},"Control",[262,266,267],{},"Notes",[269,270,271,283,304,314,322],"tbody",{},[259,272,273,277],{},[274,275,276],"td",{},"URL field",[274,278,279,280,244],{},"Placeholder ",[191,281,282],{},"wss:\u002F\u002Fexample.com\u002Fsocket",[259,284,285,294],{},[274,286,287,290,291],{},[191,288,289],{},"Connect"," \u002F ",[191,292,293],{},"Disconnect",[274,295,296,297,300,301,244],{},"One button, depending on whether the socket is open. A status line reads ",[191,298,299],{},"Connected"," or ",[191,302,303],{},"Not connected",[259,305,306,311],{},[274,307,308],{},[191,309,310],{},"Save",[274,312,313],{},"Appears when the request has unsaved changes.",[259,315,316,319],{},[274,317,318],{},"Event log",[274,320,321],{},"One row per event: direction, kind, sequence number and text. The panel draws at most 2,000 rows.",[259,323,324,330],{},[274,325,326,327],{},"Message box and ",[191,328,329],{},"Send",[274,331,332,333,336,337,339],{},"A multi-line text field labelled ",[191,334,335],{},"Message",". ",[191,338,329],{}," is enabled while connected and sends a text frame.",[178,341,342,343,346],{},"The tab connects the ",[186,344,345],{},"current draft",", so you do not have to save first. Variables are resolved when you connect.",[178,348,349,350,353],{},"The tab edits only the URL. A request also stores the fields below. The UI does not edit them, but the engine uses them at connect time. Set them with the ",[191,351,352],{},"request_update"," tool, or by importing a request that carries them.",[253,355,356,366],{},[256,357,358],{},[259,359,360,363],{},[262,361,362],{},"Field",[262,364,365],{},"Behaviour",[269,367,368,378,388,406],{},[259,369,370,375],{},[274,371,372],{},[191,373,374],{},"params",[274,376,377],{},"Enabled rows are appended to the URL as an encoded query string.",[259,379,380,385],{},[274,381,382],{},[191,383,384],{},"headers",[274,386,387],{},"Enabled rows are sent as handshake headers. Values resolve variables.",[259,389,390,395],{},[274,391,392],{},[191,393,394],{},"protocols",[274,396,397,398,401,402,405],{},"Sent as ",[191,399,400],{},"Sec-WebSocket-Protocol",". The protocol the server picked is shown in the ",[191,403,404],{},"open"," event.",[259,407,408,413],{},[274,409,410],{},[191,411,412],{},"savedMessages",[274,414,415],{},"Named messages with a format (see below). Stored only; there is no UI for them yet.",[227,417,419],{"id":418},"message-formats","Message formats",[178,421,422,423,194,426,194,429,194,432,300,435,438,439,300,442,445],{},"A stored message has a format: ",[191,424,425],{},"Text",[191,427,428],{},"JSON",[191,430,431],{},"XML",[191,433,434],{},"HTML",[191,436,437],{},"Binary"," (payload stored as ",[191,440,441],{},"base64",[191,443,444],{},"hex",").",[178,447,448,449,452,453,445],{},"The panel always sends text. To send binary frames, use the ",[191,450,451],{},"ws_send"," tool (",[191,454,455],{},"binary_base64",[227,457,459],{"id":458},"the-event-log","The event log",[178,461,462],{},"Each event has a sequence number, a timestamp, a direction and a kind.",[253,464,465,475],{},[256,466,467],{},[259,468,469,472],{},[262,470,471],{},"Direction",[262,473,474],{},"Meaning",[269,476,477,487,497],{},[259,478,479,484],{},[274,480,481],{},[191,482,483],{},"sent",[274,485,486],{},"frames you sent",[259,488,489,494],{},[274,490,491],{},[191,492,493],{},"received",[274,495,496],{},"frames from the server",[259,498,499,504],{},[274,500,501],{},[191,502,503],{},"network",[274,505,506],{},"connection events",[178,508,509,510,194,513,194,516,194,519,194,522,194,524,204,527,530],{},"Kinds are ",[191,511,512],{},"text",[191,514,515],{},"binary",[191,517,518],{},"ping",[191,520,521],{},"pong",[191,523,404],{},[191,525,526],{},"close",[191,528,529],{},"error",". Binary, ping and pong payloads are kept as base64, up to 1 MiB each.",[178,532,533],{},"Log limits for one session:",[535,536,537,540],"ul",{},[235,538,539],{},"It keeps the newest 10,000 events.",[235,541,542],{},"It keeps at most 64 MiB of payload in total.",[178,544,545],{},"Session limit:",[535,547,548,551,554],{},[235,549,550],{},"At most 32 sessions can be open.",[235,552,553],{},"Opening one more evicts the oldest disconnected session.",[235,555,556,557,244],{},"If none is disconnected, it fails with ",[191,558,559],{},"at most 32 WebSocket sessions can be open; close one first",[227,561,89],{"id":562},"settings",[178,564,565],{},"Each WebSocket request has its own settings:",[253,567,568,580],{},[256,569,570],{},[259,571,572,575,578],{},[262,573,574],{},"Setting",[262,576,577],{},"Default",[262,579,365],{},[269,581,582,604,619,634],{},[259,583,584,589,592],{},[274,585,586],{},[191,587,588],{},"verifySsl",[274,590,591],{},"on",[274,593,594,595,598,599,603],{},"Applies to ",[191,596,597],{},"wss:\u002F\u002F",". WebSocket uses this per-request switch only. The global SSL setting is not consulted. With verification on, the system roots, the ",[221,600,602],{"href":601},"\u002Fguide\u002Fcookies-proxy-certificates#tls-and-certificates","custom CA bundle and the PEM client certificate"," are used.",[259,605,606,611,614],{},[274,607,608],{},[191,609,610],{},"handshakeTimeoutMs",[274,612,613],{},"0",[274,615,616,618],{},[191,617,613],{}," means 30,000 ms.",[259,620,621,626,628],{},[274,622,623],{},[191,624,625],{},"maxMessageMb",[274,627,613],{},[274,629,630,631,633],{},"Largest accepted message. ",[191,632,613],{}," still enforces a hard ceiling of 64 MiB. Larger values are capped to 64 MiB.",[259,635,636,644,646],{},[274,637,638,194,641],{},[191,639,640],{},"reconnectAttempts",[191,642,643],{},"reconnectIntervalMs",[274,645,613],{},[274,647,648,649,652],{},"Stored, but ",[186,650,651],{},"not acted on",". Nothing reconnects automatically.",[227,654,656],{"id":655},"not-supported","Not supported",[178,658,659],{},"These return an actionable error instead of silently falling back:",[535,661,662,668,671],{},[235,663,664,667],{},[191,665,666],{},"permessage-deflate"," compression.",[235,669,670],{},"HTTP proxies. The proxy settings do not apply to WebSocket connections.",[235,672,673],{},"Redirects during the handshake.",[178,675,676],{},"Also missing in the UI: search and filters in the log, hexdump view, saved-message management, and a warning for managed handshake headers.",[227,678,680],{"id":679},"headless","Headless",[253,682,683,693],{},[256,684,685],{},[259,686,687,690],{},[262,688,689],{},"Tool",[262,691,692],{},"Purpose",[269,694,695,705,719,733],{},[259,696,697,702],{},[274,698,699],{},[191,700,701],{},"ws_connect",[274,703,704],{},"Connect a saved WebSocket request; returns a session id",[259,706,707,711],{},[274,708,709],{},[191,710,451],{},[274,712,713,714,300,716,718],{},"Send ",[191,715,512],{},[191,717,455],{}," to a session",[259,720,721,726],{},[274,722,723],{},[191,724,725],{},"ws_messages",[274,727,728,729,732],{},"Read events after sequence number ",[191,730,731],{},"since"," (default 0); read-only",[259,734,735,740],{},[274,736,737],{},[191,738,739],{},"ws_disconnect",[274,741,742,743,745,746,749],{},"Close with ",[191,744,191],{}," (default 1000) and optional ",[191,747,748],{},"reason","; the session id is dropped afterwards",[178,751,752,753,756,757,760,761,244],{},"Each ",[191,754,755],{},"postguy-cli call"," runs in a fresh process, so a session does not outlive the call. To chain steps in one process, use ",[191,758,759],{},"run --script"," or an agent that keeps the process alive. See ",[221,762,111],{"href":112},{"title":764,"searchDepth":765,"depth":765,"links":766},"",2,[767,768,769,770,771,772,773],{"id":229,"depth":765,"text":230},{"id":250,"depth":765,"text":251},{"id":418,"depth":765,"text":419},{"id":458,"depth":765,"text":459},{"id":562,"depth":765,"text":89},{"id":655,"depth":765,"text":656},{"id":679,"depth":765,"text":680},"Connect to ws:\u002F\u002F and wss:\u002F\u002F endpoints, send text messages and read the event log. The full composer is available through tools.","md",null,{},true,{"title":81,"description":774},"luNpUZ6OJLbPCPrP67rPRetNgV3iDPzXs_0hPBbvego",[782,784],{"title":77,"path":78,"stem":79,"description":783,"children":-1},"Call unary and streaming gRPC methods using server reflection, imported .proto files or inline definitions.",{"title":85,"path":86,"stem":87,"description":785,"children":-1},"Cookie jar, redirects, proxy, TLS and client certificates, compression, timeouts and cancel.",1793179613834]