Repository navigation
Releases: medz/oxy
Release list
Oxy 0.7.2
Fixes pending response-body cancellation through Web transport and timeout wrappers, including absolute total deadlines while a subscription is paused. Cancellation releases the read without changing the caller's signal, and clients remain reusable.
RFC850 Retry-After dates now work on the first Flutter native compilation through Oxy's internal normalization, independently of build-hook overlay ordering. The existing dependency overlay remains in place.
Adds public API application qualification on Flutter macOS and Web, a Web application CI job, and documented contract and platform boundaries for the 1.0 work. Public API, dependencies, defaults, and the Dart 3.12 SDK minimum remain compatible with 0.7.1.
Validated with minimum and stable Dart on VM, Node, and Chrome, plus fresh Flutter macOS/Web application consumers. This release does not claim qualification for other native devices, release modes, or HTTP/2 streamed uploads, and does not include the unqualified performance experiment in #76.
Oxy 0.7.1
Oxy 0.7.1 on pub.dev fixes stalled HTTP response-body reads and clarifies transport capabilities.
- Read timeouts stop pending native and Web reads even with the total timeout disabled, preserving
TimeoutErrorand its phase. - Native caller cancellation now stops a body read after headers arrive, preserving
CancelErrorand the caller's reason. Timeout cancellation leaves caller-supplied signals unchanged and clients reusable. - Native proxy/TLS flags reflect the configuration actually exposed by the default transport. Web request-streaming capability reflects the runtime feature probe.
- Transport contracts document browser constraints, stream buffering, timeout behavior and transport ownership.
Dart 3.12 remains the minimum. Dependencies are unchanged. This is a correctness patch; #76 performance work and #80 overlay retirement remain open. Flutter application consumers and browser HTTP/2 streaming uploads remain 1.0 qualification work.
Validation: minimum and stable Dart SDK analysis, VM/Node/Chrome suites, clean publication dry-run, and independent public API consumers covering automatic RFC850 overlay, native GET/POST/retry, exact user-agent identities, read/total timeouts, caller cancellation, client reuse and 128KiB response integrity.
Changes: #81.
Oxy 0.7.0
Oxy 0.7.0 on pub.dev aligns the declared SDK requirement with its dependency graph and fixes native request identification and executable policy examples.
Upgrade notes
- Use Dart 3.12 or newer. The required Patchwork dependency already made published 0.6.0 unresolvable on Dart 3.10 and 3.11; the manifest and minimum/stable CI now state the effective requirement correctly.
- Native requests now use the version-independent
User-Agent: oxy. SetClientOptions(userAgent: 'my-app/1.0')for an application identity, or provide an explicituser-agentheader. The native transport sends the configured identity exactly instead of appending Dart's default. On Web, the option is ignored and the browser controls the wire user agent. - README and cookbook policy examples now include a base URL, so their relative
/missingrequest exercises status handling as intended.
Validation
- Dart 3.12.0 and 3.13.4: VM 119, Node 107, Chrome 115 tests pass; Patchwork checks and publication dry-run pass with zero warnings.
- A fresh hosted consumer on both SDKs verifies automatic RFC850 dependency overlay, native GET/POST/retry, and exact default/custom/explicit user-agent identities.
- The published archive's SHA-256 matches pub.dev metadata, and all 78 packaged files byte-match the release commit.
Changes: SDK contract #77, request identity and examples #79, release #78.
The road to 1.0 records remaining qualification work. This release includes no performance optimization; #76 remains open.
v0.6.0
What's Changed
- Breaking: Body now subclasses ht.Body and removes the Oxy-specific BodyKind/from*/open/contentLength API surface.
- Changed: upgraded to ht ^0.6.0, accepts ht.Body directly, and clones replayable bodies for retries and preserved-method redirects.
- Added: benchmark suites for baseline costs plus real Oxy, package:http, and Dio client comparisons against a shared loopback server.
- Fixed: RFC850 Retry-After date parsing through the local http_parser provider overlay.
v0.5.0
Breaking Changes
- Reworked
Headersas a directht.Headersre-export. Oxy-specific helpers
such asgetAll,copy, andtoMultiValueMapare no longer available; use
entries(),Headers(headers), andgetSetCookie()instead. - Removed
Request.withHeader; useRequest.copyWith(headers: ...)with
Headers(request.headers)when deriving requests with changed headers. - Replaced Oxy's local cookie jar API with
ocookie 0.3.0primitives.
CookieMiddlewarenow creates an in-memory jar by default and accepts
upstreamCookieJar,CookieStore, andCookiePolicyinputs through named
parameters. - Removed Oxy's
MemoryCookieJar,parseSetCookie, and cookie request-matching
extension APIs in favor of upstreamocookieprimitives. - Removed deprecated
ClientOptions.networkMiddlewareand
RequestOptions.networkMiddleware; pass attempt middleware through
middlewareinstead.
Changed
- Upgraded to
ht ^0.4.2and aligned header normalization and iteration with
Fetch semantics. - Upgraded to
ocookie ^0.3.0and delegated cookie normalization, matching,
sorting, and storage to upstreamocookie. - Removed
ht.Bodyas an accepted Oxy body source; use stable data
containers such asBlobinstead.
v0.4.0
Breaking Changes
- Removed middleware presets; compose middleware explicitly from the built-in middleware types instead.
- Redesigned middleware around lifecycle capabilities.
Middleware.interceptandNextwere replaced by request, attempt, final response, error, and finally capability interfaces. - Deprecated
ClientOptions.networkMiddlewareandRequestOptions.networkMiddleware; configure common middleware through the primarymiddlewarelist instead.
Added
- Added public API Dartdoc, a cookbook, and checked examples for reusable API clients, policies, no-throw flows, middleware, testing, and body replayability.
CookieMiddlewarenow works across redirects and retries from the primarymiddlewarelist.
v0.3.0
Breaking Changes
- Rebuilt Oxy around semantic core types:
Client,Request,Response,
Headers,Body, policy types, middleware, typed errors, andResult. - Removed
ht.Request/ht.Responseas Oxy's public request model along with
the oldOxy/OxyConfigAPI shape. - Replaced the
safe*method matrix with unified result flows:
Result.capture(...),Client.sendResult(...),Client.requestResult(...),
andfetchResult(...). - Status handling now uses
StatusPolicy; non-2xx responses throw
StatusErrorby default.
Added
- Built-in native, web, and test transports under Oxy's own single-package
transport layer. Contextwith typedAttributesfor middleware coordination.- Replayability-aware
BodyandResponseBodyprimitives. - Selective
htbody-helper integration forBlob,FormData,Multipart,
andURLSearchParamswithout exposinght.Request/ht.Responseas Oxy's
request model. - Hardened cookie scope validation, cache revalidation, browser forbidden
headers, timeout enforcement, retry draining, and error-body preview handling. - Added client-level native/test redirect following, explicit web redirect-limit
policy errors, JSONnullrequest bodies, and stronger middleware error
normalization. - Application and network middleware layers.
- Policy-driven timeout, retry, redirect, and status behavior.
MockTransportviapackage:oxy/testing.dart.
Changed
- Native clients keep connections alive by default and expose explicit
Client.close()lifecycle management. - Middleware now works with immutable/copy-on-write requests instead of
mutating shared request instances. - Cache, cookie, auth, logging, and request-id features remain in the single
package but sit behind the common middleware pipeline.
v0.2.2
Fixed
- Restored browser compatibility for non-stream request bodies by avoiding accidental request streaming on HTTP/1.1 endpoints.
- Preserved the intended web body transport mode for manual
send(Request(...))calls and hardened invalid internal body-mode metadata handling. - Added browser regression coverage for JSON POST requests and manual request-body mode handling.
v0.2.1
Fixed
- Raised the
htlower bound to^0.3.1to avoid resolving the brokenht 0.3.0release. - Updated Oxy request construction to match the corrected
ht 0.3.1Request(Object? input, [RequestInit? init])API. - Refreshed README snippets and public API tests for the
ht 0.3.1hotfix line.
v0.2.0
Breaking Changes
- Upgraded to
ht 0.3and aligned Oxy request/response APIs with the newhtrequest and response semantics. - Low-level request construction now follows the
ht 0.3model, includingRequestInput.*,RequestInit,HttpMethod, andHeadersInit-based inputs where applicable. - Middleware now forwards and mutates the active
Requestinstance instead of depending on copied request objects. Custom middleware that relied on copy-on-write behavior should update to mutate the provided request before callingnext. - Re-exported cookie types now follow
ocookie 0.2.0two-state flag semantics.Cookie.httpOnly,Cookie.secure, andCookie.partitionednow default tofalse, andCookieNullableField.httpOnly,CookieNullableField.secure, andCookieNullableField.partitionedare no longer available.
Changed
- Upgraded dependencies to
ht ^0.3.0andocookie ^0.2.0. - Updated examples, README snippets, and test coverage for the
ht 0.3request construction model. - Aligned transport, cache, logging, auth, request ID, and cookie middleware behavior with the latest
htheader and response APIs.
Fixed
- Preserved request
Cookieheader precedence over cookie jar values when merging cookies inCookieMiddleware. - Kept cookie parsing aligned with
ocookie 0.2.0, including explicitSecure=false,HttpOnly=false, andPartitioned=falseflag handling. - Removed unnecessary request copying inside the middleware pipeline while preserving request mutation behavior across built-in middleware.