@agentunion/fastaun 0.2.20 → 0.3.1
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 +63 -23
- package/_packed_docs/CHANGELOG.md +63 -23
- package/_packed_docs/design/2026-05-22-aun-rpc-trace-enhancement.md +542 -0
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +1 -24
- 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 -0
- package/_packed_docs/protocol/index.md +13 -3
- package/_packed_docs/python-sdk-v2-only-changelog.md +189 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +39 -16
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +131 -39
- package/_packed_docs/sdk/09-message-rpc-manual.md +30 -67
- package/dist/auth.js +26 -7
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +117 -166
- package/dist/client.js +2130 -3419
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +0 -4
- package/dist/config.js +0 -4
- package/dist/config.js.map +1 -1
- package/dist/e2ee.d.ts +5 -139
- package/dist/e2ee.js +4 -1151
- package/dist/e2ee.js.map +1 -1
- package/dist/errors.d.ts +0 -8
- package/dist/errors.js +0 -14
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/keystore/aid-db.d.ts +12 -61
- package/dist/keystore/aid-db.js +41 -539
- package/dist/keystore/aid-db.js.map +1 -1
- package/dist/keystore/file.d.ts +5 -41
- package/dist/keystore/file.js +8 -64
- package/dist/keystore/file.js.map +1 -1
- package/dist/keystore/index.d.ts +1 -49
- package/dist/namespaces/auth.d.ts +8 -0
- package/dist/namespaces/auth.js +169 -2
- package/dist/namespaces/auth.js.map +1 -1
- package/dist/protected-headers.d.ts +13 -0
- package/dist/protected-headers.js +47 -0
- package/dist/protected-headers.js.map +1 -0
- package/dist/seq-tracker.d.ts +7 -2
- package/dist/seq-tracker.js +33 -13
- package/dist/seq-tracker.js.map +1 -1
- package/dist/transport.d.ts +11 -1
- package/dist/transport.js +255 -6
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +0 -56
- package/dist/v2/crypto/aead.d.ts +20 -0
- package/dist/v2/crypto/aead.js +59 -0
- package/dist/v2/crypto/aead.js.map +1 -0
- package/dist/v2/crypto/canonical.d.ts +20 -0
- package/dist/v2/crypto/canonical.js +119 -0
- package/dist/v2/crypto/canonical.js.map +1 -0
- package/dist/v2/crypto/dh-path.d.ts +39 -0
- package/dist/v2/crypto/dh-path.js +55 -0
- package/dist/v2/crypto/dh-path.js.map +1 -0
- package/dist/v2/crypto/ecdh.d.ts +29 -0
- package/dist/v2/crypto/ecdh.js +122 -0
- package/dist/v2/crypto/ecdh.js.map +1 -0
- package/dist/v2/crypto/ecdsa.d.ts +29 -0
- package/dist/v2/crypto/ecdsa.js +120 -0
- package/dist/v2/crypto/ecdsa.js.map +1 -0
- package/dist/v2/crypto/hkdf.d.ts +19 -0
- package/dist/v2/crypto/hkdf.js +47 -0
- package/dist/v2/crypto/hkdf.js.map +1 -0
- package/dist/v2/crypto/index.d.ts +8 -0
- package/dist/v2/crypto/index.js +8 -0
- package/dist/v2/crypto/index.js.map +1 -0
- package/dist/v2/crypto/recipients.d.ts +32 -0
- package/dist/v2/crypto/recipients.js +183 -0
- package/dist/v2/crypto/recipients.js.map +1 -0
- package/dist/v2/e2ee/decrypt.d.ts +29 -0
- package/dist/v2/e2ee/decrypt.js +159 -0
- package/dist/v2/e2ee/decrypt.js.map +1 -0
- package/dist/v2/e2ee/encrypt-group.d.ts +17 -0
- package/dist/v2/e2ee/encrypt-group.js +143 -0
- package/dist/v2/e2ee/encrypt-group.js.map +1 -0
- package/dist/v2/e2ee/encrypt-p2p.d.ts +31 -0
- package/dist/v2/e2ee/encrypt-p2p.js +190 -0
- package/dist/v2/e2ee/encrypt-p2p.js.map +1 -0
- package/dist/v2/e2ee/index.d.ts +9 -0
- package/dist/v2/e2ee/index.js +9 -0
- package/dist/v2/e2ee/index.js.map +1 -0
- package/dist/v2/e2ee/metadata-auth.d.ts +15 -0
- package/dist/v2/e2ee/metadata-auth.js +50 -0
- package/dist/v2/e2ee/metadata-auth.js.map +1 -0
- package/dist/v2/e2ee/types.d.ts +57 -0
- package/dist/v2/e2ee/types.js +7 -0
- package/dist/v2/e2ee/types.js.map +1 -0
- package/dist/v2/session/index.d.ts +4 -0
- package/dist/v2/session/index.js +3 -0
- package/dist/v2/session/index.js.map +1 -0
- package/dist/v2/session/keystore.d.ts +50 -0
- package/dist/v2/session/keystore.js +138 -0
- package/dist/v2/session/keystore.js.map +1 -0
- package/dist/v2/session/session.d.ts +124 -0
- package/dist/v2/session/session.js +318 -0
- package/dist/v2/session/session.js.map +1 -0
- package/dist/v2/state/commitment.d.ts +58 -0
- package/dist/v2/state/commitment.js +85 -0
- package/dist/v2/state/commitment.js.map +1 -0
- package/dist/v2/state/index.d.ts +2 -0
- package/dist/v2/state/index.js +2 -0
- package/dist/v2/state/index.js.map +1 -0
- package/package.json +4 -3
package/dist/client.d.ts
CHANGED
|
@@ -6,12 +6,11 @@
|
|
|
6
6
|
* - 连接/断线重连/关闭
|
|
7
7
|
* - RPC 调用(含 E2EE 自动加解密编排)
|
|
8
8
|
* - 事件自动解密管线(P2P + 群组)
|
|
9
|
-
* - 后台任务(心跳、token 刷新、
|
|
9
|
+
* - 后台任务(心跳、token 刷新、V2 bootstrap 缓存清理)
|
|
10
10
|
* - 客户端签名(关键操作)
|
|
11
11
|
* - 群组 E2EE 全自动编排(建群/加人/踢人/退出)
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
14
|
-
import { GroupE2EEManager } from './e2ee-group.js';
|
|
13
|
+
import type { ProtectedHeadersInput } from './protected-headers.js';
|
|
15
14
|
import { type Subscription, type EventHandler } from './events.js';
|
|
16
15
|
import { AuthNamespace } from './namespaces/auth.js';
|
|
17
16
|
import { CustodyNamespace } from './namespaces/custody.js';
|
|
@@ -51,10 +50,6 @@ export declare class AUNClient {
|
|
|
51
50
|
private _auth;
|
|
52
51
|
/** 密钥存储 */
|
|
53
52
|
private _keystore;
|
|
54
|
-
/** E2EE 管理器 */
|
|
55
|
-
private _e2ee;
|
|
56
|
-
/** 群组 E2EE 管理器 */
|
|
57
|
-
private _groupE2ee;
|
|
58
53
|
/** Auth 命名空间 */
|
|
59
54
|
readonly auth: AuthNamespace;
|
|
60
55
|
/** AID 托管命名空间 */
|
|
@@ -73,10 +68,6 @@ export declare class AUNClient {
|
|
|
73
68
|
private _defaultConnectDeliveryMode;
|
|
74
69
|
/** peer 证书缓存 */
|
|
75
70
|
private _certCache;
|
|
76
|
-
private _peerPrekeysCache;
|
|
77
|
-
private _prekeyReplenishInflight;
|
|
78
|
-
private _prekeyReplenished;
|
|
79
|
-
private _activePrekeyId;
|
|
80
71
|
private _localAgentMdPath;
|
|
81
72
|
private _localAgentMdEtag;
|
|
82
73
|
private _remoteAgentMdEtag;
|
|
@@ -91,20 +82,31 @@ export declare class AUNClient {
|
|
|
91
82
|
private _pushedSeqs;
|
|
92
83
|
/** 已解密但因 seq 空洞暂缓发布的应用层消息(按 namespace -> seq) */
|
|
93
84
|
private _pendingOrderedMsgs;
|
|
94
|
-
private _pendingDecryptMsgs;
|
|
95
|
-
private _groupEpochRotationInflight;
|
|
96
|
-
private _groupEpochRecoveryInflight;
|
|
97
|
-
private _groupMembershipRotationDone;
|
|
98
|
-
/** 群密钥 backfill 去重:已完成/进行中的 key 集合,防止重复分发 */
|
|
99
|
-
private _groupMemberKeyBackfillDone;
|
|
100
|
-
private _groupEpochRotationRetryTimers;
|
|
101
85
|
private _heartbeatTimer;
|
|
102
86
|
private _tokenRefreshTimer;
|
|
103
87
|
private _tokenRefreshFailures;
|
|
104
|
-
private _prekeyRefreshTimer;
|
|
105
|
-
private _groupEpochCleanupTimer;
|
|
106
|
-
private _groupEpochRotateTimer;
|
|
107
88
|
private _cacheCleanupTimer;
|
|
89
|
+
private _v2Session?;
|
|
90
|
+
private _v2KeyStore?;
|
|
91
|
+
/** V2 bootstrap 缓存:aid/group:id → 设备列表 + 时间戳 */
|
|
92
|
+
private _v2BootstrapCache;
|
|
93
|
+
private _connectCapabilities;
|
|
94
|
+
private _v2SigCache;
|
|
95
|
+
private _v2StateChains;
|
|
96
|
+
private _v2GroupSecurityLevels;
|
|
97
|
+
/** 同一 group 的 V2 自动提案串行化,避免并发重复提交同一 state_version。 */
|
|
98
|
+
private _v2AutoProposeInflight;
|
|
99
|
+
/** 同一 group 在运行中的自动提案期间收到的新触发,结束后至多再补跑一次。 */
|
|
100
|
+
private _v2AutoProposePending;
|
|
101
|
+
/** 最近一次已成功提交的 membership_snapshot;相同快照直接跳过。 */
|
|
102
|
+
private _v2AutoProposeLastSnapshot;
|
|
103
|
+
private _v2LazyProposeTriggered;
|
|
104
|
+
private _v2PullInflight;
|
|
105
|
+
private _v2PullPending;
|
|
106
|
+
private static readonly V2_BOOTSTRAP_TTL_MS;
|
|
107
|
+
private static readonly V2_RETRYABLE_CODES;
|
|
108
|
+
private static readonly V2_SIG_CACHE_TTL_MS;
|
|
109
|
+
private static readonly V2_SIG_CACHE_MAX;
|
|
108
110
|
private _reconnectActive;
|
|
109
111
|
private _reconnectAbort;
|
|
110
112
|
private _serverKicked;
|
|
@@ -115,6 +117,21 @@ export declare class AUNClient {
|
|
|
115
117
|
constructor(config?: RpcParams, debug?: boolean);
|
|
116
118
|
/** 当前 AID */
|
|
117
119
|
get aid(): string | null;
|
|
120
|
+
/**
|
|
121
|
+
* 读取本地 agent.md,签名后上传,并刷新本地 etag。
|
|
122
|
+
*/
|
|
123
|
+
publishAgentMd(path: string): Promise<Record<string, unknown>>;
|
|
124
|
+
/**
|
|
125
|
+
* 下载 agent.md 并自动验签;可选写盘;目标是自身 AID 时刷新本地 etag。
|
|
126
|
+
*/
|
|
127
|
+
fetchAgentMd(aid?: string | null, savePath?: string | null): Promise<{
|
|
128
|
+
aid: string;
|
|
129
|
+
content: string;
|
|
130
|
+
signature: Record<string, unknown>;
|
|
131
|
+
in_sync: boolean | null;
|
|
132
|
+
saved_to: string | null;
|
|
133
|
+
save_error: string | null;
|
|
134
|
+
}>;
|
|
118
135
|
/**
|
|
119
136
|
* 记录本地 agent.md 文件路径并一次性计算 etag(quoted sha256,与服务端一致)。
|
|
120
137
|
*
|
|
@@ -139,10 +156,6 @@ export declare class AUNClient {
|
|
|
139
156
|
private _observeRpcMeta;
|
|
140
157
|
/** 连接状态 */
|
|
141
158
|
get state(): string;
|
|
142
|
-
/** E2EE 管理器 */
|
|
143
|
-
get e2ee(): E2EEManager;
|
|
144
|
-
/** 群组 E2EE 管理器 */
|
|
145
|
-
get groupE2ee(): GroupE2EEManager;
|
|
146
159
|
/** 最近一次 gateway health check 结果,null 表示尚未检查 */
|
|
147
160
|
get gatewayHealth(): boolean | null;
|
|
148
161
|
/** 向 gatewayUrl 的 /health 端点发送 GET 请求,检查网关可用性 */
|
|
@@ -184,35 +197,6 @@ export declare class AUNClient {
|
|
|
184
197
|
/** P2-13: 取消订阅事件(对齐 Python/JS off 方法) */
|
|
185
198
|
off(event: string, handler: EventHandler): void;
|
|
186
199
|
private _protectedHeadersFromParams;
|
|
187
|
-
/** 自动加密并发送 P2P 消息 */
|
|
188
|
-
private _sendEncrypted;
|
|
189
|
-
private _buildRecipientDeviceCopies;
|
|
190
|
-
private _resolveSelfCopyPeerCert;
|
|
191
|
-
private _buildSelfSyncCopies;
|
|
192
|
-
private _encryptCopyPayload;
|
|
193
|
-
private _ensureEncryptResult;
|
|
194
|
-
/** 自动加密并发送群组消息 */
|
|
195
|
-
private _sendGroupEncrypted;
|
|
196
|
-
private _putGroupThoughtEncrypted;
|
|
197
|
-
private _putMessageThoughtEncrypted;
|
|
198
|
-
private _callGroupEncryptedRpc;
|
|
199
|
-
private _prepareGroupEncryptedRpcParams;
|
|
200
|
-
/** 惰性同步:首次激活群时 pull 最近消息,建立 seq 基线 */
|
|
201
|
-
private _lazySyncGroup;
|
|
202
|
-
private _isGroupEpochTooOldError;
|
|
203
|
-
private _isGroupEpochRotationPendingError;
|
|
204
|
-
private _isGroupEpochChangedDuringSendError;
|
|
205
|
-
private _isRecoverableGroupEpochError;
|
|
206
|
-
private _groupKeyRecoveryCandidates;
|
|
207
|
-
private _requestGroupKeyFrom;
|
|
208
|
-
private _requestGroupKeyFromCandidates;
|
|
209
|
-
private _recoverInitialGroupEpochIfNeeded;
|
|
210
|
-
private _ensureGroupEpochReady;
|
|
211
|
-
private _waitForGroupMembershipEpochFloor;
|
|
212
|
-
private _committedGroupEpochState;
|
|
213
|
-
private _groupSecretMatchesCommittedRotation;
|
|
214
|
-
private _ensureCommittedGroupSecretForSend;
|
|
215
|
-
private _committedRotationMembershipGap;
|
|
216
200
|
/**
|
|
217
201
|
* 为关键操作附加客户端 ECDSA 签名(client_signature 字段)。
|
|
218
202
|
* 签名覆盖所有非 _ 前缀且非 client_signature 的业务字段。
|
|
@@ -237,7 +221,7 @@ export declare class AUNClient {
|
|
|
237
221
|
private _fillGroupGap;
|
|
238
222
|
/** 后台补齐 P2P 消息空洞 */
|
|
239
223
|
private _fillP2pGap;
|
|
240
|
-
/**
|
|
224
|
+
/** 只按硬上限裁剪 published guard,不能按 contiguousSeq 清理。 */
|
|
241
225
|
private _prunePushedSeqs;
|
|
242
226
|
private _markPublishedSeq;
|
|
243
227
|
private _enqueueOrderedMessage;
|
|
@@ -252,15 +236,9 @@ export declare class AUNClient {
|
|
|
252
236
|
private _messageTargetsCurrentInstance;
|
|
253
237
|
private _drainOrderedMessages;
|
|
254
238
|
private _publishOrderedMessage;
|
|
239
|
+
private _publishPulledMessage;
|
|
255
240
|
/** 后台补齐群事件空洞 */
|
|
256
241
|
private _fillGroupEventGap;
|
|
257
|
-
/**
|
|
258
|
-
* 处理群组变更事件:透传给用户,并在成员离开/被踢时自动触发 epoch 轮换。
|
|
259
|
-
* 按协议,轮换由剩余在线 admin/owner 负责。
|
|
260
|
-
*/
|
|
261
|
-
private _membershipRotationExpectedEpoch;
|
|
262
|
-
private _membershipRotationTriggerId;
|
|
263
|
-
private _membershipRotationChanged;
|
|
264
242
|
private _extractGroupIdFromResult;
|
|
265
243
|
private _onRawGroupChanged;
|
|
266
244
|
/**
|
|
@@ -268,17 +246,7 @@ export declare class AUNClient {
|
|
|
268
246
|
* 当链断裂时回源 group.get_state,并对回源结果做本地 hash 重算验证。
|
|
269
247
|
*/
|
|
270
248
|
private _onGroupStateCommitted;
|
|
271
|
-
/**
|
|
272
|
-
* 成员退出/被踢后,判断本地是否为 leader admin 并发起 epoch 轮换。
|
|
273
|
-
* 避免所有剩余 admin 同时触发 `_rotateGroupEpoch` 造成 CAS 风暴。
|
|
274
|
-
*/
|
|
275
|
-
private _maybeLeadRotateGroupEpoch;
|
|
276
|
-
/**
|
|
277
|
-
* 群组解散后清理本地状态:
|
|
278
|
-
* - keystore 中的 epoch key 数据
|
|
279
|
-
* - seq_tracker 中的群消息和群事件 seq 记录
|
|
280
|
-
* - 补洞去重缓存中的相关条目
|
|
281
|
-
*/
|
|
249
|
+
/** 群组解散后清理本地 V2 缓存、seq_tracker 和补洞去重缓存。 */
|
|
282
250
|
private _cleanupDissolvedGroup;
|
|
283
251
|
/** 同步验签群事件 client_signature。返回 true/false/"pending"。 */
|
|
284
252
|
/**
|
|
@@ -288,100 +256,15 @@ export declare class AUNClient {
|
|
|
288
256
|
* 并触发 `signature_pending` 事件让上层感知。
|
|
289
257
|
*/
|
|
290
258
|
private _verifyEventSignatureAsync;
|
|
291
|
-
/** 尝试处理 P2P 传输的群组密钥消息。返回 true 表示已处理(不再传播)。 */
|
|
292
|
-
private _tryHandleGroupKeyMessage;
|
|
293
259
|
/**
|
|
260
|
+
* 获取对方证书(带缓存 + 完整 PKI 验证)。 /**
|
|
294
261
|
* 获取对方证书(带缓存 + 完整 PKI 验证)。
|
|
295
262
|
* 跨域时自动路由到 peer 所在域的 Gateway。
|
|
296
263
|
*/
|
|
297
264
|
private _fetchPeerCert;
|
|
298
|
-
/** 获取对方所有设备的 prekey 列表。 */
|
|
299
|
-
private _fetchPeerPrekeys;
|
|
300
|
-
/** 获取对方的单个 prekey(兼容接口,优先返回第一条 device prekey)。 */
|
|
301
|
-
private _fetchPeerPrekey;
|
|
302
|
-
/** 清除对端 prekey 的双层缓存(_peerPrekeysCache + e2ee 内部缓存) */
|
|
303
|
-
private _invalidatePeerPrekeyCache;
|
|
304
|
-
/** 清除对端证书缓存(精确匹配 aid 或 aid# 前缀的所有条目) */
|
|
305
|
-
private _clearPeerCertCache;
|
|
306
|
-
/** 清除对端所有缓存后重新拉取 prekey(用于指纹不匹配时的强制刷新) */
|
|
307
|
-
private _refreshPeerPrekeys;
|
|
308
|
-
/** 生成 prekey 并上传到服务端 */
|
|
309
|
-
private _uploadPrekey;
|
|
310
|
-
/**
|
|
311
|
-
* 确保发送方证书在本地 keystore 中可用且未过期。
|
|
312
|
-
* 返回 true 表示证书已就绪(PKI 验证通过),false 表示不可用。
|
|
313
|
-
*/
|
|
314
|
-
private _ensureSenderCertCached;
|
|
315
|
-
/**
|
|
316
|
-
* 获取经过 PKI 验证的 peer 证书(仅信任内存缓存中已验证的证书)。
|
|
317
|
-
* 零信任:不直接信任 keystore 中可能由恶意服务端注入的证书。
|
|
318
|
-
*/
|
|
319
|
-
private _getVerifiedPeerCert;
|
|
320
|
-
/** 解密单条 P2P 消息 */
|
|
321
|
-
private _decryptSingleMessage;
|
|
322
|
-
/** 批量解密 P2P 消息(用于 message.pull) */
|
|
323
|
-
private _decryptMessages;
|
|
324
|
-
/** 解密单条群组消息。opts.skipReplay 用于 group.pull 场景跳过防重放。 */
|
|
325
|
-
private _enqueuePendingDecrypt;
|
|
326
|
-
private _retryPendingDecryptMsgs;
|
|
327
|
-
/**
|
|
328
|
-
* recovery 兜底定时:N 秒后如果 pending queue 仍有未解开消息,强制推进 cursor。
|
|
329
|
-
* 同一 group 短时间内只调度一次。
|
|
330
|
-
*/
|
|
331
|
-
private _recoveryTimeoutScheduled;
|
|
332
|
-
private _scheduleRecoveryTimeout;
|
|
333
|
-
private _scheduleRetryPendingDecryptMsgs;
|
|
334
|
-
private _recoverGroupEpochKey;
|
|
335
|
-
private static _extractGroupJoinMode;
|
|
336
|
-
private static _joinModeAllowsMemberEpochRotation;
|
|
337
|
-
private _groupAllowsMemberEpochRotation;
|
|
338
|
-
/** 尝试从服务端拉取 ECIES 加密的 epoch key 并解密存入 keystore */
|
|
339
|
-
private _tryRecoverEpochKeyFromServer;
|
|
340
|
-
/** 为每个成员用其 AID 证书公钥 ECIES 加密 group_secret,返回 {aid: base64_ciphertext} */
|
|
341
|
-
private _buildEpochEncryptedKeys;
|
|
342
|
-
private _doRecoverGroupEpochKey;
|
|
343
|
-
/** 只向在线成员发送密钥恢复请求 */
|
|
344
|
-
private _requestGroupKeyFromOnline;
|
|
345
|
-
private _groupEpochSecretReadyForRecovery;
|
|
346
|
-
private _pendingGroupSecretStillCurrent;
|
|
347
|
-
private _decryptGroupMessage;
|
|
348
|
-
private _attachGroupDispatchModeToPayload;
|
|
349
|
-
/** 批量解密群组消息(用于 group.pull,跳过防重放) */
|
|
350
|
-
private _decryptGroupMessages;
|
|
351
265
|
private _decryptGroupThoughts;
|
|
352
266
|
private _decryptMessageThoughts;
|
|
353
|
-
|
|
354
|
-
private _getGroupMemberAids;
|
|
355
|
-
private _distributeGroupEpochKey;
|
|
356
|
-
private _heartbeatGroupRotation;
|
|
357
|
-
private _ackGroupRotationKey;
|
|
358
|
-
private _verifyActiveGroupRotationDistribution;
|
|
359
|
-
private _discardGroupDistributionIfStale;
|
|
360
|
-
private _verifyGroupKeyResponseEpoch;
|
|
361
|
-
private _abortGroupRotation;
|
|
362
|
-
private _rotationExpectedMembersStale;
|
|
363
|
-
private _rotationRetryDelayMs;
|
|
364
|
-
private _scheduleGroupRotationRetry;
|
|
365
|
-
/** 建群后将本地 epoch 1 同步到服务端(服务端初始为 0),最多重试 3 次 */
|
|
366
|
-
private _syncEpochToServer;
|
|
367
|
-
/**
|
|
368
|
-
* 为指定群组轮换 epoch 并分发新密钥。
|
|
369
|
-
* 使用服务端两阶段 rotation,避免服务端先提交但密钥未分发。
|
|
370
|
-
*/
|
|
371
|
-
private _rotateGroupEpoch;
|
|
372
|
-
/** 将当前 group_secret 通过 P2P E2EE 分发给新成员 */
|
|
373
|
-
private _distributeKeyToNewMember;
|
|
374
|
-
/** 从成员加入事件 payload 中提取新加入的成员 AID 列表。 */
|
|
375
|
-
private _joinedMemberAidsFromPayload;
|
|
376
|
-
/** 延迟轮换等待时间(毫秒):给新成员恢复 committed_epoch 的窗口 */
|
|
377
|
-
private static readonly _JOIN_ROTATION_DELAY_MS;
|
|
378
|
-
private static readonly _SELF_JOIN_ROTATION_DELAY_MS;
|
|
379
|
-
/** open/invite_code 入群后延迟轮换。 */
|
|
380
|
-
private _delayedRotateAfterJoin;
|
|
381
|
-
/** 当新成员加入但缺少 old_epoch 时,将当前 epoch 密钥分发给新成员。 */
|
|
382
|
-
private _maybeBackfillKeyToJoinedMember;
|
|
383
|
-
private _buildRotationSignature;
|
|
384
|
-
/** 从 keystore 恢复 SeqTracker 状态 */
|
|
267
|
+
/** 从 keystore 恢复 SeqTracker 状态 */ /** 从 keystore 恢复 SeqTracker 状态 */
|
|
385
268
|
private _restoreSeqTrackerState;
|
|
386
269
|
/**
|
|
387
270
|
* 把 seq_tracker state 里 group_event:/group_msg: 前缀的老/污染 group_id 归一化为 canonical。
|
|
@@ -402,6 +285,78 @@ export declare class AUNClient {
|
|
|
402
285
|
private static _buildCertUrl;
|
|
403
286
|
/** 执行一次连接流程 */
|
|
404
287
|
private _connectOnce;
|
|
288
|
+
/** 记录当前 connect 声明的 E2EE 能力;缺失时按 SDK 默认能力(V2)处理。 */
|
|
289
|
+
private _captureCapabilitiesFromConnect;
|
|
290
|
+
/** 当前连接是否按 V2 P2P E2EE 处理;未声明 capabilities 时视同支持 V2。 */
|
|
291
|
+
private _clientUsesV2P2P;
|
|
292
|
+
/** 当前连接是否按 V2 Group E2EE 处理;未声明 capabilities 时视同支持 V2。 */
|
|
293
|
+
private _clientUsesV2Group;
|
|
294
|
+
/** 后台 Promise 统一兜底,避免事件回调里的异步异常变成未处理拒绝。 */
|
|
295
|
+
private _safeAsync;
|
|
296
|
+
/** V2-only:所有加密入口都必须有 V2 session。 */
|
|
297
|
+
private _ensureV2SessionReady;
|
|
298
|
+
private _v2CallFn;
|
|
299
|
+
/**
|
|
300
|
+
* 初始化 V2 session:IK 使用 AID 长期私钥,SPK 存储在 per-AID SQLite 的 v2_device_keys 表。
|
|
301
|
+
* connect 成功后会自动调用;重复调用幂等。
|
|
302
|
+
*/
|
|
303
|
+
initV2Session(): Promise<void>;
|
|
304
|
+
private _getV2SenderPubDer;
|
|
305
|
+
/**
|
|
306
|
+
* 构造 V2 P2P envelope;message.send 与 message.thought.put 共用。
|
|
307
|
+
*/
|
|
308
|
+
private _buildV2P2PEnvelope;
|
|
309
|
+
/** V2 P2P 加密发送,推测性缓存失败后刷新 bootstrap 重试一次。 */
|
|
310
|
+
sendV2(to: string, payload: Record<string, unknown>, opts?: {
|
|
311
|
+
messageId?: string;
|
|
312
|
+
timestamp?: number;
|
|
313
|
+
protectedHeaders?: ProtectedHeadersInput;
|
|
314
|
+
context?: Record<string, unknown>;
|
|
315
|
+
}): Promise<unknown>;
|
|
316
|
+
/** V2 P2P 拉取并解密;直接方法返回消息数组,call("message.pull") 会包装为 {messages}. */
|
|
317
|
+
pullV2(afterSeq?: number, limit?: number): Promise<Array<Record<string, unknown>>>;
|
|
318
|
+
/** V2 P2P ack,并触发旧 SPK 销毁自检。 */
|
|
319
|
+
ackV2(upToSeq?: number): Promise<unknown>;
|
|
320
|
+
/** V2 Group 加密发送,推测性缓存失败后刷新 bootstrap 重试一次。 */
|
|
321
|
+
sendGroupV2(groupId: string, payload: Record<string, unknown>, opts?: {
|
|
322
|
+
messageId?: string;
|
|
323
|
+
timestamp?: number;
|
|
324
|
+
protectedHeaders?: ProtectedHeadersInput;
|
|
325
|
+
context?: Record<string, unknown>;
|
|
326
|
+
}): Promise<unknown>;
|
|
327
|
+
/** 构造 V2 Group envelope;group.send 与 group.thought.put 共用。 */
|
|
328
|
+
private _buildV2GroupEnvelope;
|
|
329
|
+
private _pullGroupV2Internal;
|
|
330
|
+
/** V2 Group 拉取并解密;直接方法返回消息数组,call("group.pull") 会包装为 {messages}. */
|
|
331
|
+
pullGroupV2(groupId: string, afterSeq?: number, limit?: number): Promise<Array<Record<string, unknown>>>;
|
|
332
|
+
/** V2 Group ack。 */
|
|
333
|
+
ackGroupV2(groupId: string, upToSeq?: number): Promise<unknown>;
|
|
334
|
+
/** 解密单条 V2 pull 消息。失败返回 null 并发布 undecryptable。 */
|
|
335
|
+
private _decryptV2Message;
|
|
336
|
+
private _putMessageThoughtEncryptedV2;
|
|
337
|
+
private _putGroupThoughtEncryptedV2;
|
|
338
|
+
/** 解密 thought 中直接透传的 V2 envelope。 */
|
|
339
|
+
private _decryptV2EnvelopeForThought;
|
|
340
|
+
private _publishV2GroupSecurityLevel;
|
|
341
|
+
private _v2VerifyStateSignature;
|
|
342
|
+
private _v2CheckFork;
|
|
343
|
+
private _v2MaybeTriggerAutoPropose;
|
|
344
|
+
private _v2AutoProposeState;
|
|
345
|
+
private _v2LeaderDelayMs;
|
|
346
|
+
private _v2AutoProposeLeaderDelay;
|
|
347
|
+
private _v2VerifyCommittedStateBase;
|
|
348
|
+
private _doV2AutoProposeState;
|
|
349
|
+
private _v2VerifyPendingProposalAgainstBase;
|
|
350
|
+
private _v2ConfirmPendingProposal;
|
|
351
|
+
private _v2AutoConfirmPendingProposals;
|
|
352
|
+
private _onV2PushNotification;
|
|
353
|
+
private _onV2StateProposed;
|
|
354
|
+
private _onV2StateRetryNeeded;
|
|
355
|
+
private _onV2StateConfirmed;
|
|
356
|
+
private _onRawGroupV2MessageCreated;
|
|
357
|
+
/** Push 通知带 payload 时的就地解密(复用 _decryptV2Message) */
|
|
358
|
+
private _decryptV2PushMessage;
|
|
359
|
+
private _onV2EpochRotated;
|
|
405
360
|
/** 从参数中解析 Gateway URL */
|
|
406
361
|
private _resolveGateway;
|
|
407
362
|
/** 连接后同步身份信息 */
|
|
@@ -420,16 +375,12 @@ export declare class AUNClient {
|
|
|
420
375
|
private _applyServerHeartbeatInterval;
|
|
421
376
|
/** 启动 token 刷新任务 */
|
|
422
377
|
private _startTokenRefreshTask;
|
|
423
|
-
/** 启动 prekey 刷新任务 */
|
|
424
|
-
private _startPrekeyRefreshTask;
|
|
425
|
-
private _extractConsumedPrekeyId;
|
|
426
378
|
private _validateMessageRecipient;
|
|
427
379
|
private _validateOutboundCall;
|
|
428
380
|
private _currentMessageDeliveryMode;
|
|
429
381
|
private _injectMessageCursorContext;
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
private _startGroupEpochTasks;
|
|
382
|
+
/** 启动 V2 缓存清理后台任务 */
|
|
383
|
+
private _startV2MaintenanceTasks;
|
|
433
384
|
/** 允许 Node.js 进程在只剩定时器时退出 */
|
|
434
385
|
private _unrefTimer;
|
|
435
386
|
/** 不重连 close code 集合:认证失败/权限错误/被踢等,重连无意义 */
|