@ agentskit/net (英语)
简介 : concise-package
用于代理的HTTP管道,在一个小包中:带有后置和 Retry-After, 任意超时, 限定对象读取, 服务器发送事件, 以及 SSRF 地址检查。 Web API只运行于节点, Bun, Deno,浏览器和边缘运行时间.
标记 : agentskit • 妇女 ai-agents • 妇女 fetch • 妇女 retry • 妇女 sse • 妇女 ssrf • 妇女 timeout • 妇女 edge
已核实的证据
- 软件包元数据和单元测试在下面进行
packages/net/。 。 。 . - 决定记录: ADR-0037 (英语)。 。 。 .
- 稳定地图: 文件/服务.md
如何适应生态系统
适配器、工具和其他代理Kit存储器 各自携带自己的重试回路, Retry-After 解析,SSE行分解器和私人-IP检查,每条都有不同的bug. @agentskit/net 拥有它们,在 eventsource-parser 财务报告和审定财务报表 ipaddr.js,因此,呼叫者导入一个已测试的执行.
- 探员Kit数字 :
@agentskit/adapters(流线、回流)和@agentskit/tools(比对用户提供的URL)是预定的消费者. - 书记官处: 随时可以使用的代理和模板 登记. agentskit.io。 。 。 .
- 游戏本: 生产模式 游戏本. agentskit.io。 。 。 .
安装
npm install @agentskit/net
快速实例
import { assertPublicUrl, fetchWithRetry, parseSSEResponse, readJson } from '@agentskit/net'
// Refuse private, loopback and metadata addresses before fetching a user-supplied URL.
const { url } = await assertPublicUrl('https://api.example.com/v1/models')
// Idempotent requests retry on 429/5xx, honouring Retry-After; each attempt times out.
const models = await readJson(await fetchWithRetry(url, undefined, { timeoutMs: 10_000 }), {
maxBytes: 1_000_000,
})
console.log(models)
// Server-sent events as an async iterable.
const stream = await fetch('https://api.example.com/v1/stream', { method: 'POST' })
for await (const event of parseSSEResponse(stream)) {
if (event.data === '[DONE]') break
console.log(event.event ?? 'message', event.data)
}
特征
| 区域 | API 密码 | 替换 |
|---|---|---|
| 重试 | retry, (中文(简体) ), computeBackoff, (中文(简体) ), parseRetryAfter, (中文(简体) ), isRetryableStatus, (中文(简体) ), RETRYABLE_STATUSES | 手写 for 有固定睡眠的循环, 忽略 Retry-After |
| 获取 | fetchWithRetry | 重试两次 POST , 漏出已丢弃的响应机构, 超过所有尝试的超时 |
| 超时 | timeoutSignal, (中文(简体) ), anySignal, (中文(简体) ), withTimeout | setTimeout + 键 AbortController 锅炉板 |
| 机构 | readBody, (中文(简体) ), readText, (中文(简体) ), readJson | await res.text() 对无约束反应的答复 |
| 证监会 | parseSSE, (中文(简体) ), parseSSEResponse | split('\n') + 键 startsWith('data: ') 解析 CRLF 、 多行数据和块边界 |
| 地址 | assertPublicUrl, (中文(简体) ), isPublicAddress, (中文(简体) ), classifyAddress | regexs 结束 127.编号 :10.编号 :192.168. 错过 IPv6、 IPv4 和元数据地址 |
-
默认缺额数字 :
fetchWithRetry复试 获得/获得/获得/得到/得到/得到/得到/得到/得到/得到/得到/获得;通过retryMethods: 'all'选入 POST 。 流体从不复试. -
输入错误数字 :
NetError与AK_NET_TIMEOUT, (中文(简体) ),AK_NET_BODY_TOO_LARGE, (中文(简体) ),AK_NET_BLOCKED_ADDRESS, (中文(简体) ),AK_NET_INVALID_INPUT, (中文(简体) ),AK_NET_SSE_PARSE_FAILED。 。 。 . -
DNS 已经注射数字 :
assertPublicUrl使用一个lookup函数,所以软件包没有node:进口。 连接前的检查不会停止 DNS 重新绑定; 将已解决的地址绑定为重要 . -
建造在数字 :
eventsource-parser, (中文(简体) ),ipaddr.js。 。 。 . -
护卫规则数字 :
NET_RULES(单位:千美元)readonly NetRule[]从@agentskit/net/rules检测重复 HTTP 重试、 SSE、 超时、 地址和身体处理。 添加@agentskit/cross-platform作为运行扫描仪的 dev 依赖; 传出NET_RULES改为scanText(file, source, rules)或者说scanRepository(options)。两个返回结论都认为:compareToBaseline(findings, baseline)鼠标。 使用<id>-ignore: <reason>例如,对经核准的单一规则的禁止net-retry-after-ignore: legacy retry handler。存储器检查是node scripts/check-net-rules.mjs。 。 。 .import { NET_RULES } from '@agentskit/net/rules' import { scanText } from '@agentskit/cross-platform' const findings = scanText('src/http.ts', 'const body = await response.text()', NET_RULES) console.log(findings.length)
可撤销的等待和最后期限
sleep(ms, signal?) 接受0至2,147,483,647毫秒的延迟。 它默认使用可中止的定时器,在中止时清除该定时器,并用信号的实际理由拒绝. retry 默认使用此公共助手; 其可选 sleep 回调有形状 (ms, signal?) => Promise<void>。单参数调用仍然兼容;需要立即取消的调用应尊重可选信号.
withTimeout(work, ms, parent?) 接受2,147,483,647毫秒的正期限,并传递在最后期限或母信号中止时中止的信号。 逾期的最后期限被拒绝 NetError 代码 AK_NET_TIMEOUT; 无效的超时 AK_NET_INVALID_INPUT. 呼叫者流产保留其确切原因,成功或原工作失败不会改变。 包装者拒绝准时,即使工作忽略了信号,但只有合作工作,如 fetch ; 任意 JavaScript 无法强制取消.
import { retry, sleep, withTimeout } from '@agentskit/net'
const parent = new AbortController()
const response = await withTimeout(
signal => fetch('https://api.example.com/data', { signal }),
5_000,
parent.signal,
)
await retry(async () => fetch('https://api.example.com/retry'), {
sleep: (ms, signal) => sleep(ms, signal),
})
生态系统
| 软件包 | 作用 |
|---|---|
| @ agentskit/ 核心 | AgentsKitError基础 NetError |
| @ agentskit/ 适应器 | 供应商流动和重复 |
| @ agentskit/ 工具 | 安全获取用户提供的 URL |
贡献者
许可证
麻省理工学院——见 自由主义。 。 。 .
文档
成熟性和相容性
- 稳定性: β 语录 看到了吗 文件/服务.md没有1.0.
- 节点.js 20+ (20.19+), Bun, Deno, 现代浏览器和边缘运行时间; 类型脚本 严格模式
- 发表于
@agentskit/net