@colyseus/core 0.17.4 → 0.17.6
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/build/Debug.cjs +13 -11
- package/build/Debug.cjs.map +1 -1
- package/build/IPC.cjs +6 -4
- package/build/IPC.cjs.map +1 -1
- package/build/Logger.cjs +5 -3
- package/build/Logger.cjs.map +1 -1
- package/build/MatchMaker.cjs +31 -29
- package/build/MatchMaker.cjs.map +1 -1
- package/build/Protocol.cjs +8 -6
- package/build/Protocol.cjs.map +1 -1
- package/build/Room.cjs +22 -20
- package/build/Room.cjs.map +1 -1
- package/build/Server.cjs +22 -20
- package/build/Server.cjs.map +3 -3
- package/build/Server.mjs +4 -4
- package/build/Server.mjs.map +3 -3
- package/build/Stats.cjs +8 -6
- package/build/Stats.cjs.map +1 -1
- package/build/Transport.cjs +12 -20
- package/build/Transport.cjs.map +1 -1
- package/build/errors/RoomExceptions.cjs +18 -16
- package/build/errors/RoomExceptions.cjs.map +1 -1
- package/build/errors/SeatReservationError.cjs +4 -2
- package/build/errors/SeatReservationError.cjs.map +1 -1
- package/build/errors/ServerError.cjs +6 -4
- package/build/errors/ServerError.cjs.map +1 -1
- package/build/index.cjs +27 -25
- package/build/index.cjs.map +1 -1
- package/build/matchmaker/Lobby.cjs +4 -2
- package/build/matchmaker/Lobby.cjs.map +1 -1
- package/build/matchmaker/LocalDriver/LocalDriver.cjs +6 -4
- package/build/matchmaker/LocalDriver/LocalDriver.cjs.map +1 -1
- package/build/matchmaker/LocalDriver/Query.cjs +4 -2
- package/build/matchmaker/LocalDriver/Query.cjs.map +1 -1
- package/build/matchmaker/RegisteredHandler.cjs +8 -6
- package/build/matchmaker/RegisteredHandler.cjs.map +1 -1
- package/build/matchmaker/controller.cjs +5 -3
- package/build/matchmaker/controller.cjs.map +1 -1
- package/build/matchmaker/driver.cjs +2 -0
- package/build/matchmaker/driver.cjs.map +1 -1
- package/build/presence/LocalPresence.cjs +6 -4
- package/build/presence/LocalPresence.cjs.map +1 -1
- package/build/presence/Presence.cjs +2 -0
- package/build/presence/Presence.cjs.map +1 -1
- package/build/rooms/LobbyRoom.cjs +7 -5
- package/build/rooms/LobbyRoom.cjs.map +1 -1
- package/build/rooms/RankedQueueRoom.cjs +6 -4
- package/build/rooms/RankedQueueRoom.cjs.map +1 -1
- package/build/rooms/RelayRoom.cjs +10 -8
- package/build/rooms/RelayRoom.cjs.map +1 -1
- package/build/router/default_routes.cjs +5 -3
- package/build/router/default_routes.cjs.map +1 -1
- package/build/router/index.cjs +3 -1
- package/build/router/index.cjs.map +1 -1
- package/build/serializer/NoneSerializer.cjs +4 -2
- package/build/serializer/NoneSerializer.cjs.map +1 -1
- package/build/serializer/SchemaSerializer.cjs +8 -6
- package/build/serializer/SchemaSerializer.cjs.map +1 -1
- package/build/serializer/SchemaSerializerDebug.cjs +7 -27
- package/build/serializer/SchemaSerializerDebug.cjs.map +1 -1
- package/build/serializer/Serializer.cjs +2 -0
- package/build/serializer/Serializer.cjs.map +1 -1
- package/build/utils/DevMode.cjs +7 -5
- package/build/utils/DevMode.cjs.map +1 -1
- package/build/utils/StandardSchema.cjs +2 -0
- package/build/utils/StandardSchema.cjs.map +1 -1
- package/build/utils/Utils.cjs +13 -11
- package/build/utils/Utils.cjs.map +1 -1
- package/build/utils/nanoevents.cjs +3 -1
- package/build/utils/nanoevents.cjs.map +1 -1
- package/package.json +3 -3
- package/src/Server.ts +2 -2
package/build/Transport.cjs
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,15 +15,9 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/core/src/Transport.ts
|
|
29
21
|
var Transport_exports = {};
|
|
30
22
|
__export(Transport_exports, {
|
|
31
23
|
ClientArray: () => ClientArray,
|
|
@@ -34,24 +26,24 @@ __export(Transport_exports, {
|
|
|
34
26
|
connectClientToRoom: () => connectClientToRoom
|
|
35
27
|
});
|
|
36
28
|
module.exports = __toCommonJS(Transport_exports);
|
|
37
|
-
var http =
|
|
38
|
-
var https =
|
|
29
|
+
var http = require("http");
|
|
30
|
+
var https = require("https");
|
|
39
31
|
var import_schema = require("@colyseus/schema");
|
|
40
32
|
var import_events = require("events");
|
|
41
|
-
var import_Utils = require("./utils/Utils.
|
|
42
|
-
var import_ServerError = require("./errors/ServerError.
|
|
43
|
-
var import_Protocol = require("./Protocol.
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
33
|
+
var import_Utils = require("./utils/Utils.cjs");
|
|
34
|
+
var import_ServerError = require("./errors/ServerError.cjs");
|
|
35
|
+
var import_Protocol = require("./Protocol.cjs");
|
|
36
|
+
var Transport = class {
|
|
37
|
+
};
|
|
38
|
+
var ClientState = { JOINING: 0, JOINED: 1, RECONNECTED: 2, LEAVING: 3, CLOSED: 4 };
|
|
39
|
+
var ClientArray = class extends Array {
|
|
48
40
|
getById(sessionId) {
|
|
49
41
|
return this.find((client) => client.sessionId === sessionId);
|
|
50
42
|
}
|
|
51
43
|
delete(client) {
|
|
52
44
|
return (0, import_Utils.spliceOne)(this, this.indexOf(client));
|
|
53
45
|
}
|
|
54
|
-
}
|
|
46
|
+
};
|
|
55
47
|
async function connectClientToRoom(room, client, authContext, connectionOptions) {
|
|
56
48
|
if (!room || !room.hasReservedSeat(client.sessionId, connectionOptions.reconnectionToken)) {
|
|
57
49
|
throw new import_ServerError.ServerError(import_Protocol.ErrorCode.MATCHMAKE_EXPIRED, "seat reservation expired.");
|
package/build/Transport.cjs.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/Transport.ts"],
|
|
4
4
|
"sourcesContent": ["import * as http from 'http';\nimport * as https from 'https';\n\nimport { StateView } from '@colyseus/schema';\nimport { EventEmitter } from 'events';\nimport { spliceOne } from './utils/Utils.ts';\nimport { ServerError } from './errors/ServerError.ts';\nimport { ErrorCode } from './Protocol.ts';\nimport type { Room } from './Room.ts';\n\nexport abstract class Transport {\n public protocol?: string;\n public server?: http.Server | https.Server;\n\n public abstract listen(port?: number, hostname?: string, backlog?: number, listeningListener?: Function): this;\n public abstract shutdown(): void;\n\n public abstract simulateLatency(milliseconds: number): void;\n}\n\nexport type AuthContext = {\n token?: string,\n headers: Headers,\n ip: string | string[];\n // FIXME: each transport may have its own specific properties.\n // \"req\" only applies to WebSocketTransport.\n req?: any;\n};\n\nexport interface ISendOptions {\n afterNextPatch?: boolean;\n}\n\nexport const ClientState = { JOINING: 0, JOINED: 1, RECONNECTED: 2, LEAVING: 3, CLOSED: 4 } as const;\nexport type ClientState = (typeof ClientState)[keyof typeof ClientState];\n\n// Helper types to extract properties from the Client type parameter\ntype ExtractClientUserData<T> = T extends { userData: infer U } ? U : T;\ntype ExtractClientAuth<T> = T extends { auth: infer A } ? A : any;\ntype ExtractClientMessages<T> = T extends { messages: infer M } ? M : any;\n\n// Helper type to make message required when the message type demands it\nexport type MessageArgs<M, Options> =\n unknown extends M ? [message?: M, options?: Options] : // Handle 'any' type (backwards compatibility)\n [M] extends [never] ? [message?: M, options?: Options] :\n [M] extends [void] ? [message?: M, options?: Options] :\n [M] extends [undefined] ? [message?: M, options?: Options] :\n undefined extends M ? [message?: M, options?: Options] :\n [message: M, options?: Options];\n\n/**\n * The client instance from the server-side is responsible for the transport layer between the server and the client.\n * It should not be confused with the Client from the client-side SDK, as they have completely different purposes!\n * You operate on client instances from `this.clients`, `Room#onJoin()`, `Room#onLeave()` and `Room#onMessage()`.\n *\n * - This is the raw WebSocket connection coming from the `ws` package. There are more methods available which aren't\n * encouraged to use along with Colyseus.\n */\nexport interface Client<T extends { userData?: any, auth?: any, messages?: Record<string | number, any> } = any> {\n '~messages': ExtractClientMessages<T>;\n\n ref: EventEmitter;\n\n /**\n * @deprecated use `sessionId` instead.\n */\n id: string;\n\n /**\n * Unique id per session.\n */\n sessionId: string; // TODO: remove sessionId on version 1.0.0\n\n /**\n * Connection state\n */\n state: ClientState;\n\n /**\n * Optional: when using `@view()` decorator in your state properties, this will be the view instance for this client.\n */\n view?: StateView;\n\n /**\n * User-defined data can be attached to the Client instance through this variable.\n * - Can be used to store custom data about the client's connection. userData is not synchronized with the client,\n * and should be used only to keep player-specific with its connection.\n */\n userData?: ExtractClientUserData<T>;\n\n /**\n * auth data provided by your `onAuth`\n */\n auth?: ExtractClientAuth<T>;\n\n /**\n * Reconnection token used to re-join the room after onLeave + allowReconnection().\n *\n * IMPORTANT:\n * This is not the full reconnection token the client provides for the server.\n * The format provided by .reconnect() from the client-side must follow: \"${roomId}:${reconnectionToken}\"\n */\n reconnectionToken: string;\n\n // TODO: move these to ClientPrivate\n raw(data: Uint8Array | Buffer, options?: ISendOptions, cb?: (err?: Error) => void): void;\n enqueueRaw(data: Uint8Array | Buffer, options?: ISendOptions): void;\n\n /**\n * Send a type of message to the client. Messages are encoded with MsgPack and can hold any\n * JSON-serializable data structure.\n *\n * @param type String or Number identifier the client SDK will use to receive this message\n * @param message Message payload. (automatically encoded with msgpack.)\n * @param options\n */\n send<K extends keyof this['~messages']>(\n type: K,\n ...args: MessageArgs<this['~messages'][K], ISendOptions>\n ): void;\n\n /**\n * Send raw bytes to this specific client.\n *\n * @param type String or Number identifier the client SDK will use to receive this message\n * @param bytes Raw byte array payload\n * @param options\n */\n sendBytes(type: string | number, bytes: Buffer | Uint8Array, options?: ISendOptions): void;\n\n /**\n * Disconnect this client from the room.\n *\n * @param code Custom close code. Default value is 1000.\n * @param data\n * @see [Leave room](https://docs.colyseus.io/room#leave-room)\n */\n leave(code?: number, data?: string): void;\n\n /**\n * @deprecated Use .leave() instead.\n */\n close(code?: number, data?: string): void;\n\n /**\n * Triggers `onError` with specified code to the client-side.\n *\n * @param code\n * @param message\n */\n error(code: number, message?: string): void;\n}\n\n/**\n * Private properties of the Client instance.\n * Only accessible internally by the framework, should not be encouraged/auto-completed for the user.\n *\n * TODO: refactor this.\n * @private\n */\nexport interface ClientPrivate {\n readyState: number; // TODO: remove readyState on version 1.0.0. Use only \"state\" instead.\n _enqueuedMessages?: any[];\n _afterNextPatchQueue: Array<[string | number | Client, ArrayLike<any>]>;\n _joinedAt: number; // \"elapsedTime\" when the client joined the room.\n\n /**\n * Used for rate limiting via maxMessagesPerSecond.\n */\n _numMessagesLastSecond?: number;\n _lastMessageTime?: number;\n}\n\nexport class ClientArray<C extends Client = Client> extends Array<C> {\n public getById(sessionId: string): C | undefined {\n return this.find((client) => client.sessionId === sessionId);\n }\n\n public delete(client: C): boolean {\n return spliceOne(this, this.indexOf(client));\n }\n}\n\n/**\n * Shared internal method to connect a Client into a Room.\n * Validates seat reservation and joins the client to the room.\n *\n * @remarks\n * **\u26A0\uFE0F This is an internal API and not intended for end-user use.**\n *\n * @internal\n */\nexport async function connectClientToRoom(\n room: Room | undefined,\n client: Client & ClientPrivate,\n authContext: AuthContext,\n connectionOptions: {\n reconnectionToken?: string;\n skipHandshake?: boolean;\n },\n): Promise<void> {\n if (!room || !room.hasReservedSeat(client.sessionId, connectionOptions.reconnectionToken)) {\n throw new ServerError(ErrorCode.MATCHMAKE_EXPIRED, 'seat reservation expired.');\n }\n\n await room['_onJoin'](client, authContext, connectionOptions);\n}"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAsB;AACtB,YAAuB;AAEvB,oBAA0B;AAC1B,oBAA6B;AAC7B,mBAA0B;AAC1B,yBAA4B;AAC5B,sBAA0B;AAGnB,IAAe,YAAf,MAAyB;AAQhC;AAeO,IAAM,cAAc,EAAE,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,EAAE;AA4InF,IAAM,cAAN,cAAqD,MAAS;AAAA,EAC5D,QAAQ,WAAkC;AAC/C,WAAO,KAAK,KAAK,CAAC,WAAW,OAAO,cAAc,SAAS;AAAA,EAC7D;AAAA,EAEO,OAAO,QAAoB;AAChC,eAAO,wBAAU,MAAM,KAAK,QAAQ,MAAM,CAAC;AAAA,EAC7C;AACF;AAWA,eAAsB,oBACpB,MACA,QACA,aACA,mBAIe;AACf,MAAI,CAAC,QAAQ,CAAC,KAAK,gBAAgB,OAAO,WAAW,kBAAkB,iBAAiB,GAAG;AACzF,UAAM,IAAI,+BAAY,0BAAU,mBAAmB,2BAA2B;AAAA,EAChF;AAEA,QAAM,KAAK,SAAS,EAAE,QAAQ,aAAa,iBAAiB;AAC9D;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/core/src/errors/RoomExceptions.ts
|
|
19
21
|
var RoomExceptions_exports = {};
|
|
20
22
|
__export(RoomExceptions_exports, {
|
|
21
23
|
OnAuthException: () => OnAuthException,
|
|
@@ -28,22 +30,22 @@ __export(RoomExceptions_exports, {
|
|
|
28
30
|
TimedEventException: () => TimedEventException
|
|
29
31
|
});
|
|
30
32
|
module.exports = __toCommonJS(RoomExceptions_exports);
|
|
31
|
-
|
|
33
|
+
var OnCreateException = class extends Error {
|
|
32
34
|
constructor(cause, message, options) {
|
|
33
35
|
super(message, { cause });
|
|
34
36
|
this.name = "OnCreateException";
|
|
35
37
|
this.options = options;
|
|
36
38
|
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
+
};
|
|
40
|
+
var OnAuthException = class extends Error {
|
|
39
41
|
constructor(cause, message, client, options) {
|
|
40
42
|
super(message, { cause });
|
|
41
43
|
this.name = "OnAuthException";
|
|
42
44
|
this.client = client;
|
|
43
45
|
this.options = options;
|
|
44
46
|
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
+
};
|
|
48
|
+
var OnJoinException = class extends Error {
|
|
47
49
|
constructor(cause, message, client, options, auth) {
|
|
48
50
|
super(message, { cause });
|
|
49
51
|
this.name = "OnJoinException";
|
|
@@ -51,22 +53,22 @@ class OnJoinException extends Error {
|
|
|
51
53
|
this.options = options;
|
|
52
54
|
this.auth = auth;
|
|
53
55
|
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
+
};
|
|
57
|
+
var OnLeaveException = class extends Error {
|
|
56
58
|
constructor(cause, message, client, consented) {
|
|
57
59
|
super(message, { cause });
|
|
58
60
|
this.name = "OnLeaveException";
|
|
59
61
|
this.client = client;
|
|
60
62
|
this.consented = consented;
|
|
61
63
|
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
+
};
|
|
65
|
+
var OnDisposeException = class extends Error {
|
|
64
66
|
constructor(cause, message) {
|
|
65
67
|
super(message, { cause });
|
|
66
68
|
this.name = "OnDisposeException";
|
|
67
69
|
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
+
};
|
|
71
|
+
var OnMessageException = class extends Error {
|
|
70
72
|
constructor(cause, message, client, payload, type) {
|
|
71
73
|
super(message, { cause });
|
|
72
74
|
this.name = "OnMessageException";
|
|
@@ -77,20 +79,20 @@ class OnMessageException extends Error {
|
|
|
77
79
|
isType(type) {
|
|
78
80
|
return this.type === type;
|
|
79
81
|
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
+
};
|
|
83
|
+
var SimulationIntervalException = class extends Error {
|
|
82
84
|
constructor(cause, message) {
|
|
83
85
|
super(message, { cause });
|
|
84
86
|
this.name = "SimulationIntervalException";
|
|
85
87
|
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
+
};
|
|
89
|
+
var TimedEventException = class extends Error {
|
|
88
90
|
constructor(cause, message, ...args) {
|
|
89
91
|
super(message, { cause });
|
|
90
92
|
this.name = "TimedEventException";
|
|
91
93
|
this.args = args;
|
|
92
94
|
}
|
|
93
|
-
}
|
|
95
|
+
};
|
|
94
96
|
// Annotate the CommonJS export names for ESM import in node:
|
|
95
97
|
0 && (module.exports = {
|
|
96
98
|
OnAuthException,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/errors/RoomExceptions.ts"],
|
|
4
4
|
"sourcesContent": ["import type { ExtractMessageType, Room } from '../Room.ts';\n\nexport type RoomMethodName = 'onCreate'\n | 'onAuth'\n | 'onJoin'\n | 'onLeave'\n | 'onDispose'\n | 'onMessage'\n | 'setSimulationInterval'\n | 'setInterval'\n | 'setTimeout';\n\nexport type RoomException<R extends Room = Room> =\n OnCreateException<R> |\n OnAuthException<R> |\n OnJoinException<R> |\n OnLeaveException<R> |\n OnDisposeException |\n OnMessageException<R> |\n SimulationIntervalException |\n TimedEventException;\n\nexport class OnCreateException<R extends Room = Room> extends Error {\n options: Parameters<R['onCreate']>[0];\n constructor(\n cause: Error,\n message: string,\n options: Parameters<R['onCreate']>[0],\n ) {\n super(message, { cause });\n this.name = 'OnCreateException';\n this.options = options;\n }\n}\n\nexport class OnAuthException<R extends Room = Room> extends Error {\n client: Parameters<R['onAuth']>[0];\n options: Parameters<R['onAuth']>[1];\n constructor(\n cause: Error,\n message: string,\n client: Parameters<R['onAuth']>[0],\n options: Parameters<R['onAuth']>[1],\n ) {\n super(message, { cause });\n this.name = 'OnAuthException';\n this.client = client;\n this.options = options;\n }\n}\n\nexport class OnJoinException<R extends Room = Room> extends Error {\n client: Parameters<R['onJoin']>[0];\n options: Parameters<R['onJoin']>[1];\n auth: Parameters<R['onJoin']>[2];\n constructor(\n cause: Error,\n message: string,\n client: Parameters<R['onJoin']>[0],\n options: Parameters<R['onJoin']>[1],\n auth: Parameters<R['onJoin']>[2],\n ) {\n super(message, { cause });\n this.name = 'OnJoinException';\n this.client = client;\n this.options = options;\n this.auth = auth;\n }\n}\n\nexport class OnLeaveException<R extends Room = Room> extends Error {\n client: Parameters<R['onLeave']>[0];\n consented: Parameters<R['onLeave']>[1];\n constructor(\n cause: Error,\n message: string,\n client: Parameters<R['onLeave']>[0],\n consented: Parameters<R['onLeave']>[1],\n ) {\n super(message, { cause });\n this.name = 'OnLeaveException';\n this.client = client;\n this.consented = consented;\n }\n}\n\nexport class OnDisposeException extends Error {\n constructor(\n cause: Error,\n message: string,\n ) {\n super(message, { cause });\n this.name = 'OnDisposeException';\n }\n}\n\nexport class OnMessageException<R extends Room, MessageType extends keyof R['messages'] = keyof R['messages']> extends Error {\n client: R['~client'];\n payload: ExtractMessageType<R['messages'][MessageType]>;\n type: MessageType;\n constructor(\n cause: Error,\n message: string,\n client: R['~client'],\n payload: ExtractMessageType<R['messages'][MessageType]>,\n type: MessageType,\n ) {\n super(message, { cause });\n this.name = 'OnMessageException';\n this.client = client;\n this.payload = payload;\n this.type = type;\n }\n\n public isType<T extends keyof R['messages']>(type: T): this is OnMessageException<R, T> {\n return (this.type as string) === type;\n }\n}\n\nexport class SimulationIntervalException extends Error {\n constructor(\n cause: Error,\n message: string,\n ) {\n super(message, { cause });\n this.name = 'SimulationIntervalException';\n }\n}\n\nexport class TimedEventException extends Error {\n public args: any[];\n constructor(\n cause: Error,\n message: string,\n ...args: any[]\n ) {\n super(message, { cause });\n this.name = 'TimedEventException';\n this.args = args;\n }\n}"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBO,IAAM,oBAAN,cAAuD,MAAM;AAAA,EAElE,YACE,OACA,SACA,SACA;AACA,UAAM,SAAS,EAAE,MAAM,CAAC;AACxB,SAAK,OAAO;AACZ,SAAK,UAAU;AAAA,EACjB;AACF;AAEO,IAAM,kBAAN,cAAqD,MAAM;AAAA,EAGhE,YACE,OACA,SACA,QACA,SACA;AACA,UAAM,SAAS,EAAE,MAAM,CAAC;AACxB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AACF;AAEO,IAAM,kBAAN,cAAqD,MAAM;AAAA,EAIhE,YACE,OACA,SACA,QACA,SACA,MACA;AACA,UAAM,SAAS,EAAE,MAAM,CAAC;AACxB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,mBAAN,cAAsD,MAAM;AAAA,EAGjE,YACE,OACA,SACA,QACA,WACA;AACA,UAAM,SAAS,EAAE,MAAM,CAAC;AACxB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,YAAY;AAAA,EACnB;AACF;AAEO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YACE,OACA,SACA;AACA,UAAM,SAAS,EAAE,MAAM,CAAC;AACxB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,qBAAN,cAAgH,MAAM;AAAA,EAI3H,YACE,OACA,SACA,QACA,SACA,MACA;AACA,UAAM,SAAS,EAAE,MAAM,CAAC;AACxB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EACd;AAAA,EAEO,OAAsC,MAA2C;AACtF,WAAQ,KAAK,SAAoB;AAAA,EACnC;AACF;AAEO,IAAM,8BAAN,cAA0C,MAAM;AAAA,EACrD,YACE,OACA,SACA;AACA,UAAM,SAAS,EAAE,MAAM,CAAC;AACxB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAE7C,YACE,OACA,YACG,MACH;AACA,UAAM,SAAS,EAAE,MAAM,CAAC;AACxB,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -16,16 +16,18 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/core/src/errors/SeatReservationError.ts
|
|
19
21
|
var SeatReservationError_exports = {};
|
|
20
22
|
__export(SeatReservationError_exports, {
|
|
21
23
|
SeatReservationError: () => SeatReservationError
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(SeatReservationError_exports);
|
|
24
|
-
|
|
26
|
+
var SeatReservationError = class extends Error {
|
|
25
27
|
constructor(message) {
|
|
26
28
|
super(message);
|
|
27
29
|
}
|
|
28
|
-
}
|
|
30
|
+
};
|
|
29
31
|
// Annotate the CommonJS export names for ESM import in node:
|
|
30
32
|
0 && (module.exports = {
|
|
31
33
|
SeatReservationError
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/errors/SeatReservationError.ts"],
|
|
4
4
|
"sourcesContent": ["export class SeatReservationError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,uBAAN,cAAmC,MAAM;AAAA,EAC9C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AAAA,EACf;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -16,22 +16,24 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/core/src/errors/ServerError.ts
|
|
19
21
|
var ServerError_exports = {};
|
|
20
22
|
__export(ServerError_exports, {
|
|
21
23
|
ServerError: () => ServerError
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(ServerError_exports);
|
|
24
|
-
var import_Protocol = require("../Protocol.
|
|
25
|
-
|
|
26
|
+
var import_Protocol = require("../Protocol.cjs");
|
|
27
|
+
var ServerError = class _ServerError extends Error {
|
|
26
28
|
constructor(code = import_Protocol.ErrorCode.MATCHMAKE_UNHANDLED, message) {
|
|
27
29
|
super(message);
|
|
28
30
|
if (Error.captureStackTrace) {
|
|
29
|
-
Error.captureStackTrace(this,
|
|
31
|
+
Error.captureStackTrace(this, _ServerError);
|
|
30
32
|
}
|
|
31
33
|
this.name = "ServerError";
|
|
32
34
|
this.code = code;
|
|
33
35
|
}
|
|
34
|
-
}
|
|
36
|
+
};
|
|
35
37
|
// Annotate the CommonJS export names for ESM import in node:
|
|
36
38
|
0 && (module.exports = {
|
|
37
39
|
ServerError
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/errors/ServerError.ts"],
|
|
4
4
|
"sourcesContent": ["import { ErrorCode } from '../Protocol.ts';\n\nexport class ServerError extends Error {\n public code: number;\n\n constructor(code: number = ErrorCode.MATCHMAKE_UNHANDLED, message?: string) {\n super(message);\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ServerError);\n }\n\n this.name = 'ServerError';\n this.code = code;\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAA0B;AAEnB,IAAM,cAAN,MAAM,qBAAoB,MAAM;AAAA,EAGrC,YAAY,OAAe,0BAAU,qBAAqB,SAAkB;AAC1E,UAAM,OAAO;AAGb,QAAI,MAAM,mBAAmB;AAC3B,YAAM,kBAAkB,MAAM,YAAW;AAAA,IAC3C;AAEA,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/index.cjs
CHANGED
|
@@ -27,6 +27,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
27
|
mod
|
|
28
28
|
));
|
|
29
29
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
|
|
31
|
+
// packages/core/src/index.ts
|
|
30
32
|
var index_exports = {};
|
|
31
33
|
__export(index_exports, {
|
|
32
34
|
ClientArray: () => import_Transport.ClientArray,
|
|
@@ -91,30 +93,30 @@ __export(index_exports, {
|
|
|
91
93
|
});
|
|
92
94
|
module.exports = __toCommonJS(index_exports);
|
|
93
95
|
var import_timer = require("@colyseus/timer");
|
|
94
|
-
var import_Server = require("./Server.
|
|
95
|
-
var import_Room = require("./Room.
|
|
96
|
-
var import_Protocol = require("./Protocol.
|
|
97
|
-
var import_RegisteredHandler = require("./matchmaker/RegisteredHandler.
|
|
98
|
-
var import_ServerError = require("./errors/ServerError.
|
|
99
|
-
var import_RoomExceptions = require("./errors/RoomExceptions.
|
|
100
|
-
var matchMaker = __toESM(require("./MatchMaker.
|
|
101
|
-
var import_Lobby = require("./matchmaker/Lobby.
|
|
102
|
-
__reExport(index_exports, require("./matchmaker/LocalDriver/LocalDriver.
|
|
103
|
-
var import_driver = require("./matchmaker/driver.
|
|
104
|
-
var import_Transport = require("./Transport.
|
|
105
|
-
var import_Presence = require("./presence/Presence.
|
|
106
|
-
var import_LocalPresence = require("./presence/LocalPresence.
|
|
107
|
-
var import_Serializer = require("./serializer/Serializer.
|
|
108
|
-
var import_SchemaSerializer = require("./serializer/SchemaSerializer.
|
|
109
|
-
var import_Utils = require("./utils/Utils.
|
|
110
|
-
var import_DevMode = require("./utils/DevMode.
|
|
111
|
-
var import_IPC = require("./IPC.
|
|
112
|
-
var import_Debug = require("./Debug.
|
|
113
|
-
var import_LobbyRoom = require("./rooms/LobbyRoom.
|
|
114
|
-
var import_RelayRoom = require("./rooms/RelayRoom.
|
|
115
|
-
var import_RankedQueueRoom = require("./rooms/RankedQueueRoom.
|
|
116
|
-
var import_router = require("./router/index.
|
|
117
|
-
var import_Logger = require("./Logger.
|
|
96
|
+
var import_Server = require("./Server.cjs");
|
|
97
|
+
var import_Room = require("./Room.cjs");
|
|
98
|
+
var import_Protocol = require("./Protocol.cjs");
|
|
99
|
+
var import_RegisteredHandler = require("./matchmaker/RegisteredHandler.cjs");
|
|
100
|
+
var import_ServerError = require("./errors/ServerError.cjs");
|
|
101
|
+
var import_RoomExceptions = require("./errors/RoomExceptions.cjs");
|
|
102
|
+
var matchMaker = __toESM(require("./MatchMaker.cjs"), 1);
|
|
103
|
+
var import_Lobby = require("./matchmaker/Lobby.cjs");
|
|
104
|
+
__reExport(index_exports, require("./matchmaker/LocalDriver/LocalDriver.cjs"), module.exports);
|
|
105
|
+
var import_driver = require("./matchmaker/driver.cjs");
|
|
106
|
+
var import_Transport = require("./Transport.cjs");
|
|
107
|
+
var import_Presence = require("./presence/Presence.cjs");
|
|
108
|
+
var import_LocalPresence = require("./presence/LocalPresence.cjs");
|
|
109
|
+
var import_Serializer = require("./serializer/Serializer.cjs");
|
|
110
|
+
var import_SchemaSerializer = require("./serializer/SchemaSerializer.cjs");
|
|
111
|
+
var import_Utils = require("./utils/Utils.cjs");
|
|
112
|
+
var import_DevMode = require("./utils/DevMode.cjs");
|
|
113
|
+
var import_IPC = require("./IPC.cjs");
|
|
114
|
+
var import_Debug = require("./Debug.cjs");
|
|
115
|
+
var import_LobbyRoom = require("./rooms/LobbyRoom.cjs");
|
|
116
|
+
var import_RelayRoom = require("./rooms/RelayRoom.cjs");
|
|
117
|
+
var import_RankedQueueRoom = require("./rooms/RankedQueueRoom.cjs");
|
|
118
|
+
var import_router = require("./router/index.cjs");
|
|
119
|
+
var import_Logger = require("./Logger.cjs");
|
|
118
120
|
// Annotate the CommonJS export names for ESM import in node:
|
|
119
121
|
0 && (module.exports = {
|
|
120
122
|
ClientArray,
|
|
@@ -176,5 +178,5 @@ var import_Logger = require("./Logger.ts");
|
|
|
176
178
|
toNodeHandler,
|
|
177
179
|
updateLobby,
|
|
178
180
|
validate,
|
|
179
|
-
...require("./matchmaker/LocalDriver/LocalDriver.
|
|
181
|
+
...require("./matchmaker/LocalDriver/LocalDriver.cjs")
|
|
180
182
|
});
|
package/build/index.cjs.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
4
|
"sourcesContent": ["import { ClockTimer as Clock, Delayed } from '@colyseus/timer';\n\n// Core classes\nexport { Server, defineRoom, defineServer, type ServerOptions, type SDKTypes } from './Server.ts';\nexport { Room, room, RoomInternalState, validate, type RoomOptions, type MessageHandlerWithFormat, type ExtractMessageType, type Messages, type ExtractRoomState, type ExtractRoomMetadata, type ExtractRoomClient } from './Room.ts';\nexport { Protocol, ErrorCode, getMessageBytes, CloseCode } from './Protocol.ts';\nexport { RegisteredHandler } from './matchmaker/RegisteredHandler.ts';\nexport { ServerError } from './errors/ServerError.ts';\n\nexport {\n type RoomException,\n type RoomMethodName,\n OnCreateException,\n OnAuthException,\n OnJoinException,\n OnLeaveException,\n OnDisposeException,\n OnMessageException,\n SimulationIntervalException,\n TimedEventException,\n} from './errors/RoomExceptions.ts';\n\n// MatchMaker\nimport * as matchMaker from './MatchMaker.ts';\nexport { matchMaker };\nexport { updateLobby, subscribeLobby } from './matchmaker/Lobby.ts';\n\n// Driver\nexport * from './matchmaker/LocalDriver/LocalDriver.ts';\nexport { initializeRoomCache } from './matchmaker/driver.ts';\n\n// Transport\nexport { type Client, type ClientPrivate, type AuthContext, ClientState, ClientArray, Transport, type ISendOptions, connectClientToRoom } from './Transport.ts';\n\n// Presence\nexport { type Presence } from './presence/Presence.ts';\nexport { LocalPresence } from './presence/LocalPresence.ts';\n\n// Serializers\nexport { type Serializer } from './serializer/Serializer.ts';\nexport { SchemaSerializer } from './serializer/SchemaSerializer.ts';\n// export { SchemaSerializerDebug } from './serializer/SchemaSerializerDebug.ts';\n\n// Utilities\nexport { Clock, Delayed };\nexport { generateId, Deferred, HttpServerMock, spliceOne, getBearerToken } from './utils/Utils.ts';\nexport { isDevMode } from './utils/DevMode.ts';\n\n// IPC\nexport { subscribeIPC, requestFromIPC } from './IPC.ts';\n\n// Debug\nexport {\n debugMatchMaking,\n debugMessage,\n debugPatch,\n debugError,\n debugConnection,\n debugDriver,\n debugPresence,\n debugAndPrintError,\n} from './Debug.ts';\n\n// Default rooms\nexport { LobbyRoom } from './rooms/LobbyRoom.ts';\nexport { RelayRoom } from './rooms/RelayRoom.ts';\nexport { RankedQueueRoom, type RankedQueueOptions, type MatchGroup, type MatchTeam, type ClientQueueData } from './rooms/RankedQueueRoom.ts';\n\n// Router / Endpoints\nexport {\n createEndpoint,\n createInternalContext,\n createMiddleware,\n createRouter,\n toNodeHandler,\n __globalEndpoints,\n type Router,\n} from './router/index.ts';\n\n// Abstract logging support\nexport { logger } from './Logger.ts';\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA6C;AAG7C,oBAAoF;AACpF,kBAA0N;AAC1N,sBAAgE;AAChE,+BAAkC;AAClC,yBAA4B;AAE5B,4BAWO;AAGP,iBAA4B;AAE5B,mBAA4C;AAG5C,0BAAc,qDA5Bd;AA6BA,oBAAoC;AAGpC,uBAA+I;AAG/I,sBAA8B;AAC9B,2BAA8B;AAG9B,wBAAgC;AAChC,8BAAiC;AAKjC,mBAAgF;AAChF,qBAA0B;AAG1B,iBAA6C;AAG7C,mBASO;AAGP,uBAA0B;AAC1B,uBAA0B;AAC1B,6BAAgH;AAGhH,oBAQO;AAGP,oBAAuB;",
|
|
6
6
|
"names": ["Clock"]
|
|
7
7
|
}
|
|
@@ -26,14 +26,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// packages/core/src/matchmaker/Lobby.ts
|
|
29
31
|
var Lobby_exports = {};
|
|
30
32
|
__export(Lobby_exports, {
|
|
31
33
|
subscribeLobby: () => subscribeLobby,
|
|
32
34
|
updateLobby: () => updateLobby
|
|
33
35
|
});
|
|
34
36
|
module.exports = __toCommonJS(Lobby_exports);
|
|
35
|
-
var matchMaker = __toESM(require("../MatchMaker.
|
|
36
|
-
|
|
37
|
+
var matchMaker = __toESM(require("../MatchMaker.cjs"), 1);
|
|
38
|
+
var LOBBY_CHANNEL = "$lobby";
|
|
37
39
|
function updateLobby(room, removed = false) {
|
|
38
40
|
const listing = room["_listing"];
|
|
39
41
|
if (listing.unlisted || !listing.roomId) {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/matchmaker/Lobby.ts"],
|
|
4
4
|
"sourcesContent": ["import * as matchMaker from '../MatchMaker.ts';\n\nimport type { Room } from '../Room.ts';\nimport type { IRoomCache } from './driver.ts';\n\nconst LOBBY_CHANNEL = '$lobby';\n\n/*\n * TODO: refactor this on 1.0\n *\n * Some users might be relying on \"1\" = \"removed\" from the lobby due to this workaround: https://github.com/colyseus/colyseus/issues/617\n * Though, for consistency, we should invert as \"0\" = \"invisible\" and \"1\" = \"visible\".\n *\n * - rename \"removed\" to \"isVisible\" and swap the logic\n * - emit \"visibility-change\" with inverted value (isVisible)\n * - update \"subscribeLobby\" to check \"1\" as \"isVisible\" instead of \"removed\"\n */\n\nexport function updateLobby<T extends Room>(room: T, removed: boolean = false) {\n const listing = room['_listing'];\n\n if (listing.unlisted || !listing.roomId) {\n return;\n }\n\n if (removed) {\n matchMaker.presence.publish(LOBBY_CHANNEL, `${listing.roomId},1`);\n } else if (!listing.private) {\n matchMaker.presence.publish(LOBBY_CHANNEL, `${listing.roomId},0`);\n }\n}\n\nexport async function subscribeLobby(callback: (roomId: string, roomListing: IRoomCache) => void) {\n // Track removed roomIds to prevent race conditions where pending queries\n // complete after a room has been removed\n const removedRoomIds = new Set<string>();\n\n const cb = async (message: string) => {\n const [roomId, isRemove] = message.split(',');\n\n if (isRemove === '1') {\n // Mark as removed and process immediately\n removedRoomIds.add(roomId);\n callback(roomId, null);\n\n // Clean up after a short timeout to prevent memory leaks\n setTimeout(() => removedRoomIds.delete(roomId), 2000);\n\n } else {\n // Clear removed status - room might be coming back (e.g., visibility change)\n removedRoomIds.delete(roomId);\n\n const room = (await matchMaker.query({ roomId }))[0];\n\n // Check if room was removed while we were querying\n // See \"updating metadata should not cause race condition\" test in LobbyRoom.test.ts\n if (removedRoomIds.has(roomId)) {\n return;\n }\n\n callback(roomId, room);\n }\n };\n\n await matchMaker.presence.subscribe(LOBBY_CHANNEL, cb);\n\n return () => matchMaker.presence.unsubscribe(LOBBY_CHANNEL, cb);\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA4B;AAK5B,IAAM,gBAAgB;AAaf,SAAS,YAA4B,MAAS,UAAmB,OAAO;AAC7E,QAAM,UAAU,KAAK,UAAU;AAE/B,MAAI,QAAQ,YAAY,CAAC,QAAQ,QAAQ;AACvC;AAAA,EACF;AAEA,MAAI,SAAS;AACX,IAAW,oBAAS,QAAQ,eAAe,GAAG,QAAQ,MAAM,IAAI;AAAA,EAClE,WAAW,CAAC,QAAQ,SAAS;AAC3B,IAAW,oBAAS,QAAQ,eAAe,GAAG,QAAQ,MAAM,IAAI;AAAA,EAClE;AACF;AAEA,eAAsB,eAAe,UAA6D;AAGhG,QAAM,iBAAiB,oBAAI,IAAY;AAEvC,QAAM,KAAK,OAAO,YAAoB;AACpC,UAAM,CAAC,QAAQ,QAAQ,IAAI,QAAQ,MAAM,GAAG;AAE5C,QAAI,aAAa,KAAK;AAEpB,qBAAe,IAAI,MAAM;AACzB,eAAS,QAAQ,IAAI;AAGrB,iBAAW,MAAM,eAAe,OAAO,MAAM,GAAG,GAAI;AAAA,IAEtD,OAAO;AAEL,qBAAe,OAAO,MAAM;AAE5B,YAAM,QAAQ,MAAiB,iBAAM,EAAE,OAAO,CAAC,GAAG,CAAC;AAInD,UAAI,eAAe,IAAI,MAAM,GAAG;AAC9B;AAAA,MACF;AAEA,eAAS,QAAQ,IAAI;AAAA,IACvB;AAAA,EACF;AAEA,QAAiB,oBAAS,UAAU,eAAe,EAAE;AAErD,SAAO,MAAiB,oBAAS,YAAY,eAAe,EAAE;AAChE;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -16,14 +16,16 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/core/src/matchmaker/LocalDriver/LocalDriver.ts
|
|
19
21
|
var LocalDriver_exports = {};
|
|
20
22
|
__export(LocalDriver_exports, {
|
|
21
23
|
LocalDriver: () => LocalDriver
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(LocalDriver_exports);
|
|
24
|
-
var import_Debug = require("../../Debug.
|
|
25
|
-
var import_Query = require("./Query.
|
|
26
|
-
|
|
26
|
+
var import_Debug = require("../../Debug.cjs");
|
|
27
|
+
var import_Query = require("./Query.cjs");
|
|
28
|
+
var LocalDriver = class {
|
|
27
29
|
constructor() {
|
|
28
30
|
this.rooms = [];
|
|
29
31
|
}
|
|
@@ -87,7 +89,7 @@ class LocalDriver {
|
|
|
87
89
|
}
|
|
88
90
|
shutdown() {
|
|
89
91
|
}
|
|
90
|
-
}
|
|
92
|
+
};
|
|
91
93
|
// Annotate the CommonJS export names for ESM import in node:
|
|
92
94
|
0 && (module.exports = {
|
|
93
95
|
LocalDriver
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/matchmaker/LocalDriver/LocalDriver.ts"],
|
|
4
4
|
"sourcesContent": ["import { debugMatchMaking } from '../../Debug.ts';\nimport type { IRoomCache, SortOptions, MatchMakerDriver } from '../driver.ts';\nimport { Query } from './Query.ts';\n\n// re-export\nexport type { IRoomCache, SortOptions, MatchMakerDriver };\n\nexport class LocalDriver implements MatchMakerDriver {\n public rooms: IRoomCache[] = [];\n\n public has(roomId: string) {\n return this.rooms.some((room) => room.roomId === roomId);\n }\n\n public query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<IRoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query.filter(conditions);\n }\n\n public cleanup(processId: string) {\n const cachedRooms = this.query({ processId });\n debugMatchMaking(\"removing stale rooms by processId %s (%s rooms found)\", processId, cachedRooms.length);\n\n cachedRooms.forEach((room) => this.remove(room.roomId));\n return Promise.resolve();\n }\n\n public findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<IRoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query as unknown as Promise<IRoomCache>;\n }\n\n public update(room: IRoomCache, operations: Partial<{ $set: Partial<IRoomCache>, $inc: Partial<IRoomCache> }>) {\n if (operations.$set) {\n for (const field in operations.$set) {\n if (operations.$set.hasOwnProperty(field)) {\n room[field] = operations.$set[field];\n }\n }\n }\n\n if (operations.$inc) {\n for (const field in operations.$inc) {\n if (operations.$inc.hasOwnProperty(field)) {\n room[field] += operations.$inc[field];\n }\n }\n }\n\n return true;\n }\n\n public persist(room: IRoomCache, create: boolean = false) {\n // if (this.rooms.indexOf(room) !== -1) {\n // // already in the list\n // return true;\n // }\n\n if (!create) { return false; }\n\n // add to the list\n this.rooms.push(room);\n\n return true;\n }\n\n public remove(roomId: string) {\n const roomIndex = this.rooms.findIndex((room) => room.roomId === roomId);\n if (roomIndex !== -1) {\n this.rooms.splice(roomIndex, 1);\n return true;\n }\n return false;\n }\n\n public clear() {\n this.rooms = [];\n }\n\n public shutdown() {\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiC;AAEjC,mBAAsB;AAKf,IAAM,cAAN,MAA8C;AAAA,EAA9C;AACL,SAAO,QAAsB,CAAC;AAAA;AAAA,EAEvB,IAAI,QAAgB;AACzB,WAAO,KAAK,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM;AAAA,EACzD;AAAA,EAEO,MAAM,YAAiC,aAA2B;AACvE,UAAM,QAAQ,IAAI,mBAAkB,KAAK,OAAO,UAAU;AAE1D,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO,MAAM,OAAO,UAAU;AAAA,EAChC;AAAA,EAEO,QAAQ,WAAmB;AAChC,UAAM,cAAc,KAAK,MAAM,EAAE,UAAU,CAAC;AAC5C,uCAAiB,yDAAyD,WAAW,YAAY,MAAM;AAEvG,gBAAY,QAAQ,CAAC,SAAS,KAAK,OAAO,KAAK,MAAM,CAAC;AACtD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,QAAQ,YAAiC,aAA2B;AACzE,UAAM,QAAQ,IAAI,mBAAkB,KAAK,OAAO,UAAU;AAE1D,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,MAAkB,YAA+E;AAC7G,QAAI,WAAW,MAAM;AACnB,iBAAW,SAAS,WAAW,MAAM;AACnC,YAAI,WAAW,KAAK,eAAe,KAAK,GAAG;AACzC,eAAK,KAAK,IAAI,WAAW,KAAK,KAAK;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,MAAM;AACnB,iBAAW,SAAS,WAAW,MAAM;AACnC,YAAI,WAAW,KAAK,eAAe,KAAK,GAAG;AACzC,eAAK,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,QAAQ,MAAkB,SAAkB,OAAO;AAMxD,QAAI,CAAC,QAAQ;AAAE,aAAO;AAAA,IAAO;AAG7B,SAAK,MAAM,KAAK,IAAI;AAEpB,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,QAAgB;AAC5B,UAAM,YAAY,KAAK,MAAM,UAAU,CAAC,SAAS,KAAK,WAAW,MAAM;AACvE,QAAI,cAAc,IAAI;AACpB,WAAK,MAAM,OAAO,WAAW,CAAC;AAC9B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEO,QAAQ;AACb,SAAK,QAAQ,CAAC;AAAA,EAChB;AAAA,EAEO,WAAW;AAAA,EAClB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -16,12 +16,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/core/src/matchmaker/LocalDriver/Query.ts
|
|
19
21
|
var Query_exports = {};
|
|
20
22
|
__export(Query_exports, {
|
|
21
23
|
Query: () => Query
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(Query_exports);
|
|
24
|
-
|
|
26
|
+
var Query = class {
|
|
25
27
|
constructor(rooms, conditions) {
|
|
26
28
|
this.$rooms = rooms.slice(0);
|
|
27
29
|
this.conditions = conditions;
|
|
@@ -104,7 +106,7 @@ class Query {
|
|
|
104
106
|
const result = sorted[0];
|
|
105
107
|
return resolve(result);
|
|
106
108
|
}
|
|
107
|
-
}
|
|
109
|
+
};
|
|
108
110
|
// Annotate the CommonJS export names for ESM import in node:
|
|
109
111
|
0 && (module.exports = {
|
|
110
112
|
Query
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/matchmaker/LocalDriver/Query.ts"],
|
|
4
4
|
"sourcesContent": ["import type { IRoomCache, SortOptions } from '../driver.ts';\n\nexport class Query<T extends IRoomCache> {\n private $rooms: T[];\n private conditions: any;\n private sortOptions?: SortOptions;\n\n constructor(rooms: any[], conditions) {\n this.$rooms = rooms.slice(0);\n this.conditions = conditions;\n }\n\n public sort(options: SortOptions) {\n // Store sort options instead of sorting immediately\n // This allows filtering first, then sorting fewer items\n this.sortOptions = options;\n return this;\n }\n\n private applySort(rooms: T[]): T[] {\n if (!this.sortOptions) {\n return rooms;\n }\n\n return rooms.sort((room1: T, room2: T) => {\n for (const field in this.sortOptions) {\n const direction = this.sortOptions[field];\n if (room1.hasOwnProperty(field)) {\n /**\n * IRoomCache field\n */\n if (direction === 1 || direction === 'asc' || direction === 'ascending') {\n if (room1[field] > room2[field]) { return 1; }\n if (room1[field] < room2[field]) { return -1; }\n\n } else {\n if (room1[field] > room2[field]) { return -1; }\n if (room1[field] < room2[field]) { return 1; }\n }\n } else if (room1.metadata?.hasOwnProperty(field)) {\n /**\n * metadata field\n */\n if (direction === 1 || direction === 'asc' || direction === 'ascending') {\n if (room1.metadata[field] > room2.metadata[field]) { return 1; }\n if (room1.metadata[field] < room2.metadata[field]) { return -1; }\n } else {\n if (room1.metadata[field] > room2.metadata[field]) { return -1; }\n if (room1.metadata[field] < room2.metadata[field]) { return 1; }\n }\n }\n }\n return 0;\n });\n }\n\n private applyFilter(rooms: T[], conditions: any): T[] {\n return rooms.filter(((room) => {\n for (const field in conditions) {\n if (conditions.hasOwnProperty(field)) {\n // Check if field exists in room (IRoomCache base fields)\n if (room.hasOwnProperty(field)) {\n if (room[field] !== conditions[field]) {\n return false;\n }\n } else if (room.metadata?.hasOwnProperty(field)) {\n // Check if field exists in metadata\n if (room.metadata[field] !== conditions[field]) {\n return false;\n }\n } else {\n // Field doesn't exist in room or metadata\n return false;\n }\n }\n }\n return true;\n }));\n }\n\n public filter(conditions: any) {\n // Filter first to reduce the number of items to sort\n const filtered = this.applyFilter(this.$rooms, conditions);\n return this.applySort(filtered);\n }\n\n public then(resolve, reject) {\n // Filter first to reduce the number of items to sort\n const filtered = this.applyFilter(this.$rooms, this.conditions);\n const sorted = this.applySort(filtered);\n const result: any = sorted[0];\n return resolve(result);\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,QAAN,MAAkC;AAAA,EAKvC,YAAY,OAAc,YAAY;AACpC,SAAK,SAAS,MAAM,MAAM,CAAC;AAC3B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,KAAK,SAAsB;AAGhC,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEQ,UAAU,OAAiB;AACjC,QAAI,CAAC,KAAK,aAAa;AACrB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM,KAAK,CAAC,OAAU,UAAa;AACxC,iBAAW,SAAS,KAAK,aAAa;AACpC,cAAM,YAAY,KAAK,YAAY,KAAK;AACxC,YAAI,MAAM,eAAe,KAAK,GAAG;AAI/B,cAAI,cAAc,KAAK,cAAc,SAAS,cAAc,aAAa;AACvE,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAC7C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAAA,UAEhD,OAAO;AACL,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAC9C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAAA,UAC/C;AAAA,QACF,WAAW,MAAM,UAAU,eAAe,KAAK,GAAG;AAIhD,cAAI,cAAc,KAAK,cAAc,SAAS,cAAc,aAAa;AACvE,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAC/D,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAAA,UAClE,OAAO;AACL,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAChE,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEQ,YAAY,OAAY,YAAsB;AACpD,WAAO,MAAM,QAAQ,CAAC,SAAS;AAC7B,iBAAW,SAAS,YAAY;AAC9B,YAAI,WAAW,eAAe,KAAK,GAAG;AAEpC,cAAI,KAAK,eAAe,KAAK,GAAG;AAC9B,gBAAI,KAAK,KAAK,MAAM,WAAW,KAAK,GAAG;AACrC,qBAAO;AAAA,YACT;AAAA,UACF,WAAW,KAAK,UAAU,eAAe,KAAK,GAAG;AAE/C,gBAAI,KAAK,SAAS,KAAK,MAAM,WAAW,KAAK,GAAG;AAC9C,qBAAO;AAAA,YACT;AAAA,UACF,OAAO;AAEL,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,EAAE;AAAA,EACJ;AAAA,EAEO,OAAO,YAAiB;AAE7B,UAAM,WAAW,KAAK,YAAY,KAAK,QAAQ,UAAU;AACzD,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EAEO,KAAK,SAAS,QAAQ;AAE3B,UAAM,WAAW,KAAK,YAAY,KAAK,QAAQ,KAAK,UAAU;AAC9D,UAAM,SAAS,KAAK,UAAU,QAAQ;AACtC,UAAM,SAAc,OAAO,CAAC;AAC5B,WAAO,QAAQ,MAAM;AAAA,EACvB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/core/src/matchmaker/RegisteredHandler.ts
|
|
19
21
|
var RegisteredHandler_exports = {};
|
|
20
22
|
__export(RegisteredHandler_exports, {
|
|
21
23
|
INVALID_OPTION_KEYS: () => INVALID_OPTION_KEYS,
|
|
@@ -23,10 +25,10 @@ __export(RegisteredHandler_exports, {
|
|
|
23
25
|
});
|
|
24
26
|
module.exports = __toCommonJS(RegisteredHandler_exports);
|
|
25
27
|
var import_events = require("events");
|
|
26
|
-
var import_Logger = require("../Logger.
|
|
27
|
-
var import_Room = require("./../Room.
|
|
28
|
-
var import_Lobby = require("./Lobby.
|
|
29
|
-
|
|
28
|
+
var import_Logger = require("../Logger.cjs");
|
|
29
|
+
var import_Room = require("./../Room.cjs");
|
|
30
|
+
var import_Lobby = require("./Lobby.cjs");
|
|
31
|
+
var INVALID_OPTION_KEYS = [
|
|
30
32
|
"clients",
|
|
31
33
|
"locked",
|
|
32
34
|
"private",
|
|
@@ -36,7 +38,7 @@ const INVALID_OPTION_KEYS = [
|
|
|
36
38
|
"processId",
|
|
37
39
|
"roomId"
|
|
38
40
|
];
|
|
39
|
-
|
|
41
|
+
var RegisteredHandler = class extends import_events.EventEmitter {
|
|
40
42
|
constructor(klass, options) {
|
|
41
43
|
super();
|
|
42
44
|
this.filterOptions = [];
|
|
@@ -131,7 +133,7 @@ class RegisteredHandler extends import_events.EventEmitter {
|
|
|
131
133
|
return prev;
|
|
132
134
|
}, {});
|
|
133
135
|
}
|
|
134
|
-
}
|
|
136
|
+
};
|
|
135
137
|
// Annotate the CommonJS export names for ESM import in node:
|
|
136
138
|
0 && (module.exports = {
|
|
137
139
|
INVALID_OPTION_KEYS,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/matchmaker/RegisteredHandler.ts"],
|
|
4
4
|
"sourcesContent": ["import { EventEmitter } from 'events';\nimport { logger } from '../Logger.ts';\nimport { Room } from './../Room.ts';\nimport { updateLobby } from './Lobby.ts';\n\nimport type { IRoomCache, SortOptions, IRoomCacheFilterByKeys, IRoomCacheSortByKeys, ExtractMetadata } from './driver.ts';\nimport type { Client } from '../Transport.ts';\nimport type { Type } from \"../utils/Utils.ts\";\n\nexport const INVALID_OPTION_KEYS: Array<keyof IRoomCache> = [\n 'clients',\n 'locked',\n 'private',\n // 'maxClients', - maxClients can be useful as filter options\n 'metadata',\n 'name',\n 'processId',\n 'roomId',\n];\n\n/**\n * Type for filterBy that supports both onCreate options and metadata fields\n */\ntype FilterByKeys<RoomType extends Room> =\n | IRoomCacheFilterByKeys\n | (ExtractMetadata<RoomType> extends object\n ? keyof ExtractMetadata<RoomType> & string\n : never)\n\n/**\n * Type for sortBy that supports room cache fields and metadata fields\n */\ntype SortByKeys<RoomType extends Room> =\n | IRoomCacheSortByKeys\n | (ExtractMetadata<RoomType> extends object\n ? keyof ExtractMetadata<RoomType> & string\n : never);\n\nexport interface RegisteredHandlerEvents<RoomType extends Type<Room> = any> {\n create: [room: InstanceType<RoomType>];\n lock: [room: InstanceType<RoomType>];\n unlock: [room: InstanceType<RoomType>];\n join: [room: InstanceType<RoomType>, client: Client];\n leave: [room: InstanceType<RoomType>, client: Client, willDispose: boolean];\n dispose: [room: InstanceType<RoomType>];\n 'visibility-change': [room: InstanceType<RoomType>, isVisible: boolean];\n 'metadata-change': [room: InstanceType<RoomType>];\n}\n\nexport class RegisteredHandler<\n RoomType extends Type<Room> = any\n> extends EventEmitter<RegisteredHandlerEvents<RoomType>> {\n '~room': RoomType;\n\n public klass: RoomType;\n public options: any;\n\n public name: string;\n public filterOptions: Array<FilterByKeys<InstanceType<RoomType>>> = [];\n public sortOptions?: SortOptions;\n\n public realtimeListingEnabled: boolean = false;\n\n constructor(klass: RoomType, options?: any) {\n super();\n\n this.klass = klass;\n this.options = options;\n\n if (typeof(klass) !== 'function') {\n logger.debug('You are likely not importing your room class correctly.');\n throw new Error(`class is expected but ${typeof(klass)} was provided.`);\n }\n }\n\n public enableRealtimeListing() {\n this.realtimeListingEnabled = true;\n this.on('create', (room) => updateLobby(room));\n this.on('lock', (room) => updateLobby(room));\n this.on('unlock', (room) => updateLobby(room));\n this.on('join', (room) => updateLobby(room));\n this.on('leave', (room, _, willDispose) => {\n if (!willDispose) {\n updateLobby(room);\n }\n });\n this.on('visibility-change', (room, isVisible) => updateLobby(room, isVisible));\n this.on('metadata-change', (room) => updateLobby(room));\n this.on('dispose', (room) => updateLobby(room, true));\n return this;\n }\n\n /**\n * Define which fields should be used for filtering rooms.\n * Supports both onCreate options and metadata fields using dot notation.\n *\n * @example\n * // Filter by IRoomCache fields\n * .filterBy(['maxClients'])\n *\n * @example\n * // Filter by metadata fields\n * .filterBy(['difficulty', 'metadata.region'])\n *\n * @example\n * // Mix both\n * .filterBy(['mode', 'difficulty', 'maxClients'])\n */\n public filterBy<T extends FilterByKeys<InstanceType<RoomType>>>(\n options: T[]\n ) {\n this.filterOptions = options;\n return this;\n }\n\n /**\n * Define how rooms should be sorted when querying.\n * Supports both room cache fields and metadata fields using dot notation.\n *\n * @example\n * // Sort by number of clients (descending)\n * .sortBy({ clients: -1 })\n *\n * @example\n * // Sort by metadata field\n * .sortBy({ 'metadata.rating': -1 })\n *\n * @example\n * // Multiple sort criteria\n * .sortBy({ 'metadata.skillLevel': 1, clients: -1 })\n */\n public sortBy<T extends SortByKeys<InstanceType<RoomType>>>(\n options: { [K in T]: SortOptions[string] }\n ): this {\n this.sortOptions = options as unknown as SortOptions;\n return this;\n }\n\n public getMetadataFromOptions(options: any) {\n const metadata = this.getFilterOptions(options);\n\n if (this.sortOptions) {\n for (const field in this.sortOptions) {\n if (field in options && !(field in metadata)) {\n metadata[field] = options[field];\n }\n }\n }\n\n return Object.keys(metadata).length > 0 ? { metadata } : {};\n }\n\n /**\n * Extract filter options from client options.\n */\n public getFilterOptions(options: any) {\n return this.filterOptions.reduce((prev, curr, i, arr) => {\n const field = String(arr[i]);\n\n // Handle regular (non-metadata) fields\n if (options.hasOwnProperty(field)) {\n if (INVALID_OPTION_KEYS.indexOf(field as any) !== -1) {\n logger.warn(`option \"${field}\" has internal usage and is going to be ignored.`);\n } else {\n prev[field] = options[field];\n }\n }\n\n return prev;\n }, {});\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA6B;AAC7B,oBAAuB;AACvB,kBAAqB;AACrB,mBAA4B;AAMrB,IAAM,sBAA+C;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA+BO,IAAM,oBAAN,cAEG,2BAAgD;AAAA,EAYxD,YAAY,OAAiB,SAAe;AAC1C,UAAM;AANR,SAAO,gBAA6D,CAAC;AAGrE,SAAO,yBAAkC;AAKvC,SAAK,QAAQ;AACb,SAAK,UAAU;AAEf,QAAI,OAAO,UAAW,YAAY;AAChC,2BAAO,MAAM,yDAAyD;AACtE,YAAM,IAAI,MAAM,yBAAyB,OAAO,KAAM,gBAAgB;AAAA,IACxE;AAAA,EACF;AAAA,EAEO,wBAAwB;AAC7B,SAAK,yBAAyB;AAC9B,SAAK,GAAG,UAAU,CAAC,aAAS,0BAAY,IAAI,CAAC;AAC7C,SAAK,GAAG,QAAQ,CAAC,aAAS,0BAAY,IAAI,CAAC;AAC3C,SAAK,GAAG,UAAU,CAAC,aAAS,0BAAY,IAAI,CAAC;AAC7C,SAAK,GAAG,QAAQ,CAAC,aAAS,0BAAY,IAAI,CAAC;AAC3C,SAAK,GAAG,SAAS,CAAC,MAAM,GAAG,gBAAgB;AACzC,UAAI,CAAC,aAAa;AAChB,sCAAY,IAAI;AAAA,MAClB;AAAA,IACF,CAAC;AACD,SAAK,GAAG,qBAAqB,CAAC,MAAM,kBAAc,0BAAY,MAAM,SAAS,CAAC;AAC9E,SAAK,GAAG,mBAAmB,CAAC,aAAS,0BAAY,IAAI,CAAC;AACtD,SAAK,GAAG,WAAW,CAAC,aAAS,0BAAY,MAAM,IAAI,CAAC;AACpD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,SACL,SACA;AACA,SAAK,gBAAgB;AACrB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,OACL,SACM;AACN,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEO,uBAAuB,SAAc;AAC1C,UAAM,WAAW,KAAK,iBAAiB,OAAO;AAE9C,QAAI,KAAK,aAAa;AACpB,iBAAW,SAAS,KAAK,aAAa;AACpC,YAAI,SAAS,WAAW,EAAE,SAAS,WAAW;AAC5C,mBAAS,KAAK,IAAI,QAAQ,KAAK;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO,KAAK,QAAQ,EAAE,SAAS,IAAI,EAAE,SAAS,IAAI,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAiB,SAAc;AACpC,WAAO,KAAK,cAAc,OAAO,CAAC,MAAM,MAAM,GAAG,QAAQ;AACvD,YAAM,QAAQ,OAAO,IAAI,CAAC,CAAC;AAG3B,UAAI,QAAQ,eAAe,KAAK,GAAG;AACjC,YAAI,oBAAoB,QAAQ,KAAY,MAAM,IAAI;AACpD,+BAAO,KAAK,WAAW,KAAK,kDAAkD;AAAA,QAChF,OAAO;AACL,eAAK,KAAK,IAAI,QAAQ,KAAK;AAAA,QAC7B;AAAA,MACF;AAEA,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,EACP;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -26,14 +26,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// packages/core/src/matchmaker/controller.ts
|
|
29
31
|
var controller_exports = {};
|
|
30
32
|
__export(controller_exports, {
|
|
31
33
|
default: () => controller_default
|
|
32
34
|
});
|
|
33
35
|
module.exports = __toCommonJS(controller_exports);
|
|
34
|
-
var import_Protocol = require("../Protocol.
|
|
35
|
-
var import_ServerError = require("../errors/ServerError.
|
|
36
|
-
var matchMaker = __toESM(require("../MatchMaker.
|
|
36
|
+
var import_Protocol = require("../Protocol.cjs");
|
|
37
|
+
var import_ServerError = require("../errors/ServerError.cjs");
|
|
38
|
+
var matchMaker = __toESM(require("../MatchMaker.cjs"), 1);
|
|
37
39
|
var controller_default = {
|
|
38
40
|
DEFAULT_CORS_HEADERS: {
|
|
39
41
|
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept, Authorization",
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/matchmaker/controller.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Matchmaking controller\n * (for interoperability between different http frameworks, e.g. express, uWebSockets.js, etc)\n */\n\nimport { ErrorCode } from '../Protocol.ts';\nimport { ServerError } from '../errors/ServerError.ts';\nimport * as matchMaker from '../MatchMaker.ts';\nimport type { AuthContext } from '../Transport.ts';\n\nexport default {\n DEFAULT_CORS_HEADERS: {\n 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization',\n 'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',\n 'Access-Control-Allow-Credentials': 'true',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Max-Age': '2592000',\n // ...\n },\n\n exposedMethods: ['joinOrCreate', 'create', 'join', 'joinById', 'reconnect'],\n allowedRoomNameChars: /([a-zA-Z_\\-0-9]+)/gi,\n matchmakeRoute: 'matchmake',\n\n /**\n * You can manually change the default corsHeaders by overwriting the `getCorsHeaders()` method:\n * ```\n * import { matchMaker } from \"@colyseus/core\";\n * matchMaker.controller.getCorsHeaders = function(headers) {\n * if (headers.get('referer') !== \"xxx\") {\n * }\n *\n * return {\n * 'Access-Control-Allow-Origin': 'safedomain.com',\n * }\n * }\n * ```\n */\n getCorsHeaders(headers: Headers): { [header: string]: string } {\n return {\n ['Access-Control-Allow-Origin']: headers.get(\"origin\") || \"*\",\n };\n },\n\n async invokeMethod(\n method: string,\n roomName: string,\n clientOptions: matchMaker.ClientOptions = {},\n authOptions?: AuthContext,\n ) {\n if (this.exposedMethods.indexOf(method) === -1) {\n throw new ServerError(ErrorCode.MATCHMAKE_NO_HANDLER, `invalid method \"${method}\"`);\n }\n\n try {\n return await matchMaker[method](roomName, clientOptions, authOptions);\n\n } catch (e: any) {\n throw new ServerError(e.code || ErrorCode.MATCHMAKE_UNHANDLED, e.message);\n }\n }\n\n}\n\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,sBAA0B;AAC1B,yBAA4B;AAC5B,iBAA4B;AAG5B,IAAO,qBAAQ;AAAA,EACb,sBAAsB;AAAA,IACpB,gCAAgC;AAAA,IAChC,gCAAgC;AAAA,IAChC,oCAAoC;AAAA,IACpC,+BAA+B;AAAA,IAC/B,0BAA0B;AAAA;AAAA,EAE5B;AAAA,EAEA,gBAAgB,CAAC,gBAAgB,UAAU,QAAQ,YAAY,WAAW;AAAA,EAC1E,sBAAsB;AAAA,EACtB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBhB,eAAe,SAAgD;AAC7D,WAAO;AAAA,MACL,CAAC,6BAA6B,GAAG,QAAQ,IAAI,QAAQ,KAAK;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,QACA,UACA,gBAA0C,CAAC,GAC3C,aACA;AACA,QAAI,KAAK,eAAe,QAAQ,MAAM,MAAM,IAAI;AAC9C,YAAM,IAAI,+BAAY,0BAAU,sBAAsB,mBAAmB,MAAM,GAAG;AAAA,IACpF;AAEA,QAAI;AACF,aAAO,MAAM,WAAW,MAAM,EAAE,UAAU,eAAe,WAAW;AAAA,IAEtE,SAAS,GAAQ;AACf,YAAM,IAAI,+BAAY,EAAE,QAAQ,0BAAU,qBAAqB,EAAE,OAAO;AAAA,IAC1E;AAAA,EACF;AAEF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/core/src/matchmaker/driver.ts
|
|
19
21
|
var driver_exports = {};
|
|
20
22
|
__export(driver_exports, {
|
|
21
23
|
getLockId: () => getLockId,
|