Skip to content

Releases: medz/oxy

Oxy 0.7.2

Choose a tag to compare

@medz medz released this 02 Oct 08:02
3b1e345

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

Choose a tag to compare

@medz medz released this 02 Oct 00:14
871228f

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 TimeoutError and its phase.
  • Native caller cancellation now stops a body read after headers arrive, preserving CancelError and 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

Choose a tag to compare

@medz medz released this 01 Oct 22:53
6e0697c

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. Set ClientOptions(userAgent: 'my-app/1.0') for an application identity, or provide an explicit user-agent header. 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 /missing request 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

Choose a tag to compare

@medz medz released this 23 Jun 14:26

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

Choose a tag to compare

@medz medz released this 21 Jun 13:53

Breaking Changes

  • Reworked Headers as a direct ht.Headers re-export. Oxy-specific helpers
    such as getAll, copy, and toMultiValueMap are no longer available; use
    entries(), Headers(headers), and getSetCookie() instead.
  • Removed Request.withHeader; use Request.copyWith(headers: ...) with
    Headers(request.headers) when deriving requests with changed headers.
  • Replaced Oxy's local cookie jar API with ocookie 0.3.0 primitives.
    CookieMiddleware now creates an in-memory jar by default and accepts
    upstream CookieJar, CookieStore, and CookiePolicy inputs through named
    parameters.
  • Removed Oxy's MemoryCookieJar, parseSetCookie, and cookie request-matching
    extension APIs in favor of upstream ocookie primitives.
  • Removed deprecated ClientOptions.networkMiddleware and
    RequestOptions.networkMiddleware; pass attempt middleware through
    middleware instead.

Changed

  • Upgraded to ht ^0.4.2 and aligned header normalization and iteration with
    Fetch semantics.
  • Upgraded to ocookie ^0.3.0 and delegated cookie normalization, matching,
    sorting, and storage to upstream ocookie.
  • Removed ht.Body as an accepted Oxy body source; use stable data
    containers such as Blob instead.

v0.4.0

Choose a tag to compare

@medz medz released this 21 Jun 05:55

Breaking Changes

  • Removed middleware presets; compose middleware explicitly from the built-in middleware types instead.
  • Redesigned middleware around lifecycle capabilities. Middleware.intercept and Next were replaced by request, attempt, final response, error, and finally capability interfaces.
  • Deprecated ClientOptions.networkMiddleware and RequestOptions.networkMiddleware; configure common middleware through the primary middleware list instead.

Added

  • Added public API Dartdoc, a cookbook, and checked examples for reusable API clients, policies, no-throw flows, middleware, testing, and body replayability.
  • CookieMiddleware now works across redirects and retries from the primary middleware list.

v0.3.0

Choose a tag to compare

@medz medz released this 18 Jun 06:14

Breaking Changes

  • Rebuilt Oxy around semantic core types: Client, Request, Response,
    Headers, Body, policy types, middleware, typed errors, and Result.
  • Removed ht.Request/ht.Response as Oxy's public request model along with
    the old Oxy/OxyConfig API shape.
  • Replaced the safe* method matrix with unified result flows:
    Result.capture(...), Client.sendResult(...), Client.requestResult(...),
    and fetchResult(...).
  • Status handling now uses StatusPolicy; non-2xx responses throw
    StatusError by default.

Added

  • Built-in native, web, and test transports under Oxy's own single-package
    transport layer.
  • Context with typed Attributes for middleware coordination.
  • Replayability-aware Body and ResponseBody primitives.
  • Selective ht body-helper integration for Blob, FormData, Multipart,
    and URLSearchParams without exposing ht.Request/ht.Response as 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, JSON null request bodies, and stronger middleware error
    normalization.
  • Application and network middleware layers.
  • Policy-driven timeout, retry, redirect, and status behavior.
  • MockTransport via package: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

Choose a tag to compare

@medz medz released this 11 Apr 12:37

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

Choose a tag to compare

@medz medz released this 13 Mar 18:22
75c2678

Fixed

  • Raised the ht lower bound to ^0.3.1 to avoid resolving the broken ht 0.3.0 release.
  • Updated Oxy request construction to match the corrected ht 0.3.1 Request(Object? input, [RequestInit? init]) API.
  • Refreshed README snippets and public API tests for the ht 0.3.1 hotfix line.

v0.2.0

Choose a tag to compare

@medz medz released this 13 Mar 10:45

Breaking Changes

  • Upgraded to ht 0.3 and aligned Oxy request/response APIs with the new ht request and response semantics.
  • Low-level request construction now follows the ht 0.3 model, including RequestInput.*, RequestInit, HttpMethod, and HeadersInit-based inputs where applicable.
  • Middleware now forwards and mutates the active Request instance instead of depending on copied request objects. Custom middleware that relied on copy-on-write behavior should update to mutate the provided request before calling next.
  • Re-exported cookie types now follow ocookie 0.2.0 two-state flag semantics. Cookie.httpOnly, Cookie.secure, and Cookie.partitioned now default to false, and CookieNullableField.httpOnly, CookieNullableField.secure, and CookieNullableField.partitioned are no longer available.

Changed

  • Upgraded dependencies to ht ^0.3.0 and ocookie ^0.2.0.
  • Updated examples, README snippets, and test coverage for the ht 0.3 request construction model.
  • Aligned transport, cache, logging, auth, request ID, and cookie middleware behavior with the latest ht header and response APIs.

Fixed

  • Preserved request Cookie header precedence over cookie jar values when merging cookies in CookieMiddleware.
  • Kept cookie parsing aligned with ocookie 0.2.0, including explicit Secure=false, HttpOnly=false, and Partitioned=false flag handling.
  • Removed unnecessary request copying inside the middleware pipeline while preserving request mutation behavior across built-in middleware.