@colyseus/core 0.17.3 → 0.17.5

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.
Files changed (70) hide show
  1. package/build/{Debug.js → Debug.cjs} +13 -11
  2. package/build/{Debug.js.map → Debug.cjs.map} +1 -1
  3. package/build/{IPC.js → IPC.cjs} +6 -4
  4. package/build/{IPC.js.map → IPC.cjs.map} +1 -1
  5. package/build/{Logger.js → Logger.cjs} +5 -3
  6. package/build/{Logger.js.map → Logger.cjs.map} +1 -1
  7. package/build/{MatchMaker.js → MatchMaker.cjs} +31 -29
  8. package/build/{MatchMaker.js.map → MatchMaker.cjs.map} +1 -1
  9. package/build/{Protocol.js → Protocol.cjs} +8 -6
  10. package/build/{Protocol.js.map → Protocol.cjs.map} +1 -1
  11. package/build/{Room.js → Room.cjs} +22 -20
  12. package/build/{Room.js.map → Room.cjs.map} +1 -1
  13. package/build/{Server.js → Server.cjs} +18 -16
  14. package/build/{Server.js.map → Server.cjs.map} +2 -2
  15. package/build/{Stats.js → Stats.cjs} +8 -6
  16. package/build/{Stats.js.map → Stats.cjs.map} +1 -1
  17. package/build/{Transport.js → Transport.cjs} +12 -20
  18. package/build/{Transport.js.map → Transport.cjs.map} +1 -1
  19. package/build/errors/{RoomExceptions.js → RoomExceptions.cjs} +18 -16
  20. package/build/errors/{RoomExceptions.js.map → RoomExceptions.cjs.map} +1 -1
  21. package/build/errors/{SeatReservationError.js → SeatReservationError.cjs} +4 -2
  22. package/build/errors/{SeatReservationError.js.map → SeatReservationError.cjs.map} +1 -1
  23. package/build/errors/{ServerError.js → ServerError.cjs} +6 -4
  24. package/build/errors/{ServerError.js.map → ServerError.cjs.map} +1 -1
  25. package/build/{index.js → index.cjs} +27 -25
  26. package/build/{index.js.map → index.cjs.map} +1 -1
  27. package/build/matchmaker/{Lobby.js → Lobby.cjs} +4 -2
  28. package/build/matchmaker/{Lobby.js.map → Lobby.cjs.map} +1 -1
  29. package/build/matchmaker/LocalDriver/{LocalDriver.js → LocalDriver.cjs} +6 -4
  30. package/build/matchmaker/LocalDriver/{LocalDriver.js.map → LocalDriver.cjs.map} +1 -1
  31. package/build/matchmaker/LocalDriver/{Query.js → Query.cjs} +4 -2
  32. package/build/matchmaker/LocalDriver/{Query.js.map → Query.cjs.map} +1 -1
  33. package/build/matchmaker/{RegisteredHandler.js → RegisteredHandler.cjs} +8 -6
  34. package/build/matchmaker/{RegisteredHandler.js.map → RegisteredHandler.cjs.map} +1 -1
  35. package/build/matchmaker/{controller.js → controller.cjs} +5 -3
  36. package/build/matchmaker/{controller.js.map → controller.cjs.map} +1 -1
  37. package/build/matchmaker/{driver.js → driver.cjs} +2 -0
  38. package/build/matchmaker/{driver.js.map → driver.cjs.map} +1 -1
  39. package/build/presence/{LocalPresence.js → LocalPresence.cjs} +6 -4
  40. package/build/presence/{LocalPresence.js.map → LocalPresence.cjs.map} +1 -1
  41. package/build/presence/{Presence.js → Presence.cjs} +2 -0
  42. package/build/presence/{Presence.js.map → Presence.cjs.map} +1 -1
  43. package/build/rooms/{LobbyRoom.js → LobbyRoom.cjs} +7 -5
  44. package/build/rooms/{LobbyRoom.js.map → LobbyRoom.cjs.map} +1 -1
  45. package/build/rooms/{RankedQueueRoom.js → RankedQueueRoom.cjs} +6 -4
  46. package/build/rooms/{RankedQueueRoom.js.map → RankedQueueRoom.cjs.map} +1 -1
  47. package/build/rooms/{RelayRoom.js → RelayRoom.cjs} +10 -8
  48. package/build/rooms/{RelayRoom.js.map → RelayRoom.cjs.map} +1 -1
  49. package/build/router/{default_routes.js → default_routes.cjs} +5 -3
  50. package/build/router/{default_routes.js.map → default_routes.cjs.map} +1 -1
  51. package/build/router/{index.js → index.cjs} +3 -1
  52. package/build/router/{index.js.map → index.cjs.map} +1 -1
  53. package/build/serializer/{NoneSerializer.js → NoneSerializer.cjs} +4 -2
  54. package/build/serializer/{NoneSerializer.js.map → NoneSerializer.cjs.map} +1 -1
  55. package/build/serializer/{SchemaSerializer.js → SchemaSerializer.cjs} +8 -6
  56. package/build/serializer/{SchemaSerializer.js.map → SchemaSerializer.cjs.map} +1 -1
  57. package/build/serializer/SchemaSerializerDebug.cjs +9 -0
  58. package/build/serializer/{SchemaSerializerDebug.js.map → SchemaSerializerDebug.cjs.map} +1 -1
  59. package/build/serializer/{Serializer.js → Serializer.cjs} +2 -0
  60. package/build/serializer/{Serializer.js.map → Serializer.cjs.map} +1 -1
  61. package/build/utils/{DevMode.js → DevMode.cjs} +7 -5
  62. package/build/utils/{DevMode.js.map → DevMode.cjs.map} +1 -1
  63. package/build/utils/{StandardSchema.js → StandardSchema.cjs} +2 -0
  64. package/build/utils/{StandardSchema.js.map → StandardSchema.cjs.map} +1 -1
  65. package/build/utils/{Utils.js → Utils.cjs} +13 -11
  66. package/build/utils/{Utils.js.map → Utils.cjs.map} +1 -1
  67. package/build/utils/{nanoevents.js → nanoevents.cjs} +3 -1
  68. package/build/utils/{nanoevents.js.map → nanoevents.cjs.map} +1 -1
  69. package/package.json +6 -6
  70. package/build/serializer/SchemaSerializerDebug.js +0 -29
@@ -26,6 +26,8 @@ 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/Debug.ts
29
31
  var Debug_exports = {};
30
32
  __export(Debug_exports, {
31
33
  debugAndPrintError: () => debugAndPrintError,
@@ -40,25 +42,25 @@ __export(Debug_exports, {
40
42
  });
41
43
  module.exports = __toCommonJS(Debug_exports);
42
44
  var import_debug = __toESM(require("debug"), 1);
43
- var import_Logger = require("./Logger.ts");
44
- var import_ServerError = require("./errors/ServerError.ts");
45
- const debugConnection = (0, import_debug.default)("colyseus:connection");
45
+ var import_Logger = require("./Logger.cjs");
46
+ var import_ServerError = require("./errors/ServerError.cjs");
47
+ var debugConnection = (0, import_debug.default)("colyseus:connection");
46
48
  debugConnection.log = console.debug.bind(console);
47
- const debugDriver = (0, import_debug.default)("colyseus:driver");
49
+ var debugDriver = (0, import_debug.default)("colyseus:driver");
48
50
  debugDriver.log = console.debug.bind(console);
49
- const debugMatchMaking = (0, import_debug.default)("colyseus:matchmaking");
51
+ var debugMatchMaking = (0, import_debug.default)("colyseus:matchmaking");
50
52
  debugMatchMaking.log = console.debug.bind(console);
51
- const debugMessage = (0, import_debug.default)("colyseus:message");
53
+ var debugMessage = (0, import_debug.default)("colyseus:message");
52
54
  debugMessage.log = console.debug.bind(console);
53
- const debugPatch = (0, import_debug.default)("colyseus:patch");
55
+ var debugPatch = (0, import_debug.default)("colyseus:patch");
54
56
  debugPatch.log = console.debug.bind(console);
55
- const debugPresence = (0, import_debug.default)("colyseus:presence");
57
+ var debugPresence = (0, import_debug.default)("colyseus:presence");
56
58
  debugPresence.log = console.debug.bind(console);
57
- const debugError = (0, import_debug.default)("colyseus:errors");
59
+ var debugError = (0, import_debug.default)("colyseus:errors");
58
60
  debugError.log = console.error.bind(console);
59
- const debugDevMode = (0, import_debug.default)("colyseus:devmode");
61
+ var debugDevMode = (0, import_debug.default)("colyseus:devmode");
60
62
  debugDevMode.log = console.debug.bind(console);
61
- const debugAndPrintError = (e) => {
63
+ var debugAndPrintError = (e) => {
62
64
  const message = e instanceof Error ? e.stack : e;
63
65
  if (!(e instanceof import_ServerError.ServerError)) {
64
66
  import_Logger.logger.error(message);
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/Debug.ts"],
4
4
  "sourcesContent": ["import debug from 'debug';\nimport { logger } from './Logger.ts';\nimport { ServerError } from './errors/ServerError.ts';\n\nexport const debugConnection = debug('colyseus:connection');\ndebugConnection.log = console.debug.bind(console); // STDOUT\n\nexport const debugDriver = debug('colyseus:driver');\ndebugDriver.log = console.debug.bind(console); // STDOUT\n\nexport const debugMatchMaking = debug('colyseus:matchmaking');\ndebugMatchMaking.log = console.debug.bind(console); // STDOUT\n\nexport const debugMessage = debug('colyseus:message');\ndebugMessage.log = console.debug.bind(console); // STDOUT\n\nexport const debugPatch = debug('colyseus:patch');\ndebugPatch.log = console.debug.bind(console); // STDOUT\n\nexport const debugPresence = debug('colyseus:presence');\ndebugPresence.log = console.debug.bind(console); // STDOUT\n\nexport const debugError = debug('colyseus:errors');\ndebugError.log = console.error.bind(console); // STDERR\n\nexport const debugDevMode = debug('colyseus:devmode');\ndebugDevMode.log = console.debug.bind(console); // STDOUT\n\nexport const debugAndPrintError = (e: Error | string) => {\n const message = (e instanceof Error) ? e.stack : e;\n\n if (!(e instanceof ServerError)) {\n logger.error(message);\n }\n\n debugError.call(debugError, message);\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,oBAAuB;AACvB,yBAA4B;AAErB,MAAM,sBAAkB,aAAAA,SAAM,qBAAqB;AAC1D,gBAAgB,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEzC,MAAM,kBAAc,aAAAA,SAAM,iBAAiB;AAClD,YAAY,MAAM,QAAQ,MAAM,KAAK,OAAO;AAErC,MAAM,uBAAmB,aAAAA,SAAM,sBAAsB;AAC5D,iBAAiB,MAAM,QAAQ,MAAM,KAAK,OAAO;AAE1C,MAAM,mBAAe,aAAAA,SAAM,kBAAkB;AACpD,aAAa,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEtC,MAAM,iBAAa,aAAAA,SAAM,gBAAgB;AAChD,WAAW,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEpC,MAAM,oBAAgB,aAAAA,SAAM,mBAAmB;AACtD,cAAc,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEvC,MAAM,iBAAa,aAAAA,SAAM,iBAAiB;AACjD,WAAW,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEpC,MAAM,mBAAe,aAAAA,SAAM,kBAAkB;AACpD,aAAa,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEtC,MAAM,qBAAqB,CAAC,MAAsB;AACvD,QAAM,UAAW,aAAa,QAAS,EAAE,QAAQ;AAEjD,MAAI,EAAE,aAAa,iCAAc;AAC/B,yBAAO,MAAM,OAAO;AAAA,EACtB;AAEA,aAAW,KAAK,YAAY,OAAO;AACrC;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,oBAAuB;AACvB,yBAA4B;AAErB,IAAM,sBAAkB,aAAAA,SAAM,qBAAqB;AAC1D,gBAAgB,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEzC,IAAM,kBAAc,aAAAA,SAAM,iBAAiB;AAClD,YAAY,MAAM,QAAQ,MAAM,KAAK,OAAO;AAErC,IAAM,uBAAmB,aAAAA,SAAM,sBAAsB;AAC5D,iBAAiB,MAAM,QAAQ,MAAM,KAAK,OAAO;AAE1C,IAAM,mBAAe,aAAAA,SAAM,kBAAkB;AACpD,aAAa,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEtC,IAAM,iBAAa,aAAAA,SAAM,gBAAgB;AAChD,WAAW,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEpC,IAAM,oBAAgB,aAAAA,SAAM,mBAAmB;AACtD,cAAc,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEvC,IAAM,iBAAa,aAAAA,SAAM,iBAAiB;AACjD,WAAW,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEpC,IAAM,mBAAe,aAAAA,SAAM,kBAAkB;AACpD,aAAa,MAAM,QAAQ,MAAM,KAAK,OAAO;AAEtC,IAAM,qBAAqB,CAAC,MAAsB;AACvD,QAAM,UAAW,aAAa,QAAS,EAAE,QAAQ;AAEjD,MAAI,EAAE,aAAa,iCAAc;AAC/B,yBAAO,MAAM,OAAO;AAAA,EACtB;AAEA,aAAW,KAAK,YAAY,OAAO;AACrC;",
6
6
  "names": ["debug"]
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/IPC.ts
19
21
  var IPC_exports = {};
20
22
  __export(IPC_exports, {
21
23
  requestFromIPC: () => requestFromIPC,
@@ -23,10 +25,10 @@ __export(IPC_exports, {
23
25
  subscribeWithTimeout: () => subscribeWithTimeout
24
26
  });
25
27
  module.exports = __toCommonJS(IPC_exports);
26
- var import_Debug = require("./Debug.ts");
27
- var import_Presence = require("./presence/Presence.ts");
28
- var import_Protocol = require("./Protocol.ts");
29
- var import_Utils = require("./utils/Utils.ts");
28
+ var import_Debug = require("./Debug.cjs");
29
+ var import_Presence = require("./presence/Presence.cjs");
30
+ var import_Protocol = require("./Protocol.cjs");
31
+ var import_Utils = require("./utils/Utils.cjs");
30
32
  async function requestFromIPC(presence, publishToChannel, method, args, rejectionTimeout = import_Utils.REMOTE_ROOM_SHORT_TIMEOUT) {
31
33
  return new Promise(async (resolve, reject) => {
32
34
  let unsubscribeTimeout;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/IPC.ts"],
4
4
  "sourcesContent": ["import { debugAndPrintError } from './Debug.ts';\nimport { type Presence } from './presence/Presence.ts';\nimport { IpcProtocol } from './Protocol.ts';\nimport { generateId, REMOTE_ROOM_SHORT_TIMEOUT } from './utils/Utils.ts';\n\nexport async function requestFromIPC<T>(\n presence: Presence,\n publishToChannel: string,\n method: string | undefined,\n args: any[],\n rejectionTimeout: number = REMOTE_ROOM_SHORT_TIMEOUT,\n): Promise<T> {\n return new Promise<T>(async (resolve, reject) => {\n let unsubscribeTimeout: NodeJS.Timeout;\n\n const requestId = generateId();\n const channel = `ipc:${requestId}`;\n\n const unsubscribe = () => {\n presence.unsubscribe(channel);\n clearTimeout(unsubscribeTimeout);\n };\n\n await presence.subscribe(channel, (message: [IpcProtocol, any]) => {\n const [code, data] = message;\n if (code === IpcProtocol.SUCCESS) {\n resolve(data);\n\n } else if (code === IpcProtocol.ERROR) {\n let error: any = data;\n\n // parse error message + code\n try { error = JSON.parse(data) } catch (e) {}\n\n // turn string message into Error instance\n if (typeof(error) === \"string\") {\n error = new Error(error);\n }\n\n reject(error);\n }\n unsubscribe();\n });\n\n presence.publish(publishToChannel, [method, requestId, args]);\n\n unsubscribeTimeout = setTimeout(() => {\n unsubscribe();\n reject(new Error(\"ipc_timeout\"));\n }, rejectionTimeout);\n });\n}\n\nexport async function subscribeIPC(\n presence: Presence,\n channel: string,\n replyCallback: (method: string, args: any[]) => any,\n) {\n await presence.subscribe(channel, (message) => {\n const [method, requestId, args] = message;\n\n const reply = (code, data) => {\n presence.publish(`ipc:${requestId}`, [code, data]);\n };\n\n // reply with method result\n let response: any;\n try {\n response = replyCallback(method, args);\n\n } catch (e: any) {\n debugAndPrintError(e);\n const error = (typeof(e.code) !== \"undefined\")\n ? { code: e.code, message: e.message }\n : e.message;\n return reply(IpcProtocol.ERROR, JSON.stringify(error));\n }\n\n if (!(response instanceof Promise)) {\n return reply(IpcProtocol.SUCCESS, response);\n }\n\n response.\n then((result) => reply(IpcProtocol.SUCCESS, result)).\n catch((e) => {\n // user might have called `reject()` without arguments.\n const err = e && e.message || e;\n reply(IpcProtocol.ERROR, err);\n });\n });\n}\n\n/**\n * Wait for a room creation notification via presence publish/subscribe\n */\nexport function subscribeWithTimeout(\n presence: Presence,\n channel: string,\n timeout: number,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n let timeoutHandle: NodeJS.Timeout;\n let resolved = false;\n\n const unsubscribe = () => {\n presence.unsubscribe(channel);\n clearTimeout(timeoutHandle);\n };\n\n presence.subscribe(channel, (roomId: string) => {\n if (resolved) return;\n resolved = true;\n unsubscribe();\n resolve(roomId);\n });\n\n timeoutHandle = setTimeout(() => {\n if (resolved) return;\n resolved = true;\n unsubscribe();\n reject(new Error(\"timeout\"));\n }, timeout);\n });\n}"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAmC;AACnC,sBAA8B;AAC9B,sBAA4B;AAC5B,mBAAsD;AAEtD,eAAsB,eACpB,UACA,kBACA,QACA,MACA,mBAA2B,wCACf;AACZ,SAAO,IAAI,QAAW,OAAO,SAAS,WAAW;AAC/C,QAAI;AAEJ,UAAM,gBAAY,yBAAW;AAC7B,UAAM,UAAU,OAAO,SAAS;AAEhC,UAAM,cAAc,MAAM;AACxB,eAAS,YAAY,OAAO;AAC5B,mBAAa,kBAAkB;AAAA,IACjC;AAEA,UAAM,SAAS,UAAU,SAAS,CAAC,YAAgC;AACjE,YAAM,CAAC,MAAM,IAAI,IAAI;AACrB,UAAI,SAAS,4BAAY,SAAS;AAChC,gBAAQ,IAAI;AAAA,MAEd,WAAW,SAAS,4BAAY,OAAO;AACrC,YAAI,QAAa;AAGjB,YAAI;AAAE,kBAAQ,KAAK,MAAM,IAAI;AAAA,QAAE,SAAS,GAAG;AAAA,QAAC;AAG5C,YAAI,OAAO,UAAW,UAAU;AAC9B,kBAAQ,IAAI,MAAM,KAAK;AAAA,QACzB;AAEA,eAAO,KAAK;AAAA,MACd;AACA,kBAAY;AAAA,IACd,CAAC;AAED,aAAS,QAAQ,kBAAkB,CAAC,QAAQ,WAAW,IAAI,CAAC;AAE5D,yBAAqB,WAAW,MAAM;AACpC,kBAAY;AACZ,aAAO,IAAI,MAAM,aAAa,CAAC;AAAA,IACjC,GAAG,gBAAgB;AAAA,EACrB,CAAC;AACH;AAEA,eAAsB,aACpB,UACA,SACA,eACA;AACA,QAAM,SAAS,UAAU,SAAS,CAAC,YAAY;AAC7C,UAAM,CAAC,QAAQ,WAAW,IAAI,IAAI;AAElC,UAAM,QAAQ,CAAC,MAAM,SAAS;AAC5B,eAAS,QAAQ,OAAO,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC;AAAA,IACnD;AAGA,QAAI;AACJ,QAAI;AACF,iBAAW,cAAc,QAAQ,IAAI;AAAA,IAEvC,SAAS,GAAQ;AACf,2CAAmB,CAAC;AACpB,YAAM,QAAS,OAAO,EAAE,SAAU,cAC9B,EAAE,MAAM,EAAE,MAAM,SAAS,EAAE,QAAQ,IACnC,EAAE;AACN,aAAO,MAAM,4BAAY,OAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IACvD;AAEA,QAAI,EAAE,oBAAoB,UAAU;AAClC,aAAO,MAAM,4BAAY,SAAS,QAAQ;AAAA,IAC5C;AAEA,aACE,KAAK,CAAC,WAAW,MAAM,4BAAY,SAAS,MAAM,CAAC,EACnD,MAAM,CAAC,MAAM;AAEX,YAAM,MAAM,KAAK,EAAE,WAAW;AAC9B,YAAM,4BAAY,OAAO,GAAG;AAAA,IAC9B,CAAC;AAAA,EACL,CAAC;AACH;AAKO,SAAS,qBACd,UACA,SACA,SACiB;AACjB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AACJ,QAAI,WAAW;AAEf,UAAM,cAAc,MAAM;AACxB,eAAS,YAAY,OAAO;AAC5B,mBAAa,aAAa;AAAA,IAC5B;AAEA,aAAS,UAAU,SAAS,CAAC,WAAmB;AAC9C,UAAI,SAAU;AACd,iBAAW;AACX,kBAAY;AACZ,cAAQ,MAAM;AAAA,IAChB,CAAC;AAED,oBAAgB,WAAW,MAAM;AAC/B,UAAI,SAAU;AACd,iBAAW;AACX,kBAAY;AACZ,aAAO,IAAI,MAAM,SAAS,CAAC;AAAA,IAC7B,GAAG,OAAO;AAAA,EACZ,CAAC;AACH;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAmC;AACnC,sBAA8B;AAC9B,sBAA4B;AAC5B,mBAAsD;AAEtD,eAAsB,eACpB,UACA,kBACA,QACA,MACA,mBAA2B,wCACf;AACZ,SAAO,IAAI,QAAW,OAAO,SAAS,WAAW;AAC/C,QAAI;AAEJ,UAAM,gBAAY,yBAAW;AAC7B,UAAM,UAAU,OAAO,SAAS;AAEhC,UAAM,cAAc,MAAM;AACxB,eAAS,YAAY,OAAO;AAC5B,mBAAa,kBAAkB;AAAA,IACjC;AAEA,UAAM,SAAS,UAAU,SAAS,CAAC,YAAgC;AACjE,YAAM,CAAC,MAAM,IAAI,IAAI;AACrB,UAAI,SAAS,4BAAY,SAAS;AAChC,gBAAQ,IAAI;AAAA,MAEd,WAAW,SAAS,4BAAY,OAAO;AACrC,YAAI,QAAa;AAGjB,YAAI;AAAE,kBAAQ,KAAK,MAAM,IAAI;AAAA,QAAE,SAAS,GAAG;AAAA,QAAC;AAG5C,YAAI,OAAO,UAAW,UAAU;AAC9B,kBAAQ,IAAI,MAAM,KAAK;AAAA,QACzB;AAEA,eAAO,KAAK;AAAA,MACd;AACA,kBAAY;AAAA,IACd,CAAC;AAED,aAAS,QAAQ,kBAAkB,CAAC,QAAQ,WAAW,IAAI,CAAC;AAE5D,yBAAqB,WAAW,MAAM;AACpC,kBAAY;AACZ,aAAO,IAAI,MAAM,aAAa,CAAC;AAAA,IACjC,GAAG,gBAAgB;AAAA,EACrB,CAAC;AACH;AAEA,eAAsB,aACpB,UACA,SACA,eACA;AACA,QAAM,SAAS,UAAU,SAAS,CAAC,YAAY;AAC7C,UAAM,CAAC,QAAQ,WAAW,IAAI,IAAI;AAElC,UAAM,QAAQ,CAAC,MAAM,SAAS;AAC5B,eAAS,QAAQ,OAAO,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC;AAAA,IACnD;AAGA,QAAI;AACJ,QAAI;AACF,iBAAW,cAAc,QAAQ,IAAI;AAAA,IAEvC,SAAS,GAAQ;AACf,2CAAmB,CAAC;AACpB,YAAM,QAAS,OAAO,EAAE,SAAU,cAC9B,EAAE,MAAM,EAAE,MAAM,SAAS,EAAE,QAAQ,IACnC,EAAE;AACN,aAAO,MAAM,4BAAY,OAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IACvD;AAEA,QAAI,EAAE,oBAAoB,UAAU;AAClC,aAAO,MAAM,4BAAY,SAAS,QAAQ;AAAA,IAC5C;AAEA,aACE,KAAK,CAAC,WAAW,MAAM,4BAAY,SAAS,MAAM,CAAC,EACnD,MAAM,CAAC,MAAM;AAEX,YAAM,MAAM,KAAK,EAAE,WAAW;AAC9B,YAAM,4BAAY,OAAO,GAAG;AAAA,IAC9B,CAAC;AAAA,EACL,CAAC;AACH;AAKO,SAAS,qBACd,UACA,SACA,SACiB;AACjB,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI;AACJ,QAAI,WAAW;AAEf,UAAM,cAAc,MAAM;AACxB,eAAS,YAAY,OAAO;AAC5B,mBAAa,aAAa;AAAA,IAC5B;AAEA,aAAS,UAAU,SAAS,CAAC,WAAmB;AAC9C,UAAI,SAAU;AACd,iBAAW;AACX,kBAAY;AACZ,cAAQ,MAAM;AAAA,IAChB,CAAC;AAED,oBAAgB,WAAW,MAAM;AAC/B,UAAI,SAAU;AACd,iBAAW;AACX,kBAAY;AACZ,aAAO,IAAI,MAAM,SAAS,CAAC;AAAA,IAC7B,GAAG,OAAO;AAAA,EACZ,CAAC;AACH;",
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/Logger.ts
19
21
  var Logger_exports = {};
20
22
  __export(Logger_exports, {
21
23
  Logger: () => Logger,
@@ -23,7 +25,7 @@ __export(Logger_exports, {
23
25
  setLogger: () => setLogger
24
26
  });
25
27
  module.exports = __toCommonJS(Logger_exports);
26
- class Logger {
28
+ var Logger = class {
27
29
  debug(...args) {
28
30
  logger.debug(...args);
29
31
  }
@@ -39,8 +41,8 @@ class Logger {
39
41
  warn(...args) {
40
42
  logger.warn(...args);
41
43
  }
42
- }
43
- let logger = console;
44
+ };
45
+ var logger = console;
44
46
  function setLogger(instance) {
45
47
  logger = instance;
46
48
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/Logger.ts"],
4
4
  "sourcesContent": ["//\n// Abstract logging adaptor\n//\nexport class Logger {\n debug(...args) {\n logger.debug(...args);\n }\n\n error(...args) {\n logger.error(...args);\n }\n\n info(...args) {\n logger.info(...args);\n }\n\n trace(...args) {\n logger.trace(...args);\n }\n\n warn(...args) {\n logger.warn(...args);\n }\n}\n\nexport let logger: Logger = console;\n\nexport function setLogger(instance: Logger) {\n logger = instance;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,OAAO;AAAA,EAClB,SAAS,MAAM;AACb,WAAO,MAAM,GAAG,IAAI;AAAA,EACtB;AAAA,EAEA,SAAS,MAAM;AACb,WAAO,MAAM,GAAG,IAAI;AAAA,EACtB;AAAA,EAEA,QAAQ,MAAM;AACZ,WAAO,KAAK,GAAG,IAAI;AAAA,EACrB;AAAA,EAEA,SAAS,MAAM;AACb,WAAO,MAAM,GAAG,IAAI;AAAA,EACtB;AAAA,EAEA,QAAQ,MAAM;AACZ,WAAO,KAAK,GAAG,IAAI;AAAA,EACrB;AACF;AAEO,IAAI,SAAiB;AAErB,SAAS,UAAU,UAAkB;AAC1C,WAAS;AACX;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,IAAM,SAAN,MAAa;AAAA,EAClB,SAAS,MAAM;AACb,WAAO,MAAM,GAAG,IAAI;AAAA,EACtB;AAAA,EAEA,SAAS,MAAM;AACb,WAAO,MAAM,GAAG,IAAI;AAAA,EACtB;AAAA,EAEA,QAAQ,MAAM;AACZ,WAAO,KAAK,GAAG,IAAI;AAAA,EACrB;AAAA,EAEA,SAAS,MAAM;AACb,WAAO,MAAM,GAAG,IAAI;AAAA,EACtB;AAAA,EAEA,QAAQ,MAAM;AACZ,WAAO,KAAK,GAAG,IAAI;AAAA,EACrB;AACF;AAEO,IAAI,SAAiB;AAErB,SAAS,UAAU,UAAkB;AAC1C,WAAS;AACX;",
6
6
  "names": []
7
7
  }
@@ -26,6 +26,8 @@ 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.ts
29
31
  var MatchMaker_exports = {};
30
32
  __export(MatchMaker_exports, {
31
33
  MatchMakerState: () => MatchMakerState,
@@ -69,43 +71,43 @@ __export(MatchMaker_exports, {
69
71
  });
70
72
  module.exports = __toCommonJS(MatchMaker_exports);
71
73
  var import_events = require("events");
72
- var import_Protocol = require("./Protocol.ts");
73
- var import_IPC = require("./IPC.ts");
74
- var import_Utils = require("./utils/Utils.ts");
75
- var import_DevMode = require("./utils/DevMode.ts");
76
- var import_RegisteredHandler = require("./matchmaker/RegisteredHandler.ts");
77
- var import_Room = require("./Room.ts");
78
- var import_LocalPresence = require("./presence/LocalPresence.ts");
79
- var import_Presence = require("./presence/Presence.ts");
80
- var import_Debug = require("./Debug.ts");
81
- var import_SeatReservationError = require("./errors/SeatReservationError.ts");
82
- var import_ServerError = require("./errors/ServerError.ts");
83
- var import_LocalDriver = require("./matchmaker/LocalDriver/LocalDriver.ts");
84
- var import_controller = __toESM(require("./matchmaker/controller.ts"), 1);
85
- var stats = __toESM(require("./Stats.ts"), 1);
86
- var import_Logger = require("./Logger.ts");
87
- var import_driver = require("./matchmaker/driver.ts");
88
- const handlers = {};
89
- const rooms = {};
90
- const events = new import_events.EventEmitter();
91
- let publicAddress;
92
- let processId;
93
- let presence;
94
- let driver;
95
- let selectProcessIdToCreateRoom = async function() {
74
+ var import_Protocol = require("./Protocol.cjs");
75
+ var import_IPC = require("./IPC.cjs");
76
+ var import_Utils = require("./utils/Utils.cjs");
77
+ var import_DevMode = require("./utils/DevMode.cjs");
78
+ var import_RegisteredHandler = require("./matchmaker/RegisteredHandler.cjs");
79
+ var import_Room = require("./Room.cjs");
80
+ var import_LocalPresence = require("./presence/LocalPresence.cjs");
81
+ var import_Presence = require("./presence/Presence.cjs");
82
+ var import_Debug = require("./Debug.cjs");
83
+ var import_SeatReservationError = require("./errors/SeatReservationError.cjs");
84
+ var import_ServerError = require("./errors/ServerError.cjs");
85
+ var import_LocalDriver = require("./matchmaker/LocalDriver/LocalDriver.cjs");
86
+ var import_controller = __toESM(require("./matchmaker/controller.cjs"), 1);
87
+ var stats = __toESM(require("./Stats.cjs"), 1);
88
+ var import_Logger = require("./Logger.cjs");
89
+ var import_driver = require("./matchmaker/driver.cjs");
90
+ var handlers = {};
91
+ var rooms = {};
92
+ var events = new import_events.EventEmitter();
93
+ var publicAddress;
94
+ var processId;
95
+ var presence;
96
+ var driver;
97
+ var selectProcessIdToCreateRoom = async function() {
96
98
  return (await stats.fetchAll()).sort((p1, p2) => p1.roomCount > p2.roomCount ? 1 : -1)[0]?.processId || processId;
97
99
  };
98
- let enableHealthChecks = true;
100
+ var enableHealthChecks = true;
99
101
  function setHealthChecksEnabled(value) {
100
102
  enableHealthChecks = value;
101
103
  }
102
- let onReady = new import_Utils.Deferred();
103
- const MatchMakerState = {
104
+ var onReady = new import_Utils.Deferred();
105
+ var MatchMakerState = {
104
106
  INITIALIZING: 0,
105
107
  READY: 1,
106
108
  SHUTTING_DOWN: 2
107
109
  };
108
- let state;
110
+ var state;
109
111
  async function setup(_presence, _driver, _publicAddress, _selectProcessIdToCreateRoom) {
110
112
  if (onReady === void 0) {
111
113
  onReady = new import_Utils.Deferred();
@@ -542,7 +544,7 @@ async function healthCheckAllProcesses() {
542
544
  );
543
545
  }
544
546
  }
545
- const _healthCheckByProcessId = {};
547
+ var _healthCheckByProcessId = {};
546
548
  function healthCheckProcessId(processId2) {
547
549
  if (_healthCheckByProcessId[processId2] !== void 0) {
548
550
  return _healthCheckByProcessId[processId2];
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/MatchMaker.ts"],
4
4
  "sourcesContent": ["import { EventEmitter } from 'events';\nimport { CloseCode, ErrorCode } from './Protocol.ts';\n\nimport { requestFromIPC, subscribeIPC, subscribeWithTimeout } from './IPC.ts';\n\nimport { type Type, Deferred, generateId, merge, retry, MAX_CONCURRENT_CREATE_ROOM_WAIT_TIME, REMOTE_ROOM_SHORT_TIMEOUT, type MethodName, type ExtractMethodOrPropertyType } from './utils/Utils.ts';\nimport { isDevMode, cacheRoomHistory, getPreviousProcessId, getRoomRestoreListKey, reloadFromCache } from './utils/DevMode.ts';\n\nimport { RegisteredHandler } from './matchmaker/RegisteredHandler.ts';\nimport { type OnCreateOptions, Room, RoomInternalState } from './Room.ts';\n\nimport { LocalPresence } from './presence/LocalPresence.ts';\nimport { createScopedPresence, type Presence } from './presence/Presence.ts';\n\nimport { debugAndPrintError, debugMatchMaking } from './Debug.ts';\nimport { SeatReservationError } from './errors/SeatReservationError.ts';\nimport { ServerError } from './errors/ServerError.ts';\n\nimport { type IRoomCache, type MatchMakerDriver, type SortOptions, LocalDriver } from './matchmaker/LocalDriver/LocalDriver.ts';\nimport controller from './matchmaker/controller.ts';\nimport * as stats from './Stats.ts';\n\nimport { logger } from './Logger.ts';\nimport type { AuthContext, Client } from './Transport.ts';\nimport { getLockId, initializeRoomCache, type ExtractMetadata } from './matchmaker/driver.ts';\n\nexport { controller, stats, type MatchMakerDriver };\n\nexport type ClientOptions = any;\nexport type SelectProcessIdCallback = (roomName: string, clientOptions: ClientOptions) => Promise<string>;\n\nexport interface ISeatReservation {\n name: string;\n sessionId: string;\n roomId: string;\n publicAddress?: string;\n processId?: string;\n reconnectionToken?: string;\n devMode?: boolean;\n}\n\nconst handlers: {[id: string]: RegisteredHandler} = {};\nconst rooms: {[roomId: string]: Room} = {};\nconst events = new EventEmitter();\n\nexport let publicAddress: string;\nexport let processId: string;\nexport let presence: Presence;\nexport let driver: MatchMakerDriver;\n\n/**\n * Function to select the processId to create the room on.\n * By default, returns the process with least amount of rooms created.\n * @returns The processId to create the room on.\n */\nexport let selectProcessIdToCreateRoom: SelectProcessIdCallback = async function () {\n return (await stats.fetchAll())\n .sort((p1, p2) => p1.roomCount > p2.roomCount ? 1 : -1)[0]?.processId || processId;\n};\n\n/**\n * Whether health checks are enabled or not. (default: true)\n *\n * Health checks are automatically performed on theses scenarios:\n * - At startup, to check for leftover/invalid processId's\n * - When a remote room creation request times out\n * - When a remote seat reservation request times out\n */\nlet enableHealthChecks: boolean = true;\nexport function setHealthChecksEnabled(value: boolean) {\n enableHealthChecks = value;\n}\n\nexport let onReady: Deferred = new Deferred(); // onReady needs to be immediately available to @colyseus/auth integration.\n\nexport const MatchMakerState = {\n INITIALIZING: 0,\n READY: 1,\n SHUTTING_DOWN: 2,\n} as const;\nexport type MatchMakerState = (typeof MatchMakerState)[keyof typeof MatchMakerState];\n\n/**\n * Internal MatchMaker state\n */\nexport let state: MatchMakerState;\n\n/**\n * @private\n */\nexport async function setup(\n _presence?: Presence,\n _driver?: MatchMakerDriver,\n _publicAddress?: string,\n _selectProcessIdToCreateRoom?: SelectProcessIdCallback,\n) {\n if (onReady === undefined) {\n //\n // for testing purposes only: onReady is turned into undefined on shutdown\n // (needs refactoring.)\n //\n onReady = new Deferred();\n }\n\n state = MatchMakerState.INITIALIZING;\n\n presence = _presence || new LocalPresence();\n\n driver = _driver || new LocalDriver();\n publicAddress = _publicAddress;\n\n stats.reset(false);\n\n // devMode: try to retrieve previous processId\n if (isDevMode) { processId = await getPreviousProcessId(); }\n\n // ensure processId is set\n if (!processId) { processId = generateId(); }\n\n /**\n * Override default `selectProcessIdToCreateRoom` function.\n */\n if (_selectProcessIdToCreateRoom) {\n selectProcessIdToCreateRoom = _selectProcessIdToCreateRoom;\n }\n\n // boot driver if necessary (e.g. RedisDriver/PostgresDriver)\n if (driver.boot) {\n await driver.boot();\n }\n\n onReady.resolve();\n}\n\n/**\n * - Accept receiving remote room creation requests\n * - Check for leftover/invalid processId's on startup\n * @private\n */\nexport async function accept() {\n await onReady; // make sure \"processId\" is available\n\n /**\n * Process-level subscription\n * - handle remote process healthcheck\n * - handle remote room creation\n */\n await subscribeIPC(presence, getProcessChannel(), (method: string, args: any) => {\n if (method === 'healthcheck') {\n // health check for this processId\n return true;\n\n } else {\n // handle room creation\n return handleCreateRoom.apply(undefined, args);\n }\n });\n\n /**\n * Check for leftover/invalid processId's on startup\n */\n if (enableHealthChecks) {\n await healthCheckAllProcesses();\n\n /*\n * persist processId every 1 minute\n *\n * FIXME: this is a workaround in case this `processId` gets excluded\n * (`stats.excludeProcess()`) by mistake due to health-check failure\n */\n stats.setAutoPersistInterval();\n }\n\n state = MatchMakerState.READY;\n\n await stats.persist();\n\n if (isDevMode) {\n await reloadFromCache();\n }\n}\n\n/**\n * Join or create into a room and return seat reservation\n */\nexport async function joinOrCreate(roomName: string, clientOptions: ClientOptions = {}, authContext?: AuthContext) {\n return await retry<Promise<ISeatReservation>>(async () => {\n const authData = await callOnAuth(roomName, clientOptions, authContext);\n let room: IRoomCache = await findOneRoomAvailable(roomName, clientOptions);\n\n if (!room) {\n const handler = getHandler(roomName);\n const filterOptions = handler.getFilterOptions(clientOptions);\n const concurrencyKey = getLockId(filterOptions);\n\n //\n // Prevent multiple rooms of same filter from being created concurrently\n //\n await concurrentJoinOrCreateRoomLock(handler, concurrencyKey, async (roomId?: string) => {\n if (roomId) {\n room = await driver.findOne({ roomId })\n }\n\n // If the room is not found or is already locked, try to find a new one\n if (!room || room.locked) {\n room = await findOneRoomAvailable(roomName, clientOptions);\n }\n\n if (!room) {\n //\n // TODO [?]\n // should we expose the \"creator\" auth data of the room during `onCreate()`?\n // it would be useful, though it could be accessed via `onJoin()` for now.\n //\n room = await createRoom(roomName, clientOptions);\n\n // Notify waiting concurrent requests about the new room\n presence.publish(`concurrent:${handler.name}:${concurrencyKey}`, room.roomId);\n }\n\n return room;\n });\n }\n\n return await reserveSeatFor(room, clientOptions, authData);\n }, 5, [SeatReservationError]);\n}\n\n/**\n * Create a room and return seat reservation\n */\nexport async function create(roomName: string, clientOptions: ClientOptions = {}, authContext?: AuthContext) {\n const authData = await callOnAuth(roomName, clientOptions, authContext);\n const room = await createRoom(roomName, clientOptions);\n return reserveSeatFor(room, clientOptions, authData);\n}\n\n/**\n * Join a room and return seat reservation\n */\nexport async function join(roomName: string, clientOptions: ClientOptions = {}, authContext?: AuthContext) {\n return await retry<Promise<ISeatReservation>>(async () => {\n const authData = await callOnAuth(roomName, clientOptions, authContext);\n const room = await findOneRoomAvailable(roomName, clientOptions);\n\n if (!room) {\n throw new ServerError(ErrorCode.MATCHMAKE_INVALID_CRITERIA, `no rooms found with provided criteria`);\n }\n\n return reserveSeatFor(room, clientOptions, authData);\n });\n}\n\n/**\n * Join a room by id and return seat reservation\n */\nexport async function reconnect(roomId: string, clientOptions: ClientOptions = {}) {\n const room = await driver.findOne({ roomId });\n if (!room) {\n // TODO: support a \"logLevel\" out of the box?\n if (process.env.NODE_ENV !== 'production') {\n logger.info(`\u274C room \"${roomId}\" has been disposed. Did you miss .allowReconnection()?\\n\uD83D\uDC49 https://docs.colyseus.io/server/room#allow-reconnection`);\n }\n\n throw new ServerError(ErrorCode.MATCHMAKE_INVALID_ROOM_ID, `room \"${roomId}\" has been disposed.`);\n }\n\n // check for reconnection\n const reconnectionToken = clientOptions.reconnectionToken;\n if (!reconnectionToken) { throw new ServerError(ErrorCode.MATCHMAKE_UNHANDLED, `'reconnectionToken' must be provided for reconnection.`); }\n\n\n // respond to re-connection!\n const sessionId = await remoteRoomCall(room.roomId, 'checkReconnectionToken', [reconnectionToken]);\n if (sessionId) {\n return buildSeatReservation(room, sessionId);\n\n } else {\n // TODO: support a \"logLevel\" out of the box?\n if (process.env.NODE_ENV !== 'production') {\n logger.info(`\u274C reconnection token invalid or expired. Did you miss .allowReconnection()?\\n\uD83D\uDC49 https://docs.colyseus.io/server/room#allow-reconnection`);\n }\n throw new ServerError(ErrorCode.MATCHMAKE_EXPIRED, `reconnection token invalid or expired.`);\n }\n}\n\n/**\n * Join a room by id and return client seat reservation. An exception is thrown if a room is not found for roomId.\n *\n * @param roomId - The Id of the specific room instance.\n * @param clientOptions - Options for the client seat reservation (for `onJoin`/`onAuth`)\n * @param authContext - Optional authentication token\n *\n * @returns Promise<SeatReservation> - A promise which contains `sessionId` and `IRoomCache`.\n */\nexport async function joinById(roomId: string, clientOptions: ClientOptions = {}, authContext?: AuthContext) {\n const room = await driver.findOne({ roomId });\n\n if (!room) {\n throw new ServerError(ErrorCode.MATCHMAKE_INVALID_ROOM_ID, `room \"${roomId}\" not found`);\n\n } else if (room.locked) {\n throw new ServerError(ErrorCode.MATCHMAKE_INVALID_ROOM_ID, `room \"${roomId}\" is locked`);\n }\n\n const authData = await callOnAuth(room.name, clientOptions, authContext);\n\n return reserveSeatFor(room, clientOptions, authData);\n}\n\n/**\n * Perform a query for all cached rooms\n */\nexport async function query<T extends Room = any>(\n conditions: Partial<IRoomCache & ExtractMetadata<T>> = {},\n sortOptions?: SortOptions,\n) {\n return await driver.query<T>(conditions, sortOptions);\n}\n\n/**\n * Find for a public and unlocked room available.\n *\n * @param roomName - The Id of the specific room.\n * @param filterOptions - Filter options.\n * @param sortOptions - Sorting options.\n *\n * @returns Promise<IRoomCache> - A promise contaning an object which includes room metadata and configurations.\n */\nexport async function findOneRoomAvailable(\n roomName: string,\n filterOptions: ClientOptions,\n additionalSortOptions?: SortOptions,\n) {\n const handler = getHandler(roomName);\n const sortOptions = Object.assign({}, handler.sortOptions ?? {});\n\n if (additionalSortOptions) {\n Object.assign(sortOptions, additionalSortOptions);\n }\n\n return await driver.findOne({\n locked: false,\n name: roomName,\n private: false,\n ...handler.getFilterOptions(filterOptions),\n }, sortOptions);\n}\n\n/**\n * Call a method or return a property on a remote room.\n *\n * @param roomId - The Id of the specific room instance.\n * @param method - Method or attribute to call or retrive.\n * @param args - Array of arguments for the method\n *\n * @returns Promise<any> - Returned value from the called or retrieved method/attribute.\n */\nexport async function remoteRoomCall<TRoom = Room>(\n roomId: string,\n method: keyof TRoom,\n args?: any[],\n rejectionTimeout = REMOTE_ROOM_SHORT_TIMEOUT,\n): Promise<ExtractMethodOrPropertyType<TRoom, typeof method>> {\n const room = rooms[roomId] as TRoom;\n\n if (!room) {\n try {\n return await requestFromIPC(presence, getRoomChannel(roomId), method as string, args, rejectionTimeout);\n\n } catch (e: any) {\n\n //\n // the room cache from an unavailable process might've been used here.\n // perform a health-check on the process before proceeding.\n // (this is a broken state when a process wasn't gracefully shut down)\n //\n if (method === '_reserveSeat' && e.message === \"ipc_timeout\") {\n throw e;\n }\n\n // TODO: for 1.0, consider always throwing previous error directly.\n\n const request = `${String(method)}${args && ' with args ' + JSON.stringify(args) || ''}`;\n throw new ServerError(\n ErrorCode.MATCHMAKE_UNHANDLED,\n `remote room (${roomId}) timed out, requesting \"${request}\". (${rejectionTimeout}ms exceeded)`,\n );\n }\n\n } else {\n return (!args && typeof (room[method]) !== 'function')\n ? room[method as string]\n : (await room[method as string].apply(room, args && JSON.parse(JSON.stringify(args))));\n }\n}\n\nexport function defineRoomType<T extends Type<Room>>(\n roomName: string,\n klass: T,\n defaultOptions?: OnCreateOptions<T>,\n) {\n const registeredHandler = new RegisteredHandler(klass, defaultOptions);\n registeredHandler.name = roomName;\n\n handlers[roomName] = registeredHandler;\n\n if (klass.prototype['onAuth'] !== Room.prototype['onAuth']) {\n // TODO: soft-deprecate instance level `onAuth` on 0.16\n // logger.warn(\"DEPRECATION WARNING: onAuth() at the instance level will be deprecated soon. Please use static onAuth() instead.\");\n\n if (klass['onAuth'] !== Room['onAuth']) {\n logger.info(`\u274C \"${roomName}\"'s onAuth() defined at the instance level will be ignored.`);\n }\n }\n\n return registeredHandler;\n}\n\nexport function addRoomType(handler: RegisteredHandler) {\n handlers[handler.name] = handler;\n}\n\nexport function removeRoomType(roomName: string) {\n delete handlers[roomName];\n}\n\nexport function getAllHandlers() {\n return handlers;\n}\n\nexport function getHandler(roomName: string) {\n const handler = handlers[roomName];\n\n if (!handler) {\n throw new ServerError(ErrorCode.MATCHMAKE_NO_HANDLER, `provided room name \"${roomName}\" not defined`);\n }\n\n return handler;\n}\n\nexport function getRoomClass(roomName: string): Type<Room> {\n return handlers[roomName]?.klass;\n}\n\n\n/**\n * Creates a new room.\n *\n * @param roomName - The identifier you defined on `gameServer.define()`\n * @param clientOptions - Options for `onCreate`\n *\n * @returns Promise<IRoomCache> - A promise contaning an object which includes room metadata and configurations.\n */\nexport async function createRoom(roomName: string, clientOptions: ClientOptions): Promise<IRoomCache> {\n //\n // - select a process to create the room\n // - use local processId if MatchMaker is not ready yet\n //\n const selectedProcessId = (state === MatchMakerState.READY)\n ? await selectProcessIdToCreateRoom(roomName, clientOptions)\n : processId;\n\n let room: IRoomCache;\n if (selectedProcessId === undefined) {\n\n if (isDevMode && processId === undefined) {\n //\n // WORKAROUND: wait for processId to be available\n // TODO: Remove this check on 1.0\n //\n // - This is a workaround when using matchMaker.createRoom() before the processId is available.\n // - We need to use top-level await to retrieve processId\n //\n await onReady;\n return createRoom(roomName, clientOptions);\n\n } else {\n throw new ServerError(ErrorCode.MATCHMAKE_UNHANDLED, `no processId available to create room ${roomName}`);\n }\n\n } else if (selectedProcessId === processId) {\n // create the room on this process!\n room = await handleCreateRoom(roomName, clientOptions);\n\n } else {\n // ask other process to create the room!\n try {\n room = await requestFromIPC<IRoomCache>(\n presence,\n getProcessChannel(selectedProcessId),\n undefined,\n [roomName, clientOptions],\n REMOTE_ROOM_SHORT_TIMEOUT,\n );\n\n } catch (e: any) {\n if (e.message === \"ipc_timeout\") {\n debugAndPrintError(`${e.message}: create room request timed out for ${roomName} on processId ${selectedProcessId}.`);\n\n //\n // clean-up possibly stale process from redis.\n // when a process disconnects ungracefully, it may leave its previous processId under \"roomcount\"\n // if the process is still alive, it will re-add itself shortly after the load-balancer selects it again.\n //\n if (enableHealthChecks) {\n await stats.excludeProcess(selectedProcessId);\n }\n\n // if other process failed to respond, create the room on this process\n room = await handleCreateRoom(roomName, clientOptions);\n\n } else {\n // re-throw intentional exception thrown during remote onCreate()\n throw e;\n }\n }\n }\n\n if (isDevMode) {\n presence.hset(getRoomRestoreListKey(), room.roomId, JSON.stringify({\n \"clientOptions\": clientOptions,\n \"roomName\": roomName,\n \"processId\": processId\n }));\n }\n\n return room;\n}\n\nexport async function handleCreateRoom(roomName: string, clientOptions: ClientOptions, restoringRoomId?: string): Promise<IRoomCache> {\n const handler = getHandler(roomName);\n const room: Room = new handler.klass();\n\n // set room public attributes\n if (restoringRoomId && isDevMode) {\n room.roomId = restoringRoomId;\n\n } else {\n room.roomId = generateId();\n }\n\n //\n // Initialize .state (if set).\n //\n // Define getters and setters for:\n // - autoDispose\n // - patchRate\n //\n room['__init']();\n\n room.roomName = roomName;\n room.presence = createScopedPresence(room, presence);\n\n // initialize a RoomCache instance\n room['_listing'] = initializeRoomCache({\n name: roomName,\n processId,\n ...handler.getMetadataFromOptions(clientOptions)\n });\n\n // assign public host\n if (publicAddress) {\n room['_listing'].publicAddress = publicAddress;\n }\n\n if (room.onCreate) {\n try {\n await room.onCreate(merge({}, clientOptions, handler.options));\n\n } catch (e: any) {\n debugAndPrintError(e);\n throw new ServerError(\n e.code || ErrorCode.MATCHMAKE_UNHANDLED,\n e.message,\n );\n }\n }\n\n room['_internalState'] = RoomInternalState.CREATED;\n\n room['_listing'].roomId = room.roomId;\n room['_listing'].maxClients = room.maxClients;\n\n // imediatelly ask client to join the room\n debugMatchMaking('spawning \\'%s\\', roomId: %s, processId: %s', roomName, room.roomId, processId);\n\n // increment amount of rooms this process is handling\n stats.local.roomCount++;\n stats.persist();\n\n room['_events'].on('lock', lockRoom.bind(undefined, room));\n room['_events'].on('unlock', unlockRoom.bind(undefined, room));\n room['_events'].on('join', onClientJoinRoom.bind(undefined, room));\n room['_events'].on('leave', onClientLeaveRoom.bind(undefined, room));\n room['_events'].once('dispose', disposeRoom.bind(undefined, roomName, room));\n\n if (handler.realtimeListingEnabled) {\n room['_events'].on('visibility-change', onVisibilityChange.bind(undefined, room));\n room['_events'].on('metadata-change', onMetadataChange.bind(undefined, room));\n }\n\n // when disconnect()'ing, keep only join/leave events for stat counting\n room['_events'].once('disconnect', () => {\n room['_events'].removeAllListeners('lock');\n room['_events'].removeAllListeners('unlock');\n room['_events'].removeAllListeners('dispose');\n\n if (handler.realtimeListingEnabled) {\n room['_events'].removeAllListeners('visibility-change');\n room['_events'].removeAllListeners('metadata-change');\n }\n\n //\n // emit \"no active rooms\" event when there are no more rooms in this process\n // (used during graceful shutdown)\n //\n if (stats.local.roomCount <= 0) {\n events.emit('no-active-rooms');\n }\n });\n\n // room always start unlocked\n await createRoomReferences(room, true);\n\n // persist room data only if match-making is enabled\n if (state !== MatchMakerState.SHUTTING_DOWN) {\n await driver.persist(room['_listing'], true);\n }\n\n handler.emit('create', room);\n\n return room['_listing'];\n}\n\n/**\n * Get room data by roomId.\n * This method does not return the actual room instance, use `getLocalRoomById` for that.\n */\nexport function getRoomById(roomId: string) {\n return driver.findOne({ roomId });\n}\n\n/**\n * Get local room instance by roomId. (Can return \"undefined\" if the room is not available on this process)\n */\nexport function getLocalRoomById(roomId: string) {\n return rooms[roomId];\n}\n\n/**\n * Disconnects every client on every room in the current process.\n */\nexport function disconnectAll(closeCode?: number) {\n const promises: Array<Promise<any>> = [];\n\n for (const roomId in rooms) {\n if (!rooms.hasOwnProperty(roomId)) {\n continue;\n }\n\n promises.push(rooms[roomId].disconnect(closeCode));\n }\n\n return promises;\n}\n\nasync function lockAndDisposeAll(): Promise<any> {\n // remove processId from room count key\n // (stops accepting new rooms on this process)\n await stats.excludeProcess(processId);\n\n // clear auto-persisting stats interval\n if (enableHealthChecks) {\n stats.clearAutoPersistInterval();\n }\n\n const noActiveRooms = new Deferred();\n if (stats.local.roomCount <= 0) {\n // no active rooms to dispose\n noActiveRooms.resolve();\n\n } else {\n // wait for all rooms to be disposed\n // TODO: set generous timeout in case\n events.once('no-active-rooms', () => noActiveRooms.resolve());\n }\n\n // - lock all local rooms to prevent new joins\n // - trigger `onBeforeShutdown()` on each room\n for (const roomId in rooms) {\n if (!rooms.hasOwnProperty(roomId)) {\n continue;\n }\n\n const room = rooms[roomId];\n room.lock();\n\n if (isDevMode) {\n // call default implementation of onBeforeShutdown() in dev mode\n Room.prototype.onBeforeShutdown.call(room);\n\n } else {\n // call custom implementation of onBeforeShutdown() in production\n room.onBeforeShutdown();\n }\n }\n\n await noActiveRooms;\n}\n\nexport async function gracefullyShutdown(): Promise<any> {\n if (state === MatchMakerState.SHUTTING_DOWN) {\n return Promise.reject('already_shutting_down');\n }\n\n debugMatchMaking(`${processId} is shutting down!`);\n\n state = MatchMakerState.SHUTTING_DOWN;\n\n onReady = undefined;\n\n if (isDevMode) {\n await cacheRoomHistory(rooms);\n }\n\n // - lock existing rooms\n // - stop accepting new rooms on this process\n // - wait for all rooms to be disposed\n await lockAndDisposeAll();\n\n // make sure rooms are removed from cache\n await removeRoomsByProcessId(processId);\n\n // unsubscribe from process id channel\n presence.unsubscribe(getProcessChannel());\n\n // make sure all rooms are disposed\n return Promise.all(disconnectAll(\n (isDevMode)\n ? CloseCode.DEVMODE_RESTART\n : CloseCode.SERVER_SHUTDOWN\n ));\n}\n\n/**\n * Reserve a seat for a client in a room\n */\nexport async function reserveSeatFor(room: IRoomCache, options: ClientOptions, authData?: any) {\n const sessionId: string = authData?.sessionId || generateId();\n\n let successfulSeatReservation: boolean;\n\n try {\n successfulSeatReservation = await remoteRoomCall<Room>(\n room.roomId,\n '_reserveSeat' as keyof Room,\n [sessionId, options, authData],\n REMOTE_ROOM_SHORT_TIMEOUT,\n );\n\n } catch (e: any) {\n debugMatchMaking(e);\n\n //\n // the room cache from an unavailable process might've been used here.\n // (this is a broken state when a process wasn't gracefully shut down)\n // perform a health-check on the process before proceeding.\n //\n if (\n e.message === \"ipc_timeout\" &&\n !(\n enableHealthChecks &&\n await healthCheckProcessId(room.processId)\n )\n ) {\n throw new SeatReservationError(`process ${room.processId} is not available.`);\n\n } else {\n successfulSeatReservation = false;\n }\n }\n\n if (!successfulSeatReservation) {\n throw new SeatReservationError(`${room.roomId} is already full.`);\n }\n\n return buildSeatReservation(room, sessionId);\n}\n\n/**\n * Reserve multiple seats for clients in a room\n */\nexport async function reserveMultipleSeatsFor(room: IRoomCache, clientsData: Array<{ sessionId: string, options: ClientOptions, auth: any }>) {\n let sessionIds: string[] = [];\n let options: ClientOptions[] = [];\n let authData: any[] = [];\n\n for (const clientData of clientsData) {\n sessionIds.push(clientData.sessionId);\n options.push(clientData.options);\n authData.push(clientData.auth);\n }\n\n debugMatchMaking(\n 'reserving multiple seats. sessionIds: \\'%s\\', roomId: \\'%s\\', processId: \\'%s\\'',\n sessionIds.join(', '), room.roomId, processId,\n );\n\n let successfulSeatReservations: boolean[];\n\n try {\n successfulSeatReservations = await remoteRoomCall<Room>(\n room.roomId,\n '_reserveMultipleSeats' as keyof Room,\n [sessionIds, options, authData],\n REMOTE_ROOM_SHORT_TIMEOUT,\n );\n\n } catch (e: any) {\n debugMatchMaking(e);\n\n //\n // the room cache from an unavailable process might've been used here.\n // (this is a broken state when a process wasn't gracefully shut down)\n // perform a health-check on the process before proceeding.\n //\n if (\n e.message === \"ipc_timeout\" &&\n !(\n enableHealthChecks &&\n await healthCheckProcessId(room.processId)\n )\n ) {\n throw new SeatReservationError(`process ${room.processId} is not available.`);\n\n } else {\n throw new SeatReservationError(`${room.roomId} is already full.`);\n }\n }\n\n return successfulSeatReservations;\n}\n\n/**\n * Build a seat reservation object.\n * @param room - The room to build a seat reservation for.\n * @param sessionId - The session ID of the client.\n * @returns A seat reservation object.\n */\nexport function buildSeatReservation(room: IRoomCache, sessionId: string) {\n const seatReservation: ISeatReservation = {\n name: room.name,\n sessionId,\n roomId: room.roomId,\n processId: room.processId,\n };\n\n if (isDevMode) {\n seatReservation.devMode = isDevMode;\n }\n\n if (room.publicAddress) {\n seatReservation.publicAddress = room.publicAddress;\n }\n\n return seatReservation;\n}\n\nasync function callOnAuth(roomName: string, clientOptions?: ClientOptions, authContext?: AuthContext) {\n const roomClass = getRoomClass(roomName);\n if (roomClass && roomClass['onAuth'] && roomClass['onAuth'] !== Room['onAuth']) {\n const result = await roomClass['onAuth'](authContext.token, clientOptions, authContext)\n if (!result) {\n throw new ServerError(ErrorCode.AUTH_FAILED, 'onAuth failed');\n }\n return result;\n }\n}\n\n/**\n * Perform health check on all processes\n */\nexport async function healthCheckAllProcesses() {\n const allStats = await stats.fetchAll();\n const activeProcessChannels = (await presence.channels(\"p:*\")).map(c => c.substring(2));\n\n if (allStats.length > 0) {\n await Promise.all(\n allStats\n .filter(stat => (\n stat.processId !== processId && // skip current process\n !activeProcessChannels.includes(stat.processId) // skip if channel is still listening\n ))\n .map(stat => healthCheckProcessId(stat.processId))\n );\n }\n}\n\n/**\n * Perform health check on a remote process\n * @param processId\n */\nconst _healthCheckByProcessId: { [processId: string]: Promise<any> } = {};\nexport function healthCheckProcessId(processId: string) {\n //\n // re-use the same promise if health-check is already in progress\n // (may occur when _reserveSeat() fails multiple times for the same 'processId')\n //\n if (_healthCheckByProcessId[processId] !== undefined) {\n return _healthCheckByProcessId[processId];\n }\n\n _healthCheckByProcessId[processId] = new Promise<boolean>(async (resolve, reject) => {\n logger.debug(`> Performing health-check against processId: '${processId}'...`);\n\n try {\n const requestTime = Date.now();\n\n await requestFromIPC<IRoomCache>(\n presence,\n getProcessChannel(processId),\n 'healthcheck',\n [],\n REMOTE_ROOM_SHORT_TIMEOUT,\n );\n\n logger.debug(`\u2705 Process '${processId}' successfully responded (${Date.now() - requestTime}ms)`);\n\n // succeeded to respond\n resolve(true)\n\n } catch (e) {\n // process failed to respond - remove it from stats\n logger.debug(`\u274C Process '${processId}' failed to respond. Cleaning it up.`);\n await stats.excludeProcess(processId);\n\n // clean-up possibly stale room ids\n if (!isDevMode) {\n await removeRoomsByProcessId(processId);\n }\n\n resolve(false);\n } finally {\n delete _healthCheckByProcessId[processId];\n }\n });\n\n return _healthCheckByProcessId[processId];\n}\n\n/**\n * Remove cached rooms by processId\n * @param processId\n */\nasync function removeRoomsByProcessId(processId: string) {\n //\n // clean-up possibly stale room ids\n // (ungraceful shutdowns using Redis can result on stale room ids still on memory.)\n //\n await driver.cleanup(processId);\n}\n\nasync function createRoomReferences(room: Room, init: boolean = false): Promise<boolean> {\n rooms[room.roomId] = room;\n\n if (init) {\n await subscribeIPC(\n presence,\n getRoomChannel(room.roomId),\n (method, args) => {\n return (!args && typeof (room[method]) !== 'function')\n ? room[method]\n : room[method].apply(room, args);\n },\n );\n }\n\n return true;\n}\n\n/**\n * Used only during `joinOrCreate` to handle concurrent requests for creating a room.\n */\nasync function concurrentJoinOrCreateRoomLock(\n handler: RegisteredHandler,\n concurrencyKey: string,\n callback: (roomId?: string) => Promise<IRoomCache>\n): Promise<IRoomCache> {\n return new Promise(async (resolve, reject) => {\n const hkey = getConcurrencyHashKey(handler.name);\n const concurrency = await presence.hincrbyex(\n hkey,\n concurrencyKey,\n 1, // increment by 1\n MAX_CONCURRENT_CREATE_ROOM_WAIT_TIME * 2 // expire in 2x the time of MAX_CONCURRENT_CREATE_ROOM_WAIT_TIME\n ) - 1; // do not consider the current request\n\n const fulfill = async (roomId?: string) => {\n try {\n resolve(await callback(roomId));\n\n } catch (e) {\n reject(e);\n\n } finally {\n await presence.hincrbyex(hkey, concurrencyKey, -1, MAX_CONCURRENT_CREATE_ROOM_WAIT_TIME * 2);\n }\n };\n\n if (concurrency > 0) {\n debugMatchMaking(\n 'receiving %d concurrent joinOrCreate for \\'%s\\' (%s)',\n concurrency, handler.name, concurrencyKey\n );\n\n try {\n const roomId = await subscribeWithTimeout(\n presence,\n `concurrent:${handler.name}:${concurrencyKey}`,\n (MAX_CONCURRENT_CREATE_ROOM_WAIT_TIME +\n (Math.min(concurrency, 3) * 0.2)) * 1000 // convert to milliseconds\n );\n\n return await fulfill(roomId);\n } catch (error) {\n // Ignore ipc_timeout error\n }\n }\n\n return await fulfill();\n });\n}\n\nfunction onClientJoinRoom(room: Room, client: Client) {\n // increment local CCU\n stats.local.ccu++;\n stats.persist();\n\n handlers[room.roomName].emit('join', room, client);\n}\n\nfunction onClientLeaveRoom(room: Room, client: Client, willDispose: boolean) {\n // decrement local CCU\n stats.local.ccu--;\n stats.persist();\n\n handlers[room.roomName].emit('leave', room, client, willDispose);\n}\n\nfunction lockRoom(room: Room): void {\n // emit public event on registered handler\n handlers[room.roomName].emit('lock', room);\n}\n\nasync function unlockRoom(room: Room) {\n if (await createRoomReferences(room)) {\n // emit public event on registered handler\n handlers[room.roomName].emit('unlock', room);\n }\n}\n\nfunction onVisibilityChange(room: Room, isInvisible: boolean): void {\n handlers[room.roomName].emit('visibility-change', room, isInvisible);\n}\n\nfunction onMetadataChange(room: Room): void {\n handlers[room.roomName].emit('metadata-change', room);\n}\n\nasync function disposeRoom(roomName: string, room: Room) {\n debugMatchMaking('disposing \\'%s\\' (%s) on processId \\'%s\\' (graceful shutdown: %s)', roomName, room.roomId, processId, state === MatchMakerState.SHUTTING_DOWN);\n\n //\n // FIXME: this call should not be necessary.\n //\n // there's an unidentified edge case using LocalDriver where Room._dispose()\n // doesn't seem to be called [?], but \"disposeRoom\" is, leaving the matchmaker\n // in a broken state. (repeated ipc_timeout's for seat reservation on\n // non-existing rooms)\n //\n driver.remove(room['_listing'].roomId);\n stats.local.roomCount--;\n\n // decrease amount of rooms this process is handling\n if (state !== MatchMakerState.SHUTTING_DOWN) {\n stats.persist();\n\n // remove from devMode restore list\n if (isDevMode) {\n await presence.hdel(getRoomRestoreListKey(), room.roomId);\n }\n }\n\n // emit disposal on registered session handler\n handlers[roomName].emit('dispose', room);\n\n // unsubscribe from remote connections\n presence.unsubscribe(getRoomChannel(room.roomId));\n\n // remove actual room reference\n delete rooms[room.roomId];\n}\n\n//\n// Presence keys\n//\nfunction getRoomChannel(roomId: string) {\n return `$${roomId}`;\n}\n\nfunction getConcurrencyHashKey(roomName: string) {\n // concurrency hash\n return `ch:${roomName}`;\n}\n\nfunction getProcessChannel(id: string = processId) {\n return `p:${id}`;\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["controller", "processId"]
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/Protocol.ts
19
21
  var Protocol_exports = {};
20
22
  __export(Protocol_exports, {
21
23
  CloseCode: () => CloseCode,
@@ -27,7 +29,7 @@ __export(Protocol_exports, {
27
29
  module.exports = __toCommonJS(Protocol_exports);
28
30
  var import_msgpackr = require("@colyseus/msgpackr");
29
31
  var import_schema = require("@colyseus/schema");
30
- const Protocol = {
32
+ var Protocol = {
31
33
  // Room-related (10~19)
32
34
  JOIN_ROOM: 10,
33
35
  ERROR: 11,
@@ -39,7 +41,7 @@ const Protocol = {
39
41
  ROOM_DATA_BYTES: 17,
40
42
  PING: 18
41
43
  };
42
- const CloseCode = {
44
+ var CloseCode = {
43
45
  NORMAL_CLOSURE: 1e3,
44
46
  GOING_AWAY: 1001,
45
47
  NO_STATUS_RECEIVED: 1005,
@@ -49,7 +51,7 @@ const CloseCode = {
49
51
  WITH_ERROR: 4002,
50
52
  DEVMODE_RESTART: 4010
51
53
  };
52
- const ErrorCode = {
54
+ var ErrorCode = {
53
55
  // HTTP MatchMaking Error Codes
54
56
  MATCHMAKE_NO_HANDLER: 520,
55
57
  MATCHMAKE_INVALID_CRITERIA: 521,
@@ -62,17 +64,17 @@ const ErrorCode = {
62
64
  APPLICATION_ERROR: 526,
63
65
  INVALID_PAYLOAD: 4217
64
66
  };
65
- const IpcProtocol = {
67
+ var IpcProtocol = {
66
68
  SUCCESS: 0,
67
69
  ERROR: 1,
68
70
  TIMEOUT: 2
69
71
  };
70
- const packr = new import_msgpackr.Packr({
72
+ var packr = new import_msgpackr.Packr({
71
73
  useRecords: false
72
74
  // increased compatibility with decoders other than "msgpackr"
73
75
  });
74
76
  packr.encode(void 0);
75
- const getMessageBytes = {
77
+ var getMessageBytes = {
76
78
  [Protocol.JOIN_ROOM]: (reconnectionToken, serializerId, handshake) => {
77
79
  const it = { offset: 1 };
78
80
  packr.buffer[0] = Protocol.JOIN_ROOM;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/Protocol.ts"],
4
4
  "sourcesContent": ["import { Packr } from '@colyseus/msgpackr';\nimport { encode, type Iterator } from '@colyseus/schema';\n\n/**\n * Colyseus protocol codes range between 0~100\n */\nexport const Protocol = {\n // Room-related (10~19)\n JOIN_ROOM: 10,\n ERROR: 11,\n LEAVE_ROOM: 12,\n ROOM_DATA: 13,\n ROOM_STATE: 14,\n ROOM_STATE_PATCH: 15,\n // ROOM_DATA_SCHEMA: 16, // DEPRECATED: used to send schema instances via room.send()\n ROOM_DATA_BYTES: 17,\n PING: 18,\n} as const;\nexport type Protocol = typeof Protocol[keyof typeof Protocol];\n\n/**\n * WebSocket close codes\n * (See https://github.com/Luka967/websocket-close-codes)\n */\nexport const CloseCode = {\n NORMAL_CLOSURE: 1000,\n GOING_AWAY: 1001,\n NO_STATUS_RECEIVED: 1005,\n ABNORMAL_CLOSURE: 1006,\n\n CONSENTED: 4000,\n SERVER_SHUTDOWN: 4001,\n WITH_ERROR: 4002,\n DEVMODE_RESTART: 4010\n} as const;\nexport type CloseCode = typeof CloseCode[keyof typeof CloseCode];\n\nexport const ErrorCode = {\n // HTTP MatchMaking Error Codes\n MATCHMAKE_NO_HANDLER: 520,\n MATCHMAKE_INVALID_CRITERIA: 521,\n MATCHMAKE_INVALID_ROOM_ID: 522,\n MATCHMAKE_UNHANDLED: 523, // generic exception during onCreate/onJoin\n MATCHMAKE_EXPIRED: 524, // generic exception during onCreate/onJoin\n AUTH_FAILED: 525,\n APPLICATION_ERROR: 526,\n\n INVALID_PAYLOAD: 4217,\n} as const;\nexport type ErrorCode = typeof ErrorCode[keyof typeof ErrorCode];\n\n// Inter-process communication protocol\nexport const IpcProtocol = {\n SUCCESS: 0,\n ERROR: 1,\n TIMEOUT: 2,\n} as const;\nexport type IpcProtocol = typeof IpcProtocol[keyof typeof IpcProtocol];\n\nconst packr = new Packr({\n useRecords: false, // increased compatibility with decoders other than \"msgpackr\"\n});\n\n// msgpackr workaround: initialize buffer\npackr.encode(undefined);\n\nexport const getMessageBytes = {\n [Protocol.JOIN_ROOM]: (reconnectionToken: string, serializerId: string, handshake?: Uint8Array) => {\n const it: Iterator = { offset: 1 };\n packr.buffer[0] = Protocol.JOIN_ROOM;\n\n packr.buffer[it.offset++] = Buffer.byteLength(reconnectionToken, \"utf8\");\n encode.utf8Write(packr.buffer as Buffer, reconnectionToken, it);\n\n packr.buffer[it.offset++] = Buffer.byteLength(serializerId, \"utf8\");\n encode.utf8Write(packr.buffer as Buffer, serializerId, it);\n\n let handshakeLength = handshake?.byteLength || 0;\n\n // check if buffer needs to be resized\n if (handshakeLength > packr.buffer.byteLength - it.offset) {\n packr.useBuffer(Buffer.alloc(it.offset + handshakeLength, packr.buffer));\n }\n\n if (handshakeLength > 0) {\n packr.buffer.set(handshake, it.offset);\n }\n\n return Buffer.from(packr.buffer.subarray(0, it.offset + handshakeLength));\n },\n\n [Protocol.ERROR]: (code: number, message: string = '') => {\n const it: Iterator = { offset: 1 };\n packr.buffer[0] = Protocol.ERROR;\n\n encode.number(packr.buffer as Buffer, code, it);\n encode.string(packr.buffer as Buffer, message, it);\n\n return Buffer.from(packr.buffer.subarray(0, it.offset));\n },\n\n [Protocol.ROOM_STATE]: (bytes: number[]) => {\n return [Protocol.ROOM_STATE, ...bytes];\n },\n\n [Protocol.PING]: () => {\n packr.buffer[0] = Protocol.PING;\n return Buffer.from(packr.buffer.subarray(0, 1));\n },\n\n raw: (code: Protocol, type: string | number, message?: any, rawMessage?: Uint8Array | Buffer) => {\n const it: Iterator = { offset: 1 };\n packr.buffer[0] = code;\n\n if (typeof (type) === 'string') {\n encode.string(packr.buffer as Buffer, type, it);\n\n } else {\n encode.number(packr.buffer as Buffer, type, it);\n }\n\n if (message !== undefined) {\n // force to encode from offset\n packr.position = 0;\n\n //\n // TODO: remove this after issue is fixed https://github.com/kriszyp/msgpackr/issues/139\n //\n // - This check is only required when running integration tests.\n // (colyseus.js' usage of msgpackr/buffer is conflicting)\n //\n if (process.env.NODE_ENV !== \"production\") {\n packr.useBuffer(packr.buffer);\n }\n\n // pack message into the same packr.buffer\n const endOfBufferOffset = packr.pack(message, 2048 + it.offset).byteLength;\n // 2048 = RESERVE_START_SPACE\n return Buffer.from(packr.buffer.subarray(0, endOfBufferOffset));\n\n } else if (rawMessage !== undefined) {\n\n // check if buffer needs to be resized\n // TODO: can we avoid this?\n if (rawMessage.length + it.offset > packr.buffer.byteLength) {\n packr.useBuffer(Buffer.alloc(it.offset + rawMessage.length, packr.buffer));\n }\n\n // copy raw message into packr.buffer\n packr.buffer.set(rawMessage, it.offset);\n\n return Buffer.from(packr.buffer.subarray(0, it.offset + rawMessage.byteLength));\n\n } else {\n return Buffer.from(packr.buffer.subarray(0, it.offset));\n }\n },\n\n};\n\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
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/Room.ts
19
21
  var Room_exports = {};
20
22
  __export(Room_exports, {
21
23
  DEFAULT_SEAT_RESERVATION_TIME: () => DEFAULT_SEAT_RESERVATION_TIME,
@@ -29,32 +31,32 @@ var import_msgpackr = require("@colyseus/msgpackr");
29
31
  var import_schema = require("@colyseus/schema");
30
32
  var import_timer = require("@colyseus/timer");
31
33
  var import_events = require("events");
32
- var import_Logger = require("./Logger.ts");
33
- var import_NoneSerializer = require("./serializer/NoneSerializer.ts");
34
- var import_SchemaSerializer = require("./serializer/SchemaSerializer.ts");
35
- var import_Protocol = require("./Protocol.ts");
36
- var import_Utils = require("./utils/Utils.ts");
37
- var import_nanoevents = require("./utils/nanoevents.ts");
38
- var import_DevMode = require("./utils/DevMode.ts");
39
- var import_Debug = require("./Debug.ts");
40
- var import_ServerError = require("./errors/ServerError.ts");
41
- var import_Transport = require("./Transport.ts");
42
- var import_RoomExceptions = require("./errors/RoomExceptions.ts");
43
- var import_StandardSchema = require("./utils/StandardSchema.ts");
34
+ var import_Logger = require("./Logger.cjs");
35
+ var import_NoneSerializer = require("./serializer/NoneSerializer.cjs");
36
+ var import_SchemaSerializer = require("./serializer/SchemaSerializer.cjs");
37
+ var import_Protocol = require("./Protocol.cjs");
38
+ var import_Utils = require("./utils/Utils.cjs");
39
+ var import_nanoevents = require("./utils/nanoevents.cjs");
40
+ var import_DevMode = require("./utils/DevMode.cjs");
41
+ var import_Debug = require("./Debug.cjs");
42
+ var import_ServerError = require("./errors/ServerError.cjs");
43
+ var import_Transport = require("./Transport.cjs");
44
+ var import_RoomExceptions = require("./errors/RoomExceptions.cjs");
45
+ var import_StandardSchema = require("./utils/StandardSchema.cjs");
44
46
  var import_core = require("@colyseus/core");
45
- const DEFAULT_PATCH_RATE = 1e3 / 20;
46
- const DEFAULT_SIMULATION_INTERVAL = 1e3 / 60;
47
- const noneSerializer = new import_NoneSerializer.NoneSerializer();
48
- const DEFAULT_SEAT_RESERVATION_TIME = Number(process.env.COLYSEUS_SEAT_RESERVATION_TIME || 15);
47
+ var DEFAULT_PATCH_RATE = 1e3 / 20;
48
+ var DEFAULT_SIMULATION_INTERVAL = 1e3 / 60;
49
+ var noneSerializer = new import_NoneSerializer.NoneSerializer();
50
+ var DEFAULT_SEAT_RESERVATION_TIME = Number(process.env.COLYSEUS_SEAT_RESERVATION_TIME || 15);
49
51
  function validate(format, handler) {
50
52
  return { format, handler };
51
53
  }
52
- const RoomInternalState = {
54
+ var RoomInternalState = {
53
55
  CREATING: 0,
54
56
  CREATED: 1,
55
57
  DISPOSING: 2
56
58
  };
57
- class Room {
59
+ var Room = class _Room {
58
60
  constructor() {
59
61
  /**
60
62
  * Timing events tied to the room instance.
@@ -695,7 +697,7 @@ class Room {
695
697
  try {
696
698
  if (authData) {
697
699
  client.auth = authData;
698
- } else if (this.onAuth !== Room.prototype.onAuth) {
700
+ } else if (this.onAuth !== _Room.prototype.onAuth) {
699
701
  try {
700
702
  client.auth = await this.onAuth(client, joinOptions, authContext);
701
703
  if (!client.auth) {
@@ -1080,7 +1082,7 @@ class Room {
1080
1082
  this.onDispose = (0, import_Utils.wrapTryCatch)(this.onDispose.bind(this), onUncaughtException, import_RoomExceptions.OnDisposeException, "onDispose");
1081
1083
  }
1082
1084
  }
1083
- }
1085
+ };
1084
1086
  function room(options) {
1085
1087
  class _ extends Room {
1086
1088
  constructor() {