@agentunion/fastaun-browser 0.4.12 → 0.5.0
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 +480 -359
- package/_packed_docs/CHANGELOG.md +480 -359
- package/_packed_docs/INDEX.md +111 -53
- package/_packed_docs/KITE_DOCS_GUIDE.md +43 -29
- package/_packed_docs/agent.md/SCHEMA.md +2 -0
- package/_packed_docs/agent.md/examples/codeagent-claudecode.md +2 -0
- package/_packed_docs/agent.md/examples/human-developer.md +2 -0
- package/_packed_docs/agent.md/examples/openclaw-lobster.md +2 -0
- package/_packed_docs/agent.md/examples/signed-openclaw-lobster.md +2 -0
- 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 +2 -0
- package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +265 -686
- package/_packed_docs/collab-gateway-boundary-test-report.md +164 -0
- package/_packed_docs/design/2026-05-22-aun-rpc-trace-enhancement.md +2 -0
- package/_packed_docs/design/AUNClient/346/213/206/345/210/206/351/207/215/346/236/204/346/211/247/350/241/214/346/226/271/346/241/210.md +2 -0
- 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 +2 -0
- 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 +2 -0
- package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +2 -0
- package/_packed_docs/protocol/00A-/350/256/276/350/256/241/345/216/237/345/210/231-/344/270/272Agent/350/200/214/347/224/237.md +2 -0
- 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 -0
- package/_packed_docs/protocol/02-/350/257/201/344/271/246/344/270/216/344/277/241/344/273/273/344/275/223/347/263/273.md +2 -0
- package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +2 -0
- package/_packed_docs/protocol/04-Peer-/345/255/220/345/215/217/350/256/256.md +2 -0
- package/_packed_docs/protocol/05-Relay-/345/255/220/345/215/217/350/256/256.md +2 -0
- package/_packed_docs/protocol/07-/351/224/231/350/257/257/347/240/201/344/270/216/347/212/266/346/200/201/346/234/272.md +2 -0
- package/_packed_docs/protocol/08-AUN-E2EE-Group.md +2 -0
- package/_packed_docs/protocol/08-AUN-E2EE.md +2 -0
- package/_packed_docs/protocol/09-/345/256/211/345/205/250/350/200/203/350/231/221.md +2 -0
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +28 -85
- package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +49 -0
- package/_packed_docs/protocol/12-Stream-/345/255/220/345/215/217/350/256/256.md +2 -0
- package/_packed_docs/protocol/13-Agent/350/241/214/344/270/272/350/247/204/350/214/203.md +2 -0
- 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 +2 -0
- 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 +2 -0
- package/_packed_docs/protocol/README.md +2 -0
- package/_packed_docs/protocol/agent.md/SCHEMA.md +2 -0
- package/_packed_docs/protocol/agent.md/examples/codeagent-claudecode.md +2 -0
- package/_packed_docs/protocol/agent.md/examples/human-developer.md +2 -0
- package/_packed_docs/protocol/agent.md/examples/openclaw-lobster.md +2 -0
- package/_packed_docs/protocol/aun-docs-guide.md +2 -0
- package/_packed_docs/protocol/index.md +3 -1
- package/_packed_docs/protocol//350/215/211/346/241/210-agent.md/347/255/276/345/220/215/345/215/217/350/256/256.md +2 -0
- package/_packed_docs/protocol//350/215/211/346/241/210-/346/213/222/347/273/235/344/277/241/345/217/267/345/215/217/350/256/256.md +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +2 -0
- 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 +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225C-/347/247/201/351/222/245/347/256/241/347/220/206/344/270/216/350/272/253/344/273/275/346/201/242/345/244/215.md +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225D-Root_CA_/346/262/273/347/220/206/346/234/272/345/210/266.md +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225E-Root_CA_/345/207/206/345/205/245/346/265/201/347/250/213.md +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225F-Issuer_CA_/347/224/263/350/257/267/346/265/201/347/250/213.md +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225G-AID_/345/255/244/345/204/277/351/242/204/351/230/262/344/270/216/346/225/221/346/217/264/346/234/272/345/210/266.md +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225H-Identity/346/234/215/345/212/241/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225I-/350/267/250/345/237/237/346/266/210/346/201/257/350/267/257/347/224/261/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
- 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 +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225K-Agent_Web/345/217/221/347/216/260/345/215/217/350/256/256.md +2 -0
- package/_packed_docs/protocol//351/231/204/345/275/225L-E2EE/345/256/236/347/216/260/346/214/207/345/215/227.md +2 -0
- 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 +2 -0
- 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 +2 -0
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +2 -0
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +2 -0
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +2 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +2 -0
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +2 -0
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +283 -267
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +4 -1
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +2 -0
- package/_packed_docs/sdk/09-collab-rpc-manual.md +550 -0
- package/_packed_docs/sdk/09-custody-api-manual.md +2 -0
- package/_packed_docs/sdk/09-group-rpc-manual.md +197 -445
- package/_packed_docs/sdk/09-message-rpc-manual.md +8 -7
- package/_packed_docs/sdk/09-meta-rpc-manual.md +2 -0
- package/_packed_docs/sdk/09-payload-reference.md +2 -0
- package/_packed_docs/sdk/09-proxy-rpc-manual.md +2 -0
- package/_packed_docs/sdk/09-storage-rpc-manual.md +952 -279
- package/_packed_docs/sdk/09-stream-rpc-manual.md +2 -0
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +33 -20
- 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 +2 -0
- package/_packed_docs/sdk/INDEX.md +46 -29
- package/_packed_docs/sdk/Notify/351/200/232/347/237/245/346/226/271/346/241/210.md +2 -0
- package/_packed_docs/sdk/README.md +17 -15
- package/dist/aid-store.d.ts +25 -0
- package/dist/aid-store.d.ts.map +1 -1
- package/dist/aid-store.js +89 -8
- package/dist/aid-store.js.map +1 -1
- package/dist/auth.d.ts +2 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +98 -9
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +19156 -16554
- package/dist/client/delivery.d.ts +5 -0
- package/dist/client/delivery.d.ts.map +1 -1
- package/dist/client/delivery.js +169 -15
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts +1 -0
- package/dist/client/rpc-pipeline.d.ts.map +1 -1
- package/dist/client/rpc-pipeline.js +76 -34
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts.map +1 -1
- package/dist/client/v2-e2ee.js +67 -8
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +31 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +313 -23
- package/dist/client.js.map +1 -1
- package/dist/collab/client.d.ts +39 -0
- package/dist/collab/client.d.ts.map +1 -0
- package/dist/collab/client.js +124 -0
- package/dist/collab/client.js.map +1 -0
- package/dist/collab/errors.d.ts +16 -0
- package/dist/collab/errors.d.ts.map +1 -0
- package/dist/collab/errors.js +60 -0
- package/dist/collab/errors.js.map +1 -0
- package/dist/collab/index.d.ts +4 -0
- package/dist/collab/index.d.ts.map +1 -0
- package/dist/collab/index.js +4 -0
- package/dist/collab/index.js.map +1 -0
- package/dist/collab/types.d.ts +111 -0
- package/dist/collab/types.d.ts.map +1 -0
- package/dist/collab/types.js +2 -0
- package/dist/collab/types.js.map +1 -0
- package/dist/crypto.d.ts +6 -0
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +6 -0
- package/dist/crypto.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +16 -1
- package/dist/errors.js.map +1 -1
- package/dist/facades.d.ts +89 -0
- package/dist/facades.d.ts.map +1 -0
- package/dist/facades.js +228 -0
- package/dist/facades.js.map +1 -0
- package/dist/group-fs.d.ts +103 -0
- package/dist/group-fs.d.ts.map +1 -0
- package/dist/group-fs.js +496 -0
- package/dist/group-fs.js.map +1 -0
- package/dist/group-resources.d.ts +98 -0
- package/dist/group-resources.d.ts.map +1 -0
- package/dist/group-resources.js +635 -0
- package/dist/group-resources.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/register-flow.d.ts +1 -0
- package/dist/register-flow.d.ts.map +1 -1
- package/dist/register-flow.js +3 -0
- package/dist/register-flow.js.map +1 -1
- package/dist/service-proxy.d.ts +1 -0
- package/dist/service-proxy.d.ts.map +1 -1
- package/dist/service-proxy.js +15 -3
- package/dist/service-proxy.js.map +1 -1
- package/dist/storage/errors.d.ts +28 -0
- package/dist/storage/errors.d.ts.map +1 -0
- package/dist/storage/errors.js +65 -0
- package/dist/storage/errors.js.map +1 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/lowlevel.d.ts +314 -0
- package/dist/storage/lowlevel.d.ts.map +1 -0
- package/dist/storage/lowlevel.js +460 -0
- package/dist/storage/lowlevel.js.map +1 -0
- package/dist/storage/types.d.ts +59 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +113 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/storage/vfs.d.ts +144 -0
- package/dist/storage/vfs.d.ts.map +1 -0
- package/dist/storage/vfs.js +403 -0
- package/dist/storage/vfs.js.map +1 -0
- package/dist/tools/cross-sdk-agent.d.ts +3 -0
- package/dist/tools/cross-sdk-agent.d.ts.map +1 -0
- package/dist/tools/cross-sdk-agent.js +1089 -0
- package/dist/tools/cross-sdk-agent.js.map +1 -0
- package/dist/transport.d.ts +3 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +33 -13
- package/dist/transport.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +44 -44
package/dist/client.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type AUNConfig } from './config.js';
|
|
2
2
|
import { type EventHandler, type Subscription } from './events.js';
|
|
3
3
|
import { GatewayDiscovery } from './discovery.js';
|
|
4
|
+
import { AIDStore } from './aid-store.js';
|
|
5
|
+
import { GroupFacade, MessageFacade, StreamFacade } from './facades.js';
|
|
6
|
+
import { StorageVFS } from './storage/vfs.js';
|
|
7
|
+
import { CollabClient } from './collab/client.js';
|
|
4
8
|
import { ConnectionState, type JsonObject, type RpcParams, type RpcResult } from './types.js';
|
|
5
9
|
import { AID } from './aid.js';
|
|
6
10
|
export interface ConnectionOptions {
|
|
@@ -29,6 +33,12 @@ export interface NotifyOptions {
|
|
|
29
33
|
ttl_ms?: number;
|
|
30
34
|
ttlMs?: number;
|
|
31
35
|
}
|
|
36
|
+
export interface BindGroupAidOptions {
|
|
37
|
+
aidStore?: AIDStore;
|
|
38
|
+
}
|
|
39
|
+
export interface CompleteGroupTransferOptions {
|
|
40
|
+
aidStore?: AIDStore;
|
|
41
|
+
}
|
|
32
42
|
/**
|
|
33
43
|
* AUN Core SDK 客户端 — 浏览器版本。
|
|
34
44
|
*
|
|
@@ -115,6 +125,7 @@ export declare class AUNClient {
|
|
|
115
125
|
private _onlineUnreadHintIntervalMs;
|
|
116
126
|
/** gap fill 来源标记:true 表示当前正在补洞(pull 触发),false 表示非补洞 */
|
|
117
127
|
private _gapFillActive;
|
|
128
|
+
private _backgroundRpcDepth;
|
|
118
129
|
private _pullGates;
|
|
119
130
|
private _reconnectActive;
|
|
120
131
|
private _reconnectAbort;
|
|
@@ -146,8 +157,23 @@ export declare class AUNClient {
|
|
|
146
157
|
private _delivery;
|
|
147
158
|
private _v2E2EE;
|
|
148
159
|
private _groupState;
|
|
160
|
+
private _storage?;
|
|
161
|
+
private _collab?;
|
|
162
|
+
private _messageFacade?;
|
|
163
|
+
private _groupFacade?;
|
|
164
|
+
private _streamFacade?;
|
|
149
165
|
constructor(aid?: AID);
|
|
150
166
|
get aid(): string | null;
|
|
167
|
+
/** AUN Storage VFS 入口 */
|
|
168
|
+
get storage(): StorageVFS;
|
|
169
|
+
/** AUN collab 协作层入口 */
|
|
170
|
+
get collab(): CollabClient;
|
|
171
|
+
/** Message RPC facade 入口 */
|
|
172
|
+
get message(): MessageFacade;
|
|
173
|
+
/** Group RPC facade 入口 */
|
|
174
|
+
get group(): GroupFacade;
|
|
175
|
+
/** Stream RPC facade 入口 */
|
|
176
|
+
get stream(): StreamFacade;
|
|
151
177
|
private _observeAgentMdFromEnvelope;
|
|
152
178
|
/** transport 的 meta observer:吸收 gateway 注入的 _meta 字段。失败不影响业务。 */
|
|
153
179
|
private _observeRpcMeta;
|
|
@@ -203,6 +229,10 @@ export declare class AUNClient {
|
|
|
203
229
|
* 自动解密 message.pull/group.pull、Group E2EE 生命周期编排。
|
|
204
230
|
*/
|
|
205
231
|
call(method: string, params?: RpcParams): Promise<RpcResult>;
|
|
232
|
+
createGroup(params?: RpcParams): Promise<RpcResult>;
|
|
233
|
+
bindGroupAid(params?: RpcParams, options?: BindGroupAidOptions): Promise<RpcResult>;
|
|
234
|
+
startGroupTransfer(params?: RpcParams, options?: CompleteGroupTransferOptions): Promise<RpcResult>;
|
|
235
|
+
completeGroupTransfer(params?: RpcParams, options?: CompleteGroupTransferOptions): Promise<RpcResult>;
|
|
206
236
|
private static _notifyParamsSizeOk;
|
|
207
237
|
private static _validateNotifyEventMethod;
|
|
208
238
|
private static _normalizeNotifyTtl;
|
|
@@ -448,6 +478,7 @@ export declare class AUNClient {
|
|
|
448
478
|
private _safeAsync;
|
|
449
479
|
private _explicitGroupCursorParams;
|
|
450
480
|
private _groupCursorTargetsCurrentInstance;
|
|
481
|
+
private _withBackgroundRpc;
|
|
451
482
|
private _runPullSerialized;
|
|
452
483
|
/** 可取消的 sleep */
|
|
453
484
|
private _sleep;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAOA,OAAO,EAA8C,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAsC,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -8,6 +8,7 @@ import { createConfig, getDeviceId, normalizeSlotId } from './config.js';
|
|
|
8
8
|
import { EventDispatcher } from './events.js';
|
|
9
9
|
import { normalizeGroupId } from './group-id.js';
|
|
10
10
|
import { GatewayDiscovery } from './discovery.js';
|
|
11
|
+
import { AIDStore } from './aid-store.js';
|
|
11
12
|
import { RPCTransport } from './transport.js';
|
|
12
13
|
import { AuthFlow } from './auth.js';
|
|
13
14
|
import { SeqTracker } from './seq-tracker.js';
|
|
@@ -17,6 +18,9 @@ import { IdentityRuntimeManager } from './client/identity.js';
|
|
|
17
18
|
import { LifecycleController } from './client/lifecycle.js';
|
|
18
19
|
import { PeerDirectory } from './client/peers.js';
|
|
19
20
|
import { RpcPipeline } from './client/rpc-pipeline.js';
|
|
21
|
+
import { GroupFacade, MessageFacade, StreamFacade } from './facades.js';
|
|
22
|
+
import { StorageVFS } from './storage/vfs.js';
|
|
23
|
+
import { CollabClient } from './collab/client.js';
|
|
20
24
|
import { V2E2EECoordinator } from './client/v2-e2ee.js';
|
|
21
25
|
import { GroupStateCoordinator } from './client/group-state.js';
|
|
22
26
|
import { CryptoProvider, base64ToUint8, pemToArrayBuffer, ecdsaVerifyDer, importCertPublicKeyEcdsa, } from './crypto.js';
|
|
@@ -110,18 +114,25 @@ const NON_IDEMPOTENT_METHODS = new Set([
|
|
|
110
114
|
'storage.create_folder', 'storage.rename_folder', 'storage.move_folder',
|
|
111
115
|
'storage.delete_folder', 'storage.move_object', 'storage.copy_object',
|
|
112
116
|
'storage.batch_delete', 'storage.set_object_meta', 'storage.append_object',
|
|
117
|
+
'storage.set_acl', 'storage.remove_acl', 'storage.set_visibility',
|
|
118
|
+
'storage.issue_token', 'storage.revoke_token',
|
|
119
|
+
'storage.create_symlink', 'storage.atomic_repoint',
|
|
120
|
+
'storage.rename_symlink', 'storage.delete_symlink',
|
|
121
|
+
'storage.fs.mkdir', 'storage.fs.remove', 'storage.fs.rename', 'storage.fs.copy',
|
|
122
|
+
'storage.fs.mount', 'storage.fs.approve', 'storage.fs.reject', 'storage.fs.unmount',
|
|
123
|
+
'storage.fs.invalidate_membership',
|
|
124
|
+
'storage.volume.create', 'storage.volume.renew', 'storage.volume.expire_due',
|
|
113
125
|
'auth.create_aid', 'auth.renew_cert', 'auth.rekey',
|
|
114
126
|
'message.thought.put', 'group.thought.put',
|
|
115
|
-
'group.add_member',
|
|
116
|
-
'group.
|
|
117
|
-
'group.
|
|
118
|
-
'group.
|
|
119
|
-
'group.
|
|
120
|
-
'
|
|
121
|
-
'
|
|
122
|
-
'
|
|
123
|
-
'
|
|
124
|
-
'group.resources.resolve_access_ticket',
|
|
127
|
+
'group.add_member', 'group.bind_group_aid', 'group.complete_transfer',
|
|
128
|
+
'group.fs.mkdir', 'group.fs.rm', 'group.fs.cp', 'group.fs.mv',
|
|
129
|
+
'group.fs.mount', 'group.fs.umount',
|
|
130
|
+
'group.fs.check_upload', 'group.fs.create_upload_session',
|
|
131
|
+
'group.fs.complete_upload', 'group.fs.create_download_ticket',
|
|
132
|
+
'collab.create', 'collab.commit', 'collab.clone',
|
|
133
|
+
'collab.prune', 'collab.unregister',
|
|
134
|
+
'collab.tag.create', 'collab.tag.restore',
|
|
135
|
+
'collab.tag.rm', 'collab.tag.prune',
|
|
125
136
|
]);
|
|
126
137
|
/** 需要客户端签名的关键方法。运行时逻辑已迁入 RpcPipeline,此处保留给源码审计测试。 */
|
|
127
138
|
const SIGNED_METHODS = new Set([
|
|
@@ -138,20 +149,17 @@ const SIGNED_METHODS = new Set([
|
|
|
138
149
|
'group.leave', 'group.remove_member', 'group.update_rules',
|
|
139
150
|
'group.update', 'group.update_announcement',
|
|
140
151
|
'group.update_join_requirements', 'group.set_role',
|
|
141
|
-
'group.transfer_owner', 'group.
|
|
152
|
+
'group.transfer_owner', 'group.bind_group_aid', 'group.complete_transfer',
|
|
153
|
+
'group.review_join_request',
|
|
142
154
|
'group.batch_review_join_request',
|
|
143
155
|
'group.request_join', 'group.use_invite_code',
|
|
144
156
|
'group.thought.put',
|
|
145
157
|
'message.thought.put',
|
|
146
158
|
'group.set_settings',
|
|
147
|
-
'group.
|
|
148
|
-
'group.
|
|
149
|
-
'group.
|
|
150
|
-
'group.
|
|
151
|
-
'group.resources.request_add', 'group.resources.request_mount_object',
|
|
152
|
-
'group.resources.direct_add', 'group.resources.approve_request',
|
|
153
|
-
'group.resources.reject_request', 'group.resources.unmount',
|
|
154
|
-
'group.resources.get_access', 'group.resources.resolve_access_ticket',
|
|
159
|
+
'group.fs.mkdir', 'group.fs.rm', 'group.fs.cp', 'group.fs.mv',
|
|
160
|
+
'group.fs.mount', 'group.fs.umount',
|
|
161
|
+
'group.fs.check_upload', 'group.fs.create_upload_session',
|
|
162
|
+
'group.fs.complete_upload', 'group.fs.create_download_ticket',
|
|
155
163
|
'storage.put_object', 'storage.delete_object',
|
|
156
164
|
'storage.create_share_link', 'storage.revoke_share_link',
|
|
157
165
|
'storage.get_by_share',
|
|
@@ -159,6 +167,19 @@ const SIGNED_METHODS = new Set([
|
|
|
159
167
|
'storage.create_folder', 'storage.rename_folder', 'storage.move_folder',
|
|
160
168
|
'storage.delete_folder', 'storage.move_object', 'storage.copy_object',
|
|
161
169
|
'storage.batch_delete', 'storage.set_object_meta', 'storage.append_object',
|
|
170
|
+
'storage.set_acl', 'storage.remove_acl', 'storage.set_visibility',
|
|
171
|
+
'storage.check_access',
|
|
172
|
+
'storage.issue_token', 'storage.revoke_token',
|
|
173
|
+
'storage.create_symlink', 'storage.atomic_repoint',
|
|
174
|
+
'storage.rename_symlink', 'storage.delete_symlink',
|
|
175
|
+
'storage.fs.mkdir', 'storage.fs.remove', 'storage.fs.rename', 'storage.fs.copy',
|
|
176
|
+
'storage.fs.mount', 'storage.fs.approve', 'storage.fs.reject', 'storage.fs.unmount',
|
|
177
|
+
'storage.fs.invalidate_membership',
|
|
178
|
+
'storage.volume.create', 'storage.volume.renew', 'storage.volume.expire_due',
|
|
179
|
+
'collab.create', 'collab.commit', 'collab.clone',
|
|
180
|
+
'collab.prune', 'collab.unregister',
|
|
181
|
+
'collab.tag.create', 'collab.tag.restore',
|
|
182
|
+
'collab.tag.rm', 'collab.tag.prune',
|
|
162
183
|
'group.commit_state',
|
|
163
184
|
'group.ban', 'group.unban',
|
|
164
185
|
'group.dissolve', 'group.suspend', 'group.resume',
|
|
@@ -344,6 +365,22 @@ function _v2ConcatBytes(...parts) {
|
|
|
344
365
|
function formatCaughtError(error) {
|
|
345
366
|
return error instanceof Error ? error : String(error);
|
|
346
367
|
}
|
|
368
|
+
const RELOGIN_REFRESH_ERRORS = new Set([
|
|
369
|
+
'missing refresh_token',
|
|
370
|
+
'invalid_or_expired_refresh_token',
|
|
371
|
+
'refresh not supported',
|
|
372
|
+
]);
|
|
373
|
+
function authErrorRequiresRelogin(error) {
|
|
374
|
+
const data = error.data;
|
|
375
|
+
if (isJsonObject(data)) {
|
|
376
|
+
if (data.relogin_required === true)
|
|
377
|
+
return true;
|
|
378
|
+
const code = String(data.error ?? '').trim().toLowerCase();
|
|
379
|
+
if (RELOGIN_REFRESH_ERRORS.has(code))
|
|
380
|
+
return true;
|
|
381
|
+
}
|
|
382
|
+
return RELOGIN_REFRESH_ERRORS.has(error.message.trim().toLowerCase());
|
|
383
|
+
}
|
|
347
384
|
function v2E2eeMeta(envelope) {
|
|
348
385
|
const suite = String(envelope.suite ?? '');
|
|
349
386
|
const modeSuite = String(envelope.suite ?? 'unknown');
|
|
@@ -544,6 +581,7 @@ export class AUNClient {
|
|
|
544
581
|
_onlineUnreadHintIntervalMs = 50;
|
|
545
582
|
/** gap fill 来源标记:true 表示当前正在补洞(pull 触发),false 表示非补洞 */
|
|
546
583
|
_gapFillActive = false;
|
|
584
|
+
_backgroundRpcDepth = 0;
|
|
547
585
|
// Pull Gate:序列化同一 key 的并发 pull 操作,防止重复拉取
|
|
548
586
|
_pullGates = new Map();
|
|
549
587
|
// 重连相关
|
|
@@ -579,6 +617,11 @@ export class AUNClient {
|
|
|
579
617
|
_delivery;
|
|
580
618
|
_v2E2EE;
|
|
581
619
|
_groupState;
|
|
620
|
+
_storage;
|
|
621
|
+
_collab;
|
|
622
|
+
_messageFacade;
|
|
623
|
+
_groupFacade;
|
|
624
|
+
_streamFacade;
|
|
582
625
|
constructor(aid) {
|
|
583
626
|
if (aid !== null && aid !== undefined && !isAIDObject(aid)) {
|
|
584
627
|
throw new ValidationError('AUNClient only accepts an AID object or no argument');
|
|
@@ -735,6 +778,36 @@ export class AUNClient {
|
|
|
735
778
|
get aid() {
|
|
736
779
|
return this._aid;
|
|
737
780
|
}
|
|
781
|
+
/** AUN Storage VFS 入口 */
|
|
782
|
+
get storage() {
|
|
783
|
+
if (!this._storage)
|
|
784
|
+
this._storage = new StorageVFS(this);
|
|
785
|
+
return this._storage;
|
|
786
|
+
}
|
|
787
|
+
/** AUN collab 协作层入口 */
|
|
788
|
+
get collab() {
|
|
789
|
+
if (!this._collab)
|
|
790
|
+
this._collab = new CollabClient(this);
|
|
791
|
+
return this._collab;
|
|
792
|
+
}
|
|
793
|
+
/** Message RPC facade 入口 */
|
|
794
|
+
get message() {
|
|
795
|
+
if (!this._messageFacade)
|
|
796
|
+
this._messageFacade = new MessageFacade(this);
|
|
797
|
+
return this._messageFacade;
|
|
798
|
+
}
|
|
799
|
+
/** Group RPC facade 入口 */
|
|
800
|
+
get group() {
|
|
801
|
+
if (!this._groupFacade)
|
|
802
|
+
this._groupFacade = new GroupFacade(this);
|
|
803
|
+
return this._groupFacade;
|
|
804
|
+
}
|
|
805
|
+
/** Stream RPC facade 入口 */
|
|
806
|
+
get stream() {
|
|
807
|
+
if (!this._streamFacade)
|
|
808
|
+
this._streamFacade = new StreamFacade(this);
|
|
809
|
+
return this._streamFacade;
|
|
810
|
+
}
|
|
738
811
|
async _observeAgentMdFromEnvelope(envelope) {
|
|
739
812
|
await this._agentMdManager.observeEnvelope(envelope);
|
|
740
813
|
}
|
|
@@ -976,6 +1049,200 @@ export class AUNClient {
|
|
|
976
1049
|
async call(method, params) {
|
|
977
1050
|
return await this._rpcPipeline.call(method, params);
|
|
978
1051
|
}
|
|
1052
|
+
async createGroup(params = {}) {
|
|
1053
|
+
if (!isJsonObject(params)) {
|
|
1054
|
+
throw new ValidationError('createGroup params must be an object');
|
|
1055
|
+
}
|
|
1056
|
+
const payload = { ...params };
|
|
1057
|
+
const groupName = String(payload.group_name ?? payload.groupName ?? '').trim();
|
|
1058
|
+
if (!groupName) {
|
|
1059
|
+
return await this.call('group.create', payload);
|
|
1060
|
+
}
|
|
1061
|
+
const keyPair = await new CryptoProvider().generateIdentity();
|
|
1062
|
+
payload.public_key = keyPair.public_key_der_b64;
|
|
1063
|
+
payload.curve = keyPair.curve;
|
|
1064
|
+
const result = await this.call('group.create', payload);
|
|
1065
|
+
const resultMap = isJsonObject(result) ? result : {};
|
|
1066
|
+
const group = isJsonObject(resultMap.group) ? resultMap.group : {};
|
|
1067
|
+
const aidCert = isJsonObject(resultMap.aid_cert) ? resultMap.aid_cert : {};
|
|
1068
|
+
const groupAid = String(group.group_aid ?? resultMap.group_aid ?? '').trim();
|
|
1069
|
+
const certPem = String(aidCert.cert ?? aidCert.cert_pem ?? resultMap.cert ?? resultMap.cert_pem ?? '').trim();
|
|
1070
|
+
if (!groupAid || !certPem) {
|
|
1071
|
+
throw new ValidationError('group.create named group response missing group.group_aid or aid_cert.cert');
|
|
1072
|
+
}
|
|
1073
|
+
const store = new AIDStore({
|
|
1074
|
+
aunPath: this.configModel.aunPath,
|
|
1075
|
+
encryptionSeed: this.configModel.seedPassword ?? '',
|
|
1076
|
+
slotId: this._slotId,
|
|
1077
|
+
rootCaPem: this.configModel.rootCaPem,
|
|
1078
|
+
verifySsl: this.configModel.verifySsl,
|
|
1079
|
+
});
|
|
1080
|
+
try {
|
|
1081
|
+
const imported = await store.importGroupIdentity(groupAid, {
|
|
1082
|
+
private_key_pem: keyPair.private_key_pem,
|
|
1083
|
+
public_key_der_b64: keyPair.public_key_der_b64,
|
|
1084
|
+
curve: keyPair.curve,
|
|
1085
|
+
cert_pem: certPem,
|
|
1086
|
+
});
|
|
1087
|
+
if (!imported.ok) {
|
|
1088
|
+
throw new ValidationError(imported.error.message);
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
finally {
|
|
1092
|
+
store.close();
|
|
1093
|
+
}
|
|
1094
|
+
return result;
|
|
1095
|
+
}
|
|
1096
|
+
async bindGroupAid(params = {}, options = {}) {
|
|
1097
|
+
if (!isJsonObject(params)) {
|
|
1098
|
+
throw new ValidationError('bindGroupAid params must be an object');
|
|
1099
|
+
}
|
|
1100
|
+
const store = options.aidStore;
|
|
1101
|
+
if (!store) {
|
|
1102
|
+
throw new ValidationError('bindGroupAid requires aidStore');
|
|
1103
|
+
}
|
|
1104
|
+
const keyPair = await new CryptoProvider().generateIdentity();
|
|
1105
|
+
const payload = { ...params };
|
|
1106
|
+
payload.public_key = keyPair.public_key_der_b64;
|
|
1107
|
+
payload.curve = keyPair.curve;
|
|
1108
|
+
const result = await this.call('group.bind_group_aid', payload);
|
|
1109
|
+
const resultMap = isJsonObject(result) ? result : {};
|
|
1110
|
+
const group = isJsonObject(resultMap.group) ? resultMap.group : {};
|
|
1111
|
+
const aidCert = isJsonObject(resultMap.aid_cert) ? resultMap.aid_cert : {};
|
|
1112
|
+
const groupAid = String(group.group_aid ?? resultMap.group_aid ?? '').trim();
|
|
1113
|
+
const certPem = String(aidCert.cert ?? aidCert.cert_pem ?? resultMap.cert ?? resultMap.cert_pem ?? '').trim();
|
|
1114
|
+
if (!groupAid || !certPem) {
|
|
1115
|
+
throw new ValidationError('group.bind_group_aid response missing group.group_aid or aid_cert.cert');
|
|
1116
|
+
}
|
|
1117
|
+
const imported = await store.importGroupIdentity(groupAid, {
|
|
1118
|
+
private_key_pem: keyPair.private_key_pem,
|
|
1119
|
+
public_key_der_b64: keyPair.public_key_der_b64,
|
|
1120
|
+
curve: keyPair.curve,
|
|
1121
|
+
cert_pem: certPem,
|
|
1122
|
+
});
|
|
1123
|
+
if (!imported.ok) {
|
|
1124
|
+
throw new ValidationError(imported.error.message);
|
|
1125
|
+
}
|
|
1126
|
+
return result;
|
|
1127
|
+
}
|
|
1128
|
+
async startGroupTransfer(params = {}, options = {}) {
|
|
1129
|
+
if (!isJsonObject(params)) {
|
|
1130
|
+
throw new ValidationError('startGroupTransfer params must be an object');
|
|
1131
|
+
}
|
|
1132
|
+
const store = options.aidStore;
|
|
1133
|
+
if (!store) {
|
|
1134
|
+
throw new ValidationError('startGroupTransfer requires aidStore');
|
|
1135
|
+
}
|
|
1136
|
+
const groupId = String(params.group_id ?? '').trim();
|
|
1137
|
+
const newOwner = String(params.new_owner ?? '').trim();
|
|
1138
|
+
if (!groupId || !newOwner) {
|
|
1139
|
+
throw new ValidationError('startGroupTransfer requires group_id and new_owner');
|
|
1140
|
+
}
|
|
1141
|
+
let groupAid = String(params.group_aid ?? '').trim();
|
|
1142
|
+
if (!groupAid) {
|
|
1143
|
+
const info = await this.call('group.get', { group_id: groupId });
|
|
1144
|
+
const infoMap = isJsonObject(info) ? info : {};
|
|
1145
|
+
const grp = isJsonObject(infoMap.group) ? infoMap.group : infoMap;
|
|
1146
|
+
groupAid = String(grp.group_aid ?? '').trim();
|
|
1147
|
+
}
|
|
1148
|
+
if (!groupAid) {
|
|
1149
|
+
throw new ValidationError('startGroupTransfer: unable to determine group_aid');
|
|
1150
|
+
}
|
|
1151
|
+
const loaded = await store.load(groupAid);
|
|
1152
|
+
if (!loaded.ok || !loaded.data) {
|
|
1153
|
+
throw new ValidationError(`startGroupTransfer: group_aid identity not found: ${groupAid}`);
|
|
1154
|
+
}
|
|
1155
|
+
const aidObj = loaded.data.aid;
|
|
1156
|
+
if (!aidObj.isPrivateKeyValid() || !aidObj.privateKeyPem) {
|
|
1157
|
+
throw new ValidationError(`startGroupTransfer: group_aid private key not found: ${groupAid}`);
|
|
1158
|
+
}
|
|
1159
|
+
const nonce = globalThis.crypto.randomUUID().replace(/-/g, '');
|
|
1160
|
+
const issuedMs = Date.now();
|
|
1161
|
+
const canonical = [
|
|
1162
|
+
'aun-group-owner-transfer-v1',
|
|
1163
|
+
groupId.toLowerCase(),
|
|
1164
|
+
groupAid.toLowerCase(),
|
|
1165
|
+
newOwner.toLowerCase(),
|
|
1166
|
+
nonce,
|
|
1167
|
+
String(issuedMs),
|
|
1168
|
+
].join('|');
|
|
1169
|
+
const signed = await aidObj.sign(canonical);
|
|
1170
|
+
if (!signed.ok) {
|
|
1171
|
+
throw new ValidationError(`startGroupTransfer: sign failed: ${signed.error.message}`);
|
|
1172
|
+
}
|
|
1173
|
+
const payload = { ...params, group_aid: groupAid };
|
|
1174
|
+
payload.transfer_auth = { nonce, issued_ms: issuedMs, signature: signed.data.signature };
|
|
1175
|
+
return await this.call('group.transfer_owner', payload);
|
|
1176
|
+
}
|
|
1177
|
+
async completeGroupTransfer(params = {}, options = {}) {
|
|
1178
|
+
if (!isJsonObject(params)) {
|
|
1179
|
+
throw new ValidationError('completeGroupTransfer params must be an object');
|
|
1180
|
+
}
|
|
1181
|
+
const store = options.aidStore;
|
|
1182
|
+
if (!store) {
|
|
1183
|
+
throw new ValidationError('completeGroupTransfer requires aidStore');
|
|
1184
|
+
}
|
|
1185
|
+
const keyPair = await new CryptoProvider().generateIdentity();
|
|
1186
|
+
const payload = { ...params };
|
|
1187
|
+
const groupId = String(params.group_id ?? '').trim();
|
|
1188
|
+
if (!groupId) {
|
|
1189
|
+
throw new ValidationError('completeGroupTransfer requires group_id');
|
|
1190
|
+
}
|
|
1191
|
+
let groupAid = String(params.group_aid ?? '').trim();
|
|
1192
|
+
if (!groupAid) {
|
|
1193
|
+
const info = await this.call('group.get', { group_id: groupId });
|
|
1194
|
+
const infoMap = isJsonObject(info) ? info : {};
|
|
1195
|
+
const grp = isJsonObject(infoMap.group) ? infoMap.group : infoMap;
|
|
1196
|
+
groupAid = String(grp.group_aid ?? '').trim();
|
|
1197
|
+
}
|
|
1198
|
+
if (!groupAid) {
|
|
1199
|
+
throw new ValidationError('completeGroupTransfer: unable to determine group_aid');
|
|
1200
|
+
}
|
|
1201
|
+
const current = this.currentAid;
|
|
1202
|
+
const newOwner = String(current?.aid ?? '').trim();
|
|
1203
|
+
if (!current || !newOwner || !current.isPrivateKeyValid()) {
|
|
1204
|
+
throw new ValidationError('completeGroupTransfer requires current new-owner AID with private key');
|
|
1205
|
+
}
|
|
1206
|
+
const nonce = globalThis.crypto.randomUUID().replace(/-/g, '');
|
|
1207
|
+
const issuedMs = Date.now();
|
|
1208
|
+
const publicKeyHash = bytesToHex(new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', new TextEncoder().encode(keyPair.public_key_der_b64))));
|
|
1209
|
+
const canonical = [
|
|
1210
|
+
'aun-group-owner-transfer-accept-v1',
|
|
1211
|
+
groupId.toLowerCase(),
|
|
1212
|
+
groupAid.toLowerCase(),
|
|
1213
|
+
newOwner.toLowerCase(),
|
|
1214
|
+
publicKeyHash,
|
|
1215
|
+
nonce,
|
|
1216
|
+
String(issuedMs),
|
|
1217
|
+
].join('|');
|
|
1218
|
+
const signed = await current.sign(canonical);
|
|
1219
|
+
if (!signed.ok) {
|
|
1220
|
+
throw new ValidationError(`completeGroupTransfer: accept sign failed: ${signed.error.message}`);
|
|
1221
|
+
}
|
|
1222
|
+
payload.group_aid = groupAid;
|
|
1223
|
+
payload.public_key = keyPair.public_key_der_b64;
|
|
1224
|
+
payload.curve = keyPair.curve;
|
|
1225
|
+
payload.transfer_accept = { nonce, issued_ms: issuedMs, signature: signed.data.signature };
|
|
1226
|
+
const result = await this.call('group.complete_transfer', payload);
|
|
1227
|
+
const resultMap = isJsonObject(result) ? result : {};
|
|
1228
|
+
const group = isJsonObject(resultMap.group) ? resultMap.group : {};
|
|
1229
|
+
const aidCert = isJsonObject(resultMap.aid_cert) ? resultMap.aid_cert : {};
|
|
1230
|
+
const returnedGroupAid = String(group.group_aid ?? resultMap.group_aid ?? '').trim();
|
|
1231
|
+
const certPem = String(aidCert.cert ?? aidCert.cert_pem ?? resultMap.cert ?? resultMap.cert_pem ?? '').trim();
|
|
1232
|
+
if (!returnedGroupAid || !certPem) {
|
|
1233
|
+
throw new ValidationError('group.complete_transfer response missing group.group_aid or aid_cert.cert');
|
|
1234
|
+
}
|
|
1235
|
+
const imported = await store.importGroupIdentity(returnedGroupAid, {
|
|
1236
|
+
private_key_pem: keyPair.private_key_pem,
|
|
1237
|
+
public_key_der_b64: keyPair.public_key_der_b64,
|
|
1238
|
+
curve: keyPair.curve,
|
|
1239
|
+
cert_pem: certPem,
|
|
1240
|
+
});
|
|
1241
|
+
if (!imported.ok) {
|
|
1242
|
+
throw new ValidationError(imported.error.message);
|
|
1243
|
+
}
|
|
1244
|
+
return result;
|
|
1245
|
+
}
|
|
979
1246
|
static _notifyParamsSizeOk(params) {
|
|
980
1247
|
return new TextEncoder().encode(JSON.stringify(params)).length <= MAX_NOTIFY_PAYLOAD_SIZE;
|
|
981
1248
|
}
|
|
@@ -1062,6 +1329,8 @@ export class AUNClient {
|
|
|
1062
1329
|
}
|
|
1063
1330
|
async _callRawV2Rpc(method, params) {
|
|
1064
1331
|
const p = { ...(params ?? {}) };
|
|
1332
|
+
const rpcBackground = Boolean(p._rpc_background) || this._backgroundRpcDepth > 0;
|
|
1333
|
+
delete p._rpc_background;
|
|
1065
1334
|
delete p._pull_gate_locked;
|
|
1066
1335
|
delete p._skip_auto_ack;
|
|
1067
1336
|
delete p.skip_auto_ack;
|
|
@@ -1075,7 +1344,7 @@ export class AUNClient {
|
|
|
1075
1344
|
if (method.startsWith('group.') && p.slot_id === undefined) {
|
|
1076
1345
|
p.slot_id = this._slotId;
|
|
1077
1346
|
}
|
|
1078
|
-
return await this._rpcPipeline.rawCall(method, p);
|
|
1347
|
+
return await this._rpcPipeline.rawCall(method, p, { background: rpcBackground });
|
|
1079
1348
|
}
|
|
1080
1349
|
// ── 事件 ──────────────────────────────────────────
|
|
1081
1350
|
/**
|
|
@@ -1845,16 +2114,28 @@ export class AUNClient {
|
|
|
1845
2114
|
}
|
|
1846
2115
|
catch (exc) {
|
|
1847
2116
|
if (exc instanceof AuthError) {
|
|
2117
|
+
if (authErrorRequiresRelogin(exc)) {
|
|
2118
|
+
this._clientLog.warn(`token refresh requires relogin, stopping refresh loop and triggering reconnect: ${exc.message}`);
|
|
2119
|
+
await this._dispatcher.publish('token.refresh_exhausted', {
|
|
2120
|
+
aid: this._identity?.aid ?? null,
|
|
2121
|
+
consecutive_failures: 1,
|
|
2122
|
+
last_error: String(exc),
|
|
2123
|
+
relogin_required: true,
|
|
2124
|
+
});
|
|
2125
|
+
this._tokenRefreshFailures = 0;
|
|
2126
|
+
await this._handleTransportDisconnect(new Error('token refresh relogin required, triggering reconnect'));
|
|
2127
|
+
return;
|
|
2128
|
+
}
|
|
1848
2129
|
this._tokenRefreshFailures++;
|
|
1849
2130
|
if (this._tokenRefreshFailures >= 3) {
|
|
1850
|
-
this._clientLog.warn(`token
|
|
1851
|
-
this._dispatcher.publish('token.refresh_exhausted', {
|
|
2131
|
+
this._clientLog.warn(`token refresh failed ${this._tokenRefreshFailures} consecutive times, stopping refresh loop and triggering reconnect`);
|
|
2132
|
+
await this._dispatcher.publish('token.refresh_exhausted', {
|
|
1852
2133
|
aid: this._identity?.aid ?? null,
|
|
1853
2134
|
consecutive_failures: this._tokenRefreshFailures,
|
|
1854
2135
|
last_error: String(exc),
|
|
1855
2136
|
});
|
|
1856
2137
|
this._tokenRefreshFailures = 0;
|
|
1857
|
-
this._handleTransportDisconnect(new Error('token refresh exhausted, triggering reconnect'));
|
|
2138
|
+
await this._handleTransportDisconnect(new Error('token refresh exhausted, triggering reconnect'));
|
|
1858
2139
|
return;
|
|
1859
2140
|
}
|
|
1860
2141
|
this._clientLog.warn(`token refresh failed (${this._tokenRefreshFailures}/3), next retry: ${String(exc)}`);
|
|
@@ -2660,6 +2941,15 @@ export class AUNClient {
|
|
|
2660
2941
|
&& (!slotId || slotId === (this._slotId ?? ''));
|
|
2661
2942
|
}
|
|
2662
2943
|
// ── Pull Gate(序列化同一 key 的并发 pull)──────────────────
|
|
2944
|
+
async _withBackgroundRpc(operation) {
|
|
2945
|
+
this._backgroundRpcDepth += 1;
|
|
2946
|
+
try {
|
|
2947
|
+
return await operation();
|
|
2948
|
+
}
|
|
2949
|
+
finally {
|
|
2950
|
+
this._backgroundRpcDepth = Math.max(0, this._backgroundRpcDepth - 1);
|
|
2951
|
+
}
|
|
2952
|
+
}
|
|
2663
2953
|
async _runPullSerialized(key, operation) {
|
|
2664
2954
|
return await this._rpcPipeline.runPullSerialized(key, operation);
|
|
2665
2955
|
}
|