@tailuge/messaging 1.26.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 +54 -2
- package/dist/lobby.js +183 -21
- package/dist/lobby.js.map +1 -1
- package/dist/messagingclient.d.ts +4 -0
- package/dist/messagingclient.js +6 -0
- package/dist/messagingclient.js.map +1 -1
- package/dist/nchanclient.d.ts +9 -0
- package/dist/nchanclient.js +18 -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
|
*/
|
|
@@ -68,7 +91,7 @@ export declare class Lobby {
|
|
|
68
91
|
* Challenge another user to a game.
|
|
69
92
|
* Returns the ID of the table created for the challenge.
|
|
70
93
|
*/
|
|
71
|
-
challenge(userId: string, ruleType: string, options?: Record<string, string
|
|
94
|
+
challenge(userId: string, ruleType: string, options?: Record<string, string>, nextTurnId?: string): Promise<string>;
|
|
72
95
|
/**
|
|
73
96
|
* Accept an incoming challenge.
|
|
74
97
|
* Returns the Table instance for the accepted game.
|
|
@@ -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
|
}
|
|
@@ -96,15 +102,22 @@ export class Lobby {
|
|
|
96
102
|
}
|
|
97
103
|
startHeartbeat() {
|
|
98
104
|
this.stopHeartbeat();
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
let firstTick = true;
|
|
106
|
+
const schedule = () => {
|
|
107
|
+
this.heartbeatTimer = setTimeout(async () => {
|
|
108
|
+
try {
|
|
109
|
+
await this.syncPresence({ type: "heartbeat" });
|
|
110
|
+
}
|
|
111
|
+
catch (_e) {
|
|
112
|
+
console.error("Failed to send heartbeat:", _e);
|
|
113
|
+
}
|
|
114
|
+
if (this.heartbeatTimer !== undefined)
|
|
115
|
+
schedule();
|
|
116
|
+
}, firstTick ? 3000 : this.heartbeatInterval);
|
|
117
|
+
this.heartbeatTimer.unref?.();
|
|
118
|
+
firstTick = false;
|
|
119
|
+
};
|
|
120
|
+
schedule();
|
|
108
121
|
}
|
|
109
122
|
stopHeartbeat() {
|
|
110
123
|
if (this.heartbeatTimer) {
|
|
@@ -112,6 +125,29 @@ export class Lobby {
|
|
|
112
125
|
this.heartbeatTimer = undefined;
|
|
113
126
|
}
|
|
114
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
|
+
}
|
|
115
151
|
/**
|
|
116
152
|
* Emits the current list of online users whenever it changes.
|
|
117
153
|
*/
|
|
@@ -120,6 +156,13 @@ export class Lobby {
|
|
|
120
156
|
// Immediate emit of current state to the new listener
|
|
121
157
|
callback(this.getUsersList());
|
|
122
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Returns the current list of online users.
|
|
161
|
+
* For testing purposes and convenience.
|
|
162
|
+
*/
|
|
163
|
+
getUsers() {
|
|
164
|
+
return this.getUsersList();
|
|
165
|
+
}
|
|
123
166
|
/**
|
|
124
167
|
* Stop listening to user changes.
|
|
125
168
|
*/
|
|
@@ -153,7 +196,7 @@ export class Lobby {
|
|
|
153
196
|
* Challenge another user to a game.
|
|
154
197
|
* Returns the ID of the table created for the challenge.
|
|
155
198
|
*/
|
|
156
|
-
async challenge(userId, ruleType, options) {
|
|
199
|
+
async challenge(userId, ruleType, options, nextTurnId) {
|
|
157
200
|
const tableId = getUID();
|
|
158
201
|
await this.nchan.publishChallenge({
|
|
159
202
|
type: "offer",
|
|
@@ -163,6 +206,7 @@ export class Lobby {
|
|
|
163
206
|
ruleType,
|
|
164
207
|
tableId,
|
|
165
208
|
options,
|
|
209
|
+
nextTurnId,
|
|
166
210
|
});
|
|
167
211
|
return tableId;
|
|
168
212
|
}
|
|
@@ -233,8 +277,8 @@ export class Lobby {
|
|
|
233
277
|
}
|
|
234
278
|
this.users.clear();
|
|
235
279
|
this.pendingChallenges = [];
|
|
236
|
-
this.deduplicator.clear();
|
|
237
280
|
this.presenceMessageCount = 0;
|
|
281
|
+
this.clearSettleState();
|
|
238
282
|
this.notifyListeners();
|
|
239
283
|
this.isJoined = false;
|
|
240
284
|
this.options.onLeave?.();
|
|
@@ -262,16 +306,40 @@ export class Lobby {
|
|
|
262
306
|
* fields are "meaningful" (e.g. userName, tableId) vs "noise" (e.g. meta.ts heartbeats).
|
|
263
307
|
*/
|
|
264
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) {
|
|
265
328
|
const existing = this.users.get(msg.userId);
|
|
266
329
|
if (msg.type === "leave") {
|
|
330
|
+
if (this.shouldIgnoreAutoLeave(msg, existing))
|
|
331
|
+
return;
|
|
267
332
|
if (existing) {
|
|
268
333
|
this.users.delete(msg.userId);
|
|
269
334
|
this.notifyListeners();
|
|
270
335
|
}
|
|
271
336
|
}
|
|
272
337
|
else if (msg.type === "join") {
|
|
273
|
-
|
|
274
|
-
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
|
+
}
|
|
275
343
|
}
|
|
276
344
|
else {
|
|
277
345
|
// Heartbeat or other update
|
|
@@ -283,8 +351,42 @@ export class Lobby {
|
|
|
283
351
|
}
|
|
284
352
|
}
|
|
285
353
|
handleChallenge(msg) {
|
|
286
|
-
//
|
|
287
|
-
|
|
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));
|
|
288
390
|
}
|
|
289
391
|
handleChat(msg) {
|
|
290
392
|
if (msg.recipientId === this.currentUser.userId) {
|
|
@@ -298,6 +400,26 @@ export class Lobby {
|
|
|
298
400
|
getUsersList() {
|
|
299
401
|
return Array.from(this.users.values()).sort((a, b) => a.userName.localeCompare(b.userName));
|
|
300
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
|
+
}
|
|
301
423
|
hasMeaningfulChange(oldMsg, nextMsg) {
|
|
302
424
|
return (oldMsg.userName !== nextMsg.userName ||
|
|
303
425
|
oldMsg.tableId !== nextMsg.tableId ||
|
|
@@ -305,5 +427,45 @@ export class Lobby {
|
|
|
305
427
|
oldMsg.opponentId !== nextMsg.opponentId ||
|
|
306
428
|
JSON.stringify(oldMsg.seek) !== JSON.stringify(nextMsg.seek));
|
|
307
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
|
+
}
|
|
308
470
|
}
|
|
309
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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"}
|
|
@@ -24,6 +24,10 @@ export declare class MessagingClient {
|
|
|
24
24
|
* Sets a global software version string that will be attached to all outgoing messages.
|
|
25
25
|
*/
|
|
26
26
|
setVersion(version: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Returns raw messages recorded by the underlying NchanClient for debugging.
|
|
29
|
+
*/
|
|
30
|
+
get recordedMessages(): string[];
|
|
27
31
|
/**
|
|
28
32
|
* Initializes the client and ensures connection readiness.
|
|
29
33
|
* In browser environments, attaches lifecycle event listeners.
|
package/dist/messagingclient.js
CHANGED
|
@@ -44,6 +44,12 @@ export class MessagingClient {
|
|
|
44
44
|
setVersion(version) {
|
|
45
45
|
this.nchan.setVersion(version);
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Returns raw messages recorded by the underlying NchanClient for debugging.
|
|
49
|
+
*/
|
|
50
|
+
get recordedMessages() {
|
|
51
|
+
return this.nchan.recordedMessages;
|
|
52
|
+
}
|
|
47
53
|
/**
|
|
48
54
|
* Initializes the client and ensures connection readiness.
|
|
49
55
|
* In browser environments, attaches lifecycle event listeners.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messagingclient.js","sourceRoot":"","sources":["../src/messagingclient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAgB,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;;GAGG;AACH,MAAM,OAAO,eAAe;IAc1B,YAAY,OAA4B;QAZhC,kBAAa,GAAY,EAAE,CAAC;QAC5B,mBAAc,GAAuB,IAAI,GAAG,EAAE,CAAC;QAC/C,iBAAY,GAAY,EAAE,CAAC;QAC3B,iBAAY,GAAmE,IAAI,GAAG,EAAE,CAAC;QACzF,eAAU,GAAG,KAAK,CAAC;QACnB,cAAS,GAAG,KAAK,CAAC;QAClB,sBAAiB,GAAG,KAAK,CAAC;QAE1B,kBAAa,GAAyB,IAAI,CAAC;QAC3C,gBAAW,GAAyB,IAAI,CAAC;QACzC,mBAAc,GAAgC,IAAI,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"messagingclient.js","sourceRoot":"","sources":["../src/messagingclient.ts"],"names":[],"mappings":"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"}
|
package/dist/nchanclient.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export type Subscription = {
|
|
|
7
7
|
export declare class NchanClient {
|
|
8
8
|
private server;
|
|
9
9
|
private version?;
|
|
10
|
+
private _recordedMessages;
|
|
10
11
|
constructor(server: string);
|
|
11
12
|
/**
|
|
12
13
|
* Sets the global version string to be included in all published messages.
|
|
@@ -15,6 +16,14 @@ export declare class NchanClient {
|
|
|
15
16
|
private getWsUrl;
|
|
16
17
|
private getHttpUrl;
|
|
17
18
|
private publish;
|
|
19
|
+
/**
|
|
20
|
+
* Records a raw message string for debugging/inspection.
|
|
21
|
+
*/
|
|
22
|
+
record(raw: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Returns all recorded messages as raw strings.
|
|
25
|
+
*/
|
|
26
|
+
get recordedMessages(): string[];
|
|
18
27
|
publishPresence(message: Omit<PresenceMessage, "messageType">, options?: {
|
|
19
28
|
keepalive?: boolean;
|
|
20
29
|
}): Promise<void>;
|
package/dist/nchanclient.js
CHANGED
|
@@ -6,6 +6,7 @@ const PATHS = {
|
|
|
6
6
|
};
|
|
7
7
|
export class NchanClient {
|
|
8
8
|
constructor(server) {
|
|
9
|
+
this._recordedMessages = [];
|
|
9
10
|
// Ensure server string doesn't end with a slash
|
|
10
11
|
this.server = server.replace(/\/$/, "");
|
|
11
12
|
// If no protocol is provided, determine it based on the environment
|
|
@@ -67,6 +68,18 @@ export class NchanClient {
|
|
|
67
68
|
throw new Error(`Publish failed: ${response.status}`);
|
|
68
69
|
}
|
|
69
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Records a raw message string for debugging/inspection.
|
|
73
|
+
*/
|
|
74
|
+
record(raw) {
|
|
75
|
+
this._recordedMessages.push(raw);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Returns all recorded messages as raw strings.
|
|
79
|
+
*/
|
|
80
|
+
get recordedMessages() {
|
|
81
|
+
return this._recordedMessages;
|
|
82
|
+
}
|
|
70
83
|
// Publishing
|
|
71
84
|
async publishPresence(message, options) {
|
|
72
85
|
return this.publish(PATHS.PRESENCE_PUBLISH, {
|
|
@@ -141,7 +154,7 @@ export class NchanClient {
|
|
|
141
154
|
resolveReady();
|
|
142
155
|
return;
|
|
143
156
|
}
|
|
144
|
-
console.log(`[NchanClient ${ts()}] Connecting to ${url} (attempt ${reconnectAttempts + 1})`);
|
|
157
|
+
//console.log(`[NchanClient ${ts()}] Connecting to ${url} (attempt ${reconnectAttempts + 1})`);
|
|
145
158
|
ws = new globalThis.WebSocket(url);
|
|
146
159
|
if (connectionTimeoutTimer) {
|
|
147
160
|
clearTimeout(connectionTimeoutTimer);
|
|
@@ -152,6 +165,7 @@ export class NchanClient {
|
|
|
152
165
|
}, CONNECTION_TIMEOUT_MS);
|
|
153
166
|
connectionTimeoutTimer.unref?.();
|
|
154
167
|
ws.onmessage = (event) => {
|
|
168
|
+
this.record(event.data);
|
|
155
169
|
onMessage(event.data);
|
|
156
170
|
};
|
|
157
171
|
ws.onopen = () => {
|
|
@@ -166,14 +180,14 @@ export class NchanClient {
|
|
|
166
180
|
clearTimeout(connectionTimeoutTimer);
|
|
167
181
|
connectionTimeoutTimer = null;
|
|
168
182
|
}
|
|
169
|
-
console.log(`[NchanClient ${ts()}] Connected to ${url}`);
|
|
183
|
+
//console.log(`[NchanClient ${ts()}] Connected to ${url}`);
|
|
170
184
|
resolveReady();
|
|
171
185
|
if (isReconnect && subscription.onReconnect) {
|
|
172
186
|
subscription.onReconnect();
|
|
173
187
|
}
|
|
174
188
|
};
|
|
175
189
|
ws.onclose = (event) => {
|
|
176
|
-
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})`);
|
|
177
191
|
if (connectionTimeoutTimer) {
|
|
178
192
|
clearTimeout(connectionTimeoutTimer);
|
|
179
193
|
connectionTimeoutTimer = null;
|
|
@@ -185,7 +199,7 @@ export class NchanClient {
|
|
|
185
199
|
}
|
|
186
200
|
const delay = Math.min(Math.pow(2, reconnectAttempts) * initialReconnectDelay, maxReconnectDelay);
|
|
187
201
|
reconnectAttempts++;
|
|
188
|
-
console.log(`[NchanClient ${ts()}] Reconnecting in ${delay}ms (attempt ${reconnectAttempts})`);
|
|
202
|
+
//console.log(`[NchanClient ${ts()}] Reconnecting in ${delay}ms (attempt ${reconnectAttempts})`);
|
|
189
203
|
reconnectTimer = setTimeout(connect, delay);
|
|
190
204
|
reconnectTimer.unref?.();
|
|
191
205
|
}
|
package/dist/nchanclient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nchanclient.js","sourceRoot":"","sources":["../src/nchanclient.ts"],"names":[],"mappings":"AAEA,MAAM,KAAK,GAAG;IACZ,gBAAgB,EAAE,yBAAyB;IAC3C,kBAAkB,EAAE,2BAA2B;IAC/C,aAAa,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,kBAAkB,OAAO,EAAE;IAC/D,eAAe,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,oBAAoB,OAAO,EAAE;CAC3D,CAAC;AAQX,MAAM,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"nchanclient.js","sourceRoot":"","sources":["../src/nchanclient.ts"],"names":[],"mappings":"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"}
|