@colyseus/core 0.18.0 → 0.18.2

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 (129) hide show
  1. package/build/MatchMaker.cjs +3 -7
  2. package/build/MatchMaker.cjs.map +2 -2
  3. package/build/MatchMaker.mjs +4 -8
  4. package/build/MatchMaker.mjs.map +2 -2
  5. package/build/Protocol.cjs +3 -3
  6. package/build/Protocol.cjs.map +1 -1
  7. package/build/Protocol.d.ts +3 -3
  8. package/build/Protocol.mjs +3 -3
  9. package/build/Protocol.mjs.map +1 -1
  10. package/build/Rewind.cjs +385 -0
  11. package/build/Rewind.cjs.map +7 -0
  12. package/build/Rewind.d.ts +291 -0
  13. package/build/Rewind.mjs +359 -0
  14. package/build/Rewind.mjs.map +7 -0
  15. package/build/Room.cjs +280 -281
  16. package/build/Room.cjs.map +3 -3
  17. package/build/Room.d.ts +185 -81
  18. package/build/Room.mjs +286 -286
  19. package/build/Room.mjs.map +2 -2
  20. package/build/RoomMessages.cjs +265 -0
  21. package/build/RoomMessages.cjs.map +7 -0
  22. package/build/RoomMessages.d.ts +49 -0
  23. package/build/RoomMessages.mjs +240 -0
  24. package/build/RoomMessages.mjs.map +7 -0
  25. package/build/Server.cjs +88 -31
  26. package/build/Server.cjs.map +2 -2
  27. package/build/Server.d.ts +36 -0
  28. package/build/Server.mjs +88 -31
  29. package/build/Server.mjs.map +2 -2
  30. package/build/Transport.cjs +26 -0
  31. package/build/Transport.cjs.map +2 -2
  32. package/build/Transport.d.ts +70 -2
  33. package/build/Transport.mjs +25 -0
  34. package/build/Transport.mjs.map +2 -2
  35. package/build/errors/RoomExceptions.cjs +7 -4
  36. package/build/errors/RoomExceptions.cjs.map +2 -2
  37. package/build/errors/RoomExceptions.d.ts +29 -17
  38. package/build/errors/RoomExceptions.mjs +5 -3
  39. package/build/errors/RoomExceptions.mjs.map +2 -2
  40. package/build/index.cjs +19 -2
  41. package/build/index.cjs.map +2 -2
  42. package/build/index.d.ts +7 -4
  43. package/build/index.mjs +17 -4
  44. package/build/index.mjs.map +2 -2
  45. package/build/input/InputBuffer.cjs +465 -16
  46. package/build/input/InputBuffer.cjs.map +2 -2
  47. package/build/input/InputBuffer.d.ts +195 -95
  48. package/build/input/InputBuffer.mjs +461 -15
  49. package/build/input/InputBuffer.mjs.map +2 -2
  50. package/build/input/RoomInput.cjs +307 -0
  51. package/build/input/RoomInput.cjs.map +7 -0
  52. package/build/input/RoomInput.d.ts +91 -0
  53. package/build/input/RoomInput.mjs +289 -0
  54. package/build/input/RoomInput.mjs.map +7 -0
  55. package/build/input/types.cjs +18 -0
  56. package/build/input/types.cjs.map +7 -0
  57. package/build/input/types.d.ts +476 -0
  58. package/build/input/types.mjs +0 -0
  59. package/build/input/types.mjs.map +7 -0
  60. package/build/presence/LocalPresence.cjs.map +2 -2
  61. package/build/presence/LocalPresence.d.ts +1 -1
  62. package/build/presence/LocalPresence.mjs.map +2 -2
  63. package/build/rooms/QueueRoom.cjs +1 -1
  64. package/build/rooms/QueueRoom.cjs.map +2 -2
  65. package/build/rooms/QueueRoom.mjs +1 -1
  66. package/build/rooms/QueueRoom.mjs.map +2 -2
  67. package/build/router/default_routes.cjs +4 -1
  68. package/build/router/default_routes.cjs.map +2 -2
  69. package/build/router/default_routes.mjs +4 -1
  70. package/build/router/default_routes.mjs.map +2 -2
  71. package/build/router/index.cjs +19 -7
  72. package/build/router/index.cjs.map +2 -2
  73. package/build/router/index.mjs +19 -7
  74. package/build/router/index.mjs.map +2 -2
  75. package/build/router/node.cjs +37 -2
  76. package/build/router/node.cjs.map +2 -2
  77. package/build/router/node.d.ts +10 -0
  78. package/build/router/node.mjs +35 -1
  79. package/build/router/node.mjs.map +2 -2
  80. package/build/serializer/NoneSerializer.cjs +2 -2
  81. package/build/serializer/NoneSerializer.cjs.map +2 -2
  82. package/build/serializer/NoneSerializer.d.ts +3 -3
  83. package/build/serializer/NoneSerializer.mjs +2 -2
  84. package/build/serializer/NoneSerializer.mjs.map +2 -2
  85. package/build/serializer/SchemaSerializer.cjs +44 -14
  86. package/build/serializer/SchemaSerializer.cjs.map +2 -2
  87. package/build/serializer/SchemaSerializer.d.ts +3 -3
  88. package/build/serializer/SchemaSerializer.mjs +46 -16
  89. package/build/serializer/SchemaSerializer.mjs.map +2 -2
  90. package/build/serializer/Serializer.cjs.map +1 -1
  91. package/build/serializer/Serializer.d.ts +12 -2
  92. package/build/utils/DevMode.cjs +14 -14
  93. package/build/utils/DevMode.cjs.map +2 -2
  94. package/build/utils/DevMode.d.ts +0 -2
  95. package/build/utils/DevMode.mjs +14 -12
  96. package/build/utils/DevMode.mjs.map +2 -2
  97. package/build/utils/Env.cjs +8 -4
  98. package/build/utils/Env.cjs.map +3 -3
  99. package/build/utils/Env.mjs +8 -4
  100. package/build/utils/Env.mjs.map +2 -2
  101. package/build/utils/Utils.cjs +3 -0
  102. package/build/utils/Utils.cjs.map +2 -2
  103. package/build/utils/Utils.d.ts +8 -0
  104. package/build/utils/Utils.mjs +2 -0
  105. package/build/utils/Utils.mjs.map +2 -2
  106. package/package.json +15 -12
  107. package/src/MatchMaker.ts +7 -9
  108. package/src/Protocol.ts +3 -3
  109. package/src/Rewind.ts +572 -0
  110. package/src/Room.ts +409 -448
  111. package/src/RoomMessages.ts +342 -0
  112. package/src/Server.ts +112 -38
  113. package/src/Transport.ts +98 -2
  114. package/src/errors/RoomExceptions.ts +36 -22
  115. package/src/index.ts +13 -2
  116. package/src/input/InputBuffer.ts +494 -105
  117. package/src/input/RoomInput.ts +342 -0
  118. package/src/input/types.ts +503 -0
  119. package/src/presence/LocalPresence.ts +1 -1
  120. package/src/rooms/QueueRoom.ts +1 -1
  121. package/src/router/default_routes.ts +6 -1
  122. package/src/router/index.ts +32 -14
  123. package/src/router/node.ts +44 -0
  124. package/src/serializer/NoneSerializer.ts +3 -3
  125. package/src/serializer/SchemaSerializer.ts +110 -19
  126. package/src/serializer/Serializer.ts +13 -2
  127. package/src/utils/DevMode.ts +18 -13
  128. package/src/utils/Env.ts +12 -4
  129. package/src/utils/Utils.ts +9 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colyseus/core",
3
- "version": "0.18.0",
3
+ "version": "0.18.2",
4
4
  "description": "Multiplayer Framework for Node.js.",
5
5
  "type": "module",
6
6
  "input": "./src/index.ts",
@@ -46,30 +46,30 @@
46
46
  "node": ">= 22.x"
47
47
  },
48
48
  "dependencies": {
49
- "msgpackr": "^2.0.1",
50
49
  "@colyseus/timer": "^2.0.0",
51
50
  "@standard-schema/spec": "^1.0.0",
52
51
  "debug": "^4.3.4",
52
+ "msgpackr": "^2.0.1",
53
53
  "nanoid": "^3.3.11",
54
54
  "@colyseus/better-call": "^1.3.1",
55
- "@colyseus/shared-types": "^0.18.0",
56
- "@colyseus/greeting-banner": "^4.0.0"
55
+ "@colyseus/shared-types": "^0.18.1",
56
+ "@colyseus/greeting-banner": "^4.0.1"
57
57
  },
58
58
  "devDependencies": {
59
- "@colyseus/schema": "^5.0.3",
59
+ "@colyseus/schema": "^5.0.8",
60
60
  "express": "^5.0.0",
61
- "@colyseus/redis-driver": "^0.18.0",
62
- "@colyseus/tools": "^0.18.0",
63
- "@colyseus/redis-presence": "^0.18.0"
61
+ "@colyseus/redis-presence": "^0.18.1",
62
+ "@colyseus/redis-driver": "^0.18.1",
63
+ "@colyseus/tools": "^0.18.1"
64
64
  },
65
65
  "peerDependencies": {
66
- "@colyseus/schema": "^5.0.3",
66
+ "@colyseus/schema": "^5.0.8",
67
67
  "@pm2/io": "^6.1.0",
68
68
  "express": "^4.16.0 || ^5.0.0",
69
69
  "zod": "^4.1.12",
70
70
  "@colyseus/better-call": "^1.3.1",
71
- "@colyseus/auth": "^0.18.0",
72
- "@colyseus/ws-transport": "^0.18.0"
71
+ "@colyseus/ws-transport": "^0.18.1",
72
+ "@colyseus/auth": "^0.18.1"
73
73
  },
74
74
  "peerDependenciesMeta": {
75
75
  "@colyseus/auth": {
@@ -97,5 +97,8 @@
97
97
  "access": "public",
98
98
  "tag": "next"
99
99
  },
100
- "gitHead": "c45b410e99eadffff4b74e701339992e2faa15f8"
100
+ "gitHead": "c45b410e99eadffff4b74e701339992e2faa15f8",
101
+ "scripts": {
102
+ "test": "tsc -p test"
103
+ }
101
104
  }
package/src/MatchMaker.ts CHANGED
@@ -3,7 +3,7 @@ import { EventEmitter } from 'events';
3
3
  import { requestFromIPC, subscribeIPC, subscribeWithTimeout } from './IPC.ts';
4
4
 
5
5
  import { type Type, Deferred, generateId, merge, retry, MAX_CONCURRENT_CREATE_ROOM_WAIT_TIME, REMOTE_ROOM_SHORT_TIMEOUT, type MethodName, type ExtractMethodOrPropertyType } from './utils/Utils.ts';
6
- import { isDevMode, cacheRoomHistory, getPreviousProcessId, getRoomRestoreListKey, reloadFromCache } from './utils/DevMode.ts';
6
+ import { isDevMode, cacheRoomHistory, getRoomRestoreListKey, reloadFromCache } from './utils/DevMode.ts';
7
7
 
8
8
  import { RegisteredHandler } from './matchmaker/RegisteredHandler.ts';
9
9
  import { type OnCreateOptions, Room, RoomInternalState } from './Room.ts';
@@ -103,9 +103,6 @@ export async function setup(
103
103
 
104
104
  stats.reset(false);
105
105
 
106
- // devMode: try to retrieve previous processId
107
- if (isDevMode) { processId = await getPreviousProcessId(); }
108
-
109
106
  // ensure processId is set
110
107
  if (!processId) { processId = generateId(); }
111
108
 
@@ -252,7 +249,7 @@ export async function join(roomName: string, clientOptions: ClientOptions = {},
252
249
  }
253
250
 
254
251
  return reserveSeatFor(room, clientOptions, authData);
255
- });
252
+ }, 5, [SeatReservationError]);
256
253
  }
257
254
 
258
255
  /**
@@ -551,6 +548,8 @@ export async function handleCreateRoom(roomName: string, clientOptions: ClientOp
551
548
 
552
549
  // set room public attributes
553
550
  if (restoringRoomId && isDevMode) {
551
+ // an ungraceful exit may have left a stale cache row for this roomId
552
+ await driver.remove(restoringRoomId);
554
553
  room.roomId = restoringRoomId;
555
554
 
556
555
  } else {
@@ -1039,10 +1038,9 @@ export function healthCheckProcessId(processId: string) {
1039
1038
  logger.debug(`❌ Process '${processId}' failed to respond. Cleaning it up.`);
1040
1039
  await stats.excludeProcess(processId);
1041
1040
 
1042
- // clean-up possibly stale room ids
1043
- if (!isDevMode) {
1044
- await removeRoomsByProcessId(processId);
1045
- }
1041
+ // clean-up stale room ids — a dead process never comes back;
1042
+ // devMode restore reads 'roomhistory' (presence), never these rows
1043
+ await removeRoomsByProcessId(processId);
1046
1044
 
1047
1045
  resolve(false);
1048
1046
  } finally {
package/src/Protocol.ts CHANGED
@@ -122,9 +122,9 @@ export const getMessageBytes = {
122
122
  *
123
123
  * `requestId` is opaque — echoed back exactly as the SDK sent it so the
124
124
  * pending callback/promise can be correlated. `status` is a
125
- * {@link ResponseStatus} (0 = OK, 1 = ERROR). The payload is omitted when a
126
- * handler resolves with `undefined`. Returns a fresh Buffer copy for the
127
- * same back-pressure reason documented on `raw` below.
125
+ * {@link ResponseStatus} (0 = OK, 1 = REJECTED, 2 = ERROR). The payload is
126
+ * omitted when a handler resolves with `undefined`. Returns a fresh Buffer copy
127
+ * for the same back-pressure reason documented on `raw` below.
128
128
  */
129
129
  [Protocol.ROOM_RESPONSE]: (requestId: number, status: number, message?: any): Buffer => {
130
130
  it.offset = 1;