2.90.1
(fix): XML (TwiML) record types implement value equality: Equals/GetHashCode (and ==) compare the
rendered XML, so VoiceResponse.FromXml(xml).Equals(VoiceResponse.FromXml(parsed.ToXml())) and
new Say { Message = "x" }.Equals(new Say { Message = "x" }) are true. Previously the record
default compared the collection members by reference and was always false.
2.90.0
(feat): Add opt-in user-agent-only config. When enabled, generated clients send the User-Agent
header (including the structured form from include-platform-headers) but omit the
X-Fern-Language, X-Fern-SDK-Name, and X-Fern-SDK-Version headers. Disabled by default,
so existing generated output is unchanged. omit-fern-headers still takes precedence and drops
the User-Agent too.
(fix): Fix the generated XmlElementTests test project failing to compile because its FakeNode test
double did not implement IXmlNode.ToXml(bool).
2.89.0
(feat): The generated WebhooksHelper HMAC verifier now accepts a per-call algorithm override via an optional algorithm parameter on verifySignature,
one of sha1, sha256, sha384 or sha512. When omitted, the algorithm configured in
webhook-signature is used, so existing callers are unchanged. This lets one endpoint verify both
legacy HMAC-SHA1 (auth-token) and HMAC-SHA256 (shared-key) signed webhooks.
The verifier also logs a warning distinguishing an early failure (missing signature header) from a
failed verification (signature mismatch); it still returns false and never throws.
2.88.0
(feat): XML (TwiML) types keep text segments, typed child elements and raw XmlElement children in a
single ordered Content list, so ToXml() emits them in the order they were added
(Response.Say(a).AddChild(custom).Say(b) yields <Say>a</Say><Custom /><Say>b</Say>) and
FromXml() preserves document order, including the position of unknown elements and repeated
wrapper elements. Adds AddText(string) to XML types and XmlElement for mixed content such as
<Say>Hi <break strength="weak" /> world</Say>. Typed child properties and AdditionalChildren
remain available; AdditionalChildren is now derived from Content.
2.87.0
(feat): Support SDK variables (variables in api.yml / x-fern-sdk-variables in OpenAPI). Path
parameters bound to a variable via x-fern-sdk-variable are removed from endpoint
signatures and request types and are configured once on the client through the generated
ClientOptions.<Variable> property. String variables that declare an env fall back to that
environment variable, and a variable that is still unset fails with a clear
ArgumentException before the request is sent.