@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.
Files changed (182) hide show
  1. package/CHANGELOG.md +480 -359
  2. package/_packed_docs/CHANGELOG.md +480 -359
  3. package/_packed_docs/INDEX.md +111 -53
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +43 -29
  5. package/_packed_docs/agent.md/SCHEMA.md +2 -0
  6. package/_packed_docs/agent.md/examples/codeagent-claudecode.md +2 -0
  7. package/_packed_docs/agent.md/examples/human-developer.md +2 -0
  8. package/_packed_docs/agent.md/examples/openclaw-lobster.md +2 -0
  9. package/_packed_docs/agent.md/examples/signed-openclaw-lobster.md +2 -0
  10. 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
  11. package/_packed_docs/cli/AUN-CLI/350/256/276/350/256/241/346/226/207/346/241/243.md +265 -686
  12. package/_packed_docs/collab-gateway-boundary-test-report.md +164 -0
  13. package/_packed_docs/design/2026-05-22-aun-rpc-trace-enhancement.md +2 -0
  14. 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
  15. 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
  16. 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
  17. package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +2 -0
  18. 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
  19. 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
  20. 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
  21. package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +2 -0
  22. package/_packed_docs/protocol/04-Peer-/345/255/220/345/215/217/350/256/256.md +2 -0
  23. package/_packed_docs/protocol/05-Relay-/345/255/220/345/215/217/350/256/256.md +2 -0
  24. 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
  25. package/_packed_docs/protocol/08-AUN-E2EE-Group.md +2 -0
  26. package/_packed_docs/protocol/08-AUN-E2EE.md +2 -0
  27. package/_packed_docs/protocol/09-/345/256/211/345/205/250/350/200/203/350/231/221.md +2 -0
  28. package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +28 -85
  29. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +49 -0
  30. package/_packed_docs/protocol/12-Stream-/345/255/220/345/215/217/350/256/256.md +2 -0
  31. package/_packed_docs/protocol/13-Agent/350/241/214/344/270/272/350/247/204/350/214/203.md +2 -0
  32. 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
  33. 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
  34. package/_packed_docs/protocol/README.md +2 -0
  35. package/_packed_docs/protocol/agent.md/SCHEMA.md +2 -0
  36. package/_packed_docs/protocol/agent.md/examples/codeagent-claudecode.md +2 -0
  37. package/_packed_docs/protocol/agent.md/examples/human-developer.md +2 -0
  38. package/_packed_docs/protocol/agent.md/examples/openclaw-lobster.md +2 -0
  39. package/_packed_docs/protocol/aun-docs-guide.md +2 -0
  40. package/_packed_docs/protocol/index.md +3 -1
  41. 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
  42. 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
  43. package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +2 -0
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +2 -0
  58. package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +2 -0
  59. package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +2 -0
  60. package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +2 -0
  61. package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +2 -0
  62. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +283 -267
  63. package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +4 -1
  64. package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +2 -0
  65. package/_packed_docs/sdk/09-collab-rpc-manual.md +550 -0
  66. package/_packed_docs/sdk/09-custody-api-manual.md +2 -0
  67. package/_packed_docs/sdk/09-group-rpc-manual.md +197 -445
  68. package/_packed_docs/sdk/09-message-rpc-manual.md +8 -7
  69. package/_packed_docs/sdk/09-meta-rpc-manual.md +2 -0
  70. package/_packed_docs/sdk/09-payload-reference.md +2 -0
  71. package/_packed_docs/sdk/09-proxy-rpc-manual.md +2 -0
  72. package/_packed_docs/sdk/09-storage-rpc-manual.md +952 -279
  73. package/_packed_docs/sdk/09-stream-rpc-manual.md +2 -0
  74. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +33 -20
  75. 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
  76. package/_packed_docs/sdk/INDEX.md +46 -29
  77. package/_packed_docs/sdk/Notify/351/200/232/347/237/245/346/226/271/346/241/210.md +2 -0
  78. package/_packed_docs/sdk/README.md +17 -15
  79. package/dist/aid-store.d.ts +25 -0
  80. package/dist/aid-store.d.ts.map +1 -1
  81. package/dist/aid-store.js +89 -8
  82. package/dist/aid-store.js.map +1 -1
  83. package/dist/auth.d.ts +2 -0
  84. package/dist/auth.d.ts.map +1 -1
  85. package/dist/auth.js +98 -9
  86. package/dist/auth.js.map +1 -1
  87. package/dist/bundle.js +19156 -16554
  88. package/dist/client/delivery.d.ts +5 -0
  89. package/dist/client/delivery.d.ts.map +1 -1
  90. package/dist/client/delivery.js +169 -15
  91. package/dist/client/delivery.js.map +1 -1
  92. package/dist/client/rpc-pipeline.d.ts +1 -0
  93. package/dist/client/rpc-pipeline.d.ts.map +1 -1
  94. package/dist/client/rpc-pipeline.js +76 -34
  95. package/dist/client/rpc-pipeline.js.map +1 -1
  96. package/dist/client/v2-e2ee.d.ts.map +1 -1
  97. package/dist/client/v2-e2ee.js +67 -8
  98. package/dist/client/v2-e2ee.js.map +1 -1
  99. package/dist/client.d.ts +31 -0
  100. package/dist/client.d.ts.map +1 -1
  101. package/dist/client.js +313 -23
  102. package/dist/client.js.map +1 -1
  103. package/dist/collab/client.d.ts +39 -0
  104. package/dist/collab/client.d.ts.map +1 -0
  105. package/dist/collab/client.js +124 -0
  106. package/dist/collab/client.js.map +1 -0
  107. package/dist/collab/errors.d.ts +16 -0
  108. package/dist/collab/errors.d.ts.map +1 -0
  109. package/dist/collab/errors.js +60 -0
  110. package/dist/collab/errors.js.map +1 -0
  111. package/dist/collab/index.d.ts +4 -0
  112. package/dist/collab/index.d.ts.map +1 -0
  113. package/dist/collab/index.js +4 -0
  114. package/dist/collab/index.js.map +1 -0
  115. package/dist/collab/types.d.ts +111 -0
  116. package/dist/collab/types.d.ts.map +1 -0
  117. package/dist/collab/types.js +2 -0
  118. package/dist/collab/types.js.map +1 -0
  119. package/dist/crypto.d.ts +6 -0
  120. package/dist/crypto.d.ts.map +1 -1
  121. package/dist/crypto.js +6 -0
  122. package/dist/crypto.js.map +1 -1
  123. package/dist/errors.d.ts.map +1 -1
  124. package/dist/errors.js +16 -1
  125. package/dist/errors.js.map +1 -1
  126. package/dist/facades.d.ts +89 -0
  127. package/dist/facades.d.ts.map +1 -0
  128. package/dist/facades.js +228 -0
  129. package/dist/facades.js.map +1 -0
  130. package/dist/group-fs.d.ts +103 -0
  131. package/dist/group-fs.d.ts.map +1 -0
  132. package/dist/group-fs.js +496 -0
  133. package/dist/group-fs.js.map +1 -0
  134. package/dist/group-resources.d.ts +98 -0
  135. package/dist/group-resources.d.ts.map +1 -0
  136. package/dist/group-resources.js +635 -0
  137. package/dist/group-resources.js.map +1 -0
  138. package/dist/index.d.ts +4 -1
  139. package/dist/index.d.ts.map +1 -1
  140. package/dist/index.js +6 -0
  141. package/dist/index.js.map +1 -1
  142. package/dist/register-flow.d.ts +1 -0
  143. package/dist/register-flow.d.ts.map +1 -1
  144. package/dist/register-flow.js +3 -0
  145. package/dist/register-flow.js.map +1 -1
  146. package/dist/service-proxy.d.ts +1 -0
  147. package/dist/service-proxy.d.ts.map +1 -1
  148. package/dist/service-proxy.js +15 -3
  149. package/dist/service-proxy.js.map +1 -1
  150. package/dist/storage/errors.d.ts +28 -0
  151. package/dist/storage/errors.d.ts.map +1 -0
  152. package/dist/storage/errors.js +65 -0
  153. package/dist/storage/errors.js.map +1 -0
  154. package/dist/storage/index.d.ts +2 -0
  155. package/dist/storage/index.d.ts.map +1 -0
  156. package/dist/storage/index.js +2 -0
  157. package/dist/storage/index.js.map +1 -0
  158. package/dist/storage/lowlevel.d.ts +314 -0
  159. package/dist/storage/lowlevel.d.ts.map +1 -0
  160. package/dist/storage/lowlevel.js +460 -0
  161. package/dist/storage/lowlevel.js.map +1 -0
  162. package/dist/storage/types.d.ts +59 -0
  163. package/dist/storage/types.d.ts.map +1 -0
  164. package/dist/storage/types.js +113 -0
  165. package/dist/storage/types.js.map +1 -0
  166. package/dist/storage/vfs.d.ts +144 -0
  167. package/dist/storage/vfs.d.ts.map +1 -0
  168. package/dist/storage/vfs.js +403 -0
  169. package/dist/storage/vfs.js.map +1 -0
  170. package/dist/tools/cross-sdk-agent.d.ts +3 -0
  171. package/dist/tools/cross-sdk-agent.d.ts.map +1 -0
  172. package/dist/tools/cross-sdk-agent.js +1089 -0
  173. package/dist/tools/cross-sdk-agent.js.map +1 -0
  174. package/dist/transport.d.ts +3 -0
  175. package/dist/transport.d.ts.map +1 -1
  176. package/dist/transport.js +33 -13
  177. package/dist/transport.js.map +1 -1
  178. package/dist/version.d.ts +1 -1
  179. package/dist/version.d.ts.map +1 -1
  180. package/dist/version.js +1 -1
  181. package/dist/version.js.map +1 -1
  182. package/package.json +44 -44
@@ -6,6 +6,8 @@ export declare class MessageDeliveryEngine {
6
6
  constructor(runtime: ClientRuntime);
7
7
  prunePushedSeqs(ns: string): void;
8
8
  markPublishedSeq(ns: string, seq: number): void;
9
+ fireGroupEventAck(groupId: string, ns: string, eventSeq: number, label: string): void;
10
+ fireGroupV2Ack(groupId: string, ns: string, seq: number, label: string): void;
9
11
  enqueueOrderedMessage(ns: string, event: string, seq: number, payload: EventPayload): void;
10
12
  isGroupEventNamespace(ns: string): boolean;
11
13
  publishOrderedQueueItem(ns: string, event: string, seq: number, payload: EventPayload): Promise<void>;
@@ -13,10 +15,13 @@ export declare class MessageDeliveryEngine {
13
15
  isInstanceScopedMessageEvent(event: string): boolean;
14
16
  attachCurrentInstanceContext(payload: EventPayload): EventPayload;
15
17
  normalizePublishedMessagePayload(event: string, payload: EventPayload): EventPayload;
18
+ private envelopeMetadata;
16
19
  appMessageEnvelope(payload: EventPayload): JsonObject;
17
20
  isGroupScopedEvent(event: string): boolean;
18
21
  appGroupEventEnvelope(payload: EventPayload): JsonObject;
19
22
  attachAppMessageEnvelope(payload: EventPayload): EventPayload;
23
+ sendResultEnvelope(method: string, params: RpcParams, result: unknown, encrypted: boolean): JsonObject;
24
+ attachSendResultEnvelope(method: string, params: RpcParams, result: unknown, encrypted: boolean): unknown;
20
25
  attachAppGroupEventEnvelope(payload: EventPayload): EventPayload;
21
26
  stripInternalSenderDeviceFields(payload: EventPayload): EventPayload;
22
27
  recallEventFromMessage(message: EventPayload): JsonObject | null;
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/client/delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/client/delivery.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,17 @@ const PUSHED_SEQS_LIMIT = 50_000;
5
5
  const PENDING_ORDERED_LIMIT = 50_000;
6
6
  const GROUP_RECALL_SEEN_LIMIT = 10_000;
7
7
  const APP_MESSAGE_ENVELOPE_KEYS = [
8
- 'module_id', 'message_id', 'id', 'seq', 'msg_seq', 'message_type', 'type', 'kind', 'version',
8
+ 'module_id', 'message_type', 'type', 'kind', 'version',
9
9
  'from', 'from_aid', 'sender_aid', 'to', 'to_aid', 'group_id',
10
- 'timestamp', 'created_at', 't_server', 'encrypted', 'status', 'delivery_mode',
11
- 'dispatch_mode', 'dispatch', 'device_id', 'slot_id',
10
+ 'timestamp', 'created_at', 'encrypted',
11
+ 'context', 'protected_headers', 'headers', 'payload_type',
12
12
  ];
13
+ const APP_SEND_ENVELOPE_METHODS = new Set([
14
+ 'message.send',
15
+ 'group.send',
16
+ 'message.thought.put',
17
+ 'group.thought.put',
18
+ ]);
13
19
  const APP_GROUP_EVENT_ENVELOPE_KEYS = [
14
20
  'module_id', 'event_id', 'event_seq', 'seq', 'event_type', 'action', 'group_id',
15
21
  'actor_aid', 'sender_aid', 'member_aid', 'target_aid', 'operator_aid',
@@ -46,6 +52,34 @@ export class MessageDeliveryEngine {
46
52
  client._pushedSeqs.set(ns, new Set(keep));
47
53
  }
48
54
  }
55
+ fireGroupEventAck(groupId, ns, eventSeq, label) {
56
+ const client = this.runtime.client;
57
+ const ackSeq = this.clampAckSeq('group.ack_events', 'event_seq', ns, eventSeq);
58
+ if (ackSeq <= 0)
59
+ return;
60
+ void client.call('group.ack_events', {
61
+ group_id: groupId,
62
+ event_seq: ackSeq,
63
+ device_id: client._deviceId,
64
+ slot_id: client._slotId,
65
+ _rpc_background: true,
66
+ }).catch((e) => {
67
+ client._clientLog.warn(`${label} failed: group=${groupId}`, e);
68
+ });
69
+ }
70
+ fireGroupV2Ack(groupId, ns, seq, label) {
71
+ const client = this.runtime.client;
72
+ const ackSeq = this.clampAckSeq('group.v2.ack', 'up_to_seq', ns, seq);
73
+ if (ackSeq <= 0)
74
+ return;
75
+ void client._callRawV2Rpc('group.v2.ack', {
76
+ group_id: groupId,
77
+ up_to_seq: ackSeq,
78
+ _rpc_background: true,
79
+ }).catch((e) => {
80
+ client._clientLog.debug(`${label} failed: group=${groupId} seq=${ackSeq} err=${String(e)}`);
81
+ });
82
+ }
49
83
  enqueueOrderedMessage(ns, event, seq, payload) {
50
84
  const client = this.runtime.client;
51
85
  let queue = client._pendingOrderedMsgs.get(ns);
@@ -114,15 +148,62 @@ export class MessageDeliveryEngine {
114
148
  }
115
149
  return payload;
116
150
  }
151
+ envelopeMetadata(value) {
152
+ let source = value;
153
+ if (source && typeof source === 'object') {
154
+ const maybeHeaders = source;
155
+ if (typeof maybeHeaders.toObject === 'function')
156
+ source = maybeHeaders.toObject();
157
+ }
158
+ if (!isJsonObject(source))
159
+ return undefined;
160
+ const out = {};
161
+ for (const [key, item] of Object.entries(source)) {
162
+ if (key === '_auth')
163
+ continue;
164
+ out[key] = item;
165
+ }
166
+ return Object.keys(out).length > 0 ? out : undefined;
167
+ }
117
168
  appMessageEnvelope(payload) {
118
169
  if (!isJsonObject(payload))
119
170
  return {};
120
171
  const message = payload;
172
+ const body = isJsonObject(message.payload) ? message.payload : {};
121
173
  const envelope = {};
122
- for (const key of APP_MESSAGE_ENVELOPE_KEYS) {
123
- if (Object.prototype.hasOwnProperty.call(message, key))
124
- envelope[key] = message[key];
125
- }
174
+ const firstValue = (...values) => {
175
+ for (const value of values) {
176
+ if (value === undefined || value === null)
177
+ continue;
178
+ if (typeof value === 'string' && !value.trim())
179
+ continue;
180
+ return value;
181
+ }
182
+ return undefined;
183
+ };
184
+ const setIfPresent = (key, value) => {
185
+ if (value === undefined || value === null)
186
+ return;
187
+ if (typeof value === 'string' && !value.trim())
188
+ return;
189
+ envelope[key] = value;
190
+ };
191
+ setIfPresent('from', firstValue(message.from, message.from_aid, message.sender_aid));
192
+ setIfPresent('to', firstValue(message.to, message.to_aid));
193
+ setIfPresent('group_id', message.group_id);
194
+ setIfPresent('type', firstValue(body.type, message.type, message.message_type, message.payload_type));
195
+ setIfPresent('kind', firstValue(body.kind, message.kind));
196
+ setIfPresent('version', firstValue(body.version, message.version));
197
+ setIfPresent('timestamp', firstValue(message.timestamp, message.created_at, message.t_server));
198
+ if ('encrypted' in message)
199
+ envelope.encrypted = Boolean(message.encrypted);
200
+ const context = this.envelopeMetadata(message.context);
201
+ if (context)
202
+ envelope.context = context;
203
+ const protectedHeaders = this.envelopeMetadata(message.protected_headers) ?? this.envelopeMetadata(message.headers);
204
+ if (protectedHeaders)
205
+ envelope.protected_headers = protectedHeaders;
206
+ setIfPresent('payload_type', firstValue(message.payload_type, protectedHeaders?.payload_type));
126
207
  return envelope;
127
208
  }
128
209
  isGroupScopedEvent(event) {
@@ -147,6 +228,63 @@ export class MessageDeliveryEngine {
147
228
  result.envelope = this.appMessageEnvelope(result);
148
229
  return result;
149
230
  }
231
+ sendResultEnvelope(method, params, result, encrypted) {
232
+ if (!APP_SEND_ENVELOPE_METHODS.has(method))
233
+ return {};
234
+ const body = isJsonObject(params.payload) ? params.payload : {};
235
+ const resultObj = isJsonObject(result) ? result : {};
236
+ const envelope = {};
237
+ const firstValue = (...values) => {
238
+ for (const value of values) {
239
+ if (value === undefined || value === null)
240
+ continue;
241
+ if (typeof value === 'string' && !value.trim())
242
+ continue;
243
+ return value;
244
+ }
245
+ return undefined;
246
+ };
247
+ const setIfPresent = (key, value) => {
248
+ if (value === undefined || value === null)
249
+ return;
250
+ if (typeof value === 'string' && !value.trim())
251
+ return;
252
+ envelope[key] = value;
253
+ };
254
+ setIfPresent('from', this.runtime.client._aid);
255
+ if (method.startsWith('message.')) {
256
+ setIfPresent('to', params.to);
257
+ }
258
+ else {
259
+ setIfPresent('group_id', params.group_id);
260
+ }
261
+ setIfPresent('type', firstValue(body.type, params.type, params.message_type, params.payload_type));
262
+ setIfPresent('kind', firstValue(body.kind, params.kind));
263
+ setIfPresent('version', firstValue(body.version, params.version));
264
+ setIfPresent('timestamp', firstValue(params.timestamp, resultObj.timestamp, resultObj.created_at, resultObj.t_server, Date.now()));
265
+ envelope.encrypted = Boolean(encrypted);
266
+ const context = this.envelopeMetadata(params.context);
267
+ if (context)
268
+ envelope.context = context;
269
+ const protectedHeaders = this.envelopeMetadata(params.protected_headers) ?? this.envelopeMetadata(params.headers);
270
+ if (protectedHeaders)
271
+ envelope.protected_headers = protectedHeaders;
272
+ setIfPresent('payload_type', firstValue(params.payload_type, protectedHeaders?.payload_type, body.type));
273
+ return envelope;
274
+ }
275
+ attachSendResultEnvelope(method, params, result, encrypted) {
276
+ if (!APP_SEND_ENVELOPE_METHODS.has(method) || !isJsonObject(result))
277
+ return result;
278
+ const out = { ...result };
279
+ out.envelope = this.sendResultEnvelope(method, params, out, encrypted);
280
+ if ('payload' in params) {
281
+ out.payload = params.payload;
282
+ }
283
+ else if ('content' in params) {
284
+ out.payload = params.content;
285
+ }
286
+ return out;
287
+ }
150
288
  attachAppGroupEventEnvelope(payload) {
151
289
  if (!isJsonObject(payload))
152
290
  return payload;
@@ -368,6 +506,7 @@ export class MessageDeliveryEngine {
368
506
  msg_seq: ackSeq,
369
507
  device_id: client._deviceId,
370
508
  slot_id: client._slotId,
509
+ _rpc_background: true,
371
510
  }).catch((e) => { client._clientLog.warn('group recall auto-ack failed: group=' + groupId, e); });
372
511
  }
373
512
  if (contig !== contigBefore)
@@ -454,6 +593,7 @@ export class MessageDeliveryEngine {
454
593
  seq: ackSeq,
455
594
  device_id: client._deviceId,
456
595
  slot_id: client._slotId,
596
+ _rpc_background: true,
457
597
  }).catch((e) => { client._clientLog.warn(`P2P auto-ack failed:${String(e)}`); });
458
598
  }
459
599
  if (contigAfter !== contigBefore)
@@ -531,6 +671,7 @@ export class MessageDeliveryEngine {
531
671
  msg_seq: ackSeq,
532
672
  device_id: client._deviceId,
533
673
  slot_id: client._slotId,
674
+ _rpc_background: true,
534
675
  }).catch((e) => { client._clientLog.warn('group recall auto-ack failed: group=' + groupId, e); });
535
676
  }
536
677
  if (contigAfter !== contigBefore)
@@ -553,6 +694,7 @@ export class MessageDeliveryEngine {
553
694
  msg_seq: ackSeq,
554
695
  device_id: client._deviceId,
555
696
  slot_id: client._slotId,
697
+ _rpc_background: true,
556
698
  }).catch((e) => { client._clientLog.warn('group message auto-ack failed: group=' + groupId, e); });
557
699
  }
558
700
  if (contigAfter !== contigBefore)
@@ -596,7 +738,7 @@ export class MessageDeliveryEngine {
596
738
  const afterSeq = client._seqTracker.getContiguousSeq(ns);
597
739
  try {
598
740
  if (client._v2Session) {
599
- await client._pullGroupV2Internal({ group_id: groupId, after_seq: afterSeq, limit: 50 });
741
+ await client._withBackgroundRpc(() => client._pullGroupV2Internal({ group_id: groupId, after_seq: afterSeq, limit: 50 }));
600
742
  return;
601
743
  }
602
744
  const result = await client.call('group.pull', {
@@ -604,6 +746,7 @@ export class MessageDeliveryEngine {
604
746
  after_message_seq: afterSeq,
605
747
  device_id: client._deviceId,
606
748
  limit: 50,
749
+ _rpc_background: true,
607
750
  });
608
751
  if (isJsonObject(result)) {
609
752
  const messages = result.messages;
@@ -657,7 +800,7 @@ export class MessageDeliveryEngine {
657
800
  this.runtime.delivery.setGapFillActive(true);
658
801
  let filled = 0;
659
802
  try {
660
- const messages = await client._pullV2(afterSeq, 50);
803
+ const messages = await client._withBackgroundRpc(() => client._pullV2(afterSeq, 50));
661
804
  filled = messages.length;
662
805
  this.prunePushedSeqs(ns);
663
806
  }
@@ -688,7 +831,7 @@ export class MessageDeliveryEngine {
688
831
  this.runtime.delivery.setGapFillActive(true);
689
832
  let filled = 0;
690
833
  try {
691
- const messages = await client._pullGroupV2(groupId, afterSeq, 50);
834
+ const messages = await client._withBackgroundRpc(() => client._pullGroupV2(groupId, afterSeq, 50));
692
835
  filled = messages.length;
693
836
  this.prunePushedSeqs(ns);
694
837
  }
@@ -725,6 +868,7 @@ export class MessageDeliveryEngine {
725
868
  after_event_seq: nextAfterSeq,
726
869
  device_id: client._deviceId,
727
870
  limit: 50,
871
+ _rpc_background: true,
728
872
  });
729
873
  if (!isJsonObject(result))
730
874
  return;
@@ -783,6 +927,7 @@ export class MessageDeliveryEngine {
783
927
  event_seq: ackSeq,
784
928
  device_id: client._deviceId,
785
929
  slot_id: client._slotId,
930
+ _rpc_background: true,
786
931
  }).catch((e) => { client._clientLog.warn('group event auto-ack failed: group=' + groupId, e); });
787
932
  }
788
933
  const nextAfter = Math.max(eventSeqs.length > 0 ? Math.max(...eventSeqs) : nextAfterSeq, nextAfterSeq);
@@ -821,8 +966,15 @@ export class MessageDeliveryEngine {
821
966
  }
822
967
  }
823
968
  const contigBefore = client._seqTracker.getContiguousSeq(ns);
824
- if (eventSeq <= contigBefore || client._pushedSeqs.get(ns)?.has(eventSeq)) {
969
+ const publishedDuplicate = client._pushedSeqs.get(ns)?.has(eventSeq) === true;
970
+ if (eventSeq <= contigBefore || publishedDuplicate) {
825
971
  client._clientLog.debug(`group.changed skipped duplicate/stale: group=${groupId}, event_seq=${eventSeq}, contiguous=${contigBefore}`);
972
+ if (eventSeq <= contigBefore) {
973
+ this.fireGroupEventAck(groupId, ns, eventSeq, 'group event covered push ack');
974
+ }
975
+ else if (contigBefore > 0) {
976
+ this.fireGroupEventAck(groupId, ns, contigBefore, 'group event covered push ack');
977
+ }
826
978
  return;
827
979
  }
828
980
  this.enqueueOrderedMessage(ns, 'group.changed', eventSeq, data);
@@ -838,6 +990,7 @@ export class MessageDeliveryEngine {
838
990
  event_seq: ackSeq,
839
991
  device_id: client._deviceId,
840
992
  slot_id: client._slotId,
993
+ _rpc_background: true,
841
994
  }).catch((e) => {
842
995
  client._clientLog.warn('group event push auto-ack failed: group=' + groupId, e);
843
996
  });
@@ -938,8 +1091,9 @@ export class MessageDeliveryEngine {
938
1091
  const ns = `group:${groupId}`;
939
1092
  client._seqTracker.updateMaxSeen(ns, seq);
940
1093
  const contigBefore = client._seqTracker.getContiguousSeq(ns);
941
- if (contigBefore === seq) {
1094
+ if (contigBefore === seq || (eventKind === 'group.online_unread_hint' && contigBefore > seq)) {
942
1095
  client._clientLog.debug(`_onRawGroupV2MessageCreated duplicate push already covered: group=${groupId} seq=${seq}`);
1096
+ this.fireGroupV2Ack(groupId, ns, seq, 'group v2 covered push ack');
943
1097
  return;
944
1098
  }
945
1099
  const afterSeq = client._repairPushContiguousBound(ns, seq, false, '_raw.group.v2.message_created');
@@ -951,7 +1105,7 @@ export class MessageDeliveryEngine {
951
1105
  client._gapFillDone.add(dedupKey);
952
1106
  try {
953
1107
  client._clientLog.debug(`_onRawGroupV2MessageCreated -> group.v2.pull group=${groupId} after_seq=${afterSeq}`);
954
- const messages = await client._pullGroupV2(groupId, afterSeq, 50);
1108
+ const messages = await client._withBackgroundRpc(() => client._pullGroupV2(groupId, afterSeq, 50));
955
1109
  client._clientLog.debug(`_onRawGroupV2MessageCreated pulled ${messages.length} msgs for group=${groupId}`);
956
1110
  }
957
1111
  finally {
@@ -998,7 +1152,7 @@ export class MessageDeliveryEngine {
998
1152
  if (newContig > 0 && newContig !== contigBefore) {
999
1153
  const ackSeq = this.clampAckSeq('message.v2.ack', 'up_to_seq', ns, newContig);
1000
1154
  try {
1001
- await client._callRawV2Rpc('message.v2.ack', { up_to_seq: ackSeq });
1155
+ await client._callRawV2Rpc('message.v2.ack', { up_to_seq: ackSeq, _rpc_background: true });
1002
1156
  }
1003
1157
  catch (e) {
1004
1158
  client._clientLog.debug(`V2 P2P push-ack failed: ${e}`);
@@ -1028,7 +1182,7 @@ export class MessageDeliveryEngine {
1028
1182
  try {
1029
1183
  do {
1030
1184
  this.runtime.delivery.setV2PullPending(false);
1031
- await client._pullV2();
1185
+ await client._withBackgroundRpc(() => client._pullV2());
1032
1186
  const newContig = ns ? client._seqTracker.getContiguousSeq(ns) : -1;
1033
1187
  client._clientLog.debug(`_onV2PushNotification pull done: contiguous_seq=${contigBefore}->${newContig} (push_seq=${pushSeq || 'null'})`);
1034
1188
  } while (client._v2PullPending);