@tailuge/messaging 1.27.0 → 1.28.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.
- package/dist/MessageDeduplicator.d.ts +42 -0
- package/dist/MessageDeduplicator.js +84 -0
- package/dist/MessageDeduplicator.js.map +1 -0
- package/dist/lobby.d.ts +53 -1
- package/dist/lobby.js +165 -11
- package/dist/lobby.js.map +1 -1
- package/dist/nchanclient.js +4 -4
- package/dist/nchanclient.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ChallengeMessage, PresenceMessage } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Grace window (ms) during which an internal Nchan auto-leave arriving after
|
|
4
|
+
* a user join/heartbeat is treated as stale cleanup for the previous connection
|
|
5
|
+
* rather than proof that the new presence is gone.
|
|
6
|
+
*/
|
|
7
|
+
export declare const AUTO_LEAVE_REJOIN_GRACE_MS = 250;
|
|
8
|
+
/**
|
|
9
|
+
* Pure logic for deduplicating buffered Nchan replay messages.
|
|
10
|
+
*
|
|
11
|
+
* All methods are static and have no side effects — they take arrays of
|
|
12
|
+
* messages and return deduplicated arrays. The Lobby owns the buffer and
|
|
13
|
+
* calls these at settle time.
|
|
14
|
+
*/
|
|
15
|
+
export declare class MessageDeduplicator {
|
|
16
|
+
/**
|
|
17
|
+
* Challenge dedup: offer + resolution (accept/decline/cancel) for the same
|
|
18
|
+
* interaction pair → the offer is filtered out. Unresolved offers pass through.
|
|
19
|
+
*
|
|
20
|
+
* Uses a two-pass approach:
|
|
21
|
+
* Pass 1: collect resolved interaction keys from non-offer messages.
|
|
22
|
+
* Pass 2: filter out offers whose interaction key was resolved.
|
|
23
|
+
*/
|
|
24
|
+
static dedupeChallenges(messages: ChallengeMessage[]): ChallengeMessage[];
|
|
25
|
+
/**
|
|
26
|
+
* Presence dedup: per-userId, last message wins (FIFO buffered replay).
|
|
27
|
+
*
|
|
28
|
+
* Effect:
|
|
29
|
+
* join + leave → leave
|
|
30
|
+
* leave + join → join
|
|
31
|
+
* join + heartbeat → heartbeat (last)
|
|
32
|
+
* heartbeat + join → join (last)
|
|
33
|
+
*
|
|
34
|
+
* Preserves the original ordering of the first occurrence of each userId.
|
|
35
|
+
*/
|
|
36
|
+
static dedupePresence(messages: PresenceMessage[]): PresenceMessage[];
|
|
37
|
+
/**
|
|
38
|
+
* Returns a stable interaction key for a challenge message.
|
|
39
|
+
* "alice:bob" and "bob:alice" produce the same key.
|
|
40
|
+
*/
|
|
41
|
+
private static interactionKey;
|
|
42
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grace window (ms) during which an internal Nchan auto-leave arriving after
|
|
3
|
+
* a user join/heartbeat is treated as stale cleanup for the previous connection
|
|
4
|
+
* rather than proof that the new presence is gone.
|
|
5
|
+
*/
|
|
6
|
+
export const AUTO_LEAVE_REJOIN_GRACE_MS = 250;
|
|
7
|
+
/**
|
|
8
|
+
* Pure logic for deduplicating buffered Nchan replay messages.
|
|
9
|
+
*
|
|
10
|
+
* All methods are static and have no side effects — they take arrays of
|
|
11
|
+
* messages and return deduplicated arrays. The Lobby owns the buffer and
|
|
12
|
+
* calls these at settle time.
|
|
13
|
+
*/
|
|
14
|
+
export class MessageDeduplicator {
|
|
15
|
+
/**
|
|
16
|
+
* Challenge dedup: offer + resolution (accept/decline/cancel) for the same
|
|
17
|
+
* interaction pair → the offer is filtered out. Unresolved offers pass through.
|
|
18
|
+
*
|
|
19
|
+
* Uses a two-pass approach:
|
|
20
|
+
* Pass 1: collect resolved interaction keys from non-offer messages.
|
|
21
|
+
* Pass 2: filter out offers whose interaction key was resolved.
|
|
22
|
+
*/
|
|
23
|
+
static dedupeChallenges(messages) {
|
|
24
|
+
// Pass 1: collect resolved interaction keys
|
|
25
|
+
const resolved = new Set();
|
|
26
|
+
for (const msg of messages) {
|
|
27
|
+
if (msg.type !== "offer") {
|
|
28
|
+
resolved.add(MessageDeduplicator.interactionKey(msg));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Pass 2: filter out resolved offers, keep everything else
|
|
32
|
+
return messages.filter((msg) => {
|
|
33
|
+
if (msg.type !== "offer")
|
|
34
|
+
return true;
|
|
35
|
+
return !resolved.has(MessageDeduplicator.interactionKey(msg));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Presence dedup: per-userId, last message wins (FIFO buffered replay).
|
|
40
|
+
*
|
|
41
|
+
* Effect:
|
|
42
|
+
* join + leave → leave
|
|
43
|
+
* leave + join → join
|
|
44
|
+
* join + heartbeat → heartbeat (last)
|
|
45
|
+
* heartbeat + join → join (last)
|
|
46
|
+
*
|
|
47
|
+
* Preserves the original ordering of the first occurrence of each userId.
|
|
48
|
+
*/
|
|
49
|
+
static dedupePresence(messages) {
|
|
50
|
+
// Forward pass: overwrite in a Map so the last message per userId wins.
|
|
51
|
+
// Map preserves insertion order, keeping the first occurrence position.
|
|
52
|
+
// Exception: internal Nchan auto-leaves that arrive within the grace window
|
|
53
|
+
// of a prior join/heartbeat are suppressed — they are stale cleanup for a
|
|
54
|
+
// previous connection, not proof that the new presence is gone.
|
|
55
|
+
const last = new Map();
|
|
56
|
+
for (const msg of messages) {
|
|
57
|
+
const prev = last.get(msg.userId);
|
|
58
|
+
if (prev &&
|
|
59
|
+
prev.type !== "leave" &&
|
|
60
|
+
msg.type === "leave" &&
|
|
61
|
+
msg.meta?.origin === "internal") {
|
|
62
|
+
const leaveTs = msg.meta?.ts;
|
|
63
|
+
const prevTs = prev.meta?.ts ?? prev.clientTs;
|
|
64
|
+
if (leaveTs !== undefined &&
|
|
65
|
+
prevTs !== undefined &&
|
|
66
|
+
leaveTs >= prevTs &&
|
|
67
|
+
leaveTs - prevTs <= AUTO_LEAVE_REJOIN_GRACE_MS) {
|
|
68
|
+
// Suppress the stale auto-leave — keep the prior join/heartbeat
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
last.set(msg.userId, msg);
|
|
73
|
+
}
|
|
74
|
+
return [...last.values()];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Returns a stable interaction key for a challenge message.
|
|
78
|
+
* "alice:bob" and "bob:alice" produce the same key.
|
|
79
|
+
*/
|
|
80
|
+
static interactionKey(msg) {
|
|
81
|
+
return [msg.challengerId, msg.challengeeId].sort().join(":");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=MessageDeduplicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageDeduplicator.js","sourceRoot":"","sources":["../src/MessageDeduplicator.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,OAAO,mBAAmB;IAC9B;;;;;;;OAOG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAA4B;QAClD,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzB,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,cAAc,CAAC,QAA2B;QAC/C,wEAAwE;QACxE,wEAAwE;QACxE,4EAA4E;QAC5E,0EAA0E;QAC1E,gEAAgE;QAChE,MAAM,IAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,IACE,IAAI;gBACJ,IAAI,CAAC,IAAI,KAAK,OAAO;gBACrB,GAAG,CAAC,IAAI,KAAK,OAAO;gBACpB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,EAC/B,CAAC;gBACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC;gBAC9C,IACE,OAAO,KAAK,SAAS;oBACrB,MAAM,KAAK,SAAS;oBACpB,OAAO,IAAI,MAAM;oBACjB,OAAO,GAAG,MAAM,IAAI,0BAA0B,EAC9C,CAAC;oBACD,gEAAgE;oBAChE,SAAS;gBACX,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,cAAc,CAAC,GAAqB;QACjD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;CACF"}
|
package/dist/lobby.d.ts
CHANGED
|
@@ -18,11 +18,15 @@ export declare class Lobby {
|
|
|
18
18
|
private challengeListeners;
|
|
19
19
|
private chatListeners;
|
|
20
20
|
private pendingChallenges;
|
|
21
|
-
private deduplicator;
|
|
22
21
|
private subscription;
|
|
23
22
|
private isJoined;
|
|
24
23
|
private heartbeatTimer?;
|
|
25
24
|
private presenceMessageCount;
|
|
25
|
+
private joinSentinelTs;
|
|
26
|
+
private settledListeners;
|
|
27
|
+
private isSettled;
|
|
28
|
+
private unsettledChallengeMessages;
|
|
29
|
+
private unsettledPresenceMessages;
|
|
26
30
|
private readonly heartbeatInterval;
|
|
27
31
|
constructor(nchan: NchanClient, currentUser: PresenceMessage, options?: LobbyOptions);
|
|
28
32
|
/**
|
|
@@ -47,10 +51,29 @@ export declare class Lobby {
|
|
|
47
51
|
resumeHeartbeat(): void;
|
|
48
52
|
private startHeartbeat;
|
|
49
53
|
private stopHeartbeat;
|
|
54
|
+
/**
|
|
55
|
+
* Whether the lobby has finished replaying buffered Nchan messages and
|
|
56
|
+
* caught up to realtime. True once the sentinel is detected.
|
|
57
|
+
*/
|
|
58
|
+
get settled(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Registers a callback that fires when the lobby has caught up to realtime
|
|
61
|
+
* after Nchan buffer replay. The sentinel is our own join presence message
|
|
62
|
+
* with a matching clientTs, which Nchan delivers after all buffered messages
|
|
63
|
+
* (FIFO guarantee). The callback fires immediately on sentinel detection.
|
|
64
|
+
*
|
|
65
|
+
* Fires exactly once per join(). If already settled, fires immediately.
|
|
66
|
+
*/
|
|
67
|
+
onSettled(callback: () => void): void;
|
|
50
68
|
/**
|
|
51
69
|
* Emits the current list of online users whenever it changes.
|
|
52
70
|
*/
|
|
53
71
|
onUsersChange(callback: (users: PresenceMessage[]) => void): void;
|
|
72
|
+
/**
|
|
73
|
+
* Returns the current list of online users.
|
|
74
|
+
* For testing purposes and convenience.
|
|
75
|
+
*/
|
|
76
|
+
getUsers(): PresenceMessage[];
|
|
54
77
|
/**
|
|
55
78
|
* Stop listening to user changes.
|
|
56
79
|
*/
|
|
@@ -103,9 +126,38 @@ export declare class Lobby {
|
|
|
103
126
|
* fields are "meaningful" (e.g. userName, tableId) vs "noise" (e.g. meta.ts heartbeats).
|
|
104
127
|
*/
|
|
105
128
|
private handlePresenceUpdate;
|
|
129
|
+
/**
|
|
130
|
+
* Applies a single presence message to the users map and notifies listeners.
|
|
131
|
+
* Extracted so fireSettled can replay deduplicated presence messages.
|
|
132
|
+
*/
|
|
133
|
+
private applyPresence;
|
|
106
134
|
private handleChallenge;
|
|
135
|
+
/**
|
|
136
|
+
* Emits a challenge message if the current user is the intended recipient.
|
|
137
|
+
*/
|
|
138
|
+
private emitIfRelevant;
|
|
139
|
+
private emitChallenge;
|
|
107
140
|
private handleChat;
|
|
108
141
|
private notifyListeners;
|
|
109
142
|
private getUsersList;
|
|
143
|
+
/**
|
|
144
|
+
* Returns true when an internal Nchan auto-leave should be ignored because
|
|
145
|
+
* it arrived too soon after a fresh user join, making it likely stale
|
|
146
|
+
* cleanup for the previous connection rather than a real departure.
|
|
147
|
+
*/
|
|
148
|
+
private shouldIgnoreAutoLeave;
|
|
110
149
|
private hasMeaningfulChange;
|
|
150
|
+
/**
|
|
151
|
+
* Fires all onSettled listeners and replays deduplicated messages.
|
|
152
|
+
* Called immediately when the sentinel is detected.
|
|
153
|
+
*
|
|
154
|
+
* Delegates dedup to MessageDeduplicator, then replays the results:
|
|
155
|
+
* - Presence: applied via applyPresence (updates users map + notifies).
|
|
156
|
+
* - Challenges: emitted via emitIfRelevant if relevant to current user.
|
|
157
|
+
*/
|
|
158
|
+
private fireSettled;
|
|
159
|
+
/**
|
|
160
|
+
* Resets all settle-related state. Called on leave().
|
|
161
|
+
*/
|
|
162
|
+
private clearSettleState;
|
|
111
163
|
}
|
package/dist/lobby.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parseMessage, } from "./types.js";
|
|
2
2
|
import { Table } from "./table.js";
|
|
3
3
|
import { getUID } from "./utils/uid.js";
|
|
4
|
-
import {
|
|
4
|
+
import { MessageDeduplicator, AUTO_LEAVE_REJOIN_GRACE_MS } from "./MessageDeduplicator.js";
|
|
5
5
|
/**
|
|
6
6
|
* Manages the global lobby state, including real-time presence tracking and challenge flows.
|
|
7
7
|
*/
|
|
@@ -18,11 +18,14 @@ export class Lobby {
|
|
|
18
18
|
this.subscription = null;
|
|
19
19
|
this.isJoined = false;
|
|
20
20
|
this.presenceMessageCount = 0;
|
|
21
|
+
// Settle detection: sentinel-based replay completion
|
|
22
|
+
this.joinSentinelTs = null;
|
|
23
|
+
this.settledListeners = [];
|
|
24
|
+
this.isSettled = false;
|
|
25
|
+
// Buffered messages during unsettled period (Nchan buffer replay), deduped on settle
|
|
26
|
+
this.unsettledChallengeMessages = [];
|
|
27
|
+
this.unsettledPresenceMessages = [];
|
|
21
28
|
this.heartbeatInterval = options.heartbeatInterval || 60000;
|
|
22
|
-
this.deduplicator = new ChallengeDeduplicator((msg) => {
|
|
23
|
-
this.pendingChallenges.push(msg);
|
|
24
|
-
this.challengeListeners.forEach((cb) => cb(msg));
|
|
25
|
-
});
|
|
26
29
|
}
|
|
27
30
|
/**
|
|
28
31
|
* Subscribe to incoming chat messages directed at the current user.
|
|
@@ -65,11 +68,14 @@ export class Lobby {
|
|
|
65
68
|
};
|
|
66
69
|
await this.subscription.ready;
|
|
67
70
|
// Broadcast our own presence with retry on failure (e.g. slow cold start)
|
|
71
|
+
// Capture the clientTs to use as a sentinel for Nchan buffer replay completion.
|
|
68
72
|
for (let attempt = 1;; attempt++) {
|
|
69
73
|
try {
|
|
74
|
+
const sentinelTs = Date.now();
|
|
75
|
+
this.joinSentinelTs = sentinelTs;
|
|
70
76
|
await this.nchan.publishPresence({
|
|
71
77
|
...this.currentUser,
|
|
72
|
-
clientTs:
|
|
78
|
+
clientTs: sentinelTs,
|
|
73
79
|
});
|
|
74
80
|
break;
|
|
75
81
|
}
|
|
@@ -119,6 +125,29 @@ export class Lobby {
|
|
|
119
125
|
this.heartbeatTimer = undefined;
|
|
120
126
|
}
|
|
121
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Whether the lobby has finished replaying buffered Nchan messages and
|
|
130
|
+
* caught up to realtime. True once the sentinel is detected.
|
|
131
|
+
*/
|
|
132
|
+
get settled() {
|
|
133
|
+
return this.isSettled;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Registers a callback that fires when the lobby has caught up to realtime
|
|
137
|
+
* after Nchan buffer replay. The sentinel is our own join presence message
|
|
138
|
+
* with a matching clientTs, which Nchan delivers after all buffered messages
|
|
139
|
+
* (FIFO guarantee). The callback fires immediately on sentinel detection.
|
|
140
|
+
*
|
|
141
|
+
* Fires exactly once per join(). If already settled, fires immediately.
|
|
142
|
+
*/
|
|
143
|
+
onSettled(callback) {
|
|
144
|
+
if (this.isSettled) {
|
|
145
|
+
callback();
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.settledListeners.push(callback);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
122
151
|
/**
|
|
123
152
|
* Emits the current list of online users whenever it changes.
|
|
124
153
|
*/
|
|
@@ -127,6 +156,13 @@ export class Lobby {
|
|
|
127
156
|
// Immediate emit of current state to the new listener
|
|
128
157
|
callback(this.getUsersList());
|
|
129
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Returns the current list of online users.
|
|
161
|
+
* For testing purposes and convenience.
|
|
162
|
+
*/
|
|
163
|
+
getUsers() {
|
|
164
|
+
return this.getUsersList();
|
|
165
|
+
}
|
|
130
166
|
/**
|
|
131
167
|
* Stop listening to user changes.
|
|
132
168
|
*/
|
|
@@ -241,8 +277,8 @@ export class Lobby {
|
|
|
241
277
|
}
|
|
242
278
|
this.users.clear();
|
|
243
279
|
this.pendingChallenges = [];
|
|
244
|
-
this.deduplicator.clear();
|
|
245
280
|
this.presenceMessageCount = 0;
|
|
281
|
+
this.clearSettleState();
|
|
246
282
|
this.notifyListeners();
|
|
247
283
|
this.isJoined = false;
|
|
248
284
|
this.options.onLeave?.();
|
|
@@ -270,16 +306,40 @@ export class Lobby {
|
|
|
270
306
|
* fields are "meaningful" (e.g. userName, tableId) vs "noise" (e.g. meta.ts heartbeats).
|
|
271
307
|
*/
|
|
272
308
|
handlePresenceUpdate(msg) {
|
|
309
|
+
// Only buffer during an active join cycle (sentinel published, waiting for echo).
|
|
310
|
+
// If joinSentinelTs is null (tests bypassing join, or pre-join), apply directly.
|
|
311
|
+
if (!this.isSettled && this.joinSentinelTs !== null) {
|
|
312
|
+
this.unsettledPresenceMessages.push(msg);
|
|
313
|
+
if (msg.userId === this.currentUser.userId &&
|
|
314
|
+
msg.type === "join" &&
|
|
315
|
+
msg.clientTs === this.joinSentinelTs) {
|
|
316
|
+
this.fireSettled();
|
|
317
|
+
}
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
// Settled path (or no join cycle in progress): apply presence directly
|
|
321
|
+
this.applyPresence(msg);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Applies a single presence message to the users map and notifies listeners.
|
|
325
|
+
* Extracted so fireSettled can replay deduplicated presence messages.
|
|
326
|
+
*/
|
|
327
|
+
applyPresence(msg) {
|
|
273
328
|
const existing = this.users.get(msg.userId);
|
|
274
329
|
if (msg.type === "leave") {
|
|
330
|
+
if (this.shouldIgnoreAutoLeave(msg, existing))
|
|
331
|
+
return;
|
|
275
332
|
if (existing) {
|
|
276
333
|
this.users.delete(msg.userId);
|
|
277
334
|
this.notifyListeners();
|
|
278
335
|
}
|
|
279
336
|
}
|
|
280
337
|
else if (msg.type === "join") {
|
|
281
|
-
|
|
282
|
-
this.
|
|
338
|
+
// Ensure joins are never removed by deduplication
|
|
339
|
+
if (!this.users.has(msg.userId) || this.users.get(msg.userId)?.type === "leave") {
|
|
340
|
+
this.users.set(msg.userId, msg);
|
|
341
|
+
this.notifyListeners();
|
|
342
|
+
}
|
|
283
343
|
}
|
|
284
344
|
else {
|
|
285
345
|
// Heartbeat or other update
|
|
@@ -291,8 +351,42 @@ export class Lobby {
|
|
|
291
351
|
}
|
|
292
352
|
}
|
|
293
353
|
handleChallenge(msg) {
|
|
294
|
-
//
|
|
295
|
-
|
|
354
|
+
// During the unsettled period (Nchan buffer replay), buffer all challenge
|
|
355
|
+
// messages so we can dedup them when settle fires. This prevents stale
|
|
356
|
+
// offers from being emitted when a resolution (accept/decline/cancel)
|
|
357
|
+
// arrives later in the same buffer replay.
|
|
358
|
+
// Only buffer when actively in a join cycle (sentinel published, waiting for echo).
|
|
359
|
+
if (!this.isSettled && this.joinSentinelTs !== null) {
|
|
360
|
+
this.unsettledChallengeMessages.push(msg);
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
// Settled path: filter and emit directly
|
|
364
|
+
this.emitIfRelevant(msg);
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Emits a challenge message if the current user is the intended recipient.
|
|
368
|
+
*/
|
|
369
|
+
emitIfRelevant(msg) {
|
|
370
|
+
if (msg.type === "offer") {
|
|
371
|
+
if (msg.challengeeId === this.currentUser.userId) {
|
|
372
|
+
this.emitChallenge(msg);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
else if (msg.type === "cancel") {
|
|
376
|
+
if (msg.challengeeId === this.currentUser.userId) {
|
|
377
|
+
this.emitChallenge(msg);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
// accept, decline
|
|
382
|
+
if (msg.challengerId === this.currentUser.userId) {
|
|
383
|
+
this.emitChallenge(msg);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
emitChallenge(msg) {
|
|
388
|
+
this.pendingChallenges.push(msg);
|
|
389
|
+
this.challengeListeners.forEach((cb) => cb(msg));
|
|
296
390
|
}
|
|
297
391
|
handleChat(msg) {
|
|
298
392
|
if (msg.recipientId === this.currentUser.userId) {
|
|
@@ -306,6 +400,26 @@ export class Lobby {
|
|
|
306
400
|
getUsersList() {
|
|
307
401
|
return Array.from(this.users.values()).sort((a, b) => a.userName.localeCompare(b.userName));
|
|
308
402
|
}
|
|
403
|
+
/**
|
|
404
|
+
* Returns true when an internal Nchan auto-leave should be ignored because
|
|
405
|
+
* it arrived too soon after a fresh user join, making it likely stale
|
|
406
|
+
* cleanup for the previous connection rather than a real departure.
|
|
407
|
+
*/
|
|
408
|
+
shouldIgnoreAutoLeave(msg, existing) {
|
|
409
|
+
if (!existing)
|
|
410
|
+
return false;
|
|
411
|
+
if (msg.type !== "leave")
|
|
412
|
+
return false;
|
|
413
|
+
if (msg.meta?.origin !== "internal")
|
|
414
|
+
return false;
|
|
415
|
+
if (existing.type === "leave")
|
|
416
|
+
return false;
|
|
417
|
+
const leaveTs = msg.meta?.ts;
|
|
418
|
+
const existingTs = existing.meta?.ts ?? existing.clientTs;
|
|
419
|
+
if (leaveTs === undefined || existingTs === undefined)
|
|
420
|
+
return false;
|
|
421
|
+
return leaveTs >= existingTs && leaveTs - existingTs <= AUTO_LEAVE_REJOIN_GRACE_MS;
|
|
422
|
+
}
|
|
309
423
|
hasMeaningfulChange(oldMsg, nextMsg) {
|
|
310
424
|
return (oldMsg.userName !== nextMsg.userName ||
|
|
311
425
|
oldMsg.tableId !== nextMsg.tableId ||
|
|
@@ -313,5 +427,45 @@ export class Lobby {
|
|
|
313
427
|
oldMsg.opponentId !== nextMsg.opponentId ||
|
|
314
428
|
JSON.stringify(oldMsg.seek) !== JSON.stringify(nextMsg.seek));
|
|
315
429
|
}
|
|
430
|
+
/**
|
|
431
|
+
* Fires all onSettled listeners and replays deduplicated messages.
|
|
432
|
+
* Called immediately when the sentinel is detected.
|
|
433
|
+
*
|
|
434
|
+
* Delegates dedup to MessageDeduplicator, then replays the results:
|
|
435
|
+
* - Presence: applied via applyPresence (updates users map + notifies).
|
|
436
|
+
* - Challenges: emitted via emitIfRelevant if relevant to current user.
|
|
437
|
+
*/
|
|
438
|
+
fireSettled() {
|
|
439
|
+
if (this.isSettled)
|
|
440
|
+
return;
|
|
441
|
+
this.isSettled = true;
|
|
442
|
+
// Dedup and replay presence (per-userId last-message-wins)
|
|
443
|
+
const presenceMessages = MessageDeduplicator.dedupePresence(this.unsettledPresenceMessages);
|
|
444
|
+
for (const msg of presenceMessages) {
|
|
445
|
+
this.applyPresence(msg);
|
|
446
|
+
}
|
|
447
|
+
this.unsettledPresenceMessages = [];
|
|
448
|
+
// Dedup and replay challenges (offer+resolution → no-op)
|
|
449
|
+
const challengeMessages = MessageDeduplicator.dedupeChallenges(this.unsettledChallengeMessages);
|
|
450
|
+
for (const msg of challengeMessages) {
|
|
451
|
+
this.emitIfRelevant(msg);
|
|
452
|
+
}
|
|
453
|
+
this.unsettledChallengeMessages = [];
|
|
454
|
+
const listeners = [...this.settledListeners];
|
|
455
|
+
this.settledListeners = [];
|
|
456
|
+
for (const cb of listeners) {
|
|
457
|
+
cb();
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Resets all settle-related state. Called on leave().
|
|
462
|
+
*/
|
|
463
|
+
clearSettleState() {
|
|
464
|
+
this.joinSentinelTs = null;
|
|
465
|
+
this.isSettled = false;
|
|
466
|
+
this.settledListeners = [];
|
|
467
|
+
this.unsettledChallengeMessages = [];
|
|
468
|
+
this.unsettledPresenceMessages = [];
|
|
469
|
+
}
|
|
316
470
|
}
|
|
317
471
|
//# sourceMappingURL=lobby.js.map
|
package/dist/lobby.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lobby.js","sourceRoot":"","sources":["../src/lobby.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lobby.js","sourceRoot":"","sources":["../src/lobby.ts"],"names":[],"mappings":"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"}
|
package/dist/nchanclient.js
CHANGED
|
@@ -154,7 +154,7 @@ export class NchanClient {
|
|
|
154
154
|
resolveReady();
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
|
-
console.log(`[NchanClient ${ts()}] Connecting to ${url} (attempt ${reconnectAttempts + 1})`);
|
|
157
|
+
//console.log(`[NchanClient ${ts()}] Connecting to ${url} (attempt ${reconnectAttempts + 1})`);
|
|
158
158
|
ws = new globalThis.WebSocket(url);
|
|
159
159
|
if (connectionTimeoutTimer) {
|
|
160
160
|
clearTimeout(connectionTimeoutTimer);
|
|
@@ -180,14 +180,14 @@ export class NchanClient {
|
|
|
180
180
|
clearTimeout(connectionTimeoutTimer);
|
|
181
181
|
connectionTimeoutTimer = null;
|
|
182
182
|
}
|
|
183
|
-
console.log(`[NchanClient ${ts()}] Connected to ${url}`);
|
|
183
|
+
//console.log(`[NchanClient ${ts()}] Connected to ${url}`);
|
|
184
184
|
resolveReady();
|
|
185
185
|
if (isReconnect && subscription.onReconnect) {
|
|
186
186
|
subscription.onReconnect();
|
|
187
187
|
}
|
|
188
188
|
};
|
|
189
189
|
ws.onclose = (event) => {
|
|
190
|
-
console.log(`[NchanClient ${ts()}] Connection closed: ${url} (code=${event.code}, reason="${event.reason}", wasClean=${event.wasClean})`);
|
|
190
|
+
//console.log(`[NchanClient ${ts()}] Connection closed: ${url} (code=${event.code}, reason="${event.reason}", wasClean=${event.wasClean})`);
|
|
191
191
|
if (connectionTimeoutTimer) {
|
|
192
192
|
clearTimeout(connectionTimeoutTimer);
|
|
193
193
|
connectionTimeoutTimer = null;
|
|
@@ -199,7 +199,7 @@ export class NchanClient {
|
|
|
199
199
|
}
|
|
200
200
|
const delay = Math.min(Math.pow(2, reconnectAttempts) * initialReconnectDelay, maxReconnectDelay);
|
|
201
201
|
reconnectAttempts++;
|
|
202
|
-
console.log(`[NchanClient ${ts()}] Reconnecting in ${delay}ms (attempt ${reconnectAttempts})`);
|
|
202
|
+
//console.log(`[NchanClient ${ts()}] Reconnecting in ${delay}ms (attempt ${reconnectAttempts})`);
|
|
203
203
|
reconnectTimer = setTimeout(connect, delay);
|
|
204
204
|
reconnectTimer.unref?.();
|
|
205
205
|
}
|
package/dist/nchanclient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nchanclient.js","sourceRoot":"","sources":["../src/nchanclient.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"nchanclient.js","sourceRoot":"","sources":["../src/nchanclient.ts"],"names":[],"mappings":"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"}
|