@agentunion/fastaun-browser 0.4.2 → 0.4.4
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 +190 -164
- package/_packed_docs/0.4.0_/345/267/256/345/274/202/346/240/270/345/256/236/345/206/263/347/255/226/350/256/260/345/275/225.md +302 -0
- package/_packed_docs/AUN_SDK_0.4.0_/350/256/276/350/256/241/345/257/271/346/257/224/345/210/206/346/236/220.md +194 -0
- package/_packed_docs/AUN_SDK_/351/207/215/346/236/204/345/256/236/346/226/275/350/256/241/345/210/222.md +596 -596
- package/_packed_docs/AUN_SDK_/351/207/215/346/236/204/350/256/276/350/256/241/346/226/271/346/241/210_v3.md +1698 -1697
- package/_packed_docs/CHANGELOG.md +190 -164
- package/_packed_docs/INDEX.md +17 -17
- package/_packed_docs/KITE_DOCS_GUIDE.md +11 -11
- package/_packed_docs/agent.md/SCHEMA.md +49 -49
- package/_packed_docs/agent.md/examples/signed-openclaw-lobster.md +22 -22
- package/_packed_docs/agent.md//350/277/234/347/250/213agent.md/347/274/223/345/255/230/344/270/216etag/351/200/217/344/274/240/346/226/271/346/241/210.md +327 -327
- package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +686 -686
- package/_packed_docs/design/2026-05-22-aun-rpc-trace-enhancement.md +542 -542
- package/_packed_docs/design/E2EE_V2/347/256/200/345/214/226/344/270/2721DH/345/212/240Per-AID_Wrap/346/226/271/346/241/210.md +124 -124
- package/_packed_docs/design//350/267/250/350/257/255/350/250/200/345/256/271/345/231/250E2E/346/265/213/350/257/225/346/226/271/346/241/210.md +665 -665
- package/_packed_docs/protocol/01-/350/272/253/344/273/275/344/270/216/345/207/255/350/257/201/345/215/217/350/256/256-auth.md +2 -2
- package/_packed_docs/protocol/14-/344/272/244/344/272/222/346/234/272/345/210/266-/345/223/215/345/272/224/346/250/241/345/274/217/344/270/216/350/207/252/344/270/273/346/250/241/345/274/217.md +170 -170
- package/_packed_docs/protocol/15-/347/246/273/347/272/277/346/216/250/351/200/201/351/200/232/347/237/245/345/215/217/350/256/256.md +419 -419
- package/_packed_docs/protocol/README.md +1 -1
- package/_packed_docs/protocol/aun-docs-guide.md +1 -1
- package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +15 -15
- package/_packed_docs/protocol//351/231/204/345/275/225B-/346/211/251/345/261/225/346/200/247/346/214/207/345/215/227.md +4 -4
- package/_packed_docs/protocol//351/231/204/345/275/225J-/345/256/242/346/210/267/347/253/257/346/216/245/345/205/245/347/244/272/344/276/213.md +98 -98
- package/_packed_docs/protocol//351/231/204/345/275/225M-JWT/350/256/244/350/257/201/345/256/236/347/216/260/346/214/207/345/215/227.md +46 -46
- package/_packed_docs/protocol//351/231/204/345/275/225N-/345/210/206/345/270/203/345/274/217Trace/345/215/217/350/256/256.md +257 -257
- package/_packed_docs/python-sdk-v2-only-changelog.md +189 -189
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +7 -3
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +1 -1
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +3 -1
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +1 -1
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +63 -15
- package/_packed_docs/sdk/09-payload-reference.md +13 -13
- package/_packed_docs/sdk/E2EE_V2/346/266/210/346/201/257/351/200/232/344/277/241/346/227/266/345/272/217/345/233/276.md +171 -171
- package/_packed_docs/sdk/README.md +5 -5
- package/dist/aid-store.d.ts.map +1 -1
- package/dist/aid-store.js +5 -6
- package/dist/aid-store.js.map +1 -1
- package/dist/aid.d.ts +2 -1
- package/dist/aid.d.ts.map +1 -1
- package/dist/aid.js +7 -6
- package/dist/aid.js.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +4 -0
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +292 -188
- package/dist/client.d.ts +13 -17
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +275 -190
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +4 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keystore/indexeddb.js +5 -5
- package/dist/keystore/indexeddb.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`message.send.params.payload`、`message.thought.put.params.payload`、`group.send.params.payload` 和 `group.thought.put.params.payload` 使用同一套业务负载约定。`payload` 是应用层 JSON 对象,服务端只做大小、JSON 可序列化、信封/封装类型和加密相关的必要检查;业务字段由发送端和接收端协商,服务端不按本文字段做强制校验。
|
|
4
4
|
|
|
5
|
-
示例展示的是 `payload` 片段:P2P 完整请求仍需要在同级传入 `to`;群消息完整请求仍需要在同级传入 `group_id`;思考内容需要在顶层通过 `context.type + context.id` 指定 selector。文本、图片、文件、思考内容等业务消息类型只能放在 `payload.type`;`message.send.params.type` / `message.thought.put.params.type` / `group.send.params.type` / `group.thought.put.params.type` 是信封或封装类型,例如 SDK 加密发送时自动填充的 `e2ee.encrypted` / `e2ee.group_encrypted`。
|
|
5
|
+
示例展示的是 `payload` 片段:P2P 完整请求仍需要在同级传入 `to`;群消息完整请求仍需要在同级传入 `group_id`;思考内容需要在顶层通过 `context.type + context.id` 指定 selector。文本、图片、文件、思考内容等业务消息类型只能放在 `payload.type`;`message.send.params.type` / `message.thought.put.params.type` / `group.send.params.type` / `group.thought.put.params.type` 是信封或封装类型,例如 SDK 加密发送时自动填充的 `e2ee.encrypted` / `e2ee.group_encrypted`。
|
|
6
6
|
|
|
7
7
|
## 类型总览
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|----------|------|----------|
|
|
11
11
|
| `text` | 纯文本或 Markdown 文本 | 普通对话、任务说明、通知正文 |
|
|
12
12
|
| `quote` | 带引用摘要的回复 | 回复某条消息、保留上下文 |
|
|
13
|
-
| `thought` | 思考过程片段 | Agent 针对某个 P2P 或群上下文的非广播思考内容 |
|
|
13
|
+
| `thought` | 思考过程片段 | Agent 针对某个 P2P 或群上下文的非广播思考内容 |
|
|
14
14
|
| `voice` | 语音文件引用及转写信息 | 语音消息、语音备忘 |
|
|
15
15
|
| `image` | 图片对象引用及展示信息 | 截图、流程图、图片分享 |
|
|
16
16
|
| `video` | 视频对象引用及封面信息 | 录屏、演示视频 |
|
|
@@ -38,19 +38,19 @@
|
|
|
38
38
|
| 字段 | 所在位置 | 说明 |
|
|
39
39
|
|------|----------|------|
|
|
40
40
|
| `to` | `message.send.params` | P2P 接收方 AID |
|
|
41
|
-
| `group_id` | `group.send.params` 和群消息信封 | 群组 ID |
|
|
42
|
-
| `context.type + context.id` | `message.thought.put/get.params` 和 `group.thought.put/get.params` | 思考内容 selector;必填,不要只放在 payload 内 |
|
|
43
|
-
| `protected_headers` / `headers` | `message.send` / `message.thought.put` / `group.send` / `group.thought.put` 参数 | E2EE 信封元数据,类似 HTTP headers;SDK 验 `_auth` 后在 `e2ee.protected_headers` 暴露 |
|
|
44
|
-
| `from` / `sender_aid` | 服务端生成的消息信封 | 发送方身份 |
|
|
41
|
+
| `group_id` | `group.send.params` 和群消息信封 | 群组 ID |
|
|
42
|
+
| `context.type + context.id` | `message.thought.put/get.params` 和 `group.thought.put/get.params` | 思考内容 selector;必填,不要只放在 payload 内 |
|
|
43
|
+
| `protected_headers` / `headers` | `message.send` / `message.thought.put` / `group.send` / `group.thought.put` 参数 | E2EE 信封元数据,类似 HTTP headers;SDK 验 `_auth` 后在 `e2ee.protected_headers` 暴露 |
|
|
44
|
+
| `from` / `sender_aid` | 服务端生成的消息信封 | 发送方身份 |
|
|
45
45
|
| `message_id` / `seq` / `timestamp` / `created_at` | 服务端生成或发送参数 | 当前消息 ID、序号和服务端时间 |
|
|
46
46
|
| `encrypted` / `delivery_mode` | 发送参数或连接上下文 | 加密和 P2P 投递语义 |
|
|
47
47
|
| `dispatch_mode` | 群消息信封和 SDK 注入的群消息 payload | 群消息应用层分发模式标签:`broadcast` / `mention`;由群设置决定,不作为 `group.send` 单次入参 |
|
|
48
48
|
| `type` / `message_type` | 发送参数或消息信封 | 信封/封装类型,如 `e2ee.encrypted` / `e2ee.group_encrypted` |
|
|
49
|
-
| `dispatch` / `duty_state` / `message_dispatch` | `group.send` 响应和群消息事件 | 群消息运行时分发状态和值班分发结果 |
|
|
50
|
-
|
|
51
|
-
`protected_headers` 用于可见但需防篡改的信封元数据,例如 `device_id`、`slot_id`、`sdk_version`。它不属于业务 payload,也不提供机密性;需要端到端保密的上下文仍应放在 `payload.client_context` 或其他 payload 字段内。
|
|
52
|
-
|
|
53
|
-
## 公共辅助字段
|
|
49
|
+
| `dispatch` / `duty_state` / `message_dispatch` | `group.send` 响应和群消息事件 | 群消息运行时分发状态和值班分发结果 |
|
|
50
|
+
|
|
51
|
+
`protected_headers` 用于可见但需防篡改的信封元数据,例如 `device_id`、`slot_id`、`sdk_version`。它不属于业务 payload,也不提供机密性;需要端到端保密的上下文仍应放在 `payload.client_context` 或其他 payload 字段内。
|
|
52
|
+
|
|
53
|
+
## 公共辅助字段
|
|
54
54
|
|
|
55
55
|
以下字段可出现在多数 payload 中;如无需要,不必携带。
|
|
56
56
|
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
|
|
129
129
|
### `thought`:思考内容
|
|
130
130
|
|
|
131
|
-
`thought` 用于 Agent 暴露针对某个 P2P 或群上下文的思考过程片段。它只应通过 `message.thought.put` 或 `group.thought.put` 发送,不作为普通 `message.send` / `group.send` 消息广播;有兴趣的客户端通过对应的 `*.thought.get` 主动读取。
|
|
131
|
+
`thought` 用于 Agent 暴露针对某个 P2P 或群上下文的思考过程片段。它只应通过 `message.thought.put` 或 `group.thought.put` 发送,不作为普通 `message.send` / `group.send` 消息广播;有兴趣的客户端通过对应的 `*.thought.get` 主动读取。
|
|
132
132
|
|
|
133
133
|
| 字段 | 类型 | 必填 | 说明 |
|
|
134
134
|
|------|------|:----:|------|
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
}
|
|
147
147
|
```
|
|
148
148
|
|
|
149
|
-
`message.thought.put` / `group.thought.put` 的顶层 selector 用于定位 thought head,只使用 `context.type + context.id`。`payload` 内如需展示引用摘要,可另行携带 `quote` 或 `client_context`,但不能替代顶层 selector。
|
|
149
|
+
`message.thought.put` / `group.thought.put` 的顶层 selector 用于定位 thought head,只使用 `context.type + context.id`。`payload` 内如需展示引用摘要,可另行携带 `quote` 或 `client_context`,但不能替代顶层 selector。
|
|
150
150
|
|
|
151
151
|
### `voice`:语音消息
|
|
152
152
|
|
|
@@ -1,171 +1,171 @@
|
|
|
1
|
-
# E2EE V2 消息通信时序图
|
|
2
|
-
|
|
3
|
-
本文只描述当前 V2-only 链路下的主要时序:P2P/GROUP 明文消息、P2P/GROUP 加密消息,以及 V2 设备密钥注册前置流程。不包含 V1 E2EE、旧 group epoch secret 分发、thought 内容读写。
|
|
4
|
-
|
|
5
|
-
## 范围约定
|
|
6
|
-
|
|
7
|
-
- SDK 默认 `message.send` / `group.send` 为 `encrypt=true`,由 SDK 本地构造 V2 加密 envelope。
|
|
8
|
-
- 显式 `encrypt=false` 时走明文发送;V2 SDK 接收端仍通过 `message.v2.pull` / `group.v2.pull` 合并拉取明文历史行。
|
|
9
|
-
- P2P 加密 envelope 类型为 `e2ee.p2p_encrypted`,通过 `message.send` 提交,服务端按 V2 分流处理。
|
|
10
|
-
- GROUP 加密 envelope 类型为 `e2ee.group_encrypted`,通过 `group.v2.send` 提交。
|
|
11
|
-
- 服务端只做认证、路由、结构校验、密文存储和事件通知,不持有明文 payload,也不执行端到端解密。
|
|
12
|
-
|
|
13
|
-
## V2 设备密钥注册
|
|
14
|
-
|
|
15
|
-
```mermaid
|
|
16
|
-
sequenceDiagram
|
|
17
|
-
participant SDK as 接收方 SDK
|
|
18
|
-
participant Message as message 服务
|
|
19
|
-
participant Group as group 服务
|
|
20
|
-
participant CA as CA/Auth
|
|
21
|
-
|
|
22
|
-
SDK->>SDK: 初始化 V2Session<br/>IK=AID 长期密钥,生成或加载 P2P SPK
|
|
23
|
-
SDK->>Message: message.v2.put_peer_pk<br/>peer_device_prekey + SPK 签名
|
|
24
|
-
Message->>CA: ca.get_cert / 校验 AID 公钥
|
|
25
|
-
Message-->>SDK: ok
|
|
26
|
-
|
|
27
|
-
opt 已加入某个群
|
|
28
|
-
SDK->>SDK: ensure_group_spk(group_id)
|
|
29
|
-
SDK->>Group: group.v2.put_group_pk<br/>group_device_prekey + SPK 签名
|
|
30
|
-
Group->>CA: ca.get_cert / 校验 AID 公钥
|
|
31
|
-
Group-->>SDK: ok
|
|
32
|
-
end
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## P2P 明文消息
|
|
36
|
-
|
|
37
|
-
```mermaid
|
|
38
|
-
sequenceDiagram
|
|
39
|
-
participant A as Sender SDK
|
|
40
|
-
participant M as message 服务
|
|
41
|
-
participant G as gateway
|
|
42
|
-
participant B as Receiver SDK
|
|
43
|
-
|
|
44
|
-
A->>M: message.send<br/>encrypt=false, payload=明文
|
|
45
|
-
alt 目标跨域
|
|
46
|
-
M->>G: gateway.forward_federation<br/>namespace=message, method=send
|
|
47
|
-
G->>M: 转发到目标域 message 服务
|
|
48
|
-
end
|
|
49
|
-
M->>M: 按接收方 device 分配 seq<br/>写普通消息存储
|
|
50
|
-
M->>G: dispatch_event(message.received)
|
|
51
|
-
G-->>B: event/message.received 或通知
|
|
52
|
-
|
|
53
|
-
B->>M: message.v2.pull(after_seq, limit)
|
|
54
|
-
M-->>B: messages[]<br/>明文行 version=v1 / legacy_v1
|
|
55
|
-
B->>B: 直接发布 message.received<br/>不做 E2EE 解密
|
|
56
|
-
B->>M: message.v2.ack(up_to_seq)
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## P2P 加密消息
|
|
60
|
-
|
|
61
|
-
```mermaid
|
|
62
|
-
sequenceDiagram
|
|
63
|
-
participant A as Sender SDK
|
|
64
|
-
participant M as message 服务
|
|
65
|
-
participant G as gateway
|
|
66
|
-
participant B as Receiver SDK
|
|
67
|
-
|
|
68
|
-
A->>M: message.v2.bootstrap(peer_aid=B)
|
|
69
|
-
M-->>A: B active devices<br/>IK + peer_device_prekey SPK<br/>self_devices + audit_recipients
|
|
70
|
-
|
|
71
|
-
A->>A: 构造 recipients<br/>peer + self_sync + audit
|
|
72
|
-
A->>A: 生成 master_key / msg_nonce / sender_session_key
|
|
73
|
-
A->>A: 3DH/1DH wrap master_key<br/>AES-GCM 加密 payload<br/>ECDSA 签名 ct+tag+AAD+recipients_digest
|
|
74
|
-
A->>M: message.send<br/>payload.type=e2ee.p2p_encrypted, version=v2, encrypt=false
|
|
75
|
-
|
|
76
|
-
alt 目标跨域
|
|
77
|
-
M->>G: gateway.forward_federation<br/>namespace=message, method=send
|
|
78
|
-
G->>M: 转发到目标域 message 服务
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
M->>M: 校验 AAD/from/to/device、t_send、recipients_digest、audit wrap
|
|
82
|
-
M->>M: 写 v2_peer_messages 共享密文体
|
|
83
|
-
M->>M: 按 device 写 v2_peer_wraps<br/>seq per owner_aid + device_id
|
|
84
|
-
M->>G: dispatch_event(peer.v2.message_received)<br/>只含 seq/message_id/device_id
|
|
85
|
-
G-->>B: peer.v2.message_received
|
|
86
|
-
|
|
87
|
-
B->>M: message.v2.pull(after_seq, limit)
|
|
88
|
-
M-->>B: per-device envelope_json<br/>recipient wrap + merkle_proof
|
|
89
|
-
B->>B: 验 sender_signature / recipients proof
|
|
90
|
-
B->>B: 用本地 IK/SPK 解 wrap_key -> master_key
|
|
91
|
-
B->>B: AES-GCM 解密 payload
|
|
92
|
-
B-->>B: 发布 message.received
|
|
93
|
-
B->>M: message.v2.ack(up_to_seq)
|
|
94
|
-
B->>B: 若消费当前 SPK,异步 rotate_spk()
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## GROUP 明文消息
|
|
98
|
-
|
|
99
|
-
```mermaid
|
|
100
|
-
sequenceDiagram
|
|
101
|
-
participant A as Sender SDK
|
|
102
|
-
participant Group as group 服务
|
|
103
|
-
participant G as gateway
|
|
104
|
-
participant B as Member SDK
|
|
105
|
-
|
|
106
|
-
A->>Group: group.send<br/>encrypt=false, payload=明文
|
|
107
|
-
Group->>Group: 校验成员/禁言/消息类型/epoch 边界
|
|
108
|
-
Group->>Group: 写 group_messages + group_events<br/>递增 group.message_seq / event_seq
|
|
109
|
-
Group->>G: dispatch_event(group.message_created)<br/>member_aids / dispatch 信息
|
|
110
|
-
G-->>B: group.message_created 通知
|
|
111
|
-
|
|
112
|
-
B->>Group: group.v2.pull(group_id, after_seq, limit)
|
|
113
|
-
Group->>Group: 合并普通明文 group_messages
|
|
114
|
-
Group-->>B: messages[]<br/>明文行 version=v1 + payload
|
|
115
|
-
B->>B: 直接发布 group.message_created
|
|
116
|
-
B->>Group: group.v2.ack(group_id, up_to_seq)
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
## GROUP 加密消息
|
|
120
|
-
|
|
121
|
-
```mermaid
|
|
122
|
-
sequenceDiagram
|
|
123
|
-
participant A as Sender SDK
|
|
124
|
-
participant Group as group 服务
|
|
125
|
-
participant Msg as message 服务
|
|
126
|
-
participant G as gateway
|
|
127
|
-
participant B as Member SDK
|
|
128
|
-
|
|
129
|
-
A->>Group: group.v2.bootstrap(group_id)
|
|
130
|
-
Group->>Group: 校验成员资格,读取 epoch/state_chain
|
|
131
|
-
Group->>Group: 读取 v2_group_devices<br/>group_device_prekey
|
|
132
|
-
Group->>Msg: message.v2.group_bootstrap(member_aids)
|
|
133
|
-
Msg-->>Group: fallback P2P device prekeys + audit_recipients
|
|
134
|
-
Group-->>A: devices + epoch + state_commitment<br/>pending/committed members + audit_recipients
|
|
135
|
-
|
|
136
|
-
A->>A: 校验 group state 签名 / 分叉
|
|
137
|
-
A->>A: 构造 targets<br/>member + self_sync + audit
|
|
138
|
-
A->>A: 生成 e2ee.group_encrypted envelope<br/>AAD 含 group_id/epoch/state_commitment
|
|
139
|
-
A->>Group: group.v2.send(group_id, envelope)
|
|
140
|
-
|
|
141
|
-
alt 群在异域
|
|
142
|
-
Group->>G: gateway.forward_federation<br/>namespace=group, method=v2.send
|
|
143
|
-
G->>Group: 转发到群归属域 group 服务
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
Group->>Group: 校验成员、e2ee_version=v2、epoch 匹配
|
|
147
|
-
Group->>Group: 校验 AAD/from/group_id/from_device/message_id
|
|
148
|
-
Group->>Group: 校验 recipients 排序、digest、audit wrap
|
|
149
|
-
Group->>Group: 写 v2_group_messages 共享密文体
|
|
150
|
-
Group->>Group: 按 recipient 写 v2_group_wraps
|
|
151
|
-
Group->>G: dispatch_event(group.v2.message_created)<br/>seq/message_id/sender/member_aids
|
|
152
|
-
G-->>B: group.v2.message_created 通知
|
|
153
|
-
|
|
154
|
-
B->>Group: group.v2.pull(group_id, after_seq, limit)
|
|
155
|
-
Group-->>B: per-device envelope_json<br/>recipient wrap + merkle_proof
|
|
156
|
-
B->>B: 选择 group_id 对应 group SPK<br/>fallback 到 P2P SPK 仅兼容旧 wrap
|
|
157
|
-
B->>B: 验签 / 验 proof / 解 wrap / 解密 payload
|
|
158
|
-
B-->>B: 发布 group.message_created
|
|
159
|
-
B->>Group: group.v2.ack(group_id, up_to_seq)
|
|
160
|
-
B->>B: 若消费 group_device_prekey,异步 rotate_group_spk()
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
## 核心差异
|
|
164
|
-
|
|
165
|
-
| 场景 | 发送入口 | 服务端存储 | 接收入口 | 解密位置 |
|
|
166
|
-
|------|----------|------------|----------|----------|
|
|
167
|
-
| P2P 明文 | `message.send(encrypt=false)` | 普通 device message | `message.v2.pull` 合并明文行 | 不解密 |
|
|
168
|
-
| P2P 加密 | `message.send` 承载 `e2ee.p2p_encrypted` | `v2_peer_messages` + `v2_peer_wraps` | `message.v2.pull` | 接收方 SDK |
|
|
169
|
-
| GROUP 明文 | `group.send(encrypt=false)` | `group_messages` + `group_events` | `group.v2.pull` 合并明文行 | 不解密 |
|
|
170
|
-
| GROUP 加密 | `group.v2.send` 承载 `e2ee.group_encrypted` | `v2_group_messages` + `v2_group_wraps` | `group.v2.pull` | 接收方 SDK |
|
|
171
|
-
|
|
1
|
+
# E2EE V2 消息通信时序图
|
|
2
|
+
|
|
3
|
+
本文只描述当前 V2-only 链路下的主要时序:P2P/GROUP 明文消息、P2P/GROUP 加密消息,以及 V2 设备密钥注册前置流程。不包含 V1 E2EE、旧 group epoch secret 分发、thought 内容读写。
|
|
4
|
+
|
|
5
|
+
## 范围约定
|
|
6
|
+
|
|
7
|
+
- SDK 默认 `message.send` / `group.send` 为 `encrypt=true`,由 SDK 本地构造 V2 加密 envelope。
|
|
8
|
+
- 显式 `encrypt=false` 时走明文发送;V2 SDK 接收端仍通过 `message.v2.pull` / `group.v2.pull` 合并拉取明文历史行。
|
|
9
|
+
- P2P 加密 envelope 类型为 `e2ee.p2p_encrypted`,通过 `message.send` 提交,服务端按 V2 分流处理。
|
|
10
|
+
- GROUP 加密 envelope 类型为 `e2ee.group_encrypted`,通过 `group.v2.send` 提交。
|
|
11
|
+
- 服务端只做认证、路由、结构校验、密文存储和事件通知,不持有明文 payload,也不执行端到端解密。
|
|
12
|
+
|
|
13
|
+
## V2 设备密钥注册
|
|
14
|
+
|
|
15
|
+
```mermaid
|
|
16
|
+
sequenceDiagram
|
|
17
|
+
participant SDK as 接收方 SDK
|
|
18
|
+
participant Message as message 服务
|
|
19
|
+
participant Group as group 服务
|
|
20
|
+
participant CA as CA/Auth
|
|
21
|
+
|
|
22
|
+
SDK->>SDK: 初始化 V2Session<br/>IK=AID 长期密钥,生成或加载 P2P SPK
|
|
23
|
+
SDK->>Message: message.v2.put_peer_pk<br/>peer_device_prekey + SPK 签名
|
|
24
|
+
Message->>CA: ca.get_cert / 校验 AID 公钥
|
|
25
|
+
Message-->>SDK: ok
|
|
26
|
+
|
|
27
|
+
opt 已加入某个群
|
|
28
|
+
SDK->>SDK: ensure_group_spk(group_id)
|
|
29
|
+
SDK->>Group: group.v2.put_group_pk<br/>group_device_prekey + SPK 签名
|
|
30
|
+
Group->>CA: ca.get_cert / 校验 AID 公钥
|
|
31
|
+
Group-->>SDK: ok
|
|
32
|
+
end
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## P2P 明文消息
|
|
36
|
+
|
|
37
|
+
```mermaid
|
|
38
|
+
sequenceDiagram
|
|
39
|
+
participant A as Sender SDK
|
|
40
|
+
participant M as message 服务
|
|
41
|
+
participant G as gateway
|
|
42
|
+
participant B as Receiver SDK
|
|
43
|
+
|
|
44
|
+
A->>M: message.send<br/>encrypt=false, payload=明文
|
|
45
|
+
alt 目标跨域
|
|
46
|
+
M->>G: gateway.forward_federation<br/>namespace=message, method=send
|
|
47
|
+
G->>M: 转发到目标域 message 服务
|
|
48
|
+
end
|
|
49
|
+
M->>M: 按接收方 device 分配 seq<br/>写普通消息存储
|
|
50
|
+
M->>G: dispatch_event(message.received)
|
|
51
|
+
G-->>B: event/message.received 或通知
|
|
52
|
+
|
|
53
|
+
B->>M: message.v2.pull(after_seq, limit)
|
|
54
|
+
M-->>B: messages[]<br/>明文行 version=v1 / legacy_v1
|
|
55
|
+
B->>B: 直接发布 message.received<br/>不做 E2EE 解密
|
|
56
|
+
B->>M: message.v2.ack(up_to_seq)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## P2P 加密消息
|
|
60
|
+
|
|
61
|
+
```mermaid
|
|
62
|
+
sequenceDiagram
|
|
63
|
+
participant A as Sender SDK
|
|
64
|
+
participant M as message 服务
|
|
65
|
+
participant G as gateway
|
|
66
|
+
participant B as Receiver SDK
|
|
67
|
+
|
|
68
|
+
A->>M: message.v2.bootstrap(peer_aid=B)
|
|
69
|
+
M-->>A: B active devices<br/>IK + peer_device_prekey SPK<br/>self_devices + audit_recipients
|
|
70
|
+
|
|
71
|
+
A->>A: 构造 recipients<br/>peer + self_sync + audit
|
|
72
|
+
A->>A: 生成 master_key / msg_nonce / sender_session_key
|
|
73
|
+
A->>A: 3DH/1DH wrap master_key<br/>AES-GCM 加密 payload<br/>ECDSA 签名 ct+tag+AAD+recipients_digest
|
|
74
|
+
A->>M: message.send<br/>payload.type=e2ee.p2p_encrypted, version=v2, encrypt=false
|
|
75
|
+
|
|
76
|
+
alt 目标跨域
|
|
77
|
+
M->>G: gateway.forward_federation<br/>namespace=message, method=send
|
|
78
|
+
G->>M: 转发到目标域 message 服务
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
M->>M: 校验 AAD/from/to/device、t_send、recipients_digest、audit wrap
|
|
82
|
+
M->>M: 写 v2_peer_messages 共享密文体
|
|
83
|
+
M->>M: 按 device 写 v2_peer_wraps<br/>seq per owner_aid + device_id
|
|
84
|
+
M->>G: dispatch_event(peer.v2.message_received)<br/>只含 seq/message_id/device_id
|
|
85
|
+
G-->>B: peer.v2.message_received
|
|
86
|
+
|
|
87
|
+
B->>M: message.v2.pull(after_seq, limit)
|
|
88
|
+
M-->>B: per-device envelope_json<br/>recipient wrap + merkle_proof
|
|
89
|
+
B->>B: 验 sender_signature / recipients proof
|
|
90
|
+
B->>B: 用本地 IK/SPK 解 wrap_key -> master_key
|
|
91
|
+
B->>B: AES-GCM 解密 payload
|
|
92
|
+
B-->>B: 发布 message.received
|
|
93
|
+
B->>M: message.v2.ack(up_to_seq)
|
|
94
|
+
B->>B: 若消费当前 SPK,异步 rotate_spk()
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## GROUP 明文消息
|
|
98
|
+
|
|
99
|
+
```mermaid
|
|
100
|
+
sequenceDiagram
|
|
101
|
+
participant A as Sender SDK
|
|
102
|
+
participant Group as group 服务
|
|
103
|
+
participant G as gateway
|
|
104
|
+
participant B as Member SDK
|
|
105
|
+
|
|
106
|
+
A->>Group: group.send<br/>encrypt=false, payload=明文
|
|
107
|
+
Group->>Group: 校验成员/禁言/消息类型/epoch 边界
|
|
108
|
+
Group->>Group: 写 group_messages + group_events<br/>递增 group.message_seq / event_seq
|
|
109
|
+
Group->>G: dispatch_event(group.message_created)<br/>member_aids / dispatch 信息
|
|
110
|
+
G-->>B: group.message_created 通知
|
|
111
|
+
|
|
112
|
+
B->>Group: group.v2.pull(group_id, after_seq, limit)
|
|
113
|
+
Group->>Group: 合并普通明文 group_messages
|
|
114
|
+
Group-->>B: messages[]<br/>明文行 version=v1 + payload
|
|
115
|
+
B->>B: 直接发布 group.message_created
|
|
116
|
+
B->>Group: group.v2.ack(group_id, up_to_seq)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## GROUP 加密消息
|
|
120
|
+
|
|
121
|
+
```mermaid
|
|
122
|
+
sequenceDiagram
|
|
123
|
+
participant A as Sender SDK
|
|
124
|
+
participant Group as group 服务
|
|
125
|
+
participant Msg as message 服务
|
|
126
|
+
participant G as gateway
|
|
127
|
+
participant B as Member SDK
|
|
128
|
+
|
|
129
|
+
A->>Group: group.v2.bootstrap(group_id)
|
|
130
|
+
Group->>Group: 校验成员资格,读取 epoch/state_chain
|
|
131
|
+
Group->>Group: 读取 v2_group_devices<br/>group_device_prekey
|
|
132
|
+
Group->>Msg: message.v2.group_bootstrap(member_aids)
|
|
133
|
+
Msg-->>Group: fallback P2P device prekeys + audit_recipients
|
|
134
|
+
Group-->>A: devices + epoch + state_commitment<br/>pending/committed members + audit_recipients
|
|
135
|
+
|
|
136
|
+
A->>A: 校验 group state 签名 / 分叉
|
|
137
|
+
A->>A: 构造 targets<br/>member + self_sync + audit
|
|
138
|
+
A->>A: 生成 e2ee.group_encrypted envelope<br/>AAD 含 group_id/epoch/state_commitment
|
|
139
|
+
A->>Group: group.v2.send(group_id, envelope)
|
|
140
|
+
|
|
141
|
+
alt 群在异域
|
|
142
|
+
Group->>G: gateway.forward_federation<br/>namespace=group, method=v2.send
|
|
143
|
+
G->>Group: 转发到群归属域 group 服务
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
Group->>Group: 校验成员、e2ee_version=v2、epoch 匹配
|
|
147
|
+
Group->>Group: 校验 AAD/from/group_id/from_device/message_id
|
|
148
|
+
Group->>Group: 校验 recipients 排序、digest、audit wrap
|
|
149
|
+
Group->>Group: 写 v2_group_messages 共享密文体
|
|
150
|
+
Group->>Group: 按 recipient 写 v2_group_wraps
|
|
151
|
+
Group->>G: dispatch_event(group.v2.message_created)<br/>seq/message_id/sender/member_aids
|
|
152
|
+
G-->>B: group.v2.message_created 通知
|
|
153
|
+
|
|
154
|
+
B->>Group: group.v2.pull(group_id, after_seq, limit)
|
|
155
|
+
Group-->>B: per-device envelope_json<br/>recipient wrap + merkle_proof
|
|
156
|
+
B->>B: 选择 group_id 对应 group SPK<br/>fallback 到 P2P SPK 仅兼容旧 wrap
|
|
157
|
+
B->>B: 验签 / 验 proof / 解 wrap / 解密 payload
|
|
158
|
+
B-->>B: 发布 group.message_created
|
|
159
|
+
B->>Group: group.v2.ack(group_id, up_to_seq)
|
|
160
|
+
B->>B: 若消费 group_device_prekey,异步 rotate_group_spk()
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## 核心差异
|
|
164
|
+
|
|
165
|
+
| 场景 | 发送入口 | 服务端存储 | 接收入口 | 解密位置 |
|
|
166
|
+
|------|----------|------------|----------|----------|
|
|
167
|
+
| P2P 明文 | `message.send(encrypt=false)` | 普通 device message | `message.v2.pull` 合并明文行 | 不解密 |
|
|
168
|
+
| P2P 加密 | `message.send` 承载 `e2ee.p2p_encrypted` | `v2_peer_messages` + `v2_peer_wraps` | `message.v2.pull` | 接收方 SDK |
|
|
169
|
+
| GROUP 明文 | `group.send(encrypt=false)` | `group_messages` + `group_events` | `group.v2.pull` 合并明文行 | 不解密 |
|
|
170
|
+
| GROUP 加密 | `group.v2.send` 承载 `e2ee.group_encrypted` | `v2_group_messages` + `v2_group_wraps` | `group.v2.pull` | 接收方 SDK |
|
|
171
|
+
|
|
@@ -70,12 +70,12 @@ asyncio.run(main())
|
|
|
70
70
|
|
|
71
71
|
| 语言 | options-only | AID + options |
|
|
72
72
|
|------|--------------|---------------|
|
|
73
|
-
| Python | `AUNClient(
|
|
74
|
-
| TypeScript | `new AUNClient(
|
|
75
|
-
| JavaScript | `new AUNClient(
|
|
76
|
-
| Go | `aun.
|
|
73
|
+
| Python | `AUNClient()` | `AUNClient(aid)` |
|
|
74
|
+
| TypeScript | `new AUNClient()` | `new AUNClient(aid)` |
|
|
75
|
+
| JavaScript | `new AUNClient()` | `new AUNClient(aid)` |
|
|
76
|
+
| Go | `aun.NewAUNClientEmpty()` | `aun.NewAUNClient(aid)` |
|
|
77
77
|
|
|
78
|
-
`aid` 必须是
|
|
78
|
+
`aid` 必须是 AIDStore.load() 返回的 AID 对象,不是字符串。debug/verify_ssl/root_ca_path 等配置由 AID 携带,不再通过构造参数传入。
|
|
79
79
|
|
|
80
80
|
---
|
|
81
81
|
|
package/dist/aid-store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aid-store.d.ts","sourceRoot":"","sources":["../src/aid-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAU/B,OAAO,EAAuB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACpG,MAAM,EAAE;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAA;KAAE,CAAC;CACjE,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;CACvD,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7H,MAAM,MAAM,kBAAkB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAChL,MAAM,MAAM,cAAc,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AACvM,MAAM,MAAM,eAAe,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,kBAAkB,EAAE,IAAI,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AACnG,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,kBAAkB,EAAE,IAAI,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/F,MAAM,MAAM,gBAAgB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG;IAAE,UAAU,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"aid-store.d.ts","sourceRoot":"","sources":["../src/aid-store.ts"],"names":[],"mappings":"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"}
|
package/dist/aid-store.js
CHANGED
|
@@ -6,7 +6,7 @@ import { AuthFlow } from './auth.js';
|
|
|
6
6
|
import { GatewayDiscovery } from './discovery.js';
|
|
7
7
|
import { IdentityConflictError, ValidationError } from './errors.js';
|
|
8
8
|
import { IndexedDBKeyStore } from './keystore/indexeddb.js';
|
|
9
|
-
import { getDeviceId, normalizeInstanceId } from './config.js';
|
|
9
|
+
import { getDeviceId, normalizeInstanceId, normalizeSlotId } from './config.js';
|
|
10
10
|
import { resultErr, resultOk } from './result.js';
|
|
11
11
|
// ── 证书 DER 解析工具 ────────────────────────────────────────────
|
|
12
12
|
function _derReadLength(data, offset) {
|
|
@@ -228,10 +228,6 @@ function parseCertCN(certPem) {
|
|
|
228
228
|
return null;
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
|
-
function normalizeSlotId(slotId) {
|
|
232
|
-
const value = String(slotId ?? 'default').trim();
|
|
233
|
-
return value || 'default';
|
|
234
|
-
}
|
|
235
231
|
function issuerFromAid(aid) {
|
|
236
232
|
const target = String(aid ?? '').trim();
|
|
237
233
|
const dotIdx = target.indexOf('.');
|
|
@@ -296,7 +292,10 @@ export class AIDStore {
|
|
|
296
292
|
? normalizeInstanceId(opts.deviceId, 'deviceId', { allowEmpty: true })
|
|
297
293
|
: getDeviceId();
|
|
298
294
|
this.slotId = normalizeSlotId(opts.slotId);
|
|
299
|
-
|
|
295
|
+
if (opts.verifySsl === false) {
|
|
296
|
+
console.warn('[aun_core.config] verify_ssl=false 在浏览器环境中不受支持,SSL 证书验证将保持启用。');
|
|
297
|
+
}
|
|
298
|
+
this._verifySsl = opts.verifySsl === false ? true : (opts.verifySsl ?? true);
|
|
300
299
|
this._keystore = new IndexedDBKeyStore({ encryptionSeed: this._encryptionSeed || undefined });
|
|
301
300
|
this._crypto = new CryptoProvider();
|
|
302
301
|
this._discovery = new GatewayDiscovery();
|