2.8.1

(fix): Fix dynamic snippet generator to emit required global headers as named constructor arguments instead of inside the options array.


2.8.0

(feat): Add retryStatusCodes configuration option (legacy | recommended). The default legacy mode preserves existing behavior (retries 408, 429, and all >= 500). The recommended mode only retries 408, 429, 502, 503, 504 (excludes 500 Internal Server Error to avoid retrying non-idempotent failures).


2.7.0

(feat): 支持 x-fern-default 作为生成的 PHP SDK 中参数的回退值。 当 header、查询参数或路径参数在 IR 中具有 clientDefault 值时, 生成的 PHP SDK 使该参数可选,并自动应用默认值。

2.6.0

(feat): 当通过身份验证方案的 placeholder 字段配置时, 在 README 代码片段中使用身份验证方案占位符值。


2.5.2

(fix): 修复动态代码片段生成器,当代码片段请求对需要 bearer、OAuth、basic 或 header 身份验证的端点省略身份验证时,发出占位符身份验证值。之前生成的构造函数调用 缺少必需的身份验证参数,导致 phpstan 失败。


2.5.1

(chore): 将 @fern-api/generator-cli 升级到 0.9.11。GitHub 管道步骤现在通过 GitHub REST API 创建签名提交(匹配 fiddle 的传统 InMemoryGitRepo 推送路径), 在启用重放的组织上恢复已验证的 fern-api[bot] 提交。

2.5.0

(feat): 添加 offsetSemantics 配置选项。设置为 "page-index" 时,偏移分页每页递增 1, 而不是按返回的项目数递增("item-index",默认值)。

2.4.4

(fix): 修复具有多值数组查询参数的端点的线路测试验证。

2.4.3

(chore): 通过 Sentry 为生成器运行时添加崩溃报告,并使用新的共享 GeneratorError 分类法对抛出的错误进行分类,以便将面向用户的故障(配置、验证、身份验证、网络、环境) 与内部 Fern 错误区分开来 — 只有后者会转发给 Sentry。生成的输出无变化。


2.4.2

(chore): 将 phpunit/phpunit 开发依赖从 9.0 升级到 12.5.22,以解决 GHSA-qrr6-mg7r-m243(通过转发给子进程的 PHP INI 值中的换行符进行参数注入)。 还将生成的 ci.yml 工作流使用的 PHP 版本从 8.1 升级到 8.3,这是 PHPUnit 12 支持的最低版本。生成的 composer.json 文件中的 php 约束保持 8.1 不变, 因此生产安装(composer install --no-dev)不受影响。


2.4.1

(chore): 将 @fern-api/generator-cli 升级到 0.9.8。生成的 PR 中的变更日志 URL 现在使用提交 SHA 而不是 PR 分支名称,在分支被删除或合并压缩后保持链接有效。


2.4.0

(feat): 支持在 IR 中通过 usernameOmitpasswordOmit 配置时从基本身份验证中省略用户名或密码。 省略的字段从 SDK 的公共 API 中删除,并在内部视为空字符串(例如,省略密码编码为 username:, 省略用户名编码为 :password)。当两者都省略时,完全跳过 Authorization 标头。

2.3.1

(chore): 将模板引擎从 lodash 迁移到 Eta,以与其他生成器保持一致。

2.3.0

(feat): 添加 maxRetries 自定义配置选项,以覆盖失败请求的默认最大重试次数。 未指定时默认值仍为 2。



2.2.6

(fix): 支持多个具有 AuthSchemesRequirement.Any 的 Basic Auth 方案。 当 API 定义多个基本身份验证方案时(例如, accountId/authToken 和 apiKey/apiKeySecret),生成的客户端现在 生成条件 if/else if 块,检查提供了哪个凭据对 并相应地设置 Authorization 标头。之前, 仅使用第一个基本身份验证方案。