# @broberg/auth-relay 中文文档

规范地址：https://npmcn.com/package/%40broberg/auth-relay/

版本：0\.5\.2
npm 元数据更新时间：2026-11-01T11:12:31.323Z
中文译文更新时间：2026-11-08T15:55:31.737Z
软件包许可：未声明

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40broberg/auth-relay
原文对照：https://npmcn.com/package/%40broberg/auth-relay/?lang=original
项目主页：https://github.com/broberg-ai/auth-relay#readme
源码仓库：https://github.com/broberg-ai/auth-relay

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：167 kB，33 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：7 个
- 首次发布：2026-10-25T14:33:02.133Z
- 最新版本发布：2026-11-01T11:12:31.180Z
- 近 30 天下载量：5905（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：32（近 12 个月 32 个）

## 中文简介

ARS——代理商要求拥有者提供代码或密码;拥有者在本地页面上回答一次;只有灰人得到一次.

## 安装

```sh
npm install @broberg/auth-relay
```

也可以使用：`pnpm add @broberg/auth-relay`、`yarn add @broberg/auth-relay`、`bun add @broberg/auth-relay`

## README

# ARS — Auth 中继服务

**在本地页面中,所有者键入一个请求代理的代码或密码—— npm OTP, 认证器- 应用程序代码, 登录—— 因此该值从未通过聊天或LLM上下文.**

## 愿景

舰队自行运行了100%——而真正需要主人之手的几分时刻(从他手机中一次性的代码,只有他知道密码)则在一整页上取取取他5秒,从不做终端,从不聊天,从不做复制.

## 特派团

让舰队中的每一个特工都有一个简单,安全的方法来要求拥有者一个秘密值,并给拥有者一个简单,安全的地方来回答:代理询问,他得到一个通知,他打过一次,只有请求代理收到它——一次——并且该值从未被LLM存储,记录或看到.

## 这是什么

今天,当一个代理点击 npm 发布需要一次性代码,一个有双因子登录或密码的网站,工作就会停止. 拥有者必须在终端中注意到,阅读请求,将价值粘贴到聊天中——在记录片和AI的记忆中着陆.

ARS去掉这个。 它是一个小型的网络服务,运行在主人的Mac上,只能从Mac本身获得:

1.  **一个特工问.** `POST http://127.0.0.1:<port>/v1/asks` 与谁所问;与问;与什么所答`code`, (中文(简体) ), `password`, (中文(简体) ), `text` 或者说 `approve`) (中文(简体) ).
2.  **主人闻已.** 一个macOS通知名谁问和为什么,和问页打开他的浏览器.
3.  **他回答了.** 一个字段(按密码显示,数字表示代码), **发送** 或者说 **关于**。 。 。 .
4.  **经纪人得到它,一次.** 毒剂长发 `GET /v1/asks/:id?wait=55`; 第一部读出答案并擦去. 后来读到的只是回答.

### 承诺

-   **从来没有存储,从来没有登录.** 答案只存在于记忆中,直到读取或过期. 审计清单显示 _谁要求什么和何时_ 从不值钱.
-   **过期.** 10分钟后未答复的询问已无法回答.
-   **惟有行者能诵.** 每个请求都带有自己的读取符号,只有被请求的BID本能才能读取.
-   **探员证明他们是谁.** 每一次代理电话都携带一张布罗贝里身份证;店主看见谁从机票上问话(`edge m1 · session lens`),从不从代理写出短信.
-   **只有这个Mac——对于特工来说,是舰队的私人网络.** 义务为 `127.0.0.1`并有防范网页的警卫试图接近它。 其它Macs上的代理联系到这个Mac's Tailscale地址上的代理API(而别无他法);窗口,历史和应答都停留在回转上.
-   **而不是一个捷径 经过主人自己的话.** 一个 `approve` 请求是常规确认;部署有破坏性的迁移,DNS,env翻转等需要他的直接命令.

### 谁用

-   **镜头** - 一个测试步骤 `fill [field] from owner "<question>"` 询问 ARS 并键入答案,所以点击 2FA 的流量会持续运行.
-   **任何 cc 会话** - 要求Npm检察官办公室之前 `npm publish`,有一个 `curl`。 。 。 .

### 从 cc 会话中询问

从朋友那里得到一张票(有效300 s——每通电话取一张新票),然后问和等待:

```bash
T=$(curl -s -m 5 "http://127.0.0.1:4123/api/edge-ticket?audience=https://ars.broberg.ai&scope=ars:request&session=$BUDDY_SESSION_NAME" | jq -r .ticket)
curl -s -X POST http://127.0.0.1:7480/v1/asks -H "authorization: Bearer $T" -H 'content-type: application/json' \
  -d '{"requester":"my-session: npm publish","question":"npm OTP for @broberg/x 1.2.3","kind":"code"}'
# → { id, read_token, … }; then GET /v1/asks/<id>?wait=55 with the same kind of header + x-ars-read-token
```

从另一个Mac开始,使用这个Mac的尾图地址,而不是 `127.0.0.1` (印刷品: `scripts/install.sh`,比如说. `http://100.78.170.62:7480`) (中文(简体) ).

通过环境变量将答案传递到下一个命令(`npm_config_otp=…`),从不作为聊天中的文本.

-   **后来:蜂鸣** ——移动版本(推向iPhone)相同 `/v1/asks` 合同,所以消费者只更改地址.

## 状态

计划。 见 `docs/PLAN.md` 合同,故事和推出.

## 配对——只有窗口可以回答

ARS窗口第一次在Mac上打开,它要求6位数代码,ARS只显示为macOS通知. 正确的代码将窗口对起来;从那时起,它只能看到等待的询问和回答. ARS只保留窗口钥匙的散列(`~/Library/Application Support/ARS/owner.json`) (中文(简体) ).

诚实的极限:配对会阻止任何程序简单地拨打ARS并回答自己的要求. 它不会停止一个像你一样运行和驱动浏览器的程序. 当BID给Mac会话一个身份时,这个会移动到BID.

## 进入卡片(卡片-F406)

**开始 [`docs/MIGRATION.md`](https://npmcn.com/package/%40broberg/auth-relay/docs/MIGRATION.md)** ——什么卡片取而代之,挂载,历史导入,声音/语音,客户端和开关订单.

-   `src/core/` 是询问核心(存储,四个状态,单读,过期,已读取). 它只进口 `node:crypto`测试使它保持这样.
-   `src/contract.test.ts` 这是 `/v1/asks` 合同。 运行它对任何主机: `ARS_CONTRACT_URL=http://host:port bun test src/contract.test.ts`。所有者答案需要适配器(ARS: `ARS_CONTRACT_PAIR_CODE`报告为跳过.

## 在主机( 软件包) 中使用 ARS

**仅存一文.** `@broberg/auth-relay` 船型脚本源(`engines.bun`); 节点主机不能导入. 把它固定好 保守秘密.

```ts
import { createAsksRoute, webRoot } from '@broberg/auth-relay';
import { serveStatic } from 'hono/bun';

app.route('/ars', createAsksRoute({
  auth: (req) => /* your agent auth */ ({ principal: 'agent-123', label: 'components' }), // null → 401
  delivery: {
    notify: ({ id, label, question, pageUrl }) => { /* tell the owner; never gets an answer */ },
    isOwner: (c) => /* your owner session check */ true,
  },
  pageUrl: (id) => `https://host/ars/?ask=${id}`,
}));
app.get('/ars', (c) => c.redirect('/ars/'));            // the window's URLs are relative
app.use('/ars/*', serveStatic({ root: webRoot, rewriteRequestPath: (p) => p.replace(/^\/ars/, '') }));
```

-   `auth.label` 是所有者视之为请求者;一个答案只能由 `principal` 问了.
-   把自己的主机/JSON警卫放在前面(AS独立使用) `localRequestGuard` 从 `@broberg/local-guard/hono`) (中文(简体) ).
-   若为 `isOwner` 表示不,窗口显示ARS的配对屏幕——一个拥有自己登录的宿主应该将主人送去.
-   证明你的主人: `defineContractSuite({ baseUrl, adapter, agentHeaders, guards })` 财务报告和审定财务报表 `defineNoPersistSuite(start)` 从 `@broberg/auth-relay/testing`。 。 。 .

## 常见问题

### @broberg/auth-relay 是什么？

ARS——代理商要求拥有者提供代码或密码;拥有者在本地页面上回答一次;只有灰人得到一次\.

### 如何安装 @broberg/auth-relay？

在项目目录运行 npm install @broberg/auth-relay，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 ars，可以用 npx ars 直接运行。

### @broberg/auth-relay 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/broberg\_\_auth-relay 是否存在。

### @broberg/auth-relay 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @broberg/auth-relay 可以商用吗？

@broberg/auth-relay 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @broberg/auth-relay 的下载量有多少？

根据 npm 官方下载统计，@broberg/auth-relay 在 2026/10/09 – 2026/11/07 这 30 天内被下载 5,905 次，日均约 197 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @broberg/auth-relay 还在维护吗？

最新版本 0\.5\.2 发布于 2026/11/01（7 天前）；至今共发布 32 个版本，其中过去 12 个月发布了 32 个；首次发布于 2026/10/25。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

