soap
The SOAP codec: octets and values in, octets and values out. It builds a SOAP envelope and reads one back in ONE representation for both versions, makes one canonical reading of the two fault vocabularies, builds and reads the WS-Addressing header and the WS-Security header's four members, verifies the detached signature over the Body and answers the verified Body, and reads a WSDL into the service description the connector kit's ingest consumes. Every def is pure and Ring 1 — no socket, no clock, no entropy, no capability, no handle: the transport including TLS is the caller's, and the SOAP server half is not this module.
soap:parse
[$soap:parse] -> element — Read SOAP octets into [envelope version= [header …] [body …]] under the strict reader's bounds; a DOCTYPE, a second Body, both envelope namespaces, two Security blocks for one role and a UsernameToken carrying both password forms are refusals.
soap:emit
[$soap:emit] -> string — Write an envelope's octets in schema order with explicit end tags and namespace declarations where first used; emit of parse is idempotent and is NOT the canonicalizer a signature is computed over.
soap:envelope
[$soap:envelope] -> element — Build an envelope around a body element at opts.version, carrying opts.header blocks in the order given and nothing the caller did not ask for.
soap:headers
[$soap:headers] -> [sequence element] — The header blocks targeted at this node, refusing a mustUnderstand block whose expanded name opts.understood does not declare.
soap:outcome
[$soap:outcome] -> element — Answer [outcome state=:ok|:fault] — SOAP admits no half-answer, so there are two arms and no third.
soap:fault
[$soap:fault] -> element — The canonical fault of both versions as an [err …] carrying soap-code=, the vendor's subcode verbatim, the reason for opts.lang and the detail as an element child.
soap:action
[$soap:action] -> string — THE action of a call — the wsa:Action header, refusing when the transport's own opts.soap-action disagrees with it.
soap:addressing
[$soap:addressing] -> element — Build the WS-Addressing header block; ReplyTo defaults to the anonymous address and a MessageID that is not an absolute IRI is refused.
soap:security
[$soap:security] -> element — Compose the WS-Security header block from its members in the profile's own order — the timestamp and the token before the signature that covers them.
soap:username-token
[$soap:username-token] -> element — Build a UsernameToken, :plain (a password on the wire, safe under TLS and nothing else) or :digest (Base64 of SHA-1 over the decoded nonce, the created instant and the password, carrying no password at all).
soap:timestamp
[$soap:timestamp] -> element — Build a wsu:Timestamp from the two supplied instants, refusing a window that runs backwards or is wider than the bound.
soap:timestamp-check
[$soap:timestamp-check] -> element — Check an envelope's timestamp against the SUPPLIED instant and the tolerated skew, answering [ok] or refusing and naming the window.
soap:binary-security-token
[$soap:binary-security-token] -> element — Build the X.509 BinarySecurityToken from a PEM or bare base64 certificate; the two profile URIs are fixed rather than chosen.
soap:sign
[$soap:sign] -> element — Sign the Body with one detached Reference to its wsu:Id under exclusive C14N; the document is checked before the key is touched, so a Body with no wsu:Id refuses for every key.
soap:verify
[$soap:verify] -> element — Answer THE VERIFIED Body, or refuse: the signature must cover the Body, name it once, carry exactly one Reference and use exclusive C14N alone — all checked before any digest is computed.
soap:wsdl
[$soap:wsdl] -> element — Read a WSDL into [service name= [port …] [operation …]] with each port's SOAP version from its binding namespace; a wsdl:import and an rpc/encoded binding are refused, and no operation carries an idempotency a WSDL cannot state.