PageSourceSearch

https://toolbreezy.com/_next/static/chunks/51408-8a9071a262ca6b67.js

js toolbreezy.com collected 2026-09-24 14:57:09 UTC 62,720 bytes, 9 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[51408],{51408:(e,t,a)=>{a.r(t),a.d(t,{default:()=>Y});var s=a(95155),n=a(52619),l=a.n(n),i=a(12115),o=a(67001),r=a(97003),d=a(90235),c=a(33534),p=a(51851),u=a(31258),h=a(25016),m=a(14827),f=a(16110);let g=5*p.MB,x={soap11:"http://schemas.xmlsoap.org/soap/envelope/",soap12:"http://www.w3.org/2003/05/soap-envelope",soapDraft:"urn:schemas-xmlsoap-org:soap.v1",wsse:"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",wsu:"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd",wsa10:"http://www.w3.org/2005/08/addressing",wsa04:"http://schemas.xmlsoap.org/ws/2004/08/addressing",xop:"http://www.w3.org/2004/08/xop/include",xenc:"http://www.w3.org/2001/04/xmlenc#",ds:"http://www.w3.org/2000/09/xmldsig#",xml:"http://www.w3.org/XML/1998/namespace",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema",wsdl:"http://schemas.xmlsoap.org/wsdl/",wsdlSoap:"http://schemas.xmlsoap.org/wsdl/soap/",wsdlSoap12:"http://schemas.xmlsoap.org/wsdl/soap12/"},y=[[x.soap11,"soapenv"],[x.soap12,"soapenv"],[x.soapDraft,"soapenv"],[x.wsse,"wsse"],[x.wsu,"wsu"],[x.wsa10,"wsa"],[x.wsa04,"wsa"],[x.xop,"xop"],[x.xenc,"xenc"],[x.ds,"ds"],[x.xsi,"xsi"],[x.xsd,"xsd"]],w={error:0,warn:1,ok:2,info:3},v=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),b=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/"/g,"&quot;").replace(/\r?\n/g,"&#10;");function T(e){return e.prefix?`${e.prefix}:${e.localName}`:e.localName}function N(e){let t=[];for(let a=0;a<e.childNodes.length;a++){let s=e.childNodes.item(a);s&&1===s.nodeType&&t.push(s)}return t}function $(e,t,a){for(let s of N(e))if(s.localName===a&&(null===t||s.namespaceURI===t))return s;return null}function S(e,t){for(let a of(t(e),N(e)))S(a,t)}function k(e){return e?(e.textContent||"").trim():""}function A(e,t,a){return null===t?e.getAttribute(a):e.getAttributeNS(t,a)}function j(e,t,a){return e.getAttributeNS(t,a)??e.getAttribute(a)}function P(e){let t,a=Math.abs(e);if(a<6e4)t=`${Math.max(1,Math.round(a/1e3))} seconds`;else if(a<54e5){let e=Math.round(a/6e4);t=`${e} minute${1===e?"":"s"}`}else if(a<1728e5){let e=Math.round(a/36e5);t=`${e} hour${1===e?"":"s"}`}else{let e=Math.round(a/864e5);t=`${e} day${1===e?"":"s"}`}return e<0?`${t} ago`:`in ${t}`}function C(e,t){let a=null;if(t){let e=/boundary\s*=\s*(?:"([^"]+)"|([^;\s]+))/i.exec(t);e&&(a=e[1]??e[2]??null)}let s="boundary from the Content-Type header";if(!a){let t=/^--([^\r\n-][^\r\n]*?)\r?\n/.exec(e.trimStart());if(!t||!t[1])return null;let n=t[1].replace(/--$/,"");if(e.split(`--${n}`).length<3)return null;a=n,s="sniffed the repeated delimiter line, no Content-Type was pasted"}let n=e.split(RegExp(`\r?
2?--${a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?:--)?\r?
3?`)).map(e=>e.trim()).filter(e=>e.length>0);if(0===n.length)return null;let l=t?/start\s*=\s*(?:"([^"]+)"|([^;\s]+))/i.exec(t):null,i=(l?l[1]??l[2]??"":"").replace(/^<|>$/g,""),o=n.map(e=>{let t=e.search(/\r?\n\r?\n/);return{partHead:-1===t?"":e.slice(0,t),partBody:-1===t?e:e.slice(t).replace(/^\r?\n\r?\n/,"")}}),r=i?o.find(e=>e.partHead.includes(i)):void 0,d=o.find(e=>/application\/xop\+xml|application\/soap\+xml|text\/xml/i.test(e.partHead)),c=o.find(e=>e.partBody.trimStart().startsWith("<")),p=r??d??c??o[0];return p?{part:p.partBody,total:n.length,how:s}:null}function E(e){return e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&#(\d+);/g,(e,t)=>String.fromCodePoint(Number(t))).replace(/&#x([0-9a-fA-F]+);/g,(e,t)=>String.fromCodePoint(parseInt(t,16))).replace(/&amp;/g,"&")}let I=/<(?:[\w.-]+:)?Envelope[\s>][\s\S]*<\/(?:[\w.-]+:)?Envelope\s*>/;function O(e){let t=I.exec(e);return t&&t[0]!==e.trim()?t[0]:null}let U=["http://www.mozilla.org/newlayout/xml/parsererror.xml","http://www.w3.org/1999/xhtml"];function R(e){let t=new DOMParser().parseFromString(e,"application/xml"),a=t.getElementsByTagName("parsererror").item(0),s=a&&(a===t.documentElement||U.includes(a.namespaceURI||""))?a:null;return s?{doc:null,error:(s.textContent||"").replace(/\s+/g," ").trim()||"The document is not well-formed XML."}:t.documentElement?{doc:t,error:null}:{doc:null,error:"The document is empty."}}function D(e){let t=e.documentElement;return!!t&&"Envelope"===t.localName}let M=/^(password|passwd|pwd|secret|clientsecret|token|sessionid|sessionkey|session|accesstoken|refreshtoken|apikey|api_key|nonce|binarysecuritytoken|signaturevalue|ciphervalue|certificate|x509certificate|x509cert|cert|clientcertificate|keyvalue|privatekey|cardnumber|creditcard|pan|iban|accountnumber|accountno|ssn|taxid)$/i;function L(e){return M.test(e.localName)}function B(e){if("faultcode"===e.localName&&!e.namespaceURI)return!0;
3if("Value"!==e.localName)return!1;let t=e.parentElement;return!!t&&("Code"===t.localName||"Subcode"===t.localName)}function F(e,t,a){let s=/^([A-Za-z_][\w.-]*):([A-Za-z_][\w.-]*)$/.exec(t.trim());if(!s||!s[1]||!s[2])return t;let n=e.lookupNamespaceURI(s[1]);if(!n)return t;let l=a.get(n);return l?`${l}:${s[2]}`:t}function q(e,t,a,s,n){let l=null===t.indent?"":"\n",i=null===t.indent?"":t.indent.repeat(a);if(8===e.nodeType)return`${i}<!--${e.nodeValue||""}-->`;if(7===e.nodeType)return`${i}<?${e.target}${e.data?` ${e.data}`:""}?>`;if(4===e.nodeType)return`${i}<![CDATA[${e.nodeValue||""}]]>`;if(3===e.nodeType){let t=e.nodeValue||"";return t.trim()?i+v(t.trim()):""}if(1!==e.nodeType)return"";let o=function(e,t){if(!t)return T(e);if(!e.namespaceURI)return e.localName;let a=t.get(e.namespaceURI);return a?`${a}:${e.localName}`:e.localName}(e,t.canon),r=[];for(let a=0;a<e.attributes.length;a++){let s=e.attributes.item(a);if(!s||t.canon&&("xmlns"===s.name||s.name.startsWith("xmlns:")))continue;let n=s.name;if(t.canon&&s.namespaceURI&&s.namespaceURI!==x.xml){let e=t.canon.get(s.namespaceURI);e&&(n=`${e}:${s.localName}`)}let l=s.value;t.mask&&(M.test(s.localName)||/password|token|secret/i.test(s.localName))&&(l="[masked]"),t.canon&&s.namespaceURI===x.xsi&&"type"===s.localName&&(l=F(e,l,t.canon)),r.push(`${n}="${b(l)}"`)}s&&n.length&&r.push(...n);let d=r.length?`<${o} ${r.join(" ")}`:`<${o}`,c=[];for(let t=0;t<e.childNodes.length;t++){let a=e.childNodes.item(t);a&&(3!==a.nodeType||(a.nodeValue||"").trim())&&c.push(a)}if(0===c.length)return`${i}${d}/>`;if(1===c.length&&c[0]&&3===c[0].nodeType){let a=(c[0].nodeValue||"").trim();return t.mask&&L(e)?a="[masked]":t.canon&&B(e)&&(a=F(e,a,t.canon)),`${i}${d}>${v(a)}</${o}>`}if(t.mask&&L(e))return`${i}${d}>[masked]</${o}>`;let p=c.map(e=>q(e,t,a+1,!1,n)).filter(e=>e.length>0).join(l);return`${i}${d}>${l}${p}${l}${i}</${o}>`}let H={2:"  ",4:"    ",tab:"	"};function W(e,t,a,s){let n=e.documentElement;if(!n)return"";let l="normalize"===t?function(e){let t=function(e){let t=new Set;return S(e,e=>{e.namespaceURI&&t.add(e.namespaceURI);for(let a=0;a<e.attributes.length;a++){let s=e.attributes.item(a);if(s&&!("xmlns"===s.name||s.name.startsWith("xmlns:"))&&(s.namespaceURI&&s.namespaceURI!==x.xml&&t.add(s.namespaceURI),s.namespaceURI===x.xsi&&"type"===s.localName)){let a=/^([A-Za-z_][\w.-]*):/.exec(s.value.trim()),n=a&&a[1]?e.lookupNamespaceURI(a[1]):null;n&&t.add(n)}}if(B(e)){let a=/^([A-Za-z_][\w.-]*):/.exec((e.textContent||"").trim()),s=a&&a[1]?e.lookupNamespaceURI(a[1]):null;s&&t.add(s)}}),t}(e),a=new Map,s=new Set(["xml","xmlns"]);for(let[e,n]of y)if(t.has(e)){let t=n,l=2;for(;s.has(t)&&a.get(e)!==t;)t=`${n}${l++}`;a.set(e,t),s.add(t)}let n=1;for(let e of t){if(a.has(e))continue;let t=`ns${n++}`;for(;s.has(t);)t=`ns${n++}`;a.set(e,t),s.add(t)}let l=[];for(let[e,t]of a)l.push(`xmlns:${t}="${b(e)}"`);return{canon:a,decls:l}}(n):null,i={indent:"minify"===t?null:H[a],mask:s,canon:l?l.canon:null},o=l?l.decls:[],r=[];for(let t=0;t<e.childNodes.length;t++){let a=e.childNodes.item(t);a&&(1===a.nodeType?r.push(q(a,i,0,!0,o)):(8===a.nodeType||7===a.nodeType)&&r.push(q(a,i,0,!1,o)))}return['<?xml version="1.0" encoding="UTF-8"?>',...r].join("minify"===t?"":"\n")}function z(e,t,a){let s=new Map;S(e,e=>{e.namespaceURI&&s.set(e.prefix||"",e.namespaceURI);for(let t=0;t<e.attributes.length;t++){let a=e.attributes.item(t);!(!a||"xmlns"===a.name||a.name.startsWith("xmlns:"))&&a.namespaceURI&&a.prefix&&a.namespaceURI!==x.xml&&s.set(a.prefix,a.namespaceURI)}});let n=new Set;for(let t=0;t<e.attributes.length;t++){let a=e.attributes.item(t);a&&("xmlns"===a.name?n.add(""):a.name.startsWith("xmlns:")&&n.add(a.name.slice(6)))}let l=[];for(let[e,t]of s)n.has(e)||l.push(e?`xmlns:${e}="${b(t)}"`:`xmlns="${b(t)}"`);return q(e,{indent:H[t],mask:a,canon:null},0,!0,l)}let V={INVALID_SESSION_ID:"the session ID is expired or was never valid, so re-login and retry",INVALID_LOGIN:"the username, password or security token is wrong",LOGIN_MUST_USE_SECURITY_TOKEN:"the password needs the security token appended, or the IP needs allowlisting",DUPLICATE_VALUE:"a unique field already holds this value on another record",REQUIRED_FIELD_MISSING:"a required field was left out of the request",INSUFFICIENT_ACCESS:"the user lacks permission on the object or record",INVALID_FIELD:"a field name in the request does not exist on that object",MALFORMED_QUERY:"the query text is not val
3id",API_DISABLED_FOR_ORG:"API access is switched off for the org or the profile",REQUEST_LIMIT_EXCEEDED:"the org has run out of API calls for the rolling window"};function _(e){switch(e){case"Client":case"Sender":return"the server is telling you the problem is in YOUR request, so retrying the same bytes will fail the same way.";case"Server":case"Receiver":return"the failure happened on THEIR side while processing a request they accepted, so the same request may well succeed on a retry.";case"VersionMismatch":return"the service does not speak the SOAP version your envelope namespace declares. This is almost always a 1.1 client hitting a 1.2 endpoint or the reverse.";case"MustUnderstand":return"a header block was marked mustUnderstand and the service did not recognize it. The header name is usually in the detail or the reason text.";case"DataEncodingUnknown":return"a header or body block declared an encoding the service does not support.";default:return"this is a service-specific code rather than one of the standard SOAP codes, so the meaning comes from the vendor, not the spec."}}function X(e,t){let a=e.textContent||"",s=/Caused by:\s*([^\r\n]+)/.exec(a),n=/(?:\n|^)\s*at\s+[\w$.]+\(/.test(a);if(s&&s[1])t.push({level:"error",title:"The real cause, out of the Java stack trace",detail:`${s[1].trim()} This is the first "Caused by:" line in the detail, which is the actual failure. Everything above it in the trace is the wrapper chain.`});else if(n){let e=a.split(/\r?\n/).filter(e=>e.trim().length>0),s=e.slice(0,12);t.push({level:"info",title:"A stack trace is buried in the fault detail",detail:`${s.join(" / ")}${e.length>12?` ... ${e.length-12} more lines are in the detail and are not shown here.`:""}`})}S(e,e=>{let a=e.localName;if("exceptionName"===a&&k(e)&&t.push({level:"info",title:"Apache Axis style detail",detail:`The service reported the Java exception class ${k(e)}. Axis puts the class name here and the message in faultstring.`}),"ExceptionDetail"===a||"ServiceFault"===a){let a=k($(e,null,"Message"));t.push({level:"info",title:"WCF exception detail is switched on",detail:`${a?`The service said: ${a} `:""}A .NET service only sends this block when IncludeExceptionDetailInFaults is true, which is a debugging setting nobody should leave on in production.`})}if("exceptionCode"===a&&k(e)){let a=k(e),s=V[a.toUpperCase()];t.push({level:"error",title:`Salesforce exception code ${a}`,detail:s?`That means ${s}.`:"That is a Salesforce API code. The matching exceptionMessage element next to it usually names the field or record involved."})}e.namespaceURI&&e.namespaceURI.includes("com.sap")&&t.push({level:"info",title:"SAP detail block",detail:`The detail carries an SAP specific element (${T(e)}). SAP puts the useful error text inside these rather than in the reason.`})})}let J=[{key:"req11",label:"1.1 request",text:'POST /billing/v2 HTTP/1.1\r\nHost: api.example.com\r\nContent-Type: text/xml; charset=utf-8\r\nSOAPAction: "urn:billing:v2/GetBalance"\r\nContent-Length: 612\r\n\r\n<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:bil="urn:billing:v2"><soapenv:Header><wsa:To>https://api.example.com/billing/v2</wsa:To><wsa:Action>urn:billing:v2/GetBalance</wsa:Action><wsa:MessageID>urn:uuid:7c9e6679-7425-40de-944b-e07fc1f90ae7</wsa:MessageID></soapenv:Header><soapenv:Body><bil:GetBalance><bil:accountNumber>4471982210</bil:accountNumber><bil:asOfDate>2024-01-31</bil:asOfDate></bil:GetBalance></soapenv:Body></soapenv:Envelope>'},{key:"fault12",label:"1.2 fault",text:'HTTP/1.1 500 Internal Server Error\r\nContent-Type: application/soap+xml; charset=utf-8\r\nContent-Length: 934\r\n\r\n<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><env:Body><env:Fault><env:Code><env:Value>env:Sender</env:Value><env:Subcode><env:Value>wsse:FailedAuthentication</env:Value></env:Subcode></env:Code><env:Reason><env:Text xml:lang="en">An error occurred when verifying security for the message.</env:Text></env:Reason><env:Node>https://api.example.com/billing/v2</env:Node><env:Detail><ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel"><Message>The security timestamp is stale because its expiration time is in the past.</Message></ExceptionDetail></env:Detail></env:Fault></env:Body></env:Envelope>'},{key:"security",label:"WS-Security",text:`<?xml version="1.0" encoding="UTF-8"?>
4<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ord="urn:orders:v1"><SOAP-ENV:Header><wsse:Security SOAP-ENV:mustUnderstand="true"><wsu:Timestamp wsu:Id="TS-1"><wsu:Created>2021-05-04T09:09:00Z</wsu:Created><wsu:Expires>2021-05-04T09:14:00Z</wsu:Expires></wsu:Timestamp><wsse:UsernameToken wsu:Id="UT-1"><wsse:Username>integration_svc</wsse:Username>
4<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Pa55w0rd-not-real</wsse:Password></wsse:UsernameToken></wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body wsu:Id="Body-1"><ord:SubmitOrder><ord:orderRef>SO-88213</ord:orderRef></ord:SubmitOrder></SOAP-ENV:Body></SOAP-ENV:Envelope>`},{key:"mtom",label:"MTOM capture",text:'HTTP/1.1 200 OK\r\nContent-Type: multipart/related; type="application/xop+xml"; boundary="uuid:8c1f2b90"; start="<[email protected]>"; start-info="text/xml"\r\n\r\n--uuid:8c1f2b90\r\nContent-Type: application/xop+xml; charset=UTF-8; type="text/xml"\r\nContent-Transfer-Encoding: binary\r\nContent-ID: <[email protected]>\r\n\r\n<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:doc="urn:docs:v1"><soapenv:Body><doc:UploadResponse><doc:fileName>statement.pdf</doc:fileName><doc:content><xop:Include href="cid:1.urn:uuid:[email protected]" xmlns:xop="http://www.w3.org/2004/08/xop/include"/></doc:content></doc:UploadResponse></soapenv:Body></soapenv:Envelope>\r\n--uuid:8c1f2b90\r\nContent-Type: application/pdf\r\nContent-Transfer-Encoding: binary\r\nContent-ID: <1.urn:uuid:[email protected]>\r\n\r\n%PDF-1.4 ...binary bytes...\r\n--uuid:8c1f2b90--'},{key:"cdata",label:"CDATA payload",text:'<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:n0="urn:sap-com:document:sap:soap:functions"><soap:Body><n0:ZGetInvoiceResponse><n0:EvReturn><![CDATA[<Invoice><Number>90014422</Number><Lines><Line pos="10"><Material>MAT-8891</Material><Qty>4</Qty></Line></Lines></Invoice>]]></n0:EvReturn></n0:ZGetInvoiceResponse></soap:Body></soap:Envelope>'}],Z={error:"border-l-destructive bg-destructive/5",warn:"border-l-amber-500 bg-amber-500/5",ok:"border-l-emerald-500 bg-emerald-500/5",info:"border-l-muted-foreground/40 bg-muted/40"},G={error:"Problem",warn:"Check this",ok:"Fine",info:"Detail"};function Y(){let[e,t]=(0,i.useState)(""),[a,n]=(0,i.useState)("format"),[p,y]=(0,i.useState)("2"),[b,I]=(0,i.useState)(!1),[U,M]=(0,i.useState)(!1),[L,B]=(0,i.useState)(""),[F,q]=(0,i.useState)(""),[H,V]=(0,i.useState)(""),[Y,Q]=(0,i.useState)(!1),[K,ee]=(0,i.useState)(!1),[et,ea]=(0,i.useState)("1.1"),[es,en]=(0,i.useState)(!0),[el,ei]=(0,i.useState)(!1),eo=(0,i.useRef)(null);(0,i.useEffect)(()=>{let e=new URLSearchParams(window.location.search),t=e.get("mode");("format"===t||"minify"===t||"normalize"===t)&&n(t);let a=e.get("indent");("2"===a||"4"===a||"tab"===a)&&y(a),"1"===e.get("mask")&&I(!0);let s=e.get("v");("1.1"===s||"1.2"===s)&&ea(s)},[]);let er=(0,i.useCallback)(()=>new URLSearchParams({mode:a,indent:p,mask:b?"1":"0",v:et}),[a,p,b,et]),ed=(0,i.useMemo)(()=>{if(!e.trim())return null;let t=function(e){let t=[],a=[];if(e.length>g)return{text:"",steps:t,http:null,notes:a,fatal:{title:`Too big at ${(0,u.z)(e.length)}`,detail:`The ceiling is ${(0,u.z)(g)}. Nothing was parsed, and nothing was cut down to fit. Trim the capture to the envelope you care about and paste that.`}};let s=e;if(65279===s.charCodeAt(0)&&(s=s.slice(1),t.push("Stripped a byte order mark")),31===s.charCodeAt(0)&&139===s.charCodeAt(1))return{text:"",steps:t,http:null,notes:a,fatal:{title:"This capture is still compressed",detail:"The first two bytes are the gzip marker, so the response body was gzipped and pasted as raw bytes. A browser page cannot decompress that reliably once it has been mangled by a copy and paste. Re-capture with decompression turned on in your proxy, or save the response to a file and gunzip it first."}};let n=function(e){let t=e.slice(0,-1===e.search(/\r?\n/)?e.length:e.search(/\r?\n/)),a=/^(?:HTTP\/\d(?:\.\d)?\s+\d{3}|(?:GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|TRACE)\s+\S+\s+HTTP\/)/i.test(t);if(!a&&!/^[A-Za-z][A-Za-z0-9-]*:\s*\S/.test(t))return{body:e,http:null,step:null};let s=e.search(/\r?\n\r?\n/);if(-1===s)return{body:e,http:null,step:null};let n=e.slice(0,s),l=e.slice(s).replace(/^\r?\n\r?\n/,"");if(!l.trim())return{body:e,http:null,step:null};let i=n.split(/\r?\n/),o=a?i.shift()??"":"",r=new Map;for(let e of i){let t=e.indexOf(":");t<=0||r.set(e.slice(0,t).trim().toLowerCase(),e.slice(t+1).trim())}let d=/^HTTP\/\d(?:\.\d)?\s+(\d{3})/i.exec(o);return{body:l,http:{startLine:o,status:d&&d[1]?Number(d[1]):null,contentType:r.get("content-type")??null,soapActionPresent:r.has("so
4apaction"),soapAction:r.get("soapaction")??null,contentLength:r.get("content-length")??null,transferEncoding:r.get("transfer-encoding")??null},step:a?"Stripped the HTTP head, kept the headers":"Read the pasted headers"}}(s);n.step&&t.push(n.step),s=n.body;let l=n.http;if(l?.contentType&&/multipart\/related|multipart\/form-data/i.test(l.contentType)){let e=C(s,l.contentType);e&&(s=e.part,t.push(`Took the envelope out of a ${e.total} part multipart body`),a.push({level:"info",title:`Multipart capture, ${e.total} parts found`,detail:`Split using the ${e.how}. Only the part holding the envelope was inspected. The other ${e.total-1} part${e.total-1==1?" was":"s were"} never looked at, so any attachment bytes in them are not reported below.`}))}else if(/^\s*--\S/.test(s)){let e=C(s,null);e&&(s=e.part,t.push(`Took the envelope out of a ${e.total} part multipart body`),a.push({level:"info",title:`Multipart capture, ${e.total} parts found`,detail:`No Content-Type was pasted, so the split ${e.how}. Only the part holding the envelope was inspected, the other ${e.total-1} were not.`}))}if(l?.transferEncoding?.toLowerCase().includes("chunked")||/^\s*[0-9a-fA-F]{1,8}\r?\n\s*</.test(s)){let e=function(e){let t=e.replace(/^\s+/,"");if(!/^[0-9a-fA-F]{1,8}\s*\r?\n/.test(t))return null;let a=t,s="",n=0;for(;a.length>0&&n++<2e4;){let e=/^([0-9a-fA-F]{1,8})[^\r\n]*\r?\n/.exec(a);if(!e||void 0===e[1])break;let t=parseInt(e[1],16);if(a=a.slice(e[0].length),!Number.isFinite(t)||t<=0)break;s+=a.slice(0,t),a=a.slice(t).replace(/^\r?\n/,"")}return s.trim().length>0?s:null}(s);e&&(s=e,t.push("Joined a chunked body back together"))}return{text:s.trim(),steps:t,http:l,notes:a,fatal:null}}(e);if(t.fatal)return{kind:"fatal",...t.fatal,steps:t.steps};let s=[...t.steps],n=t.text,l=n.slice(0,400).toLowerCase();if(l.includes("<!doctype html")||/^\s*<html[\s>]/.test(l))return{kind:"fatal",title:"This is an HTML error page, not a SOAP response",detail:"A proxy, a gateway or a login redirect answered instead of the service. Look at the HTTP status and the page text, because the SOAP endpoint was never reached.",steps:s};if(/^\s*[{[]/.test(n)){let e,t=!1;try{e=JSON.parse(n),t=!0}catch{}if(t){let t=function e(t,a=0){if(a>6)return null;if("string"==typeof t)return/<[\w.-]*:?Envelope[\s>/]/.test(t)?O(t)??t:null;if(Array.isArray(t)){for(let s of t){let t=e(s,a+1);if(t)return t}return null}if(t&&"object"==typeof t)for(let s of Object.values(t)){let t=e(s,a+1);if(t)return t}return null}(e);if(!t)return{kind:"fatal",title:"That is JSON, and there is no envelope inside it",detail:"Nothing in this object holds a SOAP envelope. If the log entry you want is a different field or a different line, paste that one and the escaped envelope inside it gets found and unwrapped.",steps:s};n=t.trim(),s.push("Pulled the envelope out of a JSON log entry")}}let i=null,o=null,r="";for(let e of function(e){let t=[{text:e,step:null}],a=(e,a)=>{e&&e.trim()&&!t.some(t=>t.text===e)&&t.push({text:e.trim(),step:a})};if(a(O(e),"Trimmed the log text around the envelope"),e.includes("&lt;")){let t=E(e);a(t,"Unescaped an XML-escaped payload"),a(O(t),"Unescaped the payload, then trimmed the text around it")}if(/\\"|\\n|\\u003c/i.test(e)){let t,s=((t=e.trim()).startsWith('"')&&t.endsWith('"')&&t.length>1&&(t=t.slice(1,-1)),t.replace(/\\u([0-9a-fA-F]{4})/g,(e,t)=>
4String.fromCharCode(parseInt(t,16))).replace(/\\n/g,"\n").replace(/\\r/g,"\r").replace(/\\t/g,"	").replace(/\\"/g,'"').replace(/\\\//g,"/").replace(/\\\\/g,"\\"));if(a(s,"Unescaped a JSON log line"),a(O(s),"Unescaped a JSON log line, then trimmed the text around it"),s.includes("&lt;")){let e=E(s);a(e,"Unescaped a JSON log line, then the XML escaping"),a(O(e),"Unescaped both layers, then trimmed the text around it")}}return a(function(e){let t=e.replace(/\s+/g,"");if(t.length<64||!/^[A-Za-z0-9+/]+={0,2}$/.test(t))return null;try{let e=atob(t),a=new Uint8Array(e.length);for(let t=0;t<e.length;t++)a[t]=e.charCodeAt(t);let s=new TextDecoder("utf-8").decode(a);return s.trimStart().startsWith("<")?s:null}catch{return null}}(e),"Base64 decoded the body"),t}(n)){let t=R(e.text);if(!t.doc){r||(r=t.error);continue}if(o||(o={doc:t.doc,step:e.step}),D(t.doc)){i={doc:t.doc,step:e.step};break}}let d=i??o;if(d?.step&&s.push(d.step),!d){let e=/unexpected end|premature end|no element found|document is empty/i.test(r);return{kind:"fatal",title:e?"The capture looks truncated":"This is not well-formed XML",detail:e?`The parser ran out of document before the tree closed, which normally means the capture was cut short by a buffer limit or a copy that missed the tail. The parser said: ${r}`:r,steps:s}}if(!D(d.doc))return{kind:"plain",steps:s,output:W(d.doc,a,p,b),rootName:d.doc.documentElement?.localName||"unknown"};let c=function(e,t,a){let s=[],n=e.documentElement,l=n.namespaceURI||"",i="unknown";l===x.soap11?i="1.1":l===x.soap12?i="1.2":l===x.soapDraft&&(i="draft");let o=[];"1.1"===i?(o.push("SOAP 1.1"),s.push({level:"ok",title:"SOAP 1.1",detail:"The envelope namespace is the 2001 schemas.xmlsoap.org one, so every rule below is the 1.1 rule."})):"1.2"===i?(o.push("SOAP 1.2"),s.push({level:"ok",title:"SOAP 1.2",detail:"The envelope namespace is the W3C 2003/05 one. Faults, roles and the HTTP binding all differ from 1.1."})):"draft"===i?(o.push("pre-standard draft"),s.push({level:"warn",title:"This is the pre-standard SOAP draft namespace",detail:"urn:schemas-xmlsoap-org:soap.v1 predates 1.1 and shipped in some very old Microsoft stacks. A modern service will answer it with a VersionMismatch fault."})):(o.push("unrecognized envelope namespace"),s.push({level:"error",title:"The Envelope namespace is not a SOAP one",detail:`The root element is named Envelope but its namespace is ${l||"missing entirely"}. A service will answer that with VersionMismatch. The two correct values are ${x.soap11} for 1.1 and ${x.soap12} for 1.2.`}));let r=new Map,d=new Map;S(n,e=>{for(let t=0;t<e.attributes.length;t++){let a=e.attributes.item(t);if(!a||"xmlns"!==a.name&&!a.name.startsWith("xmlns:"))continue;let s="xmlns"===a.name?"(default)":a.name.slice(6);r.has(s)||r.set(s,new Set),r.get(s)?.add(a.value),d.has(a.value)||d.set(a.value,new Set),d.get(a.value)?.add(s)}});let c=[...r.entries()].filter(([,e])=>e.size>1);c.length&&s.push({level:"warn",title:"A prefix is rebound part way down the message",detail:`${c.map(([e,t])=>`${e} is bound to ${[...t].join(" and also to ")}`).join(". ")}. That is legal XML and completely legitimate, and it also means you cannot read this message by matching prefixes with your eyes. Normalize rewrites every prefix to one canonical set.`});let p=[...d.entries()].filter(([,e])=>e.size>1);p.length&&s.push({level:"info",title:"The same namespace is bound to several prefixes",detail:`${p.map(([e,t])=>`${[...t].join(", ")} all point at ${e}`).join(". ")}. Different names, identical meaning. Normalize collapses them.`});let u=d.get(l);u&&o.push(`prefix ${[...u].join(", ")}`);let h=N(n),m=h.find(e=>"Header"===e.localName&&e.namespaceURI===l)??null,f=h.find(e=>"Body"===e.localName&&e.namespaceURI===l)??null;f||s.push({level:"error",title:"There is no Body element",detail:"Body is required in both versions and it must be in the same namespace as Envelope. A Body sitting in no namespace, or in the other version namespace, is the usual cause."}),m&&f&&h.indexOf(m)>h.indexOf(f)&&s.push({level:"error",title:"Header comes after Body",detail:"When a Header is present it has to be the first child of Envelope. Several stacks silently ignore a Header they find in the wrong place, which looks exactly like a header that was never sent."});let g=f?h.slice(h.indexOf(f)+1):[];g.length&&s.push({level:"1.2"===i?"error":"warn",title:`Something follows Body (${g.map(T).join(", ")})`,detail:"1.2"===i?"SOAP 1.2 forbids any element after Body. This envelope will be rejected.":"SOAP 1.1 tolerates trailing blocks, but almost nothing reads them, so whatever is in there is probably being dropped on the floor."});let y=n.getAttributeNS(x.soap12,"encodingStyle");"1.2"===i&&y&&s.push({level:"error",title:"encodingStyle is on the Envelope",detail:"SOAP 1.2 forbids encodingStyle on Envelope. It is only allowed further down. A 1.1 envelope carrying it is fine, so this is usually a converted message that kept an attribute it should have dropped."});let v=[],b=0;if(m){let e=N(m);o.push(`${e.length} header block${1===e.length?"":"s"}`);let t=0;e.forEach((e,a)=>{let n=j(e,l,"mustUnderstand"),o=j(e,l,"role"),r=j(e,l,"actor"),d=j(e,l,"relay"),c=[];if(null!==n&&(c.push(`mustUnderstand=${n}`),("1"===n||"true"===n.toLowerCase())&&t++,"1.1"===i&&"0"!==n&&"1"!==n&&s.push({level:"error",title:`mustUnderstand="${n}" is not legal in SOAP 1.1`,detail:`On ${T(e)}. SOAP 1.1 allows only 0 and 1 here. SOAP 1.2 added true and false, and a .NET client set to 1.2 semantics will happily emit true against a 1.1 service, which some Java stacks reject with a plain and unhelpful parse error. Change it to 1.`}),"1.2"!==i||["0","1","true","false"].includes(n)||s.push({level:"error",title:`mustUnderstand="${n}
4" is not a legal value`,detail:`On ${T(e)}. SOAP 1.2 allows 0, 1, true and false, and nothing else.`})),o){let e=o.split("/").pop()||o;c.push(`role: ${e}`)}r&&c.push(`actor: ${r.split("/").pop()||r}`),d&&c.push(`relay=${d}`),"1.2"===i&&r&&!o&&s.push({level:"warn",title:"A header uses actor instead of role",detail:`${T(e)} carries the 1.1 actor attribute in a 1.2 message. SOAP 1.2 renamed it to role, and a 1.2 intermediary will not see the actor attribute at all, so the block gets treated as addressed to the ultimate receiver.`}),e.namespaceURI||s.push({level:"error",title:`The header block ${e.localName} is not namespace qualified`,detail:"Every immediate child of Header must carry a namespace. An unqualified block is not addressable, so the service cannot match it to a handler and will usually ignore it."}),a<30?v.push({id:`h${a}`,qname:T(e),facts:c}):b++}),t>0&&s.push({level:"info",title:`${t} header block${1===t?" is":"s are"} marked mustUnderstand`,detail:"The service is not allowed to ignore those. If it does not recognize one, the spec says it has to fail the whole message with a MustUnderstand fault rather than carry on without it."});let n=N(m).filter(e=>e.namespaceURI===x.wsa10||e.namespaceURI===x.wsa04);if(n.length){let e=new Set(n.map(e=>e.namespaceURI)),t=n.find(e=>"Action"===e.localName),a=n.find(e=>"MessageID"===e.localName),l=n.find(e=>"RelatesTo"===e.localName),i=n.find(e=>"To"===e.localName),o=[];i&&o.push(`To ${k(i)}`),a&&o.push(`MessageID ${k(a)}`),l&&o.push(`RelatesTo ${k(l)}`),s.push({level:"info",title:t&&k(t)?`WS-Addressing Action is ${k(t)}`:"WS-Addressing headers are present",detail:`${o.join(". ")}${o.length?". ":""}In a modern service the Action names the operation more precisely than the first child of Body does, so match your WSDL against this rather than against the payload element.`}),t&&k(t)||s.push({level:"error",title:"WS-Addressing is in use but Action is missing or empty",detail:"This is the exact cause of \"The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher.\" WCF matches an incoming message to an operation by the Action value, and an empty one matches nothing."}),e.size>1?s.push({level:"error",title:"Two different WS-Addressing versions in one header",detail:"The 2004/08 submission and the 2005/08 final version are both present. Pick one. Mixing them means half the addressing headers are invisible to the other end."}):e.has(x.wsa04)&&s.push({level:"warn",title:"This is the 2004/08 WS-Addressing submission, not the final version",detail:"WCF defaults to the 2005/08 final version and older Java stacks often speak the 2004/08 submission. When the two disagree the addressing headers are simply not seen, which shows up as a ContractFilter mismatch or a header that the service swears was never sent."})}let r=N(m).find(e=>e.namespaceURI===x.wsse&&"Security"===e.localName);r&&function(e,t,a){let s=$(e,x.wsse,"UsernameToken");if(s){let e=k($(s,x.wsse,"Username")),t=$(s,x.wsse,"Password"),n=t&&A(t,null,"Type")||"";t&&/PasswordText$/i.test(n)?a.push({level:"warn",title:"The password is on the wire in plain text",detail:`UsernameToken for ${e||"an unnamed user"} carries PasswordText, so the password travels as readable characters. That is only defensible over TLS, and even then it lands in proxy logs, load balancer traces and anything else that captures a body. The value is shown in the panel on the left so you can check it against what you meant to send.`}):t&&/PasswordDigest$/i.test(n)?a.push({level:"info",title:"PasswordDigest is in use",detail:"The digest is Base64 of SHA-1 over the nonce, the created timestamp and the password joined together, in that order. It cannot be checked here without the password itself, and a digest mismatch is usually a nonce or created value that the two sides disagree about rather than a wrong password."}):t&&a.push({level:"info",title:"UsernameToken with an unusual password type",detail:`The Type attribute is ${n||"missing"}. Most services expect it to end in PasswordText or PasswordDigest and will reject anything else.`})}let n=$(e,x.wsse,"BinarySecurityToken");if(n){let e=A(n,null,"ValueType")||"",t=k(n).replace(/\s+/g,""),s=0;
4try{s=atob(t).length}catch{s=0}a.push({level:"info",title:"A binary security token is attached",detail:`ValueType ends in ${e.split("#").pop()||"an unspecified type"}, which normally means an X.509 certificate. It decodes to about ${s||"an unreadable number of"} bytes and starts ${t.slice(0,24)}. This page reports that the token is present, it does not parse or validate the certificate.`})}let l=$(e,x.wsu,"Timestamp");if(l){let e=k($(l,x.wsu,"Created")),s=k($(l,x.wsu,"Expires")),n=s?Date.parse(s):NaN,i=e?Date.parse(e):NaN;if(Number.isFinite(n)){let e=n-t;e<0?a.push({level:"error",title:"The security timestamp has expired",detail:`Expires is ${s}, which was ${P(e)} by this machine's clock. Any service checking the timestamp rejected this message before it looked at the body. Most stacks allow around five minutes of clock skew, so a gap this size is either a stale replay or two machines that disagree about the time.`}):a.push({level:"ok",title:"The security timestamp is still valid",detail:`Expires is ${s}, ${P(e)}${Number.isFinite(i)?`, and the window is ${Math.round((n-i)/1e3)} seconds wide`:""}. This uses your own machine's clock, so a skewed laptop gives a skewed answer.`})}else(e||s)&&a.push({level:"warn",title:"The timestamp values do not parse as dates",detail:`Created is ${e||"missing"} and Expires is ${s||"missing"}. WS-Security wants UTC in the form 2024-01-31T09:14:00Z. A local time with an offset, or a value with more than three decimal places on the seconds, is rejected by several stacks.`})}let i=e.getElementsByTagNameNS(x.xenc,"EncryptedData");i.length&&a.push({level:"info",title:"Part of this message is encrypted",detail:`There ${1===i.length?"is 1 encrypted block":`are ${i.length} encrypted blocks`} in the message. There is nothing to read without the key, and this page never has the key.`})}(r,a,s)}else o.push("no Header");let C=null,E=null,I=null,O=null;if(f){let e=N(f),t=e.find(e=>"Fault"===e.localName&&e.namespaceURI===l);if(0===e.length)s.push({level:"ok",title:"Empty Body, which is valid",detail:"A one-way operation, an acknowledgement and a fire and forget notification all legitimately carry nothing in the Body. This is not an error."}),C={id:"body",qname:"Body (empty)",facts:[]};else if(t){(e.length>1||0!==e.indexOf(t))&&s.push({level:"error",title:"Fault is not the only child of Body",detail:`A Fault has to be the first and only child of Body. This one sits alongside ${e.filter(e=>e!==t).map(T).join(", ")}.`}),function(e,t,a,s){if("1.2"===a){let a=$(e,t,"Code"),n=k(a?$(a,t,"Value"):null),l=n.includes(":")?n.slice(n.indexOf(":")+1):n;n&&s.push({level:"error",title:`This is a SOAP 1.2 Fault. Code is ${n}`,detail:`${"Sender"===l||"Client"===l?"Sender means ":"Receiver"===l||"Server"===l?"Receiver means ":""}${_(l)}`});let i=a?$(a,t,"Subcode"):null,o=0,r=[];for(;i&&o<10;){let e=k($(i,t,"Value"));e&&r.push(e),i=$(i,t,"Subcode"),o++}r.length&&s.push({level:"error",title:`Subcode ${r[r.length-1]??""}`,detail:`${r.length>1?`The subcode chain is ${r.join(" then ")}. `:""}The subcode is the service specific reason and it is the part worth searching for. ${i?"Nesting was stopped after 10 levels, so anything deeper was not examined.":""}`});let d=$(e,t,"Reason");if(d){for(let e of N(d).filter(e=>"Text"===e.localName&&(null===t||e.namespaceURI===t))){let t=A(e,x.xml,"lang")||"no language given";s.push({level:"info",title:`Reason (${t})`,detail:k(e)})}}let c=k($(e,t,"Node"));c&&s.push({level:"info",title:"Node",detail:`The fault was generated by ${c}, which is not always the endpoint you called.`});let p=k($(e,t,"Role"));p&&s.push({level:"info",title:"Role",detail:p});let u=$(e,t,"Detail");u&&X(u,s);return}let n=N(e).find(e=>"faultcode"===e.localName),l=k(n??null);if(l&&n){let e=l.includes(":")?l.slice(0,l.indexOf(":")):"",t=l.includes(":")?l.slice(l.indexOf(":")+1):l,i=e?n.lookupNamespaceURI(e):null,o=i===x.soap11||i===x.soap12;s.push({level:"error",title:`${"1.1"===a?"This is a SOAP 1.1 Fault":"This is a Fault"}. faultcode is ${l}`,detail:`${o?"":`The prefix ${e||"(none)"} does not resolve to a SOAP envelope namespace, so this is a custom code. `}${_(t)}`})}let i=k(N(e).find(e=>"faultstring"===e.localName)??null);i&&s.push({level:"info",title:"faultstring",detail:i});let o=k(N(e).find(e=>"faultactor"===e.localName)??null);o&&s.push({level:"info",title:"faultactor",detail:`${o} is the node that produced the fault.`});let r=N(e).find(e=>"detail"===e.localName);r&&X(r,s);let d=N(e).filter(e=>e.namespaceURI);d.length&&"1.1"===a&&s.push({level:"warn",title:"A Fault child is namespace qualified",detail
4:`In SOAP 1.1 the children of Fault (${d.map(T).join(", ")}) are supposed to be unqualified. Some stacks reject a qualified faultcode outright and others read it as a custom element, which is why a fault can come back looking empty.`})}(t,l,i,s),E={id:"fault",qname:T(t),facts:["fault"]};let a=N(t).find(e=>"detail"===e.localName||"Detail"===e.localName)??null;a&&(I={id:"faultdetail",qname:T(a),facts:[]}),C={id:"body",qname:T(f),facts:["carries a Fault"]}}else{let t=e[0];t&&(O={uri:t.namespaceURI,local:t.localName},C={id:"body",qname:T(t),facts:[t.namespaceURI?t.namespaceURI:"no namespace"]},t.namespaceURI?s.push({level:"info",title:`The operation looks like ${t.localName}`,detail:`The first child of Body is {${t.namespaceURI}}${t.localName}. In document/literal that element name is what the service dispatches on, so a namespace typo here produces a "cannot be processed" error even though the XML is perfect.`}):s.push({level:"error",title:`The Body payload ${t.localName} is not namespace qualified`,detail:"Every 
4immediate child of Body must be namespace qualified. Without a namespace the service cannot route the message to an operation, and document/literal dispatch fails before your handler runs."}),e.length>1&&s.push({level:"warn",title:`Body has ${e.length} children`,detail:"Document/literal expects exactly one. More than one usually means an RPC style service or a hand-built envelope, and most modern stacks will only read the first."}))}}let U=n.getElementsByTagNameNS(x.xop,"Include");if(U.length){let e=[];for(let t=0;t<U.length;t++){let a=U.item(t);a&&e.push(a.getAttribute("href")||"(no href)")}s.push({level:"info",title:`${U.length} MTOM attachment reference${1===U.length?"":"s"}`,detail:`${e.slice(0,5).join(", ")}${e.length>5?`, and ${e.length-5} more`:""}. Each of those is a pointer to a part of the multipart body, not data. The bytes only exist here if you pasted the whole multipart capture, and even then this page reports the reference rather than decoding the attachment.`})}if(t){let e=(t.contentType||"").toLowerCase(),a=e.includes("multipart/"),n=null===t.status;"1.1"!==i||a?"1.2"===i&&!a&&(e&&!e.includes("application/soap+xml")&&s.push({level:"error",title:`A SOAP 1.2 envelope sent as ${t.contentType}`,detail:"The 1.2 HTTP binding wants application/soap+xml. text/xml with a 1.2 envelope gets a 415 from anything strict."}),n&&t.soapActionPresent&&s.push({level:"warn",title:"A SOAPAction header on a SOAP 1.2 request",detail:'SOAP 1.2 replaced the header with an action parameter inside the content type, like application/soap+xml; action="urn:svc/Op". The HTTP binding does not define a SOAPAction header at all and WS-I Basic Profile 2.0 says not to send one, so it is not part of the binding and it is commonly rejected rather than forbidden by the spec.'}),n&&e.includes("application/soap+xml")&&!e.includes("action=")&&s.push({level:"info",title:"No action parameter in the content type",detail:'A 1.2 request usually carries action="..." inside the Content-Type. Some services need it to route the call, and some read the WS-Addressing Action instead.'})):(e&&!e.includes("text/xml")&&s.push({level:"error",title:`A SOAP 1.1 envelope sent as ${t.contentType}`,detail:"The 1.1 HTTP binding wants text/xml. Sending application/soap+xml with a 1.1 envelope is the single most common cause of a 415 Unsupported Media Type from a service that is otherwise perfectly happy."}),n&&e&&!t.soapActionPresent?s.push({level:"error",title:"SOAP 1.1 with no SOAPAction header",detail:"SOAP 1.1 requires the SOAPAction HTTP header on every request. It is allowed to be an empty pair of quotes, but it has to be there. Leaving it off makes a lot of services answer with a fault about an unknown operation."}):n&&null!==t.soapAction&&s.push({level:"info",title:`SOAPAction is ${t.soapAction||"an empty string"}`,detail:"The value should be quoted. An unquoted SOAPAction is accepted by most stacks and rejected by a stubborn few, and .NET is one of the strict ones."})),null!==t.status&&s.push({level:t.status>=400?"warn":"info",title:`HTTP ${t.status}`,detail:500===t.status?"A SOAP 1.1 fault is required to come back on a 500, so a 500 with a Fault body is normal and not a server crash. A 1.2 sender fault comes back on a 400 instead.":415===t.status?"Unsupported Media Type is nearly always the version and content type mismatch rather than anything wrong with your XML.":"From the pasted response line."})}!function(e,t){let a=e.getElementsByTagNameNS(x.ds,"Signature");if(!a.length)return;let s=new Map;S(e,e=>{let t=e.getAttributeNS(x.wsu,"Id")||e.getAttribute("Id")||e.getAttributeNS(x.xml,"id");t&&s.set(t,e)});let n=[],l=[],i=0,o=0;for(let e=0;e<a.length;e++){let t=a.item(e);if(!t)continue;let r=t.getElementsByTagNameNS(x.ds,"Reference");for(let e=0;e<r.length;e++){if(o++,i>=25)continue;let t=r.item(e);if(!t)continue;i++;let a=t.getAttribute("URI")||"";if(!a.startsWith("#"))continue;let d=s.get(a.slice(1));d?n.push(T(d)):l.push(a)}}n.length&&t.push({level:"info",title:`The signature covers ${n.join(", ")}`,detail:`That is coverage, not verification. It means those elements were included when the signature was built. Anything not on that list can be changed in transit without breaking the signature, which is why "the Body is signed but the To header is not" is worth knowing.${o>i?` ${o-i} further references were not examined.`:""}`}),l.length&&t.push({level:"error",title:"A signature reference points at nothing",detail:`${l.join(", ")} does not match any element carrying that Id in this message. Either the capture is partial or the signed element was rewritten after signing, and either way the signature cannot validate.`})}(n,s);let R=null;return S(n,e=>{if(!R){for(let t=0;t<e.childNodes.length;t++){let a=e.childNodes.item(t);if(a&&4===a.nodeType&&(a.nodeValue||"").trim().startsWith("<")&&(a.nodeValue||"").length>60){R=(a.nodeValue||"").trim();return}}if(0===N(e).length){let t=(e.textContent||"").trim();t.length>60&&t.startsWith("<")&&t.includes(">")&&(R=t)}}}),s.sort((e,t)=>
4w[e.level]-w[t.level]),{version:i,versionNs:l,findings:s,structure:{envelopeFacts:o,header:v,headerHidden:b,body:C,fault:E,faultDetail:I},bodyQName:O,embedded:R}}(d.doc,t.http,Date.now()),h=[...t.notes,...c.findings].sort((e,t)=>w[e.level]-w[t.level]),m=N(d.doc.documentElement),f=m.find(e=>"Header"===e.localName)??null,y=m.find(e=>"Body"===e.localName)??null,v=f?N(f):[],I=new Map;if(c.structure.header.forEach((e,t)=>{let a=v[t];a&&I.set(e.id,z(a,p,b))}),y){let e=N(y),t=e.find(e=>"Fault"===e.localName),a=e[0];if(t){I.set("fault",z(t,p,b));let e=N(t).find(e=>"detail"===e.localName||"Detail"===e.localName);e&&I.set("faultdetail",z(e,p,b)),I.set("body",z(y,p,b))}else a?I.set("body",z(a,p,b)):I.set("body",z(y,p,b))}return{kind:"envelope",steps:s,analysis:{...c,findings:h},fragments:I,output:W(d.doc,a,p,b),http:t.http}},[e,a,p,b]),ec=(0,i.useMemo)(()=>Y&&H.trim()&&ed&&"envelope"===ed.kind?function(e,t,a){let s=[],n=R(e);if(!n.doc)return s.push({level:"error",title:"That WSDL will not parse",detail:n.error}),s;let l=n.doc.documentElement;if(!l||"definitions"!==l.localName)return s.push({level:"error",title:"That does not look like a WSDL",detail:"The root element should be definitions. Paste the WSDL itself rather than an imported schema."}),s;let i=(e,t)=>{if(!t)return null;let a=t.indexOf(":");return -1===a?{uri:e.lookupNamespaceURI(null),local:t}:{uri:e.lookupNamespaceURI(t.slice(0,a)),local:t.slice(a+1)}},o=new Map,r=l.getElementsByTagNameNS(x.wsdl,"message");for(let e=0;e<r.length;e++){let t=r.item(e);if(!t)continue;let a=t.getAttribute("name"),s=t.getElementsByTagNameNS(x.wsdl,"part").item(0),n=s?s.getAttribute("element"):null;if(a&&s&&n){let e=i(s,n);e&&o.set(a,e)}}let d=[],c=l.getElementsByTagNameNS(x.wsdl,"portType");for(let e=0;e<c.length;e++){let t=c.item(e);if(!t)continue;let a=t.getElementsByTagNameNS(x.wsdl,"operation");for(let e=0;e<a.length;e++){let t=a.item(e);if(!t)continue;let s=t.getAttribute("name")||"(unnamed)",n=t.getElementsByTagNameNS(x.wsdl,"input").item(0),l=n?n.getAttribute("message"):null;if(!l)continue;let r=i(n,l),c=r?o.get(r.local):void 0;c&&d.push({op:s,q:c})}}if(t){let e=d.find(e=>e.q.local===t.local&&e.q.uri===t.uri),a=d.find(e=>e.q.local.toLowerCase()===t.local.toLowerCase());e?s.push({level:"ok",title:`Your Body matches the ${e.op} operation`,detail:`{${t.uri||"no namespace"}}${t.local} is exactly what the WSDL declares for that operation.`}):a?s.push({level:"error",title:"Close, but the names do not match exactly",detail:`Your Body's first child is {${t.uri||"no namespace"}}${t.local}, and the WSDL's ${a.op} operation expects {${a.q.uri||"no namespace"}}${a.q.local}.${a.q.local!==t.local?" The case does not match, and XML is case sensitive.":" The local names agree but the namespaces do not."}`}):d.length&&s.push({level:"warn",title:"No operation in this WSDL expects that element",detail:`Your Body sends {${t.uri||"no namespace"}}${t.local}. This WSDL declares ${d.slice(0,5).map(e=>`${e.op} wanting {${e.q.uri||"no namespace"}}${e.q.local}`).join(", ")}${d.length>5?`, and ${d.length-5} more`:""}.`})}if(null!==a){let e=a.replace(/^"|"$/g,""),t=[];for(let e of[x.wsdlSoap,x.wsdlSoap12]){let a=l.getElementsByTagNameNS(e,"operation");for(let e=0;e<a.length;e++){let s=a.item(e)?.getAttribute("soapAction");null!=s&&t.push(s)}}t.length&&(t.includes(e)?s.push({level:"ok",title:"The SOAPAction matches the WSDL",detail:`${e||"An empty action"} is declared in the binding.`}):s.push({level:"error",title:"The SOAPAction you sent is not in this WSDL",detail:`You sent ${e||"(empty)"}. The binding declares ${t.slice(0,5).map(e=>e||"(empty)").join(", ")}${t.length>5?", and more":""}.`}))}return s.length||s.push({level:"info",title:"Nothing to compare yet",detail:"The WSDL parsed, but there is no Body payload in the envelope above to check against it. Paste a request rather than a fault."}),s}(H,ed.analysis.bodyQName,ed.http?.soapAction??null):null,[Y,H,ed]),ep=(0,i.useMemo)(()=>(function(e,t){let a="1.1"===e?x.soap11:x.soap12,s=[];t.addressing&&s.push(`    <wsa:To>${v(t.endpoint)}</wsa:To>`,`    <wsa:Action>${v(t.action)}</wsa:Action>`,"    <wsa:MessageID>urn:uuid:00000000-0000-0000-0000-000000000000</wsa:MessageID>"),t.security&&s.push(`    <wsse:Security soapenv:mustUnderstand="${"1.1"===e?"1":"true"}">`,'      <wsu:Timestamp wsu:Id="TS-1">',"        <wsu:Created>2024-01-31T09:00:00Z</wsu:Created>","        <wsu:Expires>2024-01-31T09:05:00Z</wsu:Expires>","      </wsu:Timestamp>","      <wsse:UsernameToken>","        <wsse:Username>YOUR_USERNAME</wsse:Username>",'        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">YOUR_PASSWORD</wsse:Password>',"      </wsse:UsernameToken>","    </wsse:Security>");let n=[`xmlns:soapenv="${a}"`,`xmlns:svc="${t.targetNs}"`];t.addressing&&n.push(`xmlns:wsa="${x.wsa10}"`),t.security&&n.push(`xmlns:wsse="${x.wsse}"`,`xmlns:wsu="${x.wsu}"`);let l=['<?xml version="1.0" encoding="UTF-8"?>',`<soapenv:Envelope ${n.join(" ")}>`,s.length?"  <soapenv:Header>":"  <soapenv:Header/>",...s,s.length?"  </soapenv:Header>":"","  <soapenv:Body>",`    <svc:${t.operation}>`,"      <svc:parameter>value</svc:parameter>",`    </svc:${t.operation}>`,"  </soapenv:Body>","</soapenv:Envelope>"].filter(e=>""!==e).join("\n"),i=(()=>{try{return new URL(t.endpoint).pathname||"/"}catch{return"/service"}})(),o=(()=>{try{return new URL(t.endpoint).host}catch{return"example.com"}})(),r="1.1"===e?[`POST ${i} HTTP/1.1`,`Host: ${o}`,"Content-Type: text/xml; charset=utf-8",`SOAPAction: "${t.action}"`,"Content-Length: <length of the body in bytes>"]:[`POST ${i} HTTP/1.1`,`Host: ${o}`,`Content-Type: application/soap+xml; charset=utf-8; action="${t.action}"`,"Content-Length: <length of the body in bytes>"],d="1.1"===e?`curl -X POST "${t.endpoint}" \\
5  -H "Content-Type: text/xml; charset=utf-8" \\
6  -H "SOAPAction: \\"${t.action}\\"" \\
7  --data-binary @request.xml`:`curl -X POST "${t.endpoint}" \\
8  -H "Content-Type: application/soap+xml; charset=utf-8; action=\\"${t.action}\\"" \\
9  --data-binary @request.xml`;return{envelope:l,http:r.join("\n"),curl:d}})(et,{security:es,addressing:el,endpoint:"https://api.example.com/billing/v2",action:"urn:billing:v2/GetBalance",targetNs:"urn:billing:v2",operation:"GetBalance"}),[et,es,el]);async function eu(e){q("");try{let a,s=await e.arrayBuffer(),n=new Uint8Array(s),l="utf-8",i="UTF-8, assumed";if(239===n[0]&&187===n[1]&&191===n[2])l="utf-8",i="UTF-8, from the byte order mark";else if(255===n[0]&&254===n[1])l="utf-16le",i="UTF-16 little endian, from the byte order mark";else if(254===n[0]&&255===n[1])l="utf-16be",i="UTF-16 big endian, from the byte order mark";else{let e=new TextDecoder("ascii").decode(n.subarray(0,300)),t=/encoding\s*=\s*["']([\w.-]+)["']/i.exec(e);t&&t[1]&&(l=t[1].toLowerCase(),i=`${t[1]}, read from the XML declaration`)}try{a=new TextDecoder(l).decode(n)}catch{a=new TextDecoder("utf-8").decode(n),i=`${l} is not a label this browser knows, so UTF-8 was used instead`}t(a),B(`Read ${e.name} as ${i}.`)}
9catch{q("Could not read that file. Open it and paste the text instead.")}}let eh=e.trim().length>0,em=ed&&("envelope"===ed.kind||"plain"===ed.kind)?ed.output:"",ef="format"===a?"Formatted envelope":"minify"===a?"Minified envelope":"Normalized envelope";return(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"space-y-1.5",onDragOver:e=>{e.preventDefault(),M(!0)},onDragLeave:()=>M(!1),onDrop:e=>{e.preventDefault(),M(!1);let t=e.dataTransfer.files?.[0];t&&eu(t)},children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,s.jsx)(d.J,{htmlFor:"soap-input",children:"Your capture"}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,s.jsx)(r.$,{type:"button",variant:"outline",size:"sm",onClick:()=>eo.current?.click(),children:"Open file"}),(0,s.jsx)(r.$,{type:"button",variant:"ghost",size:"sm",onClick:()=>{t(""),B(""),q("")},disabled:!eh,children:"Clear"})]})]}),(0,s.jsx)("input",{ref:eo,type:"file",accept:".xml,.txt,.log,.soap,.wsdl,.msg,text/xml,application/xml,text/plain",className:"hidden",onChange:e=>{let t=e.target.files?.[0];t&&eu(t),e.target.value=""}}),(0,s.jsx)(o.T,{id:"soap-input","aria-label":"SOAP capture to inspect",placeholder:"Paste the whole capture. A full HTTP request or response with headers, a multipart MTOM body, an envelope escaped inside a Java log line, or just the XML.",value:e,onChange:e=>{t(e.target.value),B("")},onPaste:e=>{let t=e.clipboardData?.files?.[0];t&&(e.preventDefault(),eu(t))},className:(0,h.cn)("min-h-[180px] font-mono text-xs",U&&"border-primary ring-2 ring-primary/40"),spellCheck:!1}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,s.jsx)("span",{className:"text-xs text-muted-foreground",children:"Samples:"}),J.map(e=>(0,s.jsx)(r.$,{type:"button",variant:"outline",size:"sm",onClick:()=>{t(e.text),B(""),q("")},children:e.label},e.key))]}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"Click to type or paste, drop a file into the box, or use Open file. Nothing is uploaded, so a capture with a live password in it stays on your machine."}),L&&(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:L}),F&&(0,s.jsx)("p",{className:"text-sm text-destructive",children:F})]}),ed&&ed.steps.length>0&&(0,s.jsx)("div",{className:"flex flex-wrap gap-1.5","aria-label":"What was unwrapped",children:ed.steps.map(e=>(0,s.jsx)("span",{className:"rounded-full border bg-muted px-2.5 py-1 text-xs text-muted-foreground",children:e},e))}),ed?.kind==="fatal"&&(0,s.jsxs)("div",{role:"alert",className:"rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm",children:[(0,s.jsx)("p",{className:"font-medium text-destructive",children:ed.title}),(0,s.jsx)("p",{className:"mt-1 text-destructive/90",children:ed.detail})]}),ed?.kind==="plain"&&(0,s.jsxs)("div",{role:"status",className:"rounded-md border bg-muted/50 px-3 py-2 text-sm",children:[(0,s.jsxs)("p",{className:"font-medium",children:["This is plain XML, the root element is ",ed.rootName,", not Envelope."]}
9),(0,s.jsxs)("p",{className:"mt-1 text-muted-foreground",children:["It is formatted below anyway. For plain XML the"," ",(0,s.jsx)(l(),{className:"underline",href:"/dev/xml-formatter/",children:"XML formatter"})," ","is the better page, because it keeps your document byte for byte instead of rebuilding it."]})]}),ed?.kind==="envelope"&&(0,s.jsxs)("div",{className:"grid gap-4 lg:grid-cols-2",children:[(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)(d.J,{children:"Structure"}),(0,s.jsxs)("div",{className:"space-y-2 rounded-md border bg-muted/30 p-3 text-sm",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"font-mono font-medium",children:"Envelope"}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:ed.analysis.structure.envelopeFacts.join(" \xb7 ")})]}),(0,s.jsxs)("div",{className:"border-l-2 border-muted-foreground/20 pl-3",children:[(0,s.jsx)("p",{className:"font-mono font-medium",children:"Header"}),0===ed.analysis.structure.header.length&&(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"No header blocks."}),ed.analysis.structure.header.map(e=>(0,s.jsxs)("div",{className:"mt-1.5 flex flex-wrap items-center gap-2",children:[(0,s.jsx)("span",{className:"font-mono text-xs",children:e.qname}),e.facts.map((t,a)=>(0,s.jsx)("span",{className:"rounded border bg-background px-1.5 py-0.5 text-[11px] text-muted-foreground",children:t},`${e.id}-${a}`)),(0,s.jsx)(f.i,{value:ed.fragments.get(e.id)||"",label:"Copy",variant:"ghost",size:"sm",className:"h-6 px-2 text-xs"})]},e.id)),ed.analysis.structure.headerHidden>0&&(0,s.jsxs)("p",{className:"mt-1 text-xs text-muted-foreground",children:[ed.analysis.structure.headerHidden," more header block",1===ed.analysis.structure.headerHidden?" is":"s are"," in the message and not listed here."]})]}),(0,s.jsxs)("div",{className:"border-l-2 border-muted-foreground/20 pl-3",children:[(0,s.jsx)("p",{className:"font-mono font-medium",children:"Body"}),ed.analysis.structure.body&&(0,s.jsxs)("div",{className:"mt-1.5 flex flex-wrap items-center gap-2",children:[(0,s.jsx)("span",{className:"font-mono text-xs",children:ed.analysis.structure.body.qname}),ed.analysis.structure.body.facts.map((e,t)=>(0,s.jsx)("span",{className:"max-w-full truncate rounded border bg-background px-1.5 py-0.5 text-[11px] text-muted-foreground",children:e},`body-${t}`)),(0,s.jsx)(f.i,{value:ed.fragments.get("body")||"",label:"Copy payload",variant:"ghost",size:"sm",className:"h-6 px-2 text-xs"})]}),ed.analysis.structure.fault&&(0,s.jsxs)("div",{className:"mt-1.5 flex flex-wrap items-center gap-2",children:[(0,s.jsx)("span",{className:"font-mono text-xs text-destructive",children:ed.analysis.structure.fault.qname}),(0,s.jsx)(f.i,{value:ed.fragments.get("fault")||"",label:"Copy fault",variant:"ghost",size:"sm",className:"h-6 px-2 text-xs"}),ed.analysis.structure.faultDetail&&(0,s.jsx)(f.i,{value:ed.fragments.get("faultdetail")||"",label:"Copy detail",variant:"ghost",size:"sm",className:"h-6 px-2 text-xs"})]})]})]}),ed.analysis.embedded&&(0,s.jsx)(r.$,{type:"button",variant:"outline",size:"sm",onClick:()=>{t(ed.analysis.embedded||"")},children:"Open the embedded payload as its own document"})]}),(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)(d.J,{children:"What this message says"}),(0,s.jsx)("div",{className:"space-y-2",children:ed.analysis.findings.map((e,t)=>(0,s.jsxs)("div",{className:(0,h.cn)("rounded-md border border-l-4 px-3 py-2 text-sm",Z[e.level]),children:[(0,s.jsxs)("p",{className:"font-medium",children:[(0,s.jsx)("span",{className:"mr-2 text-[11px] uppercase tracking-wide text-muted-foreground",children:G[e.level]}),e.title]}),e.detail&&(0,s.jsx)("p",{className:"mt-1 text-muted-foreground",children:e.detail})]},`${e.title}-${t}`))})]})]}),eh&&(ed?.kind==="envelope"||ed?.kind==="plain")&&(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-end gap-4",children:[(0,s.jsxs)("div",{className:"space-y-1.5",children:[(0,s.jsx)(d.J,{htmlFor:"soap-mode",children:"Output"}),(0,s.jsx)("div",{id:"soap-mode",role:"group","aria-label":"Output mode",className:"flex flex-wrap gap-1.5",children:["format","minify","normalize"].map(e=>(0,s.jsx)(r.$,{type:"button",size:"sm",variant:a===e?"default":"outline","aria-pressed":a===e,onClick:()=>n(e),children:"format"===e?"Format":"minify"===e?"Minify":"Normalize prefixes"},e))})]}),"minify"!==a&&(0,s.jsxs)("div",{className:"space-y-1.5",children:[(0,s.jsx)(d.J,{htmlFor:"soap-indent",children:"Indent"}),(0,s.jsx)("div",{id:"soap-indent",role:"group","aria-label":"Indent size",className:"flex gap-1.5",children:["2","4","tab"].map(e=>(0,s.jsx)(r.$,{type:"button",size:"sm",variant:p===e?"default":"outline","aria-pressed":p===e,onClick:()=>y(e),children:"tab"===e?"Tab":`${e} spaces`},e))})]}),(0,s.jsxs)("div",{className:"space-y-1.5",children:[(0,s.jsx)(d.J,{htmlFor:"soap-mask",children:"Before you share it"}),(0,s.jsxs)("label",{htmlFor:"soap-mask",className:"flex h-9 cursor-pointer items-center gap-2 text-sm",children:[(0,s.jsx)("input",{id:"soap-mask",type:"checkbox",checked:b,onChange:e=>I(e.target.checked),className:"h-4 w-4 accent-primary"}),"Mask secrets"]})]})]}),b&&(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"Masking matches on element and attribute names (password, token, session, key, nonce, certificate, account and card fields) and blanks their values. Read the result before you paste it into a ticket, because a service that names a secret something unusual will not be caught."}),(0,s.jsx)(d.J,{htmlFor:"soap-output",children:ef}),(0,s.jsx)(o.T,{id:"soap-output","aria-label":ef,readOnly:!0,value:em,className:"min-h-[220px] font-mono text-xs",spellCheck:!1}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,s.jsx)(f.i,{value:em,label:"Copy",copiedLabel:"Copied!",variant:"outline",size:"sm",disabled:!em}),(0,s.jsx)(r.$,{type:"button",variant:"outline",size:"sm",disabled:!em,onClick:()=>{let e=new Blob([em],{type:"application/xml;charset=utf-8"});(0,m.WN)(e,"minify"===a?"envelope.min.xml":"envelope.xml")},children:"Download .xml"})]}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"The output is rebuilt from the parsed message, so attribute order can move and redundant namespace declarations get tidied. Content inside a CDATA section is never touched."})]}),(0,s.jsxs)("div",{className:"space-y-2 rounded-md border p-3",children:[(0,s.jsx)(r.$,{type:"button",variant:"ghost",size:"sm",onClick:()=>Q(e=>!e),children:Y?"Hide the WSDL cross-check":"Check this envelope against a WSDL"}),Y&&(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsx)(o.T,{"aria-label":"WSDL to check against",placeholder:"Paste the WSDL. It is never fetched, because a browser page cannot request another site's WSDL.",value:H,onChange:e=>V(e.target.value),className:"min-h-[120px] font-mono text-xs",spellCheck:!1}),ec?.map((e,t)=>(0,s.jsxs)("div",{className:(0,h.cn)("rounded-md border border-l-4 px-3 py-2 text-sm",Z[e.level]),children:[(0,s.jsx)("p",{className:"font-medium",children:e.title}),(0,s.jsx)("p",{className:"mt-1 text-muted-foreground",children:e.detail})]},`${e.title}-${t}`))]})]}),(0,s.jsxs)("div",{className:"space-y-2 rounded-md border p-3",children:[(0,s.jsx)(r.$,{type:"button",variant:"ghost",size:"sm",onClick:()=>ee(e=>!e),children:K?"Hide the request skeleton":"Build a correct request skeleton"}),K&&(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,s.jsx)("div",{role:"group","aria-label":"SOAP version",className:"flex gap-1.5",children:["1.1","1.2"].map(e=>(0,s.jsxs)(r.$,{type:"button",size:"sm",variant:et===e?"default":"outline","aria-pressed":et
9===e,onClick:()=>ea(e),children:["SOAP ",e]},e))}),(0,s.jsxs)("label",{className:"flex cursor-pointer items-center gap-2 text-sm",children:[(0,s.jsx)("input",{type:"checkbox",checked:es,onChange:e=>en(e.target.checked),className:"h-4 w-4 accent-primary"}),"WS-Security header"]}),(0,s.jsxs)("label",{className:"flex cursor-pointer items-center gap-2 text-sm",children:[(0,s.jsx)("input",{type:"checkbox",checked:el,onChange:e=>ei(e.target.checked),className:"h-4 w-4 accent-primary"}),"WS-Addressing headers"]})]}),(0,s.jsx)(o.T,{readOnly:!0,"aria-label":"Request skeleton",value:ep.envelope,className:"min-h-[200px] font-mono text-xs"}),(0,s.jsx)(o.T,{readOnly:!0,"aria-label":"HTTP headers for the request",value:ep.http,className:"min-h-[100px] font-mono text-xs"}),(0,s.jsx)(o.T,{readOnly:!0,"aria-label":"curl command",value:ep.curl,className:"min-h-[90px] font-mono text-xs"}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,s.jsx)(f.i,{value:ep.envelope,label:"Copy envelope",copiedLabel:"Copied!",variant:"outline",size:"sm"}),(0,s.jsx)(f.i,{value:ep.http,label:"Copy headers",copiedLabel:"Copied!",variant:"outline",size:"sm"}),(0,s.jsx)(f.i,{value:ep.curl,label:"Copy curl",copiedLabel:"Copied!",variant:"outline",size:"sm"})]}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"Replace the endpoint, namespace and operation with yours. The point of the skeleton is the shape and the matching HTTP headers, which are the part that differs between the two versions and the part people get wrong."})]})]}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground",children:"Everything happens in your browser. Nothing you paste is uploaded, stored or logged, which is why a live production capture with a password in it is safe here. This page cannot send your request or fetch your WSDL, because a browser is not allowed to call another site directly."}),(0,s.jsx)(c.ToolActions,{getParams:er,title:"SOAP Formatter"})]})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.