@agentunion/fastaun-browser 0.4.7 → 0.4.9

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 (81) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/_packed_docs/CHANGELOG.md +49 -0
  3. package/_packed_docs/INDEX.md +61 -31
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +18 -13
  5. 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 +859 -0
  6. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +5 -4
  7. package/_packed_docs/sdk/INDEX.md +15 -9
  8. package/_packed_docs/sdk/README.md +3 -2
  9. package/dist/agent-md.d.ts +1 -1
  10. package/dist/agent-md.d.ts.map +1 -1
  11. package/dist/agent-md.js +12 -5
  12. package/dist/agent-md.js.map +1 -1
  13. package/dist/aid-store.d.ts +0 -1
  14. package/dist/aid-store.d.ts.map +1 -1
  15. package/dist/aid-store.js +29 -14
  16. package/dist/aid-store.js.map +1 -1
  17. package/dist/aid.d.ts +1 -0
  18. package/dist/aid.d.ts.map +1 -1
  19. package/dist/aid.js +10 -4
  20. package/dist/aid.js.map +1 -1
  21. package/dist/bundle.js +10005 -8912
  22. package/dist/cert-utils.d.ts +5 -1
  23. package/dist/cert-utils.d.ts.map +1 -1
  24. package/dist/cert-utils.js +52 -8
  25. package/dist/cert-utils.js.map +1 -1
  26. package/dist/client/delivery.d.ts +44 -0
  27. package/dist/client/delivery.d.ts.map +1 -0
  28. package/dist/client/delivery.js +1033 -0
  29. package/dist/client/delivery.js.map +1 -0
  30. package/dist/client/group-state.d.ts +32 -0
  31. package/dist/client/group-state.d.ts.map +1 -0
  32. package/dist/client/group-state.js +901 -0
  33. package/dist/client/group-state.js.map +1 -0
  34. package/dist/client/identity.d.ts +8 -0
  35. package/dist/client/identity.d.ts.map +1 -0
  36. package/dist/client/identity.js +28 -0
  37. package/dist/client/identity.js.map +1 -0
  38. package/dist/client/lifecycle.d.ts +12 -0
  39. package/dist/client/lifecycle.d.ts.map +1 -0
  40. package/dist/client/lifecycle.js +282 -0
  41. package/dist/client/lifecycle.js.map +1 -0
  42. package/dist/client/peers.d.ts +11 -0
  43. package/dist/client/peers.d.ts.map +1 -0
  44. package/dist/client/peers.js +42 -0
  45. package/dist/client/peers.js.map +1 -0
  46. package/dist/client/rpc-pipeline.d.ts +39 -0
  47. package/dist/client/rpc-pipeline.d.ts.map +1 -0
  48. package/dist/client/rpc-pipeline.js +577 -0
  49. package/dist/client/rpc-pipeline.js.map +1 -0
  50. package/dist/client/runtime.d.ts +90 -0
  51. package/dist/client/runtime.d.ts.map +1 -0
  52. package/dist/client/runtime.js +241 -0
  53. package/dist/client/runtime.js.map +1 -0
  54. package/dist/client/v2-e2ee.d.ts +104 -0
  55. package/dist/client/v2-e2ee.d.ts.map +1 -0
  56. package/dist/client/v2-e2ee.js +1579 -0
  57. package/dist/client/v2-e2ee.js.map +1 -0
  58. package/dist/client.d.ts +27 -81
  59. package/dist/client.d.ts.map +1 -1
  60. package/dist/client.js +284 -4015
  61. package/dist/client.js.map +1 -1
  62. package/dist/config.d.ts.map +1 -1
  63. package/dist/config.js +4 -3
  64. package/dist/config.js.map +1 -1
  65. package/dist/discovery.d.ts.map +1 -1
  66. package/dist/discovery.js +69 -10
  67. package/dist/discovery.js.map +1 -1
  68. package/dist/v2/crypto/dh-path.js +2 -2
  69. package/dist/v2/crypto/index.js +7 -7
  70. package/dist/v2/e2ee/decrypt.js +8 -8
  71. package/dist/v2/e2ee/encrypt-group.js +9 -9
  72. package/dist/v2/e2ee/encrypt-p2p.js +9 -9
  73. package/dist/v2/e2ee/index.js +5 -5
  74. package/dist/v2/e2ee/metadata-auth.js +1 -1
  75. package/dist/v2/session/index.js +2 -2
  76. package/dist/v2/session/session.js +1 -1
  77. package/dist/v2/state/commitment.js +1 -1
  78. package/dist/v2/state/index.js +1 -1
  79. package/dist/version.d.ts +1 -1
  80. package/dist/version.js +1 -1
  81. package/package.json +2 -2
@@ -0,0 +1,577 @@
1
+ import { normalizeSlotId, slotIsolationKey } from '../config.js';
2
+ import { ClientSignatureError, ConnectionError, PermissionError, StateError, ValidationError } from '../errors.js';
3
+ import { normalizeGroupId } from '../group-id.js';
4
+ import { p1363ToDer, pemToArrayBuffer, uint8ToBase64 } from '../crypto.js';
5
+ import { isJsonObject, } from '../types.js';
6
+ const INTERNAL_ONLY_METHODS = new Set([
7
+ 'auth.login1',
8
+ 'auth.aid_login1',
9
+ 'auth.login2',
10
+ 'auth.aid_login2',
11
+ 'auth.connect',
12
+ 'auth.refresh_token',
13
+ 'initialize',
14
+ ]);
15
+ const REMOVED_E2EE_METHODS = new Set([
16
+ 'group.rotate_epoch',
17
+ ]);
18
+ const PROTECTED_HEADERS_METHODS = new Set([
19
+ 'message.send',
20
+ 'group.send',
21
+ 'message.thought.put',
22
+ 'group.thought.put',
23
+ ]);
24
+ const SIGNED_METHODS = new Set([
25
+ 'message.send',
26
+ 'message.v2.put_peer_pk', 'message.v2.bootstrap',
27
+ 'message.v2.group_bootstrap', 'message.v2.pull',
28
+ 'message.v2.ack',
29
+ 'group.send',
30
+ 'group.v2.put_group_pk', 'group.v2.bootstrap',
31
+ 'group.v2.send', 'group.v2.pull', 'group.v2.ack',
32
+ 'group.v2.propose_state', 'group.v2.confirm_state',
33
+ 'group.v2.get_proposal',
34
+ 'group.kick', 'group.add_member',
35
+ 'group.leave', 'group.remove_member', 'group.update_rules',
36
+ 'group.update', 'group.update_announcement',
37
+ 'group.update_join_requirements', 'group.set_role',
38
+ 'group.transfer_owner', 'group.review_join_request',
39
+ 'group.batch_review_join_request',
40
+ 'group.request_join', 'group.use_invite_code',
41
+ 'group.thought.put',
42
+ 'message.thought.put',
43
+ 'group.set_settings',
44
+ 'group.resources.put', 'group.resources.update',
45
+ 'group.resources.delete', 'group.resources.request_add',
46
+ 'group.resources.direct_add', 'group.resources.approve_request',
47
+ 'group.resources.reject_request',
48
+ 'group.commit_state',
49
+ 'group.ban', 'group.unban',
50
+ 'group.dissolve', 'group.suspend', 'group.resume',
51
+ ]);
52
+ const PULL_GATE_STALE_MS = 30000;
53
+ const NON_IDEMPOTENT_TIMEOUT = 35;
54
+ const NON_IDEMPOTENT_METHODS = new Set([
55
+ 'message.send', 'group.send', 'group.create', 'group.invite',
56
+ 'group.kick', 'group.remove_member', 'group.leave', 'group.dissolve',
57
+ 'group.update_name', 'group.update_avatar', 'group.update_announcement',
58
+ 'group.update_settings',
59
+ 'storage.upload', 'storage.complete_upload', 'storage.delete',
60
+ 'auth.create_aid', 'auth.renew_cert', 'auth.rekey',
61
+ 'message.thought.put', 'group.thought.put',
62
+ 'group.add_member',
63
+ ]);
64
+ export class RpcPipeline {
65
+ runtime;
66
+ constructor(runtime) {
67
+ this.runtime = runtime;
68
+ }
69
+ async call(method, params) {
70
+ const client = this.runtime.client;
71
+ const tStart = Date.now();
72
+ client._clientLog.debug(`call enter: method=${method}`);
73
+ try {
74
+ const result = await this.callImpl(method, params);
75
+ client._clientLog.debug(`call exit: elapsed=${Date.now() - tStart}ms method=${method}`);
76
+ return result;
77
+ }
78
+ catch (err) {
79
+ client._clientLog.debug(`call exit (error): elapsed=${Date.now() - tStart}ms method=${method} err=${err instanceof Error ? err.message : String(err)}`);
80
+ throw err;
81
+ }
82
+ }
83
+ async callImpl(method, params) {
84
+ const client = this.runtime.client;
85
+ const p = this.preflight(method, params).params;
86
+ if (method === 'message.send') {
87
+ const encrypt = p.encrypt !== undefined ? p.encrypt : true;
88
+ delete p.encrypt;
89
+ if (encrypt) {
90
+ await client._ensureV2SessionReady('message.send', 'V2 session not initialized; encrypted message.send requires V2 (V1 E2EE removed)');
91
+ client._clientLog.debug('call route: message.send -> V2 encrypted send');
92
+ return await client._sendV2(String(p.to ?? ''), p.payload ?? {}, {
93
+ messageId: String(p.message_id ?? '') || undefined,
94
+ timestamp: p.timestamp,
95
+ protectedHeaders: client._protectedHeadersFromParams(p),
96
+ context: isJsonObject(p.context) ? p.context : undefined,
97
+ });
98
+ }
99
+ client._maybeAppendEchoTraceSend(p);
100
+ }
101
+ if (method === 'group.send') {
102
+ const encrypt = p.encrypt !== undefined ? p.encrypt : true;
103
+ delete p.encrypt;
104
+ if (encrypt) {
105
+ await client._ensureV2SessionReady('group.send', 'V2 session not initialized; encrypted group.send requires V2 (V1 E2EE removed)');
106
+ client._clientLog.debug('call route: group.send -> V2 encrypted send');
107
+ return await client._sendGroupV2(String(p.group_id ?? ''), p.payload ?? {}, {
108
+ messageId: String(p.message_id ?? '') || undefined,
109
+ timestamp: p.timestamp,
110
+ protectedHeaders: client._protectedHeadersFromParams(p),
111
+ context: isJsonObject(p.context) ? p.context : undefined,
112
+ });
113
+ }
114
+ client._maybeAppendEchoTraceSend(p);
115
+ }
116
+ if (method === 'group.thought.put') {
117
+ const encrypt = p.encrypt !== undefined ? p.encrypt : true;
118
+ delete p.encrypt;
119
+ if (encrypt) {
120
+ await client._ensureV2SessionReady('group.thought.put', 'V2 session not initialized; encrypted group.thought.put requires V2 (V1 E2EE removed)');
121
+ client._clientLog.debug('call route: group.thought.put -> V2 encrypted put');
122
+ return await client._putGroupThoughtEncryptedV2(p);
123
+ }
124
+ }
125
+ if (method === 'message.thought.put') {
126
+ const encrypt = p.encrypt !== undefined ? p.encrypt : true;
127
+ delete p.encrypt;
128
+ if (encrypt) {
129
+ await client._ensureV2SessionReady('message.thought.put', 'V2 session not initialized; encrypted message.thought.put requires V2 (V1 E2EE removed)');
130
+ client._clientLog.debug('call route: message.thought.put -> V2 encrypted put');
131
+ return await client._putMessageThoughtEncryptedV2(p);
132
+ }
133
+ }
134
+ const pullGateKey = this.pullGateKeyForCall(method, p);
135
+ if (pullGateKey) {
136
+ return await this.runPullSerialized(pullGateKey, async () => {
137
+ return await this.callImplInner(method, p);
138
+ });
139
+ }
140
+ return await this.callImplInner(method, p);
141
+ }
142
+ async callImplInner(method, p) {
143
+ const client = this.runtime.client;
144
+ if (method === 'message.pull') {
145
+ await client._ensureV2SessionReady('message.pull');
146
+ client._clientLog.debug('call route: message.pull -> V2 pull');
147
+ const messages = await client._pullV2(Number(p.after_seq ?? 0) || 0, Number(p.limit ?? 50) || 50, { force: p.force === true });
148
+ return { messages };
149
+ }
150
+ if (method === 'message.ack') {
151
+ await client._ensureV2SessionReady('message.ack');
152
+ client._clientLog.debug('call route: message.ack -> V2 ack');
153
+ return await client._ackV2(Number(p.seq ?? p.up_to_seq ?? 0) || undefined);
154
+ }
155
+ if (method === 'group.pull' && p.group_id) {
156
+ await client._ensureV2SessionReady('group.pull');
157
+ client._clientLog.debug('call route: group.pull -> V2 pull');
158
+ const hasExplicitAfterSeq = 'after_seq' in p || 'after_message_seq' in p;
159
+ const cursorParams = client._explicitGroupCursorParams(p);
160
+ const ownsCursor = Object.keys(cursorParams).length === 0 || client._groupCursorTargetsCurrentInstance(cursorParams);
161
+ const pullOpts = {};
162
+ if (hasExplicitAfterSeq)
163
+ pullOpts.explicitAfterSeq = true;
164
+ if (Object.keys(cursorParams).length > 0)
165
+ pullOpts.cursorParams = cursorParams;
166
+ if (!ownsCursor)
167
+ pullOpts.ownsCursor = false;
168
+ const messages = await client._pullGroupV2(String(p.group_id), Number(p.after_seq ?? p.after_message_seq ?? 0) || 0, Number(p.limit ?? 50) || 50, Object.keys(pullOpts).length > 0 ? pullOpts : undefined);
169
+ return { messages };
170
+ }
171
+ if (method === 'group.ack_messages' && p.group_id) {
172
+ await client._ensureV2SessionReady('group.ack_messages');
173
+ client._clientLog.debug('call route: group.ack_messages -> V2 ack');
174
+ const cursorParams = client._explicitGroupCursorParams(p);
175
+ const ownsCursor = Object.keys(cursorParams).length === 0 || client._groupCursorTargetsCurrentInstance(cursorParams);
176
+ if (!ownsCursor) {
177
+ return await client._rawGroupAckMessages(p);
178
+ }
179
+ return await client._ackGroupV2(String(p.group_id), Number(p.seq ?? p.msg_seq ?? p.up_to_seq ?? 0) || undefined);
180
+ }
181
+ await this.applyClientSignature(method, p);
182
+ const callTimeout = NON_IDEMPOTENT_METHODS.has(method) ? NON_IDEMPOTENT_TIMEOUT : undefined;
183
+ let result = callTimeout
184
+ ? await client._transport.call(method, p, callTimeout)
185
+ : await client._transport.call(method, p);
186
+ result = await this.postprocessResult(method, p, result);
187
+ return result;
188
+ }
189
+ preflight(method, params) {
190
+ const client = this.runtime.client;
191
+ if (client._state !== 'connected') {
192
+ throw new ConnectionError('client is not connected');
193
+ }
194
+ if (INTERNAL_ONLY_METHODS.has(method)) {
195
+ throw new PermissionError(`method is internal_only: ${method}`);
196
+ }
197
+ if (method.startsWith('message.e2ee.') || method.startsWith('group.e2ee.') || REMOVED_E2EE_METHODS.has(method)) {
198
+ throw new PermissionError(`legacy E2EE method is removed in this SDK: ${method}`);
199
+ }
200
+ const p = { ...(params ?? {}) };
201
+ this.mergeInstanceProtectedHeaders(method, p);
202
+ if (method === 'message.send' || method === 'group.send') {
203
+ this.normalizeOutboundMessagePayload(p, method);
204
+ }
205
+ this.validateOutboundCall(method, p);
206
+ this.injectMessageCursorContext(method, p);
207
+ this.captureGroupCursorParams(method, p);
208
+ this.normalizeGroupCallContext(method, p);
209
+ const clampedParams = typeof client._clampAckParams === 'function'
210
+ ? client._clampAckParams(method, p)
211
+ : p;
212
+ return { params: clampedParams };
213
+ }
214
+ mergeInstanceProtectedHeaders(method, params) {
215
+ const client = this.runtime.client;
216
+ if (!client._instanceProtectedHeaders || !PROTECTED_HEADERS_METHODS.has(method)) {
217
+ return;
218
+ }
219
+ const existing = isJsonObject(params.protected_headers) ? params.protected_headers : {};
220
+ params.protected_headers = { ...client._instanceProtectedHeaders, ...existing };
221
+ }
222
+ normalizeOutboundMessagePayload(params, method = '') {
223
+ void method;
224
+ if (!Object.prototype.hasOwnProperty.call(params, 'payload') && Object.prototype.hasOwnProperty.call(params, 'content')) {
225
+ params.payload = params.content;
226
+ delete params.content;
227
+ }
228
+ const payload = params.payload;
229
+ if (isJsonObject(payload) && !Object.prototype.hasOwnProperty.call(payload, 'type') && typeof payload.text === 'string') {
230
+ params.payload = { type: 'text', ...payload };
231
+ }
232
+ }
233
+ validateOutboundCall(method, params) {
234
+ if (method === 'message.send') {
235
+ this.validateMessageRecipient(params.to);
236
+ if ('persist' in params) {
237
+ throw new ValidationError("message.send no longer accepts 'persist'; configure delivery_mode during connect");
238
+ }
239
+ if ('delivery_mode' in params || 'queue_routing' in params || 'affinity_ttl_ms' in params) {
240
+ throw new ValidationError('message.send does not accept delivery_mode; configure delivery_mode during connect');
241
+ }
242
+ }
243
+ if (method === 'group.send') {
244
+ if ('persist' in params) {
245
+ throw new ValidationError("group.send does not accept 'persist'; group messages are always fanout");
246
+ }
247
+ if ('delivery_mode' in params || 'queue_routing' in params || 'affinity_ttl_ms' in params) {
248
+ throw new ValidationError('group.send does not accept delivery_mode; group messages are always fanout');
249
+ }
250
+ }
251
+ if (method === 'group.thought.put' || method === 'group.thought.get'
252
+ || method === 'message.thought.put' || method === 'message.thought.get') {
253
+ const context = isJsonObject(params.context) ? params.context : null;
254
+ const contextType = String(context?.type ?? '').trim();
255
+ const contextId = String(context?.id ?? '').trim();
256
+ const hasContext = contextType.length > 0 && contextId.length > 0;
257
+ if (!hasContext) {
258
+ throw new ValidationError(`${method} requires context.type + context.id`);
259
+ }
260
+ }
261
+ if (method === 'group.thought.get' && !String(params.sender_aid ?? '').trim()) {
262
+ throw new ValidationError('group.thought.get requires sender_aid');
263
+ }
264
+ if (method === 'message.thought.put') {
265
+ this.validateMessageRecipient(params.to);
266
+ if (!String(params.to ?? '').trim()) {
267
+ throw new ValidationError('message.thought.put requires to');
268
+ }
269
+ }
270
+ if (method === 'message.thought.get' && !String(params.sender_aid ?? '').trim()) {
271
+ throw new ValidationError('message.thought.get requires sender_aid');
272
+ }
273
+ }
274
+ injectMessageCursorContext(method, params) {
275
+ if (method !== 'message.pull' && method !== 'message.ack') {
276
+ return;
277
+ }
278
+ const client = this.runtime.client;
279
+ if ('device_id' in params && String(params.device_id ?? '').trim() !== client._deviceId) {
280
+ throw new ValidationError('message.pull/message.ack device_id must match the current client instance');
281
+ }
282
+ const slotId = normalizeSlotId(params.slot_id ?? client._slotId, client._slotId);
283
+ if (slotIsolationKey(slotId) !== slotIsolationKey(client._slotId)) {
284
+ throw new ValidationError('message.pull/message.ack slot_id must match the current client instance');
285
+ }
286
+ params.device_id = client._deviceId;
287
+ params.slot_id = client._slotId;
288
+ }
289
+ async applyClientSignature(method, params) {
290
+ if (!SIGNED_METHODS.has(method)) {
291
+ return;
292
+ }
293
+ if (this.shouldSkipClientSignature(method, params)) {
294
+ delete params.client_signature;
295
+ return;
296
+ }
297
+ await this.runtime.client._signClientOperation(method, params);
298
+ }
299
+ shouldSkipClientSignature(method, params) {
300
+ if (method !== 'message.send' && method !== 'group.send')
301
+ return false;
302
+ if (params.encrypted || params.encrypt)
303
+ return false;
304
+ return this.runtime.client._isEchoPayload(params.payload);
305
+ }
306
+ async signClientOperation(method, params) {
307
+ const currentAid = this.runtime.client._currentAid;
308
+ if (!currentAid?.privateKeyPem)
309
+ return;
310
+ try {
311
+ const aid = currentAid.aid;
312
+ const ts = String(Math.floor(Date.now() / 1000));
313
+ const paramsForHash = {};
314
+ for (const [k, v] of Object.entries(params)) {
315
+ if (k !== 'client_signature' && !k.startsWith('_')) {
316
+ paramsForHash[k] = v;
317
+ }
318
+ }
319
+ const paramsJson = stableStringify(paramsForHash);
320
+ const paramsHashBuf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(paramsJson));
321
+ const paramsHash = Array.from(new Uint8Array(paramsHashBuf))
322
+ .map(b => b.toString(16).padStart(2, '0'))
323
+ .join('');
324
+ const signData = new TextEncoder().encode(`${method}|${aid}|${ts}|${paramsHash}`);
325
+ const pkcs8 = pemToArrayBuffer(currentAid.privateKeyPem);
326
+ const cryptoKey = await crypto.subtle.importKey('pkcs8', pkcs8, { name: 'ECDSA', namedCurve: 'P-256' }, false, ['sign']);
327
+ const sigP1363 = await crypto.subtle.sign({ name: 'ECDSA', hash: 'SHA-256' }, cryptoKey, signData);
328
+ const sigDer = p1363ToDer(new Uint8Array(sigP1363));
329
+ let certFingerprint = '';
330
+ const certPem = currentAid.certPem;
331
+ if (certPem) {
332
+ const certDer = pemToArrayBuffer(certPem);
333
+ const fpBuf = await crypto.subtle.digest('SHA-256', certDer);
334
+ certFingerprint = 'sha256:' + Array.from(new Uint8Array(fpBuf)).map(b => b.toString(16).padStart(2, '0')).join('');
335
+ }
336
+ params.client_signature = {
337
+ aid,
338
+ cert_fingerprint: certFingerprint,
339
+ timestamp: ts,
340
+ params_hash: paramsHash,
341
+ signature: uint8ToBase64(sigDer),
342
+ };
343
+ }
344
+ catch (exc) {
345
+ throw new ClientSignatureError(`客户端签名失败,拒绝发送无签名请求: ${exc instanceof Error ? exc.message : String(exc)}`);
346
+ }
347
+ }
348
+ // ── Pull Gate(序列化同一 key 的并发 pull)──────────────────
349
+ pullGateKeyForCall(method, params) {
350
+ const client = this.runtime.client;
351
+ if (method === 'message.pull' || method === 'message.v2.pull') {
352
+ return client._aid ? `p2p:${client._aid}` : '';
353
+ }
354
+ if (method === 'group.pull' || method === 'group.v2.pull') {
355
+ const gid = String(params.group_id ?? '').trim();
356
+ return gid ? `group:${gid}` : '';
357
+ }
358
+ if (method === 'group.pull_events') {
359
+ const gid = String(params.group_id ?? '').trim();
360
+ return gid ? `group_event:${gid}` : '';
361
+ }
362
+ return '';
363
+ }
364
+ tryAcquirePullGate(key) {
365
+ if (!key)
366
+ return 0;
367
+ const client = this.runtime.client;
368
+ const now = Date.now();
369
+ const gate = client._pullGates.get(key) ?? { inflight: false, startedAt: 0, token: 0 };
370
+ if (gate.inflight && now - gate.startedAt <= PULL_GATE_STALE_MS) {
371
+ return null;
372
+ }
373
+ if (gate.inflight) {
374
+ client._clientLog?.warn(`pull in-flight stale reset: key=${key} age=${now - gate.startedAt}ms`);
375
+ }
376
+ gate.token += 1;
377
+ gate.inflight = true;
378
+ gate.startedAt = now;
379
+ client._pullGates.set(key, gate);
380
+ return gate.token;
381
+ }
382
+ releasePullGate(key, token) {
383
+ if (!key || token == null)
384
+ return;
385
+ const gate = this.runtime.client._pullGates.get(key);
386
+ if (!gate || gate.token !== token)
387
+ return;
388
+ gate.inflight = false;
389
+ gate.startedAt = 0;
390
+ }
391
+ async runPullSerialized(key, operation) {
392
+ let token = this.tryAcquirePullGate(key);
393
+ if (token === null) {
394
+ const deadline = Date.now() + PULL_GATE_STALE_MS + 100;
395
+ while (token === null && Date.now() <= deadline) {
396
+ await this._sleep(25);
397
+ token = this.tryAcquirePullGate(key);
398
+ }
399
+ if (token === null) {
400
+ throw new StateError(`pull already in-flight for ${key}`);
401
+ }
402
+ }
403
+ try {
404
+ return await operation();
405
+ }
406
+ finally {
407
+ this.releasePullGate(key, token);
408
+ }
409
+ }
410
+ async rawCall(method, params, options) {
411
+ const client = this.runtime.client;
412
+ const payload = { ...(params ?? {}) };
413
+ const signed = options?.signed ?? true;
414
+ if (signed) {
415
+ await this.applyClientSignature(method, payload);
416
+ }
417
+ const timeout = options?.timeout;
418
+ if (options?.background) {
419
+ return await client._transport.call(method, payload, timeout, options?.trace, true);
420
+ }
421
+ if (options?.trace !== undefined) {
422
+ return await client._transport.call(method, payload, timeout, options.trace);
423
+ }
424
+ if (timeout !== undefined) {
425
+ return await client._transport.call(method, payload, timeout);
426
+ }
427
+ return await client._transport.call(method, payload);
428
+ }
429
+ async postprocessResult(method, params, result) {
430
+ const client = this.runtime.client;
431
+ let next = result;
432
+ if (method === 'group.thought.get' && isJsonObject(next)) {
433
+ client._clientLog?.debug?.(`group.thought.get transport result: found=${String(next.found ?? '')}, raw_count=${Array.isArray(next.thoughts) ? next.thoughts.length : 0}`);
434
+ next = await client._decryptGroupThoughts(next);
435
+ }
436
+ if (method === 'message.thought.get' && isJsonObject(next)) {
437
+ client._clientLog?.debug?.(`message.thought.get transport result: found=${String(next.found ?? '')}, raw_count=${Array.isArray(next.thoughts) ? next.thoughts.length : 0}`);
438
+ next = await client._decryptMessageThoughts(next);
439
+ }
440
+ if (method === 'message.pull' && isJsonObject(next)) {
441
+ this.postprocessMessagePull(params, next);
442
+ }
443
+ if (method === 'group.pull' && isJsonObject(next)) {
444
+ this.postprocessGroupPull(params, next);
445
+ }
446
+ next = await client._groupState.postprocessResult(method, params, next);
447
+ return next;
448
+ }
449
+ _sleep(ms) {
450
+ return new Promise(resolve => setTimeout(resolve, ms));
451
+ }
452
+ postprocessMessagePull(params, result) {
453
+ const client = this.runtime.client;
454
+ const messages = result.messages;
455
+ const rawMessages = (Array.isArray(messages) ? messages : []).filter(isJsonObject);
456
+ if (!client._aid || !client._seqTracker) {
457
+ return;
458
+ }
459
+ const ns = `p2p:${client._aid}`;
460
+ const contigBefore = client._seqTracker.getContiguousSeq(ns);
461
+ if (rawMessages.length) {
462
+ client._seqTracker.onPullResult(ns, rawMessages, Number(params.after_seq ?? 0) || 0);
463
+ }
464
+ const serverAck = Number(result.server_ack_seq ?? 0);
465
+ if (serverAck > 0) {
466
+ const contig = client._seqTracker.getContiguousSeq(ns);
467
+ if (contig < serverAck) {
468
+ client._clientLog?.info?.(`message.pull retention-floor advance: ns=${ns} contiguous=${contig} -> server_ack_seq=${serverAck}`);
469
+ client._seqTracker.forceContiguousSeq(ns, serverAck);
470
+ }
471
+ }
472
+ if (client._seqTracker.getContiguousSeq(ns) !== contigBefore) {
473
+ client._saveSeqTrackerState?.();
474
+ }
475
+ result._contig_before = contigBefore;
476
+ }
477
+ postprocessGroupPull(params, result) {
478
+ const client = this.runtime.client;
479
+ const gid = String(params.group_id ?? '').trim();
480
+ if (!gid || !client._seqTracker) {
481
+ return;
482
+ }
483
+ const messages = result.messages;
484
+ const rawMessages = (Array.isArray(messages) ? messages : []).filter(isJsonObject);
485
+ const ns = `group:${gid}`;
486
+ const contigBefore = client._seqTracker.getContiguousSeq(ns);
487
+ if (rawMessages.length) {
488
+ client._seqTracker.onPullResult(ns, rawMessages, Number(params.after_message_seq ?? params.after_seq ?? 0) || 0);
489
+ }
490
+ const cursor = isJsonObject(result.cursor) ? result.cursor : null;
491
+ const serverAck = Number(cursor?.current_seq ?? 0);
492
+ if (serverAck > 0) {
493
+ const contig = client._seqTracker.getContiguousSeq(ns);
494
+ if (contig < serverAck) {
495
+ client._clientLog?.info?.(`group.pull retention-floor advance: ns=${ns} contiguous=${contig} -> cursor.current_seq=${serverAck}`);
496
+ client._seqTracker.forceContiguousSeq(ns, serverAck);
497
+ }
498
+ }
499
+ if (client._seqTracker.getContiguousSeq(ns) !== contigBefore) {
500
+ client._saveSeqTrackerState?.();
501
+ }
502
+ result._contig_before = contigBefore;
503
+ }
504
+ captureGroupCursorParams(method, params) {
505
+ if (!method.startsWith('group.')
506
+ || '_group_cursor_params' in params
507
+ || Boolean(params._pull_gate_locked)) {
508
+ return;
509
+ }
510
+ const explicitCursorParams = this.groupCursorParams(params);
511
+ if (Object.keys(explicitCursorParams).length > 0) {
512
+ params._group_cursor_params = explicitCursorParams;
513
+ }
514
+ }
515
+ normalizeGroupCallContext(method, params) {
516
+ if (!method.startsWith('group.')) {
517
+ return;
518
+ }
519
+ const client = this.runtime.client;
520
+ if (params.group_id !== undefined && params.group_id !== null) {
521
+ const rawGroupId = String(params.group_id);
522
+ const normalizedGroupId = normalizeGroupId(rawGroupId);
523
+ if (normalizedGroupId && normalizedGroupId !== rawGroupId) {
524
+ client._clientLog?.debug?.(`call group_id normalized: ${rawGroupId} -> ${normalizedGroupId} method=${method}`);
525
+ }
526
+ params.group_id = normalizedGroupId;
527
+ }
528
+ if (params.device_id === undefined) {
529
+ params.device_id = client._deviceId;
530
+ }
531
+ if (params.slot_id === undefined) {
532
+ params.slot_id = client._slotId;
533
+ }
534
+ }
535
+ groupCursorParams(params) {
536
+ const cursorParams = {};
537
+ for (const key of ['device_id', 'slot_id', 'device_name', 'device_type']) {
538
+ const value = params[key];
539
+ if (value !== undefined && value !== null)
540
+ cursorParams[key] = value;
541
+ }
542
+ return cursorParams;
543
+ }
544
+ validateMessageRecipient(toAid) {
545
+ if (isGroupServiceAid(toAid)) {
546
+ throw new ValidationError('message.send receiver cannot be group.{issuer}; use group.send instead');
547
+ }
548
+ }
549
+ }
550
+ function isGroupServiceAid(value) {
551
+ const text = String(value ?? '').trim();
552
+ if (!text.includes('.'))
553
+ return false;
554
+ const [name, ...issuerParts] = text.split('.');
555
+ return name === 'group' && issuerParts.join('.').length > 0;
556
+ }
557
+ function stableStringify(obj) {
558
+ if (obj === null || obj === undefined)
559
+ return 'null';
560
+ if (typeof obj === 'boolean' || typeof obj === 'number')
561
+ return JSON.stringify(obj);
562
+ if (typeof obj === 'string')
563
+ return JSON.stringify(obj);
564
+ if (Array.isArray(obj)) {
565
+ return '[' + obj.map(v => stableStringify(v)).join(',') + ']';
566
+ }
567
+ if (isJsonObject(obj)) {
568
+ const keys = Object.keys(obj).sort();
569
+ const entries = keys.map(k => stableStringify(k) + ':' + stableStringify(obj[k]));
570
+ return '{' + entries.join(',') + '}';
571
+ }
572
+ return JSON.stringify(obj);
573
+ }
574
+ function formatCaughtError(error) {
575
+ return error instanceof Error ? error : String(error);
576
+ }
577
+ //# sourceMappingURL=rpc-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-pipeline.js","sourceRoot":"","sources":["../../src/client/rpc-pipeline.ts"],"names":[],"mappings":"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"}