@agentunion/fastaun-browser 0.5.11 → 0.5.13
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 +46 -0
- package/_packed_docs/CHANGELOG.md +46 -0
- package/_packed_docs/INDEX.md +3 -3
- package/_packed_docs/KITE_DOCS_GUIDE.md +1 -1
- package/_packed_docs/agent.md/SCHEMA.md +84 -84
- package/_packed_docs/aun/345/210/206/345/270/203/345/274/217/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +8 -6
- package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +29 -15
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +21 -3
- package/_packed_docs/sdk/09-group-rpc-manual.md +29 -2
- package/dist/agent-md-schema.d.ts.map +1 -1
- package/dist/agent-md-schema.js +8 -4
- package/dist/agent-md-schema.js.map +1 -1
- package/dist/bundle.js +565 -298
- package/dist/client/delivery.d.ts +1 -0
- package/dist/client/delivery.d.ts.map +1 -1
- package/dist/client/delivery.js +161 -242
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/group-state.d.ts.map +1 -1
- package/dist/client/group-state.js +1 -0
- package/dist/client/group-state.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts.map +1 -1
- package/dist/client/rpc-pipeline.js +24 -11
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +0 -1
- package/dist/client/v2-e2ee.d.ts.map +1 -1
- package/dist/client/v2-e2ee.js +65 -44
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +341 -18
- package/dist/client.js.map +1 -1
- package/dist/facades.d.ts +7 -0
- package/dist/facades.d.ts.map +1 -1
- package/dist/facades.js +44 -0
- package/dist/facades.js.map +1 -1
- package/dist/seq-tracker.d.ts +2 -2
- package/dist/seq-tracker.d.ts.map +1 -1
- package/dist/seq-tracker.js +11 -7
- package/dist/seq-tracker.js.map +1 -1
- package/dist/tools/cross-sdk-agent.js +50 -12
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +3 -0
- package/dist/transport.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v2-e2ee.d.ts","sourceRoot":"","sources":["../../src/client/v2-e2ee.ts"],"names":[],"mappings":"AAUA,OAAO,EAAiC,KAAK,UAAU,EAAkB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7H,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,cAAc,CAAC;AAE9D,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"v2-e2ee.d.ts","sourceRoot":"","sources":["../../src/client/v2-e2ee.ts"],"names":[],"mappings":"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"}
|
package/dist/client/v2-e2ee.js
CHANGED
|
@@ -67,11 +67,32 @@ function deduplicateForwardPageMessages(value, afterSeq) {
|
|
|
67
67
|
}
|
|
68
68
|
return [...bySeq.entries()].sort(([a], [b]) => a - b).map(([, row]) => row);
|
|
69
69
|
}
|
|
70
|
-
function
|
|
70
|
+
function contiguousPullSeq(afterSeq, seqs, proof) {
|
|
71
|
+
// Forward 原始页中的缺号视为服务端永久空号;页完成后按页内最大
|
|
72
|
+
// seq 推进 A,避免单页空洞阻塞后续 pull/ACK。
|
|
73
|
+
let contiguous = seqs.length > 0 ? Math.max(afterSeq, ...seqs) : afterSeq;
|
|
74
|
+
const serverProof = safeNonNegativeSeq(proof);
|
|
75
|
+
return serverProof !== null ? Math.max(contiguous, serverProof) : contiguous;
|
|
76
|
+
}
|
|
77
|
+
function deduplicatePulledResults(messages) {
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
return messages.filter((message) => {
|
|
80
|
+
if (!isJsonObject(message))
|
|
81
|
+
return true;
|
|
82
|
+
const seq = safeNonNegativeSeq(message.seq);
|
|
83
|
+
if (seq === null || seq <= 0)
|
|
84
|
+
return true;
|
|
85
|
+
if (seen.has(seq))
|
|
86
|
+
return false;
|
|
87
|
+
seen.add(seq);
|
|
88
|
+
return true;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function shouldContinueForwardPage({ rawCount, nextAfterSeq, nextAfter, limit, hasMoreField, hasMore, serverHead, pendingAckSeq, observedUpper, }) {
|
|
71
92
|
// 无新 seq 或游标未前进时必须停止,避免错误元数据造成循环。
|
|
72
93
|
if (rawCount <= 0 || nextAfter <= nextAfterSeq)
|
|
73
94
|
return false;
|
|
74
|
-
if (hasMore || serverHead > nextAfter || pendingAckSeq > 0)
|
|
95
|
+
if (hasMore || serverHead > nextAfter || pendingAckSeq > 0 || observedUpper > nextAfter)
|
|
75
96
|
return true;
|
|
76
97
|
// 仅旧服务缺失 has_more 时,以满页保留兼容续拉。
|
|
77
98
|
return !hasMoreField && limit > 0 && rawCount >= limit;
|
|
@@ -889,7 +910,7 @@ export class V2E2EECoordinator {
|
|
|
889
910
|
client._clientLog.warn(`V2 sender IK pending group bootstrap failed group=${groupId}: ${String(formatE2EEError(exc))}`);
|
|
890
911
|
}
|
|
891
912
|
}
|
|
892
|
-
if (!session.getPeerIK(fromAid, senderDeviceId)) {
|
|
913
|
+
if (typeof session.getPeerIK === 'function' && !session.getPeerIK(fromAid, senderDeviceId)) {
|
|
893
914
|
await this.getV2SenderPubDer(fromAid, senderDeviceId);
|
|
894
915
|
}
|
|
895
916
|
}
|
|
@@ -930,6 +951,8 @@ export class V2E2EECoordinator {
|
|
|
930
951
|
client._v2SenderIKPending.delete(key);
|
|
931
952
|
const seq = Number(entry.msg.seq ?? 0);
|
|
932
953
|
if (entry.groupId) {
|
|
954
|
+
if (client._delivery.isSelfSentGroupMessage?.(entry.msg))
|
|
955
|
+
continue;
|
|
933
956
|
plaintext = normalizeGroupMentionMode(plaintext, entry.msg, entry.msg.envelope_json);
|
|
934
957
|
plaintext.group_id = entry.groupId;
|
|
935
958
|
await client._publishPulledMessage('group.message_created', `group:${entry.groupId}`, seq, plaintext, false, 'pending_retry');
|
|
@@ -1123,6 +1146,9 @@ export class V2E2EECoordinator {
|
|
|
1123
1146
|
client._clientLog.warn(`Group Tail 单条消息解密失败,连续性证明仍保留: group=${groupId}, seq=${seq}`);
|
|
1124
1147
|
return null;
|
|
1125
1148
|
}
|
|
1149
|
+
if (publish && !history && client._delivery.isSelfSentGroupMessage?.(msg)) {
|
|
1150
|
+
return plaintext;
|
|
1151
|
+
}
|
|
1126
1152
|
if (publish) {
|
|
1127
1153
|
if (orderedPublish) {
|
|
1128
1154
|
await client._delivery.publishOrderedMessage('group.message_created', `group:${groupId}`, seq, plaintext, source);
|
|
@@ -1139,14 +1165,6 @@ export class V2E2EECoordinator {
|
|
|
1139
1165
|
async decodeInlineGroupMessage(msg, groupId, groupAid) {
|
|
1140
1166
|
return await this.decodeGroupWindowMessage(msg, groupId, groupAid, false, false, 'inline_push');
|
|
1141
1167
|
}
|
|
1142
|
-
async applyTailFloor(ns, floor) {
|
|
1143
|
-
const client = this.client;
|
|
1144
|
-
if (!ns || floor <= 0 || client._seqTracker.getContiguousSeq(ns) >= floor)
|
|
1145
|
-
return;
|
|
1146
|
-
client._seqTracker.forceContiguousSeq(ns, floor);
|
|
1147
|
-
client._persistSeq(ns);
|
|
1148
|
-
await client._saveSeqTrackerState?.();
|
|
1149
|
-
}
|
|
1150
1168
|
async pullV2TailInternal(params, deferPublish = false) {
|
|
1151
1169
|
const client = this.client;
|
|
1152
1170
|
if (params.window_mode !== 'tail')
|
|
@@ -1159,9 +1177,6 @@ export class V2E2EECoordinator {
|
|
|
1159
1177
|
if (ns)
|
|
1160
1178
|
client._delivery.onPullStarted?.(ns);
|
|
1161
1179
|
const result = await client._callRawV2Rpc('message.v2.pull', { window_mode: 'tail', after_seq: afterSeq, limit, _rpc_foreground: true });
|
|
1162
|
-
const floor = Number(result.retention_floor_seq ?? 0);
|
|
1163
|
-
const previous = ns ? client._seqTracker.getSyncState(ns) : null;
|
|
1164
|
-
await this.applyTailFloor(ns, Number.isSafeInteger(floor) ? floor : 0);
|
|
1165
1180
|
const page = validateTailPage(result, afterSeq, limit);
|
|
1166
1181
|
if (ns) {
|
|
1167
1182
|
client._seqTracker.commitTailWindow(ns, {
|
|
@@ -1177,8 +1192,6 @@ export class V2E2EECoordinator {
|
|
|
1177
1192
|
decoded.push(plaintext);
|
|
1178
1193
|
}
|
|
1179
1194
|
const ack = ns ? client._seqTracker.getContiguousSeq(ns) : 0;
|
|
1180
|
-
if (previous && ack > previous.ack)
|
|
1181
|
-
await this.ackV2(ack);
|
|
1182
1195
|
if (ns)
|
|
1183
1196
|
client._delivery.onPullPage?.(ns, decoded.length, result.has_more === true, page.head, typeof result.remaining === 'number' && Number.isSafeInteger(result.remaining) && result.remaining >= 0 ? result.remaining : null, page.messages.length, ack, page.head);
|
|
1184
1197
|
client._delivery.onPullWorkSettled?.();
|
|
@@ -1297,6 +1310,7 @@ export class V2E2EECoordinator {
|
|
|
1297
1310
|
? client._seqTracker.snapshotNamespace(ns)
|
|
1298
1311
|
: null;
|
|
1299
1312
|
const pageMaxSeq = seqs.length > 0 ? Math.max(...seqs) : nextAfterSeq;
|
|
1313
|
+
const pageContiguousSeq = contiguousPullSeq(pageContigBefore, seqs, result.contiguous_seq);
|
|
1300
1314
|
const deferredKeyFetches = new Map();
|
|
1301
1315
|
let blockedSeq = 0;
|
|
1302
1316
|
const pageDecryptedBefore = decrypted.length;
|
|
@@ -1392,7 +1406,7 @@ export class V2E2EECoordinator {
|
|
|
1392
1406
|
const serverAckSeq = parsedServerAckSeq ?? 0;
|
|
1393
1407
|
const retentionFloor = Math.max(0, Number(result.retention_floor_seq ?? 0));
|
|
1394
1408
|
if (ns) {
|
|
1395
|
-
const commitTarget =
|
|
1409
|
+
const commitTarget = Math.max(pageContigBefore, Number.isFinite(retentionFloor) ? retentionFloor : 0, pageCount === 1 ? deferredServerCursor : 0, serverAckSeq, blockedSeq > 0 ? blockedSeq - 1 : pageContiguousSeq);
|
|
1396
1410
|
let ackSeq = pageContigBefore;
|
|
1397
1411
|
let contigAdvanced = false;
|
|
1398
1412
|
try {
|
|
@@ -1436,14 +1450,13 @@ export class V2E2EECoordinator {
|
|
|
1436
1450
|
const knownServerAckSeq = hasServerAckSeq
|
|
1437
1451
|
? serverAckSeq
|
|
1438
1452
|
: (pageCount === 1 ? deferredServerCursor : 0);
|
|
1439
|
-
const ackNeeded =
|
|
1440
|
-
&& ackSeq > 0
|
|
1453
|
+
const ackNeeded = ackSeq > 0
|
|
1441
1454
|
&& ackSeq > lastAutoAckSeq
|
|
1442
1455
|
&& ((hasServerAckSeq && ackSeq > serverAckSeq)
|
|
1443
1456
|
|| (contigAdvanced && ackSeq > knownServerAckSeq));
|
|
1444
1457
|
if (ackNeeded) {
|
|
1445
1458
|
this.recordForwardAck(ns, ackSeq);
|
|
1446
|
-
const nextAfter = Math.max(
|
|
1459
|
+
const nextAfter = Math.max(pageContiguousSeq, nextAfterSeq);
|
|
1447
1460
|
const canContinuePage = blockedSeq <= 0 && messages.length > 0 && nextAfter > nextAfterSeq;
|
|
1448
1461
|
if (canContinuePage) {
|
|
1449
1462
|
pendingAckSeq = Math.max(pendingAckSeq, ackSeq);
|
|
@@ -1457,7 +1470,7 @@ export class V2E2EECoordinator {
|
|
|
1457
1470
|
}
|
|
1458
1471
|
if (ns)
|
|
1459
1472
|
client._delivery.onPullPage?.(ns, decrypted.length - pageDecryptedBefore, hasMore, pageMaxSeq, typeof result.remaining === 'number' && Number.isSafeInteger(result.remaining) && result.remaining >= 0 ? result.remaining : null, messages.length, client._seqTracker.getContiguousSeq(ns), pageMaxSeq);
|
|
1460
|
-
const nextAfter = Math.max(
|
|
1473
|
+
const nextAfter = Math.max(pageContiguousSeq, nextAfterSeq);
|
|
1461
1474
|
const rawCount = messages.length;
|
|
1462
1475
|
if (blockedSeq > 0)
|
|
1463
1476
|
break;
|
|
@@ -1470,6 +1483,8 @@ export class V2E2EECoordinator {
|
|
|
1470
1483
|
hasMore,
|
|
1471
1484
|
serverHead,
|
|
1472
1485
|
pendingAckSeq,
|
|
1486
|
+
observedUpper: typeof client._seqTracker.getMaxSeenSeq === 'function'
|
|
1487
|
+
? client._seqTracker.getMaxSeenSeq(ns) : nextAfter,
|
|
1473
1488
|
});
|
|
1474
1489
|
if (!shouldContinue)
|
|
1475
1490
|
break;
|
|
@@ -1493,7 +1508,7 @@ export class V2E2EECoordinator {
|
|
|
1493
1508
|
}
|
|
1494
1509
|
}
|
|
1495
1510
|
client._delivery.onPullWorkSettled?.();
|
|
1496
|
-
return decrypted;
|
|
1511
|
+
return deduplicatePulledResults(decrypted);
|
|
1497
1512
|
}
|
|
1498
1513
|
async confirmForwardP2PAck(upToSeq, inlineGeneration) {
|
|
1499
1514
|
const ns = this.client._aid ? `p2p:${this.client._aid}` : '';
|
|
@@ -1591,10 +1606,7 @@ export class V2E2EECoordinator {
|
|
|
1591
1606
|
if (isJsonObject(result)) {
|
|
1592
1607
|
const seq = Number(result.seq ?? 0);
|
|
1593
1608
|
if (seq > 0) {
|
|
1594
|
-
|
|
1595
|
-
client._seqTracker.onMessageSeq(ns, seq);
|
|
1596
|
-
client._markPublishedSeq(ns, seq);
|
|
1597
|
-
await client._saveSeqTrackerState();
|
|
1609
|
+
client._markPublishedSeq(`group:${gid}`, seq);
|
|
1598
1610
|
}
|
|
1599
1611
|
}
|
|
1600
1612
|
return client._delivery.attachSendResultEnvelope('group.send', withExplicitGroupAid({
|
|
@@ -1615,10 +1627,7 @@ export class V2E2EECoordinator {
|
|
|
1615
1627
|
if (isJsonObject(result)) {
|
|
1616
1628
|
const seq = Number(result.seq ?? 0);
|
|
1617
1629
|
if (seq > 0) {
|
|
1618
|
-
|
|
1619
|
-
client._seqTracker.onMessageSeq(ns, seq);
|
|
1620
|
-
client._markPublishedSeq(ns, seq);
|
|
1621
|
-
await client._saveSeqTrackerState();
|
|
1630
|
+
client._markPublishedSeq(`group:${gid}`, seq);
|
|
1622
1631
|
}
|
|
1623
1632
|
}
|
|
1624
1633
|
return client._delivery.attachSendResultEnvelope('group.send', withExplicitGroupAid({
|
|
@@ -1660,9 +1669,6 @@ export class V2E2EECoordinator {
|
|
|
1660
1669
|
const resultAid = String(result.group_aid ?? result.groupAid ?? '').trim();
|
|
1661
1670
|
if (resultAid)
|
|
1662
1671
|
groupAid = resultAid;
|
|
1663
|
-
const floor = Number(result.retention_floor_message_seq ?? result.retention_floor_seq ?? 0);
|
|
1664
|
-
const previous = client._seqTracker.getSyncState(ns);
|
|
1665
|
-
await this.applyTailFloor(ns, Number.isSafeInteger(floor) ? floor : 0);
|
|
1666
1672
|
const page = validateTailPage(result, afterSeq, limit);
|
|
1667
1673
|
client._seqTracker.commitTailWindow(ns, {
|
|
1668
1674
|
windowStartSeq: page.windowStart, headSeq: page.head, coveredThroughSeq: page.head, pageLimit: limit,
|
|
@@ -1677,8 +1683,6 @@ export class V2E2EECoordinator {
|
|
|
1677
1683
|
decoded.push(plaintext);
|
|
1678
1684
|
}
|
|
1679
1685
|
const ack = client._seqTracker.getContiguousSeq(ns);
|
|
1680
|
-
if (ack > previous.ack)
|
|
1681
|
-
await this.ackGroupV2(groupId, ack, groupAid);
|
|
1682
1686
|
if (ownsCursor)
|
|
1683
1687
|
client._delivery.onPullPage?.(ns, decoded.length, result.has_more === true, page.head, typeof result.remaining === 'number' && Number.isSafeInteger(result.remaining) && result.remaining >= 0 ? result.remaining : null, page.messages.length, ack, page.head);
|
|
1684
1688
|
client._delivery.onPullWorkSettled?.();
|
|
@@ -1828,6 +1832,7 @@ export class V2E2EECoordinator {
|
|
|
1828
1832
|
? client._seqTracker.snapshotNamespace(ns)
|
|
1829
1833
|
: null;
|
|
1830
1834
|
const pageMaxSeq = seqs.length > 0 ? Math.max(...seqs) : nextAfterSeq;
|
|
1835
|
+
const pageContiguousSeq = contiguousPullSeq(pageContigBefore, seqs, result.contiguous_seq);
|
|
1831
1836
|
const deferredKeyFetches = new Map();
|
|
1832
1837
|
let blockedSeq = 0;
|
|
1833
1838
|
const pageDecryptedBefore = decrypted.length;
|
|
@@ -1868,7 +1873,12 @@ export class V2E2EECoordinator {
|
|
|
1868
1873
|
};
|
|
1869
1874
|
v1Msg = normalizeGroupMentionMode(v1Msg, msg, msg.envelope_json);
|
|
1870
1875
|
attachGatewayProximity(v1Msg, msg);
|
|
1871
|
-
|
|
1876
|
+
if (!client._delivery.isSelfSentGroupMessage?.(msg)) {
|
|
1877
|
+
await client._publishPulledMessage('group.message_created', ns, seq, v1Msg, false);
|
|
1878
|
+
}
|
|
1879
|
+
else {
|
|
1880
|
+
client._markPublishedSeq(ns, seq);
|
|
1881
|
+
}
|
|
1872
1882
|
decrypted.push(v1Msg);
|
|
1873
1883
|
continue;
|
|
1874
1884
|
}
|
|
@@ -1904,7 +1914,12 @@ export class V2E2EECoordinator {
|
|
|
1904
1914
|
if (plaintext) {
|
|
1905
1915
|
plaintext.group_id = gid;
|
|
1906
1916
|
plaintext.group_aid = eventGroupAid;
|
|
1907
|
-
|
|
1917
|
+
if (!client._delivery.isSelfSentGroupMessage?.(msg)) {
|
|
1918
|
+
await client._publishPulledMessage('group.message_created', ns, seq, plaintext, false);
|
|
1919
|
+
}
|
|
1920
|
+
else {
|
|
1921
|
+
client._markPublishedSeq(ns, seq);
|
|
1922
|
+
}
|
|
1908
1923
|
decrypted.push(plaintext);
|
|
1909
1924
|
}
|
|
1910
1925
|
}
|
|
@@ -1933,7 +1948,12 @@ export class V2E2EECoordinator {
|
|
|
1933
1948
|
plaintext = normalizeGroupMentionMode(plaintext, msg, msg.envelope_json);
|
|
1934
1949
|
plaintext.group_id = gid;
|
|
1935
1950
|
plaintext.group_aid = eventGroupAid;
|
|
1936
|
-
|
|
1951
|
+
if (!client._delivery.isSelfSentGroupMessage?.(msg)) {
|
|
1952
|
+
await client._publishPulledMessage('group.message_created', ns, seq, plaintext, false);
|
|
1953
|
+
}
|
|
1954
|
+
else {
|
|
1955
|
+
client._markPublishedSeq(ns, seq);
|
|
1956
|
+
}
|
|
1937
1957
|
decrypted.push(plaintext);
|
|
1938
1958
|
}
|
|
1939
1959
|
const hasServerCursor = cursor !== null && Object.prototype.hasOwnProperty.call(cursor, 'current_seq');
|
|
@@ -1942,7 +1962,7 @@ export class V2E2EECoordinator {
|
|
|
1942
1962
|
const retentionFloor = Math.max(Number(result.retention_floor_message_seq ?? result.retention_floor_seq ?? 0), Number(cursor?.retention_floor_seq ?? 0));
|
|
1943
1963
|
const visibilityFloor = Math.max(0, Math.max(0, Number(result.earliest_available_message_seq ?? 1) - 1), Number(cursor?.join_seq ?? 0));
|
|
1944
1964
|
const effectiveFloor = Math.max(retentionFloor, visibilityFloor);
|
|
1945
|
-
const commitTarget =
|
|
1965
|
+
const commitTarget = Math.max(pageContigBefore, Number.isFinite(effectiveFloor) ? effectiveFloor : 0, ownsCursor && pageCount === 1 ? deferredServerCursor : 0, cursorCurrentSeq, blockedSeq > 0 ? blockedSeq - 1 : pageContiguousSeq);
|
|
1946
1966
|
let ackSeq = pageContigBefore;
|
|
1947
1967
|
let contigAdvanced = false;
|
|
1948
1968
|
if (ownsCursor) {
|
|
@@ -1989,15 +2009,14 @@ export class V2E2EECoordinator {
|
|
|
1989
2009
|
const knownServerCursorSeq = hasServerCursor
|
|
1990
2010
|
? cursorCurrentSeq
|
|
1991
2011
|
: (ownsCursor && pageCount === 1 ? deferredServerCursor : 0);
|
|
1992
|
-
const ackNeeded =
|
|
1993
|
-
&& ackSeq > 0
|
|
2012
|
+
const ackNeeded = ackSeq > 0
|
|
1994
2013
|
&& ackSeq > lastAutoAckSeq
|
|
1995
2014
|
&& ownsCursor
|
|
1996
2015
|
&& ((hasServerCursor && ackSeq > cursorCurrentSeq)
|
|
1997
2016
|
|| (contigAdvanced && ackSeq > knownServerCursorSeq));
|
|
1998
2017
|
if (ackNeeded) {
|
|
1999
2018
|
this.recordForwardAck(ns, ackSeq);
|
|
2000
|
-
const nextAfter = Math.max(
|
|
2019
|
+
const nextAfter = Math.max(pageContiguousSeq, nextAfterSeq);
|
|
2001
2020
|
const canContinuePage = blockedSeq <= 0 && messages.length > 0 && nextAfter > nextAfterSeq && ownsCursor;
|
|
2002
2021
|
if (canContinuePage) {
|
|
2003
2022
|
pendingAckSeq = Math.max(pendingAckSeq, ackSeq);
|
|
@@ -2008,7 +2027,7 @@ export class V2E2EECoordinator {
|
|
|
2008
2027
|
lastAutoAckSeq = Math.max(lastAutoAckSeq, ackSeq);
|
|
2009
2028
|
}
|
|
2010
2029
|
}
|
|
2011
|
-
const nextAfter = Math.max(
|
|
2030
|
+
const nextAfter = Math.max(pageContiguousSeq, nextAfterSeq);
|
|
2012
2031
|
if (!ownsCursor)
|
|
2013
2032
|
break;
|
|
2014
2033
|
const rawCount = messages.length;
|
|
@@ -2023,6 +2042,8 @@ export class V2E2EECoordinator {
|
|
|
2023
2042
|
hasMore,
|
|
2024
2043
|
serverHead,
|
|
2025
2044
|
pendingAckSeq,
|
|
2045
|
+
observedUpper: typeof client._seqTracker.getMaxSeenSeq === 'function'
|
|
2046
|
+
? client._seqTracker.getMaxSeenSeq(ns) : nextAfter,
|
|
2026
2047
|
});
|
|
2027
2048
|
if (!shouldContinue)
|
|
2028
2049
|
break;
|
|
@@ -2047,7 +2068,7 @@ export class V2E2EECoordinator {
|
|
|
2047
2068
|
}
|
|
2048
2069
|
}
|
|
2049
2070
|
client._delivery.onPullWorkSettled?.();
|
|
2050
|
-
return decrypted;
|
|
2071
|
+
return deduplicatePulledResults(decrypted);
|
|
2051
2072
|
}
|
|
2052
2073
|
async confirmForwardGroupAck(groupId, upToSeq, groupAid) {
|
|
2053
2074
|
const ns = `group:${String(groupId ?? '').trim()}`;
|