@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/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.create_upload_session', 'storage.complete_upload', 'storage.delete_object',
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.update',
166
- 'group.resources.delete', 'group.resources.request_add',
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._dispatcher.publish('group.changed', d);
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
- return;
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
  /** 停止重连 */