@agentunion/fastaun 0.4.10 → 0.4.11
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 +32 -0
- package/_packed_docs/CHANGELOG.md +32 -0
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +2 -2
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +7 -4
- package/_packed_docs/sdk/09-group-rpc-manual.md +141 -2
- package/_packed_docs/sdk/09-storage-rpc-manual.md +247 -28
- package/dist/client/delivery.d.ts +4 -1
- package/dist/client/delivery.js +77 -44
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/rpc-pipeline.js +31 -7
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +2 -0
- package/dist/client/v2-e2ee.js +25 -1
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +40 -17
- package/dist/client.js.map +1 -1
- package/dist/v2/session/keystore.js +6 -6
- package/dist/v2/session/keystore.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -136,10 +136,24 @@ const NON_IDEMPOTENT_METHODS = new Set([
|
|
|
136
136
|
'group.kick', 'group.remove_member', 'group.leave', 'group.dissolve',
|
|
137
137
|
'group.update_name', 'group.update_avatar', 'group.update_announcement',
|
|
138
138
|
'group.update_settings',
|
|
139
|
-
'storage.
|
|
139
|
+
'storage.put_object', 'storage.delete_object', 'storage.get_by_share',
|
|
140
|
+
'storage.create_share_link', 'storage.revoke_share_link',
|
|
141
|
+
'storage.create_upload_session', 'storage.complete_upload',
|
|
142
|
+
'storage.create_folder', 'storage.rename_folder', 'storage.move_folder',
|
|
143
|
+
'storage.delete_folder', 'storage.move_object', 'storage.copy_object',
|
|
144
|
+
'storage.batch_delete', 'storage.set_object_meta', 'storage.append_object',
|
|
140
145
|
'auth.create_aid', 'auth.renew_cert', 'auth.rekey',
|
|
141
146
|
'message.thought.put', 'group.thought.put',
|
|
142
147
|
'group.add_member',
|
|
148
|
+
'group.resources.put', 'group.resources.create_folder',
|
|
149
|
+
'group.resources.rename', 'group.resources.move',
|
|
150
|
+
'group.resources.mount_object', 'group.resources.update',
|
|
151
|
+
'group.resources.delete', 'group.resources.cleanup_by_storage_ref',
|
|
152
|
+
'group.resources.request_add', 'group.resources.request_mount_object',
|
|
153
|
+
'group.resources.direct_add', 'group.resources.approve_request',
|
|
154
|
+
'group.resources.reject_request', 'group.resources.unmount',
|
|
155
|
+
'group.resources.get_access',
|
|
156
|
+
'group.resources.resolve_access_ticket',
|
|
143
157
|
]);
|
|
144
158
|
/** 需要客户端签名的关键方法。运行时逻辑已迁入 RpcPipeline,此处保留给源码审计测试。 */
|
|
145
159
|
const SIGNED_METHODS = new Set([
|
|
@@ -162,10 +176,20 @@ const SIGNED_METHODS = new Set([
|
|
|
162
176
|
'group.thought.put',
|
|
163
177
|
'message.thought.put',
|
|
164
178
|
'group.set_settings',
|
|
165
|
-
'group.resources.put', 'group.resources.
|
|
166
|
-
'group.resources.
|
|
179
|
+
'group.resources.put', 'group.resources.create_folder',
|
|
180
|
+
'group.resources.rename', 'group.resources.move',
|
|
181
|
+
'group.resources.mount_object', 'group.resources.update',
|
|
182
|
+
'group.resources.delete', 'group.resources.cleanup_by_storage_ref',
|
|
183
|
+
'group.resources.request_add', 'group.resources.request_mount_object',
|
|
167
184
|
'group.resources.direct_add', 'group.resources.approve_request',
|
|
168
|
-
'group.resources.reject_request',
|
|
185
|
+
'group.resources.reject_request', 'group.resources.unmount',
|
|
186
|
+
'group.resources.get_access', 'group.resources.resolve_access_ticket',
|
|
187
|
+
'storage.put_object', 'storage.delete_object', 'storage.get_by_share',
|
|
188
|
+
'storage.create_share_link', 'storage.revoke_share_link',
|
|
189
|
+
'storage.create_upload_session', 'storage.complete_upload',
|
|
190
|
+
'storage.create_folder', 'storage.rename_folder', 'storage.move_folder',
|
|
191
|
+
'storage.delete_folder', 'storage.move_object', 'storage.copy_object',
|
|
192
|
+
'storage.batch_delete', 'storage.set_object_meta', 'storage.append_object',
|
|
169
193
|
'group.commit_state',
|
|
170
194
|
'group.ban', 'group.unban',
|
|
171
195
|
'group.dissolve', 'group.suspend', 'group.resume',
|
|
@@ -1282,15 +1306,7 @@ export class AUNClient {
|
|
|
1282
1306
|
d._verified = await this._verifyEventSignatureAsync(d, cs);
|
|
1283
1307
|
}
|
|
1284
1308
|
}
|
|
1285
|
-
await this.
|
|
1286
|
-
this._groupState.handleGroupChangedV2Membership(d);
|
|
1287
|
-
this._delivery.handleGroupChangedEventSeq(d, groupId);
|
|
1288
|
-
// 群组解散 → 清理本地 epoch key、seq_tracker、补洞去重缓存
|
|
1289
|
-
if (d.action === 'dissolved') {
|
|
1290
|
-
if (groupId) {
|
|
1291
|
-
this._cleanupDissolvedGroup(groupId);
|
|
1292
|
-
}
|
|
1293
|
-
}
|
|
1309
|
+
await this._delivery.handleGroupChangedEventSeq(d, groupId);
|
|
1294
1310
|
}
|
|
1295
1311
|
else {
|
|
1296
1312
|
// data 非对象也透传给用户(兼容旧版)
|
|
@@ -1326,6 +1342,7 @@ export class AUNClient {
|
|
|
1326
1342
|
this._pushedSeqs.delete(`group:${groupId}`);
|
|
1327
1343
|
this._pushedSeqs.delete(`group_event:${groupId}`);
|
|
1328
1344
|
this._pendingOrderedMsgs.delete(`group:${groupId}`);
|
|
1345
|
+
this._pendingOrderedMsgs.delete(`group_event:${groupId}`);
|
|
1329
1346
|
this._clientLog.info(`cleaned up disbanded group ${groupId} local state`);
|
|
1330
1347
|
}
|
|
1331
1348
|
/** 同步验签群事件 client_signature。返回 true/false/"pending"。 */
|
|
@@ -2706,14 +2723,16 @@ export class AUNClient {
|
|
|
2706
2723
|
// 已在重连中则跳过,避免心跳超时和 transport 断线回调重复触发
|
|
2707
2724
|
if (this._reconnectActive)
|
|
2708
2725
|
return;
|
|
2726
|
+
// 原子化标志,防止 await 期间并发调用再次进入
|
|
2727
|
+
this._reconnectActive = true;
|
|
2709
2728
|
this._clientLog.warn(`transport disconnected: closeCode=${closeCode ?? 'none'}, error=${error ? formatCaughtError(error) : 'none'}`);
|
|
2710
2729
|
this._state = 'standby';
|
|
2711
2730
|
this._stopBackgroundTasks();
|
|
2712
2731
|
await this._dispatcher.publish('state_change', { state: this._publicState(this._state), error });
|
|
2713
|
-
if (!this._sessionOptions.auto_reconnect)
|
|
2714
|
-
|
|
2715
|
-
if (this._reconnectActive)
|
|
2732
|
+
if (!this._sessionOptions.auto_reconnect) {
|
|
2733
|
+
this._reconnectActive = false;
|
|
2716
2734
|
return;
|
|
2735
|
+
}
|
|
2717
2736
|
// 不重连 close code(认证失败/权限错误/被踢等)或服务端通知断开:抑制重连
|
|
2718
2737
|
if (this._serverKicked || (closeCode !== undefined && AUNClient._NO_RECONNECT_CODES.has(closeCode))) {
|
|
2719
2738
|
this._state = 'connection_failed';
|
|
@@ -2827,11 +2846,15 @@ export class AUNClient {
|
|
|
2827
2846
|
this._reconnectActive = false;
|
|
2828
2847
|
this._reconnectAbort = null;
|
|
2829
2848
|
}
|
|
2830
|
-
/** 可取消的 sleep */
|
|
2849
|
+
/** 可取消的 sleep,监听 _reconnectAbort.signal,abort 时提前 resolve */
|
|
2831
2850
|
_sleep(ms) {
|
|
2832
2851
|
return new Promise((resolve) => {
|
|
2833
2852
|
const timer = setTimeout(resolve, ms);
|
|
2834
2853
|
this._unrefTimer(timer);
|
|
2854
|
+
const signal = this._reconnectAbort?.signal;
|
|
2855
|
+
if (signal) {
|
|
2856
|
+
signal.addEventListener('abort', () => { clearTimeout(timer); resolve(); }, { once: true });
|
|
2857
|
+
}
|
|
2835
2858
|
});
|
|
2836
2859
|
}
|
|
2837
2860
|
/** 停止重连 */
|