# @anywalletkit/extension-kit 中文文档

规范地址：https://npmcn.com/package/%40anywalletkit/extension-kit/

版本：0\.3\.5
npm 元数据更新时间：2026-11-05T12:24:16.519Z
中文译文更新时间：2026-11-06T17:12:57.684Z
软件包许可：Apache-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40anywalletkit/extension-kit
原文对照：https://npmcn.com/package/%40anywalletkit/extension-kit/?lang=original
项目主页：https://docs.anywallet.tech/
源码仓库：https://github.com/ultratestbro/anywalletkit

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

- 包体积（解压后）：965 kB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：7 个
- 首次发布：2026-10-24T18:40:36.666Z
- 最新版本发布：2026-11-05T12:24:16.107Z
- 近 30 天下载量：2626（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：15（近 12 个月 15 个）

## 中文简介

Chromium (MV3) 钱包扩展核心用于任意钱包 Kit: scrypt + AES-256-GCM 保险库 有密码(WebAuthn PRF) 解锁,自动锁定会话, dApp 请求路由器, 并有源代码权限和批准队列, 签名-请求检查, 互换/ Ein plan r

## 安装

```sh
npm install @anywalletkit/extension-kit
```

也可以使用：`pnpm add @anywalletkit/extension-kit`、`yarn add @anywalletkit/extension-kit`、`bun add @anywalletkit/extension-kit`

## README

# @ anywalletkit/ extension- kit (英语)

[![npm](https://img.shields.io/npm/v/@anywalletkit/extension-kit?label=npm)](https://www.npmjs.com/package/@anywalletkit/extension-kit)

非拘禁铬(MV3)钱包扩展的安全相关核心, 在任何钱包套件和协议包上所建:加密金库 自动锁解锁键会话, dApp 请求路由器, 并带有原产地 权限和批准队列、签名请求分类和 审查交换和收入计划方面的帮助者。 没有UI,没有 `@types/chrome`,没有网络 本身的代码: 铬适配器取结构对象 (单位:千美元)`StorageAreaLike`, (中文(简体) ), `AlarmsLike`),所以一切运行在维特下与 内膜适配器.

## 安装

```sh
npm install @anywalletkit/extension-kit
# or: pnpm add @anywalletkit/extension-kit  ·  yarn add @anywalletkit/extension-kit
```

时间: [@ anywalletkit/ extension- kit (英语)](https://www.npmjs.com/package/@anywalletkit/extension-kit)发表于 [发布工作流程](https://github.com/ultratestbro/anywalletkit/blob/main/RELEASING.md) 与出处.

这个软件包是给建立自己的扩展名的钱包开发者的. 这是一个 库,不是扩展:弹出、批准窗口、注入提供者, 服务工人的接线、建造和释放管道是钱包的。 虚空 浏览器扩展是一个基于它的产品.

```sh
pnpm add @anywalletkit/extension-kit @anywalletkit/core @anywalletkit/keyring
```

## 它提供的东西

| 区域 | 出口 | 什麽 |
| --- | --- | --- |
| 默认 | `Vault`, (中文(简体) ), `chromeLocalVaultStorage`, (中文(简体) ), `memoryVaultStorage`, (中文(简体) ), `VAULT_SCRYPT`, (中文(简体) ), `VAULT_LIMITS`, (中文(简体) ), `VAULT_MIN_PASSWORD_LENGTH` | 每一个秘密在休息 `chrome.storage.local`,两个密钥层(一个KEK包装一个DEK,DEK封装每个密钥);密码(WebAuthn PRF)解锁为同一个DEK的第二包 |
| 会议 | `Session`, (中文(简体) ), `chromeSessionStorage`, (中文(简体) ), `chromeAlarms`, (中文(简体) ), `SESSION_DEFAULT_AUTOLOCK_MS` | dEK 输入 `chrome.storage.session` 带有过期和警报; `getKey()` 重新检查过期本身 |
| 密钥环适配器 | `chromeKeyringStorage`, (中文(简体) ), `vaultSecretStorage` | `@anywalletkit/keyring` 作为普通JSON的元数据,通过金库的秘密,每个呼叫一个DEK |
| 中继 | `PageRequest` 编号 : `RelayRequest` 有形体和卫士, `isRelayMethod`, (中文(简体) ), `pageRequestFrom`, (中文(简体) ), `stampOrigin`, (中文(简体) ), `checkSenderOrigin`, (中文(简体) ), `RELAY_ERRORS` | 页面 qq 内容脚本 qq 服务人员信息; 内容脚本只取页面窗口本身发布的信息( )`pageRequestFrom(event, window)`: 一个iframe's `parent.postMessage` 不是网站),来源是浏览器的(`port.sender`),从来没有页面 |
| 路由器 | `RequestRouter`, (中文(简体) ), `READ_METHODS`, (中文(简体) ), `SIGNING_METHODS`, (中文(简体) ), `toRelayError` | dApp可能称为: 仅核算连接源, 链加/ 切换通过批准窗口, 从钱包本身的RPC读取, `eth_sign` 从来没有提供,所有其它4200 |
| 权限 | `PermissionStore`, (中文(简体) ), `CHAIN_ACCOUNT_KEYS` | 按原产地分列的账户(EVM、索拉纳、TON、Tron、Bitcoin、NEAR)和链条 |
| 核准 | `ApprovalQueue`, (中文(简体) ), `ReviewDeclined`, (中文(简体) ), `QueueLimitError`, (中文(简体) ), `APPROVALS_MAX_PENDING_PER_ORIGIN` | 一次一个批准窗口,最多3个尚待处理的请求和1个待处理的请求 `connect`; 运输票据(`setVia`(用于钱包连接端口) |
| 签名 | `classifySignRequest`, (中文(简体) ), `prepareTransaction`, (中文(简体) ), `createSignHandler`, (中文(简体) ), `messageText` | 连接地址和连锁检查,来自网站的EIP-7702代表团被拒绝,钱包的RPC中的非ce/ gas/费用 |
| 网络 | `NetworksTable`, (中文(简体) ), `DEFAULT_NETWORKS`, (中文(简体) ), `parseAddChainParams`,索拉纳 / TON / Tron 端点 | 具有公共RPC故障列表的EVM网络; `wallet_addEthereumChain` 仅用于目录链,仅限https, `eth_chainId` 经核实、现场提供的RPC盖章 `custom` |
| 审查门 | `ReviewGate`, (中文(简体) ), `evmCallMatcher`, (中文(简体) ), `chainTxMatcher` | 经过一张单子审查整个计划后,这些操作正好在TTL内通过一次 |
| 交换 | `quoteRoutes`, (中文(简体) ), `reviewSwapPlan`, (中文(简体) ), `executionFloor`, (中文(简体) ), `SwapsStore`, (中文(简体) ), `SwapTracker`, (中文(简体) ), `parseSwapId` | 累进引出于互换2提供者,每计划一份审查表(列出无气量订单并配以EIP-712散列),与审查账户挂钩的预先核准书(`meta.account`),在工人重启之前恢复互换 |
| 赚 | `reviewEarnPlan`, (中文(简体) ), `earnPlanMatchers` | ein 模块计划(核准+调用)的一张工作表,绑定在 `meta.account` |
| TON 连接 | `parseConnectRequest`, (中文(简体) ), `parseSendTransaction`, (中文(简体) ), `parseSignData`, (中文(简体) ), `tonProofMessage`, (中文(简体) ), `tonSignDataMessage` | tON 连接 v2 的纯数据半部分( 摘要) `ton_proof` 财务报告和审定财务报表 `signData` 签 名 、 以 校正 ; 帐号 `signTonProof` 编号 : `signTonConnectData` (华莱特顿) - `sign()` 拒绝32字节摘要 |
| 偷窥 | `PhishingDetector` | 元任务 `eth-phishing-detect` 列表格式, 随构建一起运出( 运行时从未获取 ); 拒绝列出的站点(`refusal` → `refuse` 打开 `ApprovalQueue` 财务报告和审定财务报表 `RequestRouter`, 4100, 无窗口; 模糊的外观, 标签上的品牌, 通码警告 |
| 塞拉利昂 | `parseSiwe`, (中文(简体) ), `siweProblems`, (中文(简体) ), `describeSiwe` | EIP-4361 登录信件:域名与询问站点,地址,链条,过期,非ce(警告) |
| 解决中毒问题 | `lookalikeOf`, (中文(简体) ), `RecipientBook` | 当新收件人模仿用户确认时警告 |
| 网络认证 | `verifyAssertion`, (中文(简体) ), `approvalChallenge`, (中文(简体) ), `derToRaw`, (中文(简体) ), `rawToDer` | ES256断言检查"每张签名上的密码";工人从来不相信页面的字眼 |

## 安保模式(摘要)

-   **钥匙在休息.** 信封 v2: scrypt N=2^17 r=8 p=1 (中文(简体) )`@noble/hashes`页:1 AES-256-GCM 包装了随机32字节的 DEK; DEK 封存 AAD 下的每一个秘密 `forgewallet-vault/secret/<id>` (框不能互换). DEK盒子的AAD(AD) (英语) 绑定精确的 KDF 参数, 所以一个被编辑盐或成本的信封 磁盘上无法打开; `unlock` 拒绝支付底价`weak-kdf`),以及 费用或规模以上 `VAULT_LIMITS` (crypt N ^ 2^20, r 16, 第 4页;PBKDF2) ● 5 000 000次重复;1 000次秘密;32次密码;4次密钥) 运行( r)`unsupported-envelope`) (中文(简体) ). 给信封的书信被连载(一) `Vault` 因此,平行进口的每个存储区域都保密。 单曲 信封(PBKDF2-SHA256、600,000个重联)仍未打开并重新封存 作为v2. 短于8个字符的密码被金库本身拒绝. 密码错误和篡改都是同样的失败(`wrong-password`) (中文(简体) ). `create` 永不覆盖; 重置为显式 `destroy()`。 。 。 .
-   **密码.** 在HKDF-SHA256(PRF输出, 盐 = 证书 id; 密码保留恢复路径.
-   **重接键.** `changePassword` 重新包装同样的DEK,和 `removePasskey` 不收回一个DEK 的密码 。 被怀疑后 妥协, `rotateVaultKey(password)` 做一个新鲜的DEK, 重新封装每 秘密,放下密码,写一个信封; 把返回的DEK交给 `session.unlock`,它取代了旧的. `setSecret` 拒绝一个不打开金库秘密的DEK.
-   **开封州.** 只有DEK被保存,在 `chrome.storage.session` (只记录,可信任的上下文),每个读取处执行过期 提醒锁定; 此软件包的密钥缓冲器在使用后被零化 . `unlock` 编号 : `lock` 编号 : `touch` 编号 : `getKey` 一次跑一次,所以活动赛车 锁从不带钥匙回来.
-   **页面错误 .** `toRelayError(e, { log })` 传递钱包本身的拒绝 (EIP-1193代码)和一个节点的JSON-RPC出错(代码,还原数据)与URL 删除; 其它内容是 `-32603 Internal error` 在页面上,然后去 `log`。 。 。 .
-   **发源地.** 内容脚本只转发页面窗口本身的内容 公布(`pageRequestFrom`数字 : `event.source` 是页面, `event.origin` 联合国 因此,一个广告或嵌入一个iframe不能作为网站说话。 这个 服务工作者只在内容脚本时回答中继消息 印花来源等于 `port.sender.origin`。权限是 键入源代码,从不使用 URL 页面或 WalletConnect 对等请求.
-   **请求.** 所有披露账户或转移资金的事物都会经历 批准队列; 盲签( e)`eth_sign`未提供;输入数据 另有一连串、部署和地点来源的EIP-7702代表团 拒绝; 只读的 RPC 到钱包本身的终点 .
-   **腾讯网.** 该工具包除了RPC/提供者之外,不提出自己的请求 调用钱包电线 ; 钓鱼列表是钱包船的数据 .

钱包的工作留下的是什么:扩展页 CSP(`script-src 'self'`,没有 远程图像,用于工人的宿主授权列表 `fetch`,孤立第三方 网络 SDKs (WalletConnect, Omniston) 在沙盒页面中, 可复制 释放构建和存储账户.

## 使用铬适配器

```ts
import {
  Vault, Session, PermissionStore, NetworksTable, ApprovalQueue, RequestRouter,
  chromeLocalVaultStorage, chromeSessionStorage, chromeAlarms, chromeJsonStorage,
  chromeKeyringStorage, vaultSecretStorage, checkSenderOrigin, isRelayRequest, PORT_NAME,
} from '@anywalletkit/extension-kit'

// service worker
const vault = new Vault({ storage: chromeLocalVaultStorage(chrome.storage.local) })
const session = new Session({ storage: chromeSessionStorage(chrome.storage.session), alarms: chromeAlarms(chrome.alarms) })

// onboarding
const dek = await vault.create(password)          // refuses if a vault exists or the password is too short
await vault.setSecret(dek, 'main', utf8(seedPhrase))
await session.unlock(dek)                         // dek is zeroized here

// @anywalletkit/keyring on top of the vault
const keyringStorage = chromeKeyringStorage(chrome.storage.local)
const secrets = vaultSecretStorage(vault, session) // VaultError('locked') once the session expired

// the dApp side
const permissions = new PermissionStore(chromeJsonStorage(chrome.storage.local, 'my-wallet.permissions'))
const networks = new NetworksTable(chromeJsonStorage(chrome.storage.local, 'my-wallet.networks'))
const approvals = new ApprovalQueue(myApprovalWindow) // chrome.windows.create({ type: 'popup' }) behind ApprovalWindow
const router = new RequestRouter({ permissions, networks, approvals, accounts, rpc, emit, sign })

chrome.runtime.onConnect.addListener((port) => {
  if (port.name !== PORT_NAME) return
  port.onMessage.addListener(async (msg) => {
    if (!isRelayRequest(msg)) return
    const origin = checkSenderOrigin(port.sender, msg.origin)
    if (!origin) return // forged origin: dropped, not answered
    const result = await router.handle(origin, msg.chain, msg.method, msg.params)
    // post a RelayResponse { kind: 'response', id: msg.id, … } back on the port
  })
})
```

`memoryVaultStorage`, (中文(简体) ), `memorySessionStorage`, (中文(简体) ), `memoryAlarms`, (中文(简体) ), `memoryJsonStorage` 财务报告和审定财务报表 `memoryApprovalWindow` 是做测试的双胞胎.

## 常见问题

### @anywalletkit/extension-kit 是什么？

Chromium \(MV3\) 钱包扩展核心用于任意钱包 Kit: scrypt \+ AES-256-GCM 保险库 有密码\(WebAuthn PRF\) 解锁,自动锁定会话, dApp 请求路由器, 并有源代码权限和批准队列, 签名-请求检查, 互换/ Ein plan r

### 如何安装 @anywalletkit/extension-kit？

在项目目录运行 npm install @anywalletkit/extension-kit，或使用 pnpm add / yarn add / bun add。

### @anywalletkit/extension-kit 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @anywalletkit/extension-kit 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @anywalletkit/extension-kit 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @anywalletkit/extension-kit 可以商用吗？

@anywalletkit/extension-kit 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @anywalletkit/extension-kit 的下载量有多少？

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

### @anywalletkit/extension-kit 还在维护吗？

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

