@apicity/ har (英语)
无依赖性节点.js HAR 1.2 序列化、秘密清洗和选入
请求/回复抓取. createHarCapture 提供可注射取回,
调用瞄准镜,可选全局安装,以及带有JSONL索引的已刷取文件.
见 抓取指南 关于设置和保留的细节.
import { exchangeToEntry, scrubHar, pollyEntryId } from "@apicity/har";
declare const request: Request; // the request you sent
declare const response: Response; // its response, body unread
const entry = await exchangeToEntry(request, response, {
startedAt: new Date(),
durationMs: 120,
});
entry._id = pollyEntryId(entry);
createHarCapture({ dir, mode: "all" | "failures", providers?, maxBodyBytes?, maxSummarizeBytes?, sseTailBytes?, context?, onError?, clock?, idFactory? })返回时{ fetch, call, install, flush, close }。包装提供者在call({ provider, endpoint, input, context?, estimate? }, fn)等待着close()退出前; 一个呼叫context被浅浅地合并在俘虏context只有那个电话.estimate(单位:千美元)usd, (中文(简体) ),source, (中文(简体) ),rateAsOf, (中文(简体) ),warnings, (中文(简体) ),breakdown, (中文(简体) ),status)写给log._apicity.estimate作为estimateUsd内index.jsonl。 。 。 .input与 1024 以上的每个数据 URL 或基数64 字段一起写 字符,以及每个字节数组,取而代之的是其散列的占位符,解码 大小和媒体类型。 抓取在写出错误后被禁用,而不更改 提供者结果。 无法读取的正文不会禁用它: 交换是 保存为bodyTruncated,以及responseCut和呼吁的结果 实值network_error。 。 。 .exchangeToEntry(request: Request, responseOrError: Response | Error, timing, options?)读取克隆并返回被擦除的条目。 时机已经startedAt, (中文(简体) ),durationMs和可选 HARtimings选项maxBodyBytes(262144号) 默认),maxSummarizeBytes(16个米B),sseTailBytes(64个基B),streamed财务报告和审定财务报表role二进制和超大小的身体成为SHA-256、字节和MIME型 占位符,但 JSON 请求最多maxSummarizeBytes其文本符合 其介质汇总后封顶。 多段文件成为名称/类型/大小 总结。 内置数据URL和长基64被汇总. 一个文本流结束 盖子是第一个maxBodyBytes最后一个sseTailBytes,整行 添加一个: apicity-gap <n> bytes dropped注释;_apicity.streamed财务报告和审定财务报表bodyTruncated说明 他们。 中读失败的躯体 保存到达的东西: 溪流的整行,或 任何不解析整个 JSON 文档的占位符。 一个网络 错误生成状态 0; 呼叫级别错误元数据属于log._apicity。 。 。 .streamIncomplete标记一条无新线的线尾或 在公认的Anthropic、OpenAI或Google流中没有最终使用 也标记了整个保留的JSON反应,不解析,即使 运输报告清洁 EOF。 此 JSON 仅保存为散列/ 大小占位符 . 它设置bodyTruncated并保持成本证据未定。 不可分类 在一个公认的协议中,一个米B以上的框架或线条不完整。 这是 与留存额上限无关responseCut(运输故障):完成 运输失败之后的最后用途仍然可以解决。 遗产捕获 无streamIncomplete保留现有的成本语义。 机构必须 未使用, 溪流必须最终完成; 中止的请求取消其 获取复制件, 这样它无法控制冲浪 .scrubEntry(entry)财务报告和审定财务报表scrubHar(har)变相而还其辩. 扫描覆盖信头、 URL、 JSON 和窗体编码的供应商证书 尸体,饼干, 响应账户元数据及_apicity输入/估计/内容/字段。 它保留了提示和 普通载荷。 这不是一般的个人数据匿名.pollyEntryId(entry, options?)使用 存储器的默认带匹配规则 。 自定义匹配要求excludeHeaders, (中文(简体) ),headers: false,或body: false视情况而定。 URL 网络 以 Polly 的 url- parse 和 qs 的 url- parse 使其 正常化 : 键被排序并 RFC 3986 逃脱、重复、无值和括号的密钥被保留 碎片被丢弃。 被总结的身体不能复制其特征 原生字节, % 畸形的查询部分也不可能一次逃脱 (单位:千美元)Request重新编码了它。 未关闭的已录入的 URL[或超过 作为对该 URL 的新请求, 不如所记录:波利的再序列化在那里并不稳定.pollyRecordingDir(name)执行Polly的分块弹道和FNV-1a散列.- HAR 类型 :
Har, (中文(简体) ),HarLog, (中文(简体) ),HarEntry, (中文(简体) ),HarRequest, (中文(简体) ),HarResponse, (中文(简体) ),HarContent, (中文(简体) ),HarPostData, (中文(简体) ),HarNameValue, (中文(简体) ),HarCookie, (中文(简体) ),HarPage, (中文(简体) ),HarCacheEntry, (中文(简体) ),HarTimings, (中文(简体) ),ApicityCallMetadata,以及ApicityEntryMetadata。 。 。 . - 选项 :
ExchangeTiming, (中文(简体) ),ExchangeOptions, (中文(简体) ),PollyIdentityOptions。 。 。 .
记录工具的兼容性导出 : redactPersistedHarSecrets, (中文(简体) ),
persistSafeTextRequestBody, (中文(简体) ), summarizeJsonRequestBodyMedia, (中文(简体) ),
summarizeMultipartFormData, (中文(简体) ), summarizeMultipartRequestBody, (中文(简体) ),
redactedRequestId, (中文(简体) ), PersistedHarRecording, (中文(简体) ), REDACTED_HAR_VALUE, (中文(简体) ),
HarHeaderLike, (中文(简体) ), HarCookieLike, (中文(简体) ), HarRequestLike, (中文(简体) ), HarResponseLike, (中文(简体) ),
HarRecordingLike, (中文(简体) ), isSensitiveRequestHeaderName, (中文(简体) ),
isSensitiveResponseHeaderName, (中文(简体) ), scrubSensitiveRequestHeaders, (中文(简体) ),
scrubSensitiveResponseHeaders, (中文(简体) ), scrubRequestCookies, (中文(简体) ), scrubResponseCookies, (中文(简体) ),
scrubSensitiveResponse, (中文(简体) ), scrubPolymarketAuthArtifacts, (中文(简体) ),
scrubSensitiveRecording, (中文(简体) ), PERSISTED_REQUEST_HEADER_PLACEHOLDERS, (中文(简体) ),
persistedRequestHeaderPlaceholder, (中文(简体) ), redactFalCheckpoints, (中文(简体) ),
findUnredactedRequestSecrets,以及 findLiveFalCheckpoints。 。 。 .
仓库整合
包裹拥有规则. tests/harness.ts 财务报告和审定财务报表 tests/har-scrub.ts 为:
兼容导出; Vitest 源别名与此包相悖 .
独立的 HAR 查看器/ 报告/ 电子邮件工具通过导入同一来源
har-data.ts 财务报告和审定财务报表 har-scrub.ts 使用相对路径,所以 tsx 还行
从寄存器之外,没有软件包构建或虚拟化名.
gen:shared 副本 src/har-secrets.mjs 改为 scripts/lib/har-secrets.mjs
(共享源的显式把它接上). 此已执行, 生成的复制让
gen:examples:check, (中文(简体) ), lint:recordings 财务报告和审定财务报表 doc-gen:check 运行一个干净的取出
在创建任何软件包之前. gen:shared:check 防止漂移。 没有运行时间软件包
这些脚本需要依赖或建立进口.
成本证据
entryToProviderExchange 将一个 HAR 输入到交换形状
extractActual 内 @apicity/cost 改为:小写页眉名称,解析出JSON或
SSE 数据框架和无效 requestBody 一个被俘的占位符。 这个包
不导入 @apicity/cost;形状结构吻合.
import { entryToProviderExchange, type HarEntry } from "@apicity/har";
declare const entry: HarEntry;
const exchange = entryToProviderExchange(entry, {
provider: "openai",
dotPath: "v1.responses",
});
exchange.responseHeaders["content-type"];
provider 回到拥有请求主机的那个.
交换分析助手
exchangeSucceeded(provider, entry) 需要 HTTP 2xx 并拒绝 KIE 和 xAI
失败信封. responseObject(entry) 解码 JSON 对象响应,
包括基础64 HAR内容.
findMatchingRow(entry, rows, {provider}) 首先匹配完整的 URL,然后使用一个
提供者扫描路径匹配, 然后再次匹配 Fal 的全部 URL
{endpoint_id} 横跨整个路径段( c)fal-ai/flux/dev) (中文(简体) ). 带行
provider, (中文(简体) ), method, (中文(简体) ), dotPath 财务报告和审定财务报表 fullUrl。 。 。 . matchHarEntryStrict, (中文(简体) ),
matchHarEntryLenient, (中文(简体) ), matchHarEntrySpanning 财务报告和审定财务报表 compileTsvUrlPattern
曝光个人匹配操作. 这些是犬科动物
执行也同步到存储器脚本.