1.25.0
(feat): Add support for custom pagination in PHP SDK. The generator now handles custom pagination endpoints by generating a CustomPager class that users can extend to implement their own pagination logic. The CustomPager provides access to the initial response and client instance for making subsequent requests. The class name can be customized via the custom-pager-classname configuration option.
1.24.2
(fix): Fix php-cs-fixer creating .php-cs-fixer.dist.php config files in subdirectories during generation. The interactive prompt was causing config files with @auto ruleset to be created, which then failed when running from subdirectories without composer.json. Added —no-interaction flag to prevent this behavior.
1.24.1
(fix): Fix getGitHubConfig to return RawGithubConfig with undefined values instead of throwing errors when publishing config is missing, aligning with TypeScript/Python generator behavior.
1.24.0
(feat): Retries now check Retry-After and X-RateLimit-Reset response headers before defaulting to exponential backoff. Added jitter to retry delays and capped maximum retry delay at 60 seconds.
1.23.11
(chore): Remove verbose debug logs for endpoint snippet processing and generation counts.
1.23.10
(fix): Fix union deserialization to catch Throwable instead of Exception. Previously, when deserializing union types, TypeError exceptions thrown during property assignment (e.g., assigning null to a non-nullable int property) were not caught, preventing the union from trying alternative types. This fix ensures that all errors during union type deserialization are caught, allowing proper fallthrough to the next union variant.
1.23.9
(fix): Fix JsonException “No constructor found” for empty object types. Previously, object types with no properties would not generate a constructor, causing JSON deserialization to fail. Now all JsonSerializableType subclasses generate a constructor with the expected array $values parameter signature.
1.23.8
(fix): Normalize UTC datetime serialization to use Z suffix instead of +00:00. The JsonSerializer now converts 2023-01-01T12:34:56+00:00 to 2023-01-01T12:34:56Z for UTC times while preserving RFC3339 format for non-UTC timezones. Query parameters and headers now use JsonSerializer::serializeDateTime() for consistent datetime formatting. Test templates updated to match the new behavior.
1.23.7
(fix): Fix DateTime formatting for optional and nullable query parameters. Previously, optional and nullable DateTime query parameters were passed as raw DateTime objects to Guzzle HTTP client, causing request failures. The fix ensures that Optional<DateTime> and Nullable<DateTime> types are correctly identified and formatted using .format() method with proper date/datetime constants.
1.23.6
(fix): Fix wire tests to pass X-Test-Id header via method call options. Dynamic snippets now pass arbitrary headers from the snippet request as per-request options when generating calls on existing clients (skipClientInstantiation mode). This enables wire tests to properly correlate requests with WireMock verification.
1.23.5
(fix): Fix wire test environment parameter generation and inferred auth parameter handling. Wire tests now properly indent environment parameters and use Environments::custom() instead of raw arrays for type safety. Additionally, required inferred auth parameters no longer use unnecessary null coalescing operators (??), resolving PHPStan static analysis warnings.
1.23.4
(fix): Fix wire test generation for inferred auth by using getInferredAuth() explicitly. The previous fix relied on the visitor pattern which may not correctly identify inferred auth schemes in all cases.
1.23.3
(fix): Fix wire test generation for inferred auth. Wire tests now correctly pass the required auth parameters (e.g., apiKey) extracted from the token endpoint’s request body and headers, matching the root client constructor signature.
1.23.2
(fix): Fix constructor signature mismatches in multi-URL environments. Subpackage clients now consistently use isMultiUrl to determine whether to accept Environments or options as the second constructor parameter, matching the root client’s behavior. Also fixes OAuth and inferred auth client instantiation to pass the environment parameter when in multi-URL mode, and updates wire tests to extend WireMockTestCase and include auth parameters.
1.23.1
(fix): Remove error on null config in README generation.
1.23.0
(feat): Add inferred auth support for PHP SDKs. The SDK now generates an InferredAuthProvider class that handles automatic token retrieval and caching with expiration handling. Root clients accept the token endpoint request parameters for inferred authentication.
1.22.3
(fix): Fix dynamic snippets to properly handle custom URLs in multi-URL environments. Custom URLs now correctly generate Environments::custom(...) calls instead of failing with “Invalid multi url environment” error.
1.22.2
(fix): Add missing <?php opening tag to generated wire test files for proper syntax highlighting.
1.22.1
(fix): Fix PHPStan error for enum string return types by adding @phpstan-ignore-line suppression.
1.22.0
(chore): Upgrade to IR version 62.
1.21.0
(feat): Add OAuth client credentials support for PHP SDKs. The SDK now generates an OAuthTokenProvider class that handles automatic token refresh with expiration handling. Root clients accept clientId and clientSecret parameters for OAuth authentication, and dynamic snippets show proper OAuth instantiation examples.
1.20.0
(feat): Add reference.md generation for PHP SDKs. The reference documentation includes dynamic snippets with example data for all API endpoints, organized by service.
1.19.2
(fix): Fix environment passing in PHP SDK sub-clients for multi-URL environments. Sub-clients now properly receive the environment instance instead of options, ensuring correct URL resolution when APIs have different base URLs per service.
1.19.1
(feat): Add support for multi-URL environments. Generated SDKs now use a class-based Environments with readonly properties for each service URL, enabling APIs with different base URLs per service (e.g., EC2 and S3). Sub-clients receive the full Environments instance and access their specific URL via property access.
1.18.3
(fix): Fix duplicate logging in PHP SDK generator by including class names in log messages. Previously, multiple types in the same directory would log identical “Generating {directory}” messages, causing log spam. Now each type logs a unique “Generating {directory}/{className}” message.
1.18.2
(fix): Fallback to unpaged method for custom pagination instead of hard failing. Endpoints with custom pagination will now generate normal request/response methods instead of throwing an error.
1.18.1
(chore): Bump generator CLI version to publish new Docker image.
1.18.0
(feat): Added Generation Metadata file to output