@agentunion/fastaun-browser 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/_packed_docs/CHANGELOG.md +19 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +48 -15
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +182 -28
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +7 -5
- package/_packed_docs/sdk/INDEX.md +17 -12
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +1 -4
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +2093 -602
- package/dist/client.d.ts +64 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1441 -476
- package/dist/client.js.map +1 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +45 -31
- package/dist/crypto.js.map +1 -1
- package/dist/discovery.d.ts +4 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +16 -11
- package/dist/discovery.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keystore/index.d.ts +22 -0
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb.d.ts +4 -1
- package/dist/keystore/indexeddb.d.ts.map +1 -1
- package/dist/keystore/indexeddb.js +104 -1
- package/dist/keystore/indexeddb.js.map +1 -1
- package/dist/logger.d.ts +5 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +8 -2
- package/dist/logger.js.map +1 -1
- package/dist/namespaces/auth.d.ts +1 -0
- package/dist/namespaces/auth.d.ts.map +1 -1
- package/dist/namespaces/auth.js +38 -0
- package/dist/namespaces/auth.js.map +1 -1
- package/dist/seq-tracker.d.ts +5 -3
- package/dist/seq-tracker.d.ts.map +1 -1
- package/dist/seq-tracker.js +30 -3
- package/dist/seq-tracker.js.map +1 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +18 -0
- package/dist/transport.js.map +1 -1
- package/dist/v2/crypto/canonical.d.ts +1 -1
- package/dist/v2/crypto/canonical.d.ts.map +1 -1
- package/dist/v2/crypto/canonical.js +42 -13
- package/dist/v2/crypto/canonical.js.map +1 -1
- package/dist/v2/crypto/ecdh.d.ts.map +1 -1
- package/dist/v2/crypto/ecdh.js +18 -1
- package/dist/v2/crypto/ecdh.js.map +1 -1
- package/dist/v2/e2ee/decrypt.d.ts.map +1 -1
- package/dist/v2/e2ee/decrypt.js +56 -2
- package/dist/v2/e2ee/decrypt.js.map +1 -1
- package/dist/v2/e2ee/encrypt-group.d.ts.map +1 -1
- package/dist/v2/e2ee/encrypt-group.js +16 -6
- package/dist/v2/e2ee/encrypt-group.js.map +1 -1
- package/dist/v2/e2ee/encrypt-p2p.d.ts.map +1 -1
- package/dist/v2/e2ee/encrypt-p2p.js +39 -11
- package/dist/v2/e2ee/encrypt-p2p.js.map +1 -1
- package/dist/v2/e2ee/metadata-auth.d.ts +1 -0
- package/dist/v2/e2ee/metadata-auth.d.ts.map +1 -1
- package/dist/v2/e2ee/metadata-auth.js +51 -0
- package/dist/v2/e2ee/metadata-auth.js.map +1 -1
- package/dist/v2/e2ee/types.d.ts +2 -2
- package/dist/v2/e2ee/types.d.ts.map +1 -1
- package/dist/v2/session/keystore.d.ts +12 -4
- package/dist/v2/session/keystore.d.ts.map +1 -1
- package/dist/v2/session/keystore.js +177 -35
- package/dist/v2/session/keystore.js.map +1 -1
- package/dist/v2/session/session.d.ts +10 -3
- package/dist/v2/session/session.d.ts.map +1 -1
- package/dist/v2/session/session.js +91 -17
- package/dist/v2/session/session.js.map +1 -1
- package/dist/v2/state/commitment.d.ts.map +1 -1
- package/dist/v2/state/commitment.js +4 -1
- package/dist/v2/state/commitment.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,25 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## 0.3.3 — 2026-05-25
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **V2 Thought 加解密**:`group.thought.get` / `message.thought.get` 返回值自动解密;发送端自动加密;`attachV2EnvelopeMetadata` 附加 E2EE 元数据
|
|
13
|
+
- **V2 Sender IK 延迟解密**:`_v2SenderIKPending` / `_v2SenderIKFetching` 机制,对端 IK 未缓存时挂起消息、异步拉取后重试解密
|
|
14
|
+
- **agent.md 本地缓存体系(浏览器版本)**:`publishAgentMd(content?)` / `fetchAgentMd(aid?)`;基于 IndexedDB/localStorage 的 list + 按 AID 存储 + etag 比对 + 自动拉取缺失
|
|
15
|
+
- **V2 辅助函数**:`getV2DeviceId` / `_v2B64ToBytesStrict` / `_v2BytesEqual` / `_v2ConcatBytes` / `_v2LengthPrefixedTextKey` / `_v2LengthPrefixedBytes`
|
|
16
|
+
- **V2 envelope 元数据**:`attachV2EnvelopeMetadata` / `attachV2EnvelopeMetadataFromSource` / `extractV2EnvelopeFromSource` / `metadataWithoutAuth`
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- **V2 消息处理路径重构**:统一 P2P/Group 解密入口,支持 sender IK pending 延迟模式
|
|
20
|
+
- **V2 SPK rotation**:thought 解密失败时触发 group SPK rotation / registration after peer fallback
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- **service-plane envelope 解包**:修复 Kernel trace 字段传递丢失
|
|
24
|
+
- **trace 树状展示**:enter/exit 配对 + 嵌套缩进
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
9
28
|
## 0.3.1 — 2026-05-22
|
|
10
29
|
|
|
11
30
|
### Added
|
|
@@ -6,6 +6,25 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## 0.3.3 — 2026-05-25
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **V2 Thought 加解密**:`group.thought.get` / `message.thought.get` 返回值自动解密;发送端自动加密;`attachV2EnvelopeMetadata` 附加 E2EE 元数据
|
|
13
|
+
- **V2 Sender IK 延迟解密**:`_v2SenderIKPending` / `_v2SenderIKFetching` 机制,对端 IK 未缓存时挂起消息、异步拉取后重试解密
|
|
14
|
+
- **agent.md 本地缓存体系(浏览器版本)**:`publishAgentMd(content?)` / `fetchAgentMd(aid?)`;基于 IndexedDB/localStorage 的 list + 按 AID 存储 + etag 比对 + 自动拉取缺失
|
|
15
|
+
- **V2 辅助函数**:`getV2DeviceId` / `_v2B64ToBytesStrict` / `_v2BytesEqual` / `_v2ConcatBytes` / `_v2LengthPrefixedTextKey` / `_v2LengthPrefixedBytes`
|
|
16
|
+
- **V2 envelope 元数据**:`attachV2EnvelopeMetadata` / `attachV2EnvelopeMetadataFromSource` / `extractV2EnvelopeFromSource` / `metadataWithoutAuth`
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- **V2 消息处理路径重构**:统一 P2P/Group 解密入口,支持 sender IK pending 延迟模式
|
|
20
|
+
- **V2 SPK rotation**:thought 解密失败时触发 group SPK rotation / registration after peer fallback
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- **service-plane envelope 解包**:修复 Kernel trace 字段传递丢失
|
|
24
|
+
- **trace 树状展示**:enter/exit 配对 + 嵌套缩进
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
9
28
|
## 0.3.1 — 2026-05-22
|
|
10
29
|
|
|
11
30
|
### Added
|
|
@@ -204,28 +204,32 @@ Name Service 同时提供面向 Agent Web 的标准 HTTP 资源:
|
|
|
204
204
|
|
|
205
205
|
### 推荐主 API(自 v0.x 起)
|
|
206
206
|
|
|
207
|
-
SDK 在 `AUNClient`
|
|
207
|
+
SDK 在 `AUNClient` 上提供三个一站式主方法,分别封装"发布"、"下载"、"一致性检查"三条主线。文件统一存放在 `{aun_path}/AgentMDs/{aid}/agent.md`,由 SDK 管理;元数据持久化到 `agent_md_cache` 表 / `list.json`。
|
|
208
208
|
|
|
209
209
|
```python
|
|
210
|
-
# 发布自己的 agent.md
|
|
211
|
-
await client.publish_agent_md(
|
|
210
|
+
# 发布自己的 agent.md(读 SDK 管理的本地文件 → 签名 → 上传 → 刷新内部 etag)
|
|
211
|
+
await client.publish_agent_md()
|
|
212
212
|
|
|
213
|
-
#
|
|
214
|
-
|
|
215
|
-
|
|
213
|
+
# 检查本地与云端一致性(不主动下载;max_unsynced_days=0 时强制 HEAD)
|
|
214
|
+
state = await client.check_agent_md("bob.agentid.pub", max_unsynced_days=3)
|
|
215
|
+
|
|
216
|
+
# 下载并自动验签(自动写到 SDK 管理的目录)
|
|
217
|
+
if state["remote_found"] and not state["in_sync"]:
|
|
218
|
+
info = await client.fetch_agent_md("bob.agentid.pub")
|
|
219
|
+
print(info["signature"]["status"], info["in_sync"], info["saved_to"])
|
|
216
220
|
```
|
|
217
221
|
|
|
218
|
-
详细签名见 `06-API手册.md` 中的 `publish_agent_md` / `fetch_agent_md` 章节。
|
|
222
|
+
详细签名见 `06-API手册.md` 中的 `publish_agent_md` / `fetch_agent_md` / `check_agent_md` 章节。
|
|
219
223
|
|
|
220
|
-
| SDK | publish | fetch |
|
|
221
|
-
|
|
222
|
-
| Python | `client.publish_agent_md(
|
|
223
|
-
| TypeScript(Node) | `client.publishAgentMd(
|
|
224
|
-
| Go | `client.PublishAgentMD(ctx,
|
|
225
|
-
| C++ | `client.PublishAgentMd(
|
|
226
|
-
| JavaScript(浏览器) | `client.publishAgentMd(content)` | `client.fetchAgentMd(aid?)` |
|
|
224
|
+
| SDK | publish | fetch | check |
|
|
225
|
+
|------|---------|-------|-------|
|
|
226
|
+
| Python | `client.publish_agent_md()` | `client.fetch_agent_md(aid?)` | `client.check_agent_md(aid?, max_unsynced_days=0)` |
|
|
227
|
+
| TypeScript(Node) | `client.publishAgentMd()` | `client.fetchAgentMd(aid?)` | `client.checkAgentMd(aid?, maxUnsyncedDays=0)` |
|
|
228
|
+
| Go | `client.PublishAgentMD(ctx)` | `client.FetchAgentMD(ctx, aid)` | `client.CheckAgentMD(ctx, aid, maxUnsyncedDays...)` |
|
|
229
|
+
| C++ | `client.PublishAgentMd(out)` | `client.FetchAgentMd(aid, out)` | `client.CheckAgentMd(aid, max_days, out)` |
|
|
230
|
+
| JavaScript(浏览器) | `client.publishAgentMd(content?)` | `client.fetchAgentMd(aid?)` | `client.checkAgentMd(aid?, maxUnsyncedDays=0)` |
|
|
227
231
|
|
|
228
|
-
|
|
232
|
+
> **`check_agent_md` 不主动下载**:仅当远程存在且本地从未保存过该 aid 时,SDK 才异步触发后台 fetch;其他场景由应用层根据返回值决定是否调 `fetch_agent_md`。
|
|
229
233
|
|
|
230
234
|
### Deprecated(保留代码、未来版本将移除)
|
|
231
235
|
|
|
@@ -235,11 +239,40 @@ JS 浏览器版本无文件系统,`publish` 接收 markdown 文本(应用层
|
|
|
235
239
|
| `client.auth.verify_agent_md` | `client.fetch_agent_md` 内部已包含 |
|
|
236
240
|
| `client.auth.upload_agent_md` | `client.publish_agent_md` |
|
|
237
241
|
| `client.auth.download_agent_md` | `client.fetch_agent_md` |
|
|
242
|
+
| `client.auth.head_agent_md` | `client.check_agent_md`(带缓存窗口) |
|
|
238
243
|
|
|
239
244
|
底层方法仅推荐用于离线签名 / 纯文本验签等特殊场景。
|
|
240
245
|
|
|
241
246
|
> v0.x 起删除了 `set_local_agent_md_path` / `get_local_agent_md_etag` / `get_remote_agent_md_etag` 三个 client 端 API;本地 etag 现在由 `publish_agent_md` / `fetch_agent_md(自身 aid)` 自动计算并缓存。事件 payload 仍会注入 `_agent_md.{local_etag, remote_etag}` 供应用层比对。
|
|
242
247
|
|
|
248
|
+
### Gateway 多 AID etag 推送(v0.x+)
|
|
249
|
+
|
|
250
|
+
Gateway 在 RPC response 和事件通知的 `_meta` 中**最多同时注入两个 AID** 的 agent.md 元数据,每个条目都带 `aid` 字段:
|
|
251
|
+
|
|
252
|
+
- **requester**:调用者 / 事件订阅方(自身)
|
|
253
|
+
- **peer**:RPC 对端 / 事件源(仅当 `peer_aid != requester_aid` 时注入;否则该条目省略)
|
|
254
|
+
|
|
255
|
+
```json
|
|
256
|
+
{
|
|
257
|
+
"_meta": {
|
|
258
|
+
"agent_md_etag": "\"requester-etag\"",
|
|
259
|
+
"agent_md_etags": {
|
|
260
|
+
"requester": {"aid": "alice.agentid.pub", "etag": "\"...\"", "last_modified": "..."},
|
|
261
|
+
"peer": {"aid": "bob.agentid.pub", "etag": "\"...\"", "last_modified": "..."}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
| 场景 | requester | peer |
|
|
268
|
+
|------|-----------|------|
|
|
269
|
+
| RPC response | 调用者 | RPC 涉及的 `to_aid`(不等于调用者时) |
|
|
270
|
+
| 事件通知 | 订阅方 | 事件源(存在且不等于订阅方时) |
|
|
271
|
+
|
|
272
|
+
`receiver` / `to` / `target` / `sender` / `from` 等键也会同时注入以兼容旧 SDK,但它们指向与 `requester` 或 `peer` 完全相同的对象(不是独立 AID)。**新 SDK 只需读 `requester` 和 `peer` 即可**。
|
|
273
|
+
|
|
274
|
+
SDK 收到后通过 `_observe_agent_md_meta` 写入 `agent_md_cache` 持久化记录(按 AID 自动去重);若发现"远程有 etag 但本地从未保存该 aid",会异步触发后台 fetch(不阻塞 RPC 返回)。
|
|
275
|
+
|
|
243
276
|
### 错误返回
|
|
244
277
|
|
|
245
278
|
- `PUT /agent.md` 可能返回 `401`(缺失或无效 token)、`403`(token 的 AID 与 Host 不匹配)、`400`(frontmatter 非法或 frontmatter.aid 与 Host 不匹配)、`413`(文档超过大小上限)
|
|
@@ -15,9 +15,10 @@
|
|
|
15
15
|
- [disconnect()](#await-disconnect---none) - 断开连接(可重连)
|
|
16
16
|
- [list_identities()](#list_identities---listdict) - 列出本地身份
|
|
17
17
|
- [ping()](#await-pingparams-dict--none---any) - 连通性探测
|
|
18
|
-
- [
|
|
19
|
-
- [publish_agent_md()](#await-
|
|
20
|
-
- [fetch_agent_md()](#await-fetch_agent_mdaid-str--none
|
|
18
|
+
- [set_agent_md_path()](#set_agent_md_pathpath-str--none---str--agentmd-存储目录设置) - 设置 agent.md 本地存储根目录
|
|
19
|
+
- [publish_agent_md()](#await-publish_agent_md---dict--agentmd-发布主-api) - 读取本地 agent.md → 签名 → 上传,并刷新内部 etag
|
|
20
|
+
- [fetch_agent_md()](#await-fetch_agent_mdaid-str--none---dict--agentmd-下载主-api) - 下载 agent.md → 自动验签 → 持久化到 SDK 管理的目录
|
|
21
|
+
- [check_agent_md()](#await-check_agent_mdaid-str--none-max_unsynced_days-float--0---dict--agentmd-本地云端一致性检查) - 检查本地 agent.md 是否与云端一致(带缓存窗口)
|
|
21
22
|
- [status()](#await-statusparams-dict--none---any) - 网关状态查询
|
|
22
23
|
- [check_gateway_health()](#await-check_gateway_healthgateway_url-str-timeout-float--50---bool) - 检查网关可用性
|
|
23
24
|
|
|
@@ -397,50 +398,103 @@ for item in identities:
|
|
|
397
398
|
|
|
398
399
|
---
|
|
399
400
|
|
|
400
|
-
### `
|
|
401
|
+
### `set_agent_md_path(path: str | None = None) -> str` — agent.md 存储目录设置
|
|
401
402
|
|
|
402
|
-
|
|
403
|
+
设置 agent.md 本地存储根目录。SDK 的 `publish_agent_md` / `fetch_agent_md` / `check_agent_md` 都基于此目录读写文件和元数据。
|
|
404
|
+
|
|
405
|
+
- 传入非空路径:切换到指定目录
|
|
406
|
+
- 传入空字符串或 `None`:恢复默认目录 `{aun_path}/AgentMDs`
|
|
407
|
+
- 目录不存在时自动创建
|
|
408
|
+
- 切换后清空内存中的 agent.md 缓存(下次操作会重新从磁盘/list.json 加载)
|
|
403
409
|
|
|
404
410
|
**API 跨语言对齐:**
|
|
405
411
|
|
|
406
412
|
| SDK | 签名 |
|
|
407
413
|
|------|------|
|
|
408
|
-
| Python | `
|
|
409
|
-
| TypeScript(Node) | `
|
|
410
|
-
| Go | `client.
|
|
411
|
-
| C++ | `client.
|
|
412
|
-
| JavaScript(浏览器) | `
|
|
414
|
+
| Python | `client.set_agent_md_path(path=None) -> str` |
|
|
415
|
+
| TypeScript(Node) | `client.setAgentMdPath(root?)` |
|
|
416
|
+
| Go | `client.SetAgentMDPath(root string) string` |
|
|
417
|
+
| C++ | `client.SetAgentMDPath(root) -> std::string` |
|
|
418
|
+
| JavaScript(浏览器) | `client.setAgentMdPath(root?)` |
|
|
419
|
+
|
|
420
|
+
**返回值:** 实际生效的根目录绝对路径。
|
|
421
|
+
|
|
422
|
+
**目录结构:**
|
|
423
|
+
|
|
424
|
+
```
|
|
425
|
+
{agent_md_path}/
|
|
426
|
+
├── list.json # 所有 AID 的元数据索引
|
|
427
|
+
├── {aid_1}/
|
|
428
|
+
│ └── agent.md # aid_1 的 agent.md 正文
|
|
429
|
+
├── {aid_2}/
|
|
430
|
+
│ └── agent.md
|
|
431
|
+
└── ...
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
**示例:**
|
|
435
|
+
|
|
436
|
+
```python
|
|
437
|
+
# 切换到自定义目录
|
|
438
|
+
actual = client.set_agent_md_path("/data/my-agents")
|
|
439
|
+
print(actual) # "/data/my-agents"
|
|
440
|
+
|
|
441
|
+
# 恢复默认
|
|
442
|
+
client.set_agent_md_path() # 回到 {aun_path}/AgentMDs
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
> **注意:** 此方法应在 `connect()` 之前或 `publish_agent_md()` / `fetch_agent_md()` 之前调用。连接后切换目录不会触发重新下载,但后续的 publish/fetch/check 会使用新目录。
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
### `await publish_agent_md() -> dict` — agent.md 发布主 API
|
|
450
|
+
|
|
451
|
+
读取 SDK 管理的本地 `agent.md`(路径:`{aun_path}/AgentMDs/{self_aid}/agent.md`)→ 调用 `auth.sign_agent_md` 在尾部追加 `<!-- AUN-SIGNATURE -->` 块 → 调用 `auth.upload_agent_md` 上传到服务端 → 以**上传字节的 sha256**计算 quoted etag 写入内部 `_local_agent_md_etag` 与持久化缓存(`agent_md_cache` 表 / `list.json`),使后续应用事件 payload 中的 `_agent_md.local_etag` 字段反映服务端实际生效的版本。
|
|
452
|
+
|
|
453
|
+
**API 跨语言对齐:**
|
|
454
|
+
|
|
455
|
+
| SDK | 签名 |
|
|
456
|
+
|------|------|
|
|
457
|
+
| Python | `await client.publish_agent_md() -> dict` |
|
|
458
|
+
| TypeScript(Node) | `await client.publishAgentMd()` |
|
|
459
|
+
| Go | `client.PublishAgentMD(ctx) (map[string]any, error)` |
|
|
460
|
+
| C++ | `client.PublishAgentMd(out_result)` |
|
|
461
|
+
| JavaScript(浏览器) | `await client.publishAgentMd(content?: string)` |
|
|
413
462
|
|
|
414
463
|
**返回值:** 透传 `auth.upload_agent_md` 的返回,含 `aid` / `etag` / `last_modified` / `agent_md_url` / `bytes`。
|
|
415
464
|
|
|
465
|
+
**副作用:**
|
|
466
|
+
- 更新内存中的 `_local_agent_md_etag`,等于上传字节的 quoted sha256
|
|
467
|
+
- 若服务端返回 `etag` 字段,同步更新内存中的 `_remote_agent_md_etag`
|
|
468
|
+
- 把 `content` / `local_etag` / `remote_etag` / `last_modified` / `fetched_at` / `remote_status="found"` 写入 `agent_md_cache` 持久化记录
|
|
469
|
+
- 把签名后的内容原子写回本地文件(含 `<!-- AUN-SIGNATURE -->` 块)
|
|
470
|
+
|
|
416
471
|
**异常:**
|
|
417
|
-
- `ValidationError
|
|
418
|
-
- `
|
|
419
|
-
- `StateError`:尚未持有本地身份
|
|
472
|
+
- `ValidationError`:未持有本地身份 / 本地 agent.md 文件不存在或为空
|
|
473
|
+
- `StateError`:SDK 未连接
|
|
420
474
|
- `AUNError`:上传失败
|
|
421
475
|
|
|
422
476
|
**示例:**
|
|
423
477
|
|
|
424
478
|
```python
|
|
425
|
-
result = await client.publish_agent_md(
|
|
426
|
-
print(result["agent_md_url"])
|
|
479
|
+
result = await client.publish_agent_md()
|
|
480
|
+
print(result["agent_md_url"], result["etag"])
|
|
427
481
|
```
|
|
428
482
|
|
|
429
483
|
---
|
|
430
484
|
|
|
431
|
-
### `await fetch_agent_md(aid: str | None = None
|
|
485
|
+
### `await fetch_agent_md(aid: str | None = None) -> dict` — agent.md 下载主 API
|
|
432
486
|
|
|
433
|
-
下载指定 AID 的 `agent.md`,自动调用 `auth.verify_agent_md` 验签;`aid`
|
|
487
|
+
下载指定 AID 的 `agent.md`,自动调用 `auth.verify_agent_md` 验签;`aid` 缺省取本地身份;下载结果**固定保存**到 `{aun_path}/AgentMDs/{aid}/agent.md`,并同步更新持久化缓存(`agent_md_cache` 表 / `list.json`)。若目标 aid 是自己则刷新内部 `_local_agent_md_etag` 并计算 `in_sync`。
|
|
434
488
|
|
|
435
489
|
**API 跨语言对齐:**
|
|
436
490
|
|
|
437
491
|
| SDK | 签名 |
|
|
438
492
|
|------|------|
|
|
439
|
-
| Python | `await client.fetch_agent_md(aid=None
|
|
440
|
-
| TypeScript(Node) | `await client.fetchAgentMd(aid
|
|
441
|
-
| Go | `client.FetchAgentMD(ctx, aid string
|
|
442
|
-
| C++ | `client.FetchAgentMd(aid,
|
|
443
|
-
| JavaScript(浏览器) | `await client.fetchAgentMd(aid?)`
|
|
493
|
+
| Python | `await client.fetch_agent_md(aid=None) -> dict` |
|
|
494
|
+
| TypeScript(Node) | `await client.fetchAgentMd(aid?)` |
|
|
495
|
+
| Go | `client.FetchAgentMD(ctx, aid string) (*AgentMDInfo, error)` |
|
|
496
|
+
| C++ | `client.FetchAgentMd(aid, out_info)` |
|
|
497
|
+
| JavaScript(浏览器) | `await client.fetchAgentMd(aid?)` |
|
|
444
498
|
|
|
445
499
|
**返回字段:**
|
|
446
500
|
|
|
@@ -450,25 +504,92 @@ print(result["agent_md_url"])
|
|
|
450
504
|
| `content` | `str` | agent.md 完整文本 |
|
|
451
505
|
| `signature` | `dict` | `auth.verify_agent_md` 的返回(status / verified / reason / cert_fingerprint / timestamp) |
|
|
452
506
|
| `in_sync` | `bool \| None` | 仅当 aid 是自己时给出:本地 etag == 服务端 etag;否则为 `null` |
|
|
453
|
-
| `saved_to` | `str \| None` |
|
|
454
|
-
| `save_error` | `str \| None` |
|
|
507
|
+
| `saved_to` | `str \| None` | 实际写入路径(`{aun_path}/AgentMDs/{aid}/agent.md`);浏览器 SDK 无此字段 |
|
|
508
|
+
| `save_error` | `str \| None` | 写盘失败原因;不影响下载成功;浏览器 SDK 无此字段 |
|
|
509
|
+
|
|
510
|
+
**副作用:**
|
|
511
|
+
- 把 `content` / `local_etag = sha256(content)` / `remote_etag` / `last_modified` / `fetched_at` / `remote_status="found"` / `verify_status` / `verify_error` 写入 `agent_md_cache` 持久化记录
|
|
512
|
+
- 若 `aid == self_aid`:刷新 `_local_agent_md_etag` 并比对 `_remote_agent_md_etag` 计算 `in_sync`
|
|
455
513
|
|
|
456
514
|
**异常:**
|
|
457
515
|
- `ValidationError`:未传 aid 且本地无身份
|
|
458
516
|
- `NotFoundError`:服务端 404
|
|
459
517
|
- `AUNError`:其他 HTTP 错误
|
|
460
518
|
|
|
461
|
-
|
|
519
|
+
**调用建议:** 通常先调 `check_agent_md` 检查状态,仅当 `local_found=False` 且 `remote_found=True` 或用户明确要更新本地版本时才调 `fetch_agent_md`。SDK 不会因为 `_observe_rpc_meta` 收到新 etag 而主动下载(除非本地从未保存过该 aid 的内容)。
|
|
462
520
|
|
|
463
521
|
**示例:**
|
|
464
522
|
|
|
465
523
|
```python
|
|
466
524
|
# 拉自己的 agent.md,并判断是否与服务端同步
|
|
467
525
|
info = await client.fetch_agent_md()
|
|
468
|
-
print(info["signature"]["status"], info["in_sync"])
|
|
526
|
+
print(info["signature"]["status"], info["in_sync"], info["saved_to"])
|
|
469
527
|
|
|
470
|
-
# 拉别人的 agent.md
|
|
471
|
-
info = await client.fetch_agent_md("bob.agentid.pub"
|
|
528
|
+
# 拉别人的 agent.md(自动写到 {aun_path}/AgentMDs/bob.agentid.pub/agent.md)
|
|
529
|
+
info = await client.fetch_agent_md("bob.agentid.pub")
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
---
|
|
533
|
+
|
|
534
|
+
### `await check_agent_md(aid: str | None = None, max_unsynced_days: float = 0) -> dict` — agent.md 本地/云端一致性检查
|
|
535
|
+
|
|
536
|
+
检查指定 AID 的 agent.md 在本地和服务端的状态,**不主动下载**(除非远程存在而本地从未保存过——由 `_observe_rpc_meta` 异步触发的延迟下载除外)。返回值包含本地是否存在、是否与云端一致、验签状态、是否走了 HEAD 等信息,由应用层根据返回值决定是否调 `fetch_agent_md`。
|
|
537
|
+
|
|
538
|
+
**API 跨语言对齐:**
|
|
539
|
+
|
|
540
|
+
| SDK | 签名 |
|
|
541
|
+
|------|------|
|
|
542
|
+
| Python | `await client.check_agent_md(aid=None, max_unsynced_days: float = 0) -> dict` |
|
|
543
|
+
| TypeScript(Node) | `await client.checkAgentMd(aid?, maxUnsyncedDays = 0)` |
|
|
544
|
+
| Go | `client.CheckAgentMD(ctx, aid string, maxUnsyncedDays ...float64) (*AgentMDCheckResult, error)` |
|
|
545
|
+
| C++ | `client.CheckAgentMd(aid, out_result)` 或 `client.CheckAgentMd(aid, max_unsynced_days, out_result)` |
|
|
546
|
+
| JavaScript(浏览器) | `await client.checkAgentMd(aid?, maxUnsyncedDays = 0)` |
|
|
547
|
+
|
|
548
|
+
**`max_unsynced_days` 语义:**
|
|
549
|
+
|
|
550
|
+
- `= 0`(默认):每次都强制 HEAD 服务端确认 etag/last_modified
|
|
551
|
+
- `> 0`:若距上次 HEAD(`checked_at` 字段)在 N 天内,且本地缓存的 `local_etag == remote_etag`,则直接返回缓存(`cached=true`),跳过 HEAD;否则仍走 HEAD
|
|
552
|
+
|
|
553
|
+
> **重要:** N 天的窗口基于 SDK 上次 HEAD 的时间(`checked_at`),不是基于服务端 `Last-Modified`。这样即使 agent.md 长期不变,也会在 N 天后强制重新确认。
|
|
554
|
+
|
|
555
|
+
**返回字段:**
|
|
556
|
+
|
|
557
|
+
| 字段 | 类型 | 说明 |
|
|
558
|
+
|------|------|------|
|
|
559
|
+
| `aid` | `str` | 检查的 AID |
|
|
560
|
+
| `local_found` | `bool` | 本地 `agent_md_cache` 是否有 content 或 local_etag |
|
|
561
|
+
| `remote_found` | `bool` | 服务端是否存在该 AID 的 agent.md |
|
|
562
|
+
| `local_etag` | `str` | 本地缓存的 quoted sha256 etag |
|
|
563
|
+
| `remote_etag` | `str` | 服务端 HEAD 返回的 etag(命中缓存时用缓存值) |
|
|
564
|
+
| `in_sync` | `bool` | `local_etag == remote_etag` 且两者都非空 |
|
|
565
|
+
| `last_modified` | `str` | 服务端 HTTP 日期格式的 Last-Modified |
|
|
566
|
+
| `status` | `int` | HEAD 响应状态码(缓存命中时为 200) |
|
|
567
|
+
| `cached` | `bool` | 是否命中本地窗口缓存(true 时未走 HEAD) |
|
|
568
|
+
| `verify_status` | `str` | 上次 fetch 的验签状态(cached 时复用) |
|
|
569
|
+
| `verify_error` | `str` | 上次 fetch 的验签错误(cached 时复用) |
|
|
570
|
+
|
|
571
|
+
**副作用:**
|
|
572
|
+
- 走 HEAD 路径时:更新 `agent_md_cache` 的 `remote_etag` / `last_modified` / `checked_at` / `remote_status` 字段
|
|
573
|
+
- 若 aid 是自身且 HEAD 拿到 remote_etag:同步更新内存中的 `_remote_agent_md_etag`
|
|
574
|
+
- 若远程存在但本地从未保存过 → 通过 `_observe_agent_md_meta` 异步调度后台 fetch(不阻塞返回)
|
|
575
|
+
|
|
576
|
+
**异常:**
|
|
577
|
+
- `ValidationError`:未传 aid 且本地无身份
|
|
578
|
+
- HEAD 网络错误:抛出原始异常(同时把 `last_error` 写入缓存记录)
|
|
579
|
+
|
|
580
|
+
**典型用法:**
|
|
581
|
+
|
|
582
|
+
```python
|
|
583
|
+
# 严格模式:每次都确认服务端
|
|
584
|
+
state = await client.check_agent_md("bob.agentid.pub")
|
|
585
|
+
if state["remote_found"] and not state["in_sync"]:
|
|
586
|
+
# 服务端有更新版本
|
|
587
|
+
info = await client.fetch_agent_md("bob.agentid.pub")
|
|
588
|
+
|
|
589
|
+
# 宽松模式:3 天内不重复 HEAD
|
|
590
|
+
state = await client.check_agent_md("bob.agentid.pub", max_unsynced_days=3)
|
|
591
|
+
if state["local_found"] and state["in_sync"]:
|
|
592
|
+
print("本地版本是最新的")
|
|
472
593
|
```
|
|
473
594
|
|
|
474
595
|
---
|
|
@@ -489,6 +610,39 @@ SDK 在 publish `message.received` / `group.message_created` 等应用事件时
|
|
|
489
610
|
|
|
490
611
|
应用层比对二者是否一致即可知本地是否需要重新 publish。
|
|
491
612
|
|
|
613
|
+
**Gateway 多 AID etag 注入(v0.x+):** Gateway 现在在 RPC response 和事件通知的 `_meta` 中**最多同时注入两个 AID** 的 agent.md 元数据:
|
|
614
|
+
|
|
615
|
+
- **requester**:调用者 / 事件订阅方(自身)
|
|
616
|
+
- **peer**:RPC 对端 / 事件源(仅当 `peer_aid != requester_aid` 时注入)
|
|
617
|
+
|
|
618
|
+
每个条目都带 `aid` 字段。`receiver` / `to` / `target` / `sender` / `from` 等是为了兼容旧 SDK 而保留的**别名**,它们指向与 `requester` 或 `peer` 完全相同的对象(不是独立 AID),新 SDK 只需读 `requester` 和 `peer` 即可:
|
|
619
|
+
|
|
620
|
+
```json
|
|
621
|
+
{
|
|
622
|
+
"_meta": {
|
|
623
|
+
"agent_md_etag": "\"requester-etag\"",
|
|
624
|
+
"agent_md_etags": {
|
|
625
|
+
"requester": {"aid": "alice.agentid.pub", "etag": "\"...\"", "last_modified": "..."},
|
|
626
|
+
"peer": {"aid": "bob.agentid.pub", "etag": "\"...\"", "last_modified": "..."},
|
|
627
|
+
|
|
628
|
+
"receiver": { /* 与 requester 同一对象(事件场景)或与 peer 同一对象(RPC 场景) */ },
|
|
629
|
+
"to": { /* alias of peer(RPC 场景) */ },
|
|
630
|
+
"target": { /* alias of peer / requester */ },
|
|
631
|
+
"sender": { /* alias of peer(事件场景) */ },
|
|
632
|
+
"from": { /* alias of peer(事件场景) */ }
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
| 场景 | requester | peer | 别名分布 |
|
|
639
|
+
|------|-----------|------|---------|
|
|
640
|
+
| RPC response | 调用者 | 对端(如果 RPC 涉及 to_aid 且不等于调用者) | `receiver/to/target` → peer |
|
|
641
|
+
| 事件通知 | 订阅方 | 事件源(如果存在且不等于订阅方) | `receiver/target` → requester;`sender/from` → peer |
|
|
642
|
+
|
|
643
|
+
- 各 SDK 收到后通过 `_observe_rpc_meta` → `_observe_agent_md_meta(aid, etag, last_modified)` 写入 `agent_md_cache` 持久化记录(`setdefault` 自动按 AID 去重,别名不会重复处理)
|
|
644
|
+
- 若发现"远程有 etag 但本地从未保存该 aid",SDK 会异步触发后台 `fetch_agent_md` 拉取一次(不阻塞 RPC 返回);其他场景**不会**主动下载
|
|
645
|
+
|
|
492
646
|
> **注意:** v0.x 起删除了 `set_local_agent_md_path()` / `get_local_agent_md_etag()` / `get_remote_agent_md_etag()` 三个旧 API。`_local_etag` 现在由 `publish_agent_md` / `fetch_agent_md(自身 aid)` 自动计算并缓存;不再支持外部直接设置或读取。
|
|
493
647
|
|
|
494
648
|
---
|
|
@@ -12,7 +12,7 @@ SDK 文档聚焦核心封装:**认证(`client.auth`)**、**元信息与信
|
|
|
12
12
|
|
|
13
13
|
## 渐进式查阅流程
|
|
14
14
|
|
|
15
|
-
### Step 1:只读 Layer 1(L7-
|
|
15
|
+
### Step 1:只读 Layer 1(L7-34)
|
|
16
16
|
|
|
17
17
|
列出所有文档名和章节行区间。能直接定位目标 → 跳 Step 4。
|
|
18
18
|
|
|
@@ -20,13 +20,13 @@ SDK 文档聚焦核心封装:**认证(`client.auth`)**、**元信息与信
|
|
|
20
20
|
|
|
21
21
|
仅当 Step 1 不够时,按关键词读:
|
|
22
22
|
|
|
23
|
-
身份与认证
|
|
23
|
+
身份与认证 L40-45 · 连接与状态 L47-52 · E2EE L54-63 · RPC与事件 L65-77 · 配置与存储 L79-85 · 错误处理 L87-90 · AID托管 L45
|
|
24
24
|
|
|
25
25
|
### Step 3:按需读 Layer 3 单篇摘要
|
|
26
26
|
|
|
27
27
|
仅当需要某篇详情但不确定读哪个章节时:
|
|
28
28
|
|
|
29
|
-
快速开始
|
|
29
|
+
快速开始 L96-97 · WebSocket协议 L99-100 · 核心概念 L102-103 · 连接与认证 L105-106 · E2EE加密通信 L108-109 · E2EE_V2消息通信时序图 L111-112 · GROUP-E2EE轮换竞态清单 L114-115 · GROUP-E2EE现状对比与改进建议 L117-118 · API参考 L120-121 · 错误处理 L123-124 · 最佳实践 L126-127 · AID托管 L129-130 · 消息Payload L132-133 · 多语言SDK对齐审查 L135-136
|
|
30
30
|
|
|
31
31
|
大多数问题在摘要层就能解答。
|
|
32
32
|
|
|
@@ -43,6 +43,7 @@ SDK 文档聚焦核心封装:**认证(`client.auth`)**、**元信息与信
|
|
|
43
43
|
| 03 | [核心概念](03-核心概念.md) | AID、状态机、认证、E2EE |
|
|
44
44
|
| 04 | [连接与认证](04-连接与认证.md) | 认证封装、call()、on()、连接 |
|
|
45
45
|
| 05 | [E2EE加密通信](05-E2EE加密通信.md) | E2EE封装、ProtectedHeaders、自定义存储 |
|
|
46
|
+
| - | [E2EE_V2消息通信时序图](E2EE_V2消息通信时序图.md) | V2-only 明文/加密 P2P/GROUP 消息主链路 Mermaid 时序图 |
|
|
46
47
|
| - | [GROUP-E2EE轮换竞态清单](GROUP-E2EE轮换竞态清单.md) | GROUP epoch key 轮换状态、竞态条件、补测清单 |
|
|
47
48
|
| - | [GROUP-E2EE现状对比与改进建议](GROUP-E2EE现状对比与改进建议.md) | 当前 GROUP E2EE 实现定位、成熟方案对比、风险边界、分阶段改进建议 |
|
|
48
49
|
| 06 | [API手册](06-API手册.md) | AUNClient / AuthNamespace / MetaNamespace(信任根列表与 issuer root 更新) / E2EEManager |
|
|
@@ -60,8 +61,9 @@ SDK 文档聚焦核心封装:**认证(`client.auth`)**、**元信息与信
|
|
|
60
61
|
| 裸 WebSocket 或其他语言实现 | 02-WebSocket协议 |
|
|
61
62
|
| 理解 AID / E2EE 原理 | 03-核心概念 对应章节 |
|
|
62
63
|
| 认证 + 连接 + call/on 用法 | 04-连接与认证 |
|
|
63
|
-
| 需要加密通信 | 05-E2EE加密通信 |
|
|
64
|
-
|
|
|
64
|
+
| 需要加密通信 | 05-E2EE加密通信 |
|
|
65
|
+
| 需要查看 E2EE V2 消息主链路时序 | [E2EE_V2消息通信时序图](E2EE_V2消息通信时序图.md) |
|
|
66
|
+
| GROUP E2EE 轮换竞态/测试设计 | [GROUP-E2EE轮换竞态清单](GROUP-E2EE轮换竞态清单.md) |
|
|
65
67
|
| GROUP E2EE 架构评估/演进路线 | [GROUP-E2EE现状对比与改进建议](GROUP-E2EE现状对比与改进建议.md) |
|
|
66
68
|
| 查消息或思考内容 payload 类型和格式 | [09-payload-reference](09-payload-reference.md) |
|
|
67
69
|
| 查某个方法的签名 | 06-API手册 |
|
|
@@ -10,12 +10,13 @@
|
|
|
10
10
|
|------|------|
|
|
11
11
|
| [01-快速开始](01-快速开始.md) | 最小示例 · 安装 · 配置 · 核心流程 |
|
|
12
12
|
| [02-WebSocket协议](02-WebSocket协议.md) | 握手流程 · 消息格式 · 裸 WebSocket 示例 |
|
|
13
|
-
| [03-核心概念](03-核心概念.md) | AID · 连接状态机 · 认证流程 · E2EE |
|
|
14
|
-
| [04-连接与认证](04-连接与认证.md) | 创建AID · 连接网关 · 网关发现 · 调用RPC · 事件订阅 |
|
|
13
|
+
| [03-核心概念](03-核心概念.md) | AID · 连接状态机 · 认证流程 · E2EE |
|
|
14
|
+
| [04-连接与认证](04-连接与认证.md) | 创建AID · 连接网关 · 网关发现 · 调用RPC · 事件订阅 |
|
|
15
15
|
| [05-E2EE加密通信](05-E2EE加密通信.md) | E2EE加密消息 · ProtectedHeaders · 会话管理 · 自定义密钥存储 |
|
|
16
|
-
| [
|
|
17
|
-
| [GROUP-E2EE
|
|
18
|
-
| [
|
|
16
|
+
| [E2EE_V2消息通信时序图](E2EE_V2消息通信时序图.md) | V2-only 明文/加密 P2P/GROUP 消息主链路 · Mermaid 时序图 |
|
|
17
|
+
| [GROUP-E2EE轮换竞态清单](GROUP-E2EE轮换竞态清单.md) | GROUP epoch key 轮换状态 · 竞态条件 · 补测清单 |
|
|
18
|
+
| [GROUP-E2EE现状对比与改进建议](GROUP-E2EE现状对比与改进建议.md) | 当前 GROUP E2EE 实现定位 · 成熟方案对比 · 风险边界 · 分阶段改进建议 |
|
|
19
|
+
| [06-API手册](06-API手册.md) | AUNClient · AuthNamespace · MetaNamespace(信任根列表 / issuer root 更新) · E2EEManager · 内置事件 · RPC手册索引 |
|
|
19
20
|
| [07-错误处理](07-错误处理.md) | 错误类层级 · 错误码速查 · 重试策略 |
|
|
20
21
|
| [08-最佳实践](08-最佳实践.md) | 幂等初始化 · 多AID隔离 · 环境变量 · 资源清理 |
|
|
21
22
|
| [10-custody-api-manual](10-custody-api-manual.md) | AID 托管 · 手机号验证码 · 备份恢复 · 跨设备复制 |
|
|
@@ -51,10 +52,11 @@
|
|
|
51
52
|
- **连接状态事件** → [06-API手册](06-API手册.md)
|
|
52
53
|
|
|
53
54
|
### E2EE 端到端加密
|
|
54
|
-
- **E2EE 机制概述** → [03-核心概念](03-核心概念.md)
|
|
55
|
-
- **加密消息收发** → [05-E2EE加密通信](05-E2EE加密通信.md)
|
|
56
|
-
-
|
|
57
|
-
-
|
|
55
|
+
- **E2EE 机制概述** → [03-核心概念](03-核心概念.md)
|
|
56
|
+
- **加密消息收发** → [05-E2EE加密通信](05-E2EE加密通信.md)
|
|
57
|
+
- **V2-only P2P/GROUP 明文与加密时序** → [E2EE_V2消息通信时序图](E2EE_V2消息通信时序图.md)
|
|
58
|
+
- **会话管理** → [05-E2EE加密通信](05-E2EE加密通信.md)
|
|
59
|
+
- **GROUP epoch key 轮换竞态/补测清单** → [GROUP-E2EE轮换竞态清单](GROUP-E2EE轮换竞态清单.md)
|
|
58
60
|
- **GROUP E2EE 现状对比与演进建议** → [GROUP-E2EE现状对比与改进建议](GROUP-E2EE现状对比与改进建议.md)
|
|
59
61
|
- **E2EEManager API** → [06-API手册](06-API手册.md)
|
|
60
62
|
- **E2EE 错误类** → [07-错误处理](07-错误处理.md)
|
|
@@ -105,9 +107,12 @@ SDK 高层封装。`create_aid` + `authenticate` 认证流程;`connect` 参数
|
|
|
105
107
|
|
|
106
108
|
### 05-E2EE加密通信
|
|
107
109
|
E2EE 完整收发流程(加密发送 + 监听解密 + 后台消息循环);`protected_headers` 与可验证 `context` 元数据;密钥管理(prekey 缓存 / replay guard / group epoch);自定义 `KeyStore` / `SecretStore` Protocol。
|
|
108
|
-
|
|
109
|
-
###
|
|
110
|
-
GROUP
|
|
110
|
+
|
|
111
|
+
### E2EE_V2消息通信时序图
|
|
112
|
+
当前 V2-only 实现下的主通信链路图。覆盖 V2 设备密钥注册、P2P 明文、P2P 加密、GROUP 明文、GROUP 加密五条时序;明确 P2P 加密走 `message.send` 承载 `e2ee.p2p_encrypted`,GROUP 加密走 `group.v2.send` 承载 `e2ee.group_encrypted`,接收端统一通过 V2 pull 后由 SDK 解密。
|
|
113
|
+
|
|
114
|
+
### GROUP-E2EE轮换竞态清单
|
|
115
|
+
GROUP epoch key 两阶段轮换的状态边界和竞态检查项。覆盖 pending 期间成员变更、leader 竞争、分发/ack/commit 失败、stale pending、key recovery、旧 epoch 保留等场景,用于补充测试和实现审查。
|
|
111
116
|
|
|
112
117
|
### GROUP-E2EE现状对比与改进建议
|
|
113
118
|
当前 GROUP E2EE 实现的架构评估。对比 Signal Private Groups、WhatsApp Sender Key、Matrix Megolm 和 MLS,明确 AUN 当前处于“内容 E2EE + 服务端可见成员关系”的安全层级;列出旧 epoch key 恢复、signed group state commit、manifest hash / epoch chain 绑定、多设备模型和 epoch 内前向安全等改进方向。
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.js
CHANGED
|
@@ -1509,7 +1509,7 @@ export class AuthFlow {
|
|
|
1509
1509
|
}
|
|
1510
1510
|
}
|
|
1511
1511
|
async _loadInstanceState(aid) {
|
|
1512
|
-
if (
|
|
1512
|
+
if (typeof this._keystore.loadInstanceState !== 'function') {
|
|
1513
1513
|
return null;
|
|
1514
1514
|
}
|
|
1515
1515
|
return (await this._keystore.loadInstanceState(aid, this._deviceId, this._slotId));
|
|
@@ -1530,9 +1530,6 @@ export class AuthFlow {
|
|
|
1530
1530
|
}
|
|
1531
1531
|
}
|
|
1532
1532
|
await this._keystore.saveIdentity(aid, persisted);
|
|
1533
|
-
if (!this._deviceId) {
|
|
1534
|
-
return;
|
|
1535
|
-
}
|
|
1536
1533
|
// 实例级字段已拆分到 instance_state,无需从共享 metadata 清理
|
|
1537
1534
|
if (Object.keys(instanceState).length === 0 || typeof this._keystore.updateInstanceState !== 'function') {
|
|
1538
1535
|
return;
|