@tailuge/messaging 1.34.0 → 1.36.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/messagingclient.d.ts +5 -2
- package/dist/messagingclient.js +6 -3
- package/dist/messagingclient.js.map +1 -1
- package/dist/table.d.ts +10 -1
- package/dist/table.js +41 -1
- package/dist/table.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Lobby, LobbyOptions } from "./lobby";
|
|
2
2
|
import { Table } from "./table";
|
|
3
|
-
import { PresenceMessage } from "./types";
|
|
3
|
+
import { PresenceMessage, TableMessage } from "./types";
|
|
4
4
|
/**
|
|
5
5
|
* The main messaging client library entry point.
|
|
6
6
|
* Encapsulates transport logic and provides access to lobby and table functionality.
|
|
@@ -54,12 +54,15 @@ export declare class MessagingClient {
|
|
|
54
54
|
*/
|
|
55
55
|
joinTable<T = any>(tableId: string, userId: string, options?: {
|
|
56
56
|
isSpectator?: boolean;
|
|
57
|
+
onMessage?: (event: TableMessage<T>) => void;
|
|
57
58
|
}): Promise<Table<T>>;
|
|
58
59
|
/**
|
|
59
60
|
* Subscribes to a table as a read-only spectator.
|
|
60
61
|
* Spectator departures do not trigger onOpponentLeft on player clients.
|
|
61
62
|
*/
|
|
62
|
-
spectateTable<T = any>(tableId: string, userId: string
|
|
63
|
+
spectateTable<T = any>(tableId: string, userId: string, options?: {
|
|
64
|
+
onMessage?: (event: TableMessage<T>) => void;
|
|
65
|
+
}): Promise<Table<T>>;
|
|
63
66
|
private handlePageHide;
|
|
64
67
|
private handlePageShow;
|
|
65
68
|
private handleVisibilityChange;
|
package/dist/messagingclient.js
CHANGED
|
@@ -165,13 +165,16 @@ export class MessagingClient {
|
|
|
165
165
|
const isSpectator = options?.isSpectator ?? false;
|
|
166
166
|
const existingTable = this.activeTables.find((t) => t.tableId === tableId);
|
|
167
167
|
if (existingTable) {
|
|
168
|
+
if (options?.onMessage) {
|
|
169
|
+
existingTable.onMessage(options.onMessage);
|
|
170
|
+
}
|
|
168
171
|
await existingTable.join();
|
|
169
172
|
return existingTable;
|
|
170
173
|
}
|
|
171
174
|
const lobby = isSpectator
|
|
172
175
|
? undefined
|
|
173
176
|
: this.activeLobbies.find((l) => l.currentUser.userId === userId);
|
|
174
|
-
const table = new Table(this.nchan, tableId, userId, lobby, isSpectator);
|
|
177
|
+
const table = new Table(this.nchan, tableId, userId, lobby, isSpectator, options?.onMessage);
|
|
175
178
|
await table.join();
|
|
176
179
|
this.activeTables.push(table);
|
|
177
180
|
if (lobby) {
|
|
@@ -183,8 +186,8 @@ export class MessagingClient {
|
|
|
183
186
|
* Subscribes to a table as a read-only spectator.
|
|
184
187
|
* Spectator departures do not trigger onOpponentLeft on player clients.
|
|
185
188
|
*/
|
|
186
|
-
async spectateTable(tableId, userId) {
|
|
187
|
-
return this.joinTable(tableId, userId, { isSpectator: true });
|
|
189
|
+
async spectateTable(tableId, userId, options) {
|
|
190
|
+
return this.joinTable(tableId, userId, { ...options, isSpectator: true });
|
|
188
191
|
}
|
|
189
192
|
/**
|
|
190
193
|
* Central orchestrator for session restoration.
|
|
@@ -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/table.d.ts
CHANGED
|
@@ -17,7 +17,16 @@ export declare class Table<T = any> {
|
|
|
17
17
|
private spectatorListeners;
|
|
18
18
|
private opponentLeftListeners;
|
|
19
19
|
opponentLeft: boolean;
|
|
20
|
-
|
|
20
|
+
readonly bothJoined: Promise<void>;
|
|
21
|
+
private resolveBothJoined;
|
|
22
|
+
private bothJoinedListeners;
|
|
23
|
+
private bothJoinedResolved;
|
|
24
|
+
private seenIds;
|
|
25
|
+
constructor(nchan: NchanClient, tableId: string, userId: string, lobby?: Lobby | undefined, isSpectator?: boolean, onMessage?: (event: TableMessage<T>) => void);
|
|
26
|
+
/**
|
|
27
|
+
* Subscribe to the event when both non-spectator players have joined the table.
|
|
28
|
+
*/
|
|
29
|
+
onBothJoined(callback: () => void): void;
|
|
21
30
|
/**
|
|
22
31
|
* Initializes the table by subscribing to its specific channel.
|
|
23
32
|
*/
|
package/dist/table.js
CHANGED
|
@@ -4,7 +4,7 @@ import { isSpectatorTableLeave, parseMessage } from "./types.js";
|
|
|
4
4
|
* Uses `any` as default for internal storage flexibility; consumers should use `unknown` or specific types.
|
|
5
5
|
*/
|
|
6
6
|
export class Table {
|
|
7
|
-
constructor(nchan, tableId, userId, lobby, isSpectator = false) {
|
|
7
|
+
constructor(nchan, tableId, userId, lobby, isSpectator = false, onMessage) {
|
|
8
8
|
this.nchan = nchan;
|
|
9
9
|
this.tableId = tableId;
|
|
10
10
|
this.userId = userId;
|
|
@@ -16,6 +16,32 @@ export class Table {
|
|
|
16
16
|
this.spectatorListeners = [];
|
|
17
17
|
this.opponentLeftListeners = [];
|
|
18
18
|
this.opponentLeft = false;
|
|
19
|
+
this.bothJoinedListeners = [];
|
|
20
|
+
this.bothJoinedResolved = false;
|
|
21
|
+
this.seenIds = new Set();
|
|
22
|
+
this.bothJoined = new Promise((resolve) => {
|
|
23
|
+
this.resolveBothJoined = () => {
|
|
24
|
+
if (this.bothJoinedResolved)
|
|
25
|
+
return;
|
|
26
|
+
this.bothJoinedResolved = true;
|
|
27
|
+
resolve();
|
|
28
|
+
this.bothJoinedListeners.forEach((cb) => cb());
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
if (onMessage) {
|
|
32
|
+
this.messageListeners.push(onMessage);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Subscribe to the event when both non-spectator players have joined the table.
|
|
37
|
+
*/
|
|
38
|
+
onBothJoined(callback) {
|
|
39
|
+
if (this.bothJoinedResolved) {
|
|
40
|
+
callback();
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.bothJoinedListeners.push(callback);
|
|
44
|
+
}
|
|
19
45
|
}
|
|
20
46
|
/**
|
|
21
47
|
* Initializes the table by subscribing to its specific channel.
|
|
@@ -26,6 +52,9 @@ export class Table {
|
|
|
26
52
|
}, { isSpectator: this.isSpectator });
|
|
27
53
|
await this.subscription.ready;
|
|
28
54
|
this.isJoined = true;
|
|
55
|
+
if (!this.isSpectator) {
|
|
56
|
+
await this.publish("joined", { id: this.userId });
|
|
57
|
+
}
|
|
29
58
|
}
|
|
30
59
|
/**
|
|
31
60
|
* Broadcast an event to all participants at the table.
|
|
@@ -91,6 +120,17 @@ export class Table {
|
|
|
91
120
|
if (msg.type === "table:leave" && msg.senderId !== this.userId && !isSpectatorTableLeave(msg)) {
|
|
92
121
|
this.notifyOpponentLeft();
|
|
93
122
|
}
|
|
123
|
+
if (msg.type === "joined") {
|
|
124
|
+
const joinData = msg.data;
|
|
125
|
+
const joinedId = joinData?.id || msg.senderId;
|
|
126
|
+
if (joinedId) {
|
|
127
|
+
this.seenIds.add(joinedId);
|
|
128
|
+
if (this.seenIds.size >= 2) {
|
|
129
|
+
this.resolveBothJoined();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return; // Filter out internal "joined" messages from generic onMessage listeners
|
|
133
|
+
}
|
|
94
134
|
// Notify message listeners
|
|
95
135
|
this.messageListeners.forEach((cb) => cb(msg));
|
|
96
136
|
}
|
package/dist/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"AACA,OAAO,EAAgC,qBAAqB,EAAE,YAAY,EAAmB,MAAM,SAAS,CAAC;AAG7G;;;GAGG;AACH,MAAM,OAAO,KAAK;
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailuge/messaging",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.36.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A stateful messaging library for Nchan-powered real-time applications.",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -50,14 +50,15 @@
|
|
|
50
50
|
"author": "tailuge",
|
|
51
51
|
"license": "GPL-3.0",
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@playwright/test": "^1.
|
|
54
|
-
"@types/jest": "30.0.0",
|
|
53
|
+
"@playwright/test": "^1.62.0",
|
|
54
|
+
"@types/jest": "^30.0.0",
|
|
55
55
|
"@types/ws": "^8.18.1",
|
|
56
56
|
"esbuild": "^0.28.1",
|
|
57
57
|
"jest": "^30.4.2",
|
|
58
58
|
"oxlint": "^1.75.0",
|
|
59
59
|
"testcontainers": "9.12.0",
|
|
60
60
|
"ts-jest": "^29.4.12",
|
|
61
|
+
"ts-node": "^10.9.2",
|
|
61
62
|
"typescript": "^6.0.3",
|
|
62
63
|
"ws": "^8.21.1"
|
|
63
64
|
},
|