2.2.1
(fix): Fix Wire test files to read WIREMOCK_URL environment variable instead of
hardcoding http://localhost:8080. The setUp() method now declares a
$wiremockUrl variable that reads from the environment with a fallback,
enabling tests to work with dynamically assigned Docker ports in local
development and CI/CD environments.
2.2.0
(feat): Add omitFernHeaders configuration option. When enabled, Fern platform headers
(X-Fern-Language, X-Fern-SDK-Name, X-Fern-SDK-Version, User-Agent) are omitted
from generated SDK requests.
2.1.12
(fix): Fix WireMock datetime mismatch in wire tests. The mock-utils package generates datetime
query parameter values with milliseconds (e.g., 2022-01-02T00:00:00.000Z) via
Date.toISOString(), but PHP’s DateTimeInterface::RFC3339 format omits fractional
seconds (e.g., 2022-01-02T00:00:00Z). Since WireMock’s equalTo is an exact-match,
the stubs never fired. Now strips zero milliseconds from WireMock datetime query
parameter values to match the PHP SDK’s serialization format.
2.1.11
(chore): Add concurrency configuration to generated CI workflow with cancel-in-progress: false
to prevent stacked runs from being cancelled when a newer run starts.
2.1.10
(fix): Fix serialization and deserialization of boolean values in union types.
(Matches existing fix for floats.)
2.1.9
(fix): Re-throw errors after logging for README.md and reference.md generation failures.
Documentation generation errors now break the generation flow so they are treated
as important to fix.
2.1.8
(fix): Fix dynamic snippets to include global headers in generated code examples.
Previously, required global headers (e.g., X-Organization-ID) configured via
x-fern-global-headers were missing from dynamic snippet output. Also fixes
header value lookup to use wire values instead of a non-existent property.
2.1.7
(chore): Improve error logging for README.md and reference.md generation failures.
The generator now logs the actual error message and stack trace instead
of a generic message, making it easier to diagnose generation issues.
2.1.6
(chore): Parallelize endpoint snippet generation in populateSnippetsCache(). All
endpoints are now processed concurrently via Promise.all instead of
sequentially, reducing snippet generation time for large APIs.
2.1.5
(chore): Standardize WireMock configuration to use WIREMOCK_URL environment variable
(e.g., http://localhost:8080) instead of a hardcoded URL. Docker Compose
now uses dynamic port mapping (0:8080) to avoid port conflicts when running
multiple SDK tests in parallel. The bootstrap script discovers the assigned
port and sets WIREMOCK_URL automatically. Falls back to http://localhost:8080
if the variable is not set.
2.1.4
(fix): Fix PHP 8.5 deprecation warning for ReflectionProperty::getDefaultValue() called on
properties without a default value. Now checks hasDefaultValue() before calling
getDefaultValue() in JsonSerializableType::jsonDeserialize().
2.1.3
(chore): Use generator-cli JS API directly instead of subprocess spawning.
Remove generator-cli from Docker image since it is now bundled via esbuild.
2.1.2
(fix): Fix generateClientInterfaces to generate interfaces for aggregator-only clients (clients
that hold sub-client properties but have no direct API endpoints). Previously, these clients
were skipped, leaving the top-level client and intermediate grouping clients without interfaces.
Interfaces now include typed getter method signatures for each sub-client (e.g.,
getUsers(): UsersClientInterface), and the corresponding client classes implement these
getters.
2.1.1
(fix): Fix PHPStan static analysis errors in core runtime classes. Tightens return types
(e.g., castKey now returns int|string instead of mixed), adds missing null checks,
and improves PHPDoc annotations across JsonSerializer, JsonDeserializer, and Utils.
Also fixes BaseApiException::__toString() to use getCode() instead of direct property
access and print_r() for non-scalar body values.
(fix): Add of object bound to pagination template generics (CursorPager, OffsetPager)
to satisfy PHPStan’s requirement for clone on object types.
2.1.0
(fix): Fix wire test generation for types with required constructor fields. Previously, the
test generator would pass empty arrays [] as constructor arguments when no example
values were provided for required fields (e.g., new SomeType([])). Now generates
appropriate placeholder values based on each field’s type (e.g., new SomeType(['ids' => [1]])).
(feat): Add support for fileDownload (application/octet-stream) and bytes response types.
Previously, endpoints returning binary data would throw an error at runtime because no
success handling was generated. Now these endpoints return the raw response body as a string.