@voltro/plugin-rooms 0.0.0-stage → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/CHANGELOG.md +24329 -0
  2. package/LICENSE +61 -0
  3. package/README.md +9204 -2
  4. package/SECURITY.md +56 -0
  5. package/THIRD-PARTY-NOTICES.md +11322 -0
  6. package/dist/actor.js +1474 -0
  7. package/dist/apiBinding.js +678 -0
  8. package/dist/apiRegistryBinding.js +399 -0
  9. package/dist/apiReservations.js +433 -0
  10. package/dist/baselines.js +73 -0
  11. package/dist/bots.d.ts +1485 -0
  12. package/dist/bots.js +563 -0
  13. package/dist/catalog.js +80 -0
  14. package/dist/checkpointJson.js +24 -0
  15. package/dist/checkpointStore.js +386 -0
  16. package/dist/client.js +56 -0
  17. package/dist/clockSync.js +51 -0
  18. package/dist/collision.js +156 -0
  19. package/dist/commandDelivery.js +101 -0
  20. package/dist/commandRecord.js +11 -0
  21. package/dist/commandWithdrawal.js +183 -0
  22. package/dist/connection.js +497 -0
  23. package/dist/controlCarrier.js +375 -0
  24. package/dist/controlRegistry.js +79 -0
  25. package/dist/controlTarget.js +45 -0
  26. package/dist/controlTransport.js +574 -0
  27. package/dist/developmentBinding.js +113 -0
  28. package/dist/directory.js +323 -0
  29. package/dist/directoryProjection.js +117 -0
  30. package/dist/errors.d.ts +125 -0
  31. package/dist/errors.js +53 -0
  32. package/dist/fixed.d.ts +284 -0
  33. package/dist/fixed.js +10 -0
  34. package/dist/fixed32.js +134 -0
  35. package/dist/fixedCollision.js +60 -0
  36. package/dist/fixedCollision32.js +109 -0
  37. package/dist/fixedMath.js +56 -0
  38. package/dist/fixedRaw.js +11 -0
  39. package/dist/fixedSlabs.js +34 -0
  40. package/dist/fixedTrig.js +48 -0
  41. package/dist/fixedTrig32.js +38 -0
  42. package/dist/fixedVectors.js +113 -0
  43. package/dist/fixedVectors32.js +95 -0
  44. package/dist/fixedWide.js +50 -0
  45. package/dist/fixedWords.js +46 -0
  46. package/dist/gateway.js +57 -0
  47. package/dist/geometry-retention-app/rooms.geometryJournalRetention.workflow.server.tsx +4 -0
  48. package/dist/geometry-retention-app/rooms.geometryJournalRetention.workflow.tsx +14 -0
  49. package/dist/geometry-worker/worker.d.mts +2 -0
  50. package/dist/geometry-worker/worker.mjs +50 -0
  51. package/dist/geometry.d.ts +2249 -0
  52. package/dist/geometry.js +40 -0
  53. package/dist/geometryActivation.js +82 -0
  54. package/dist/geometryActorInventory.js +108 -0
  55. package/dist/geometryAdminClient.js +87 -0
  56. package/dist/geometryAdminData.js +32 -0
  57. package/dist/geometryAdminFixtures.js +50 -0
  58. package/dist/geometryAdminPorts.js +5 -0
  59. package/dist/geometryAdminRpc.js +58 -0
  60. package/dist/geometryAdminRpcRoutes.js +49 -0
  61. package/dist/geometryAdminSchemas.js +39 -0
  62. package/dist/geometryAdministration.js +190 -0
  63. package/dist/geometryAdministrationPorts.js +5 -0
  64. package/dist/geometryApiBinding.js +165 -0
  65. package/dist/geometryAppStorage.js +58 -0
  66. package/dist/geometryArtifacts.js +198 -0
  67. package/dist/geometryAssetBundle.js +117 -0
  68. package/dist/geometryAssetClient.js +25 -0
  69. package/dist/geometryAssetData.js +106 -0
  70. package/dist/geometryAssetHttp.js +123 -0
  71. package/dist/geometryAssetPorts.js +5 -0
  72. package/dist/geometryAssetRpc.js +30 -0
  73. package/dist/geometryAssetRpcRoutes.js +40 -0
  74. package/dist/geometryAssetStorageGrant.js +103 -0
  75. package/dist/geometryBoxOverlap.js +110 -0
  76. package/dist/geometryCatalogueDigest.js +111 -0
  77. package/dist/geometryCellCoverage.js +85 -0
  78. package/dist/geometryCellLoader.js +28 -0
  79. package/dist/geometryChannel.js +134 -0
  80. package/dist/geometryChunkHttp.js +54 -0
  81. package/dist/geometryChunkLeases.js +22 -0
  82. package/dist/geometryClient.d.ts +1429 -0
  83. package/dist/geometryClient.js +149 -0
  84. package/dist/geometryClientChunks.js +330 -0
  85. package/dist/geometryClientDelta.js +25 -0
  86. package/dist/geometryClientHttp.js +37 -0
  87. package/dist/geometryClientInterest.js +109 -0
  88. package/dist/geometryClientStatic.js +34 -0
  89. package/dist/geometryCms.d.ts +763 -0
  90. package/dist/geometryCms.js +217 -0
  91. package/dist/geometryCommitCoordinator.js +241 -0
  92. package/dist/geometryCompactionFixture.js +84 -0
  93. package/dist/geometryCompactionStrategies.js +38 -0
  94. package/dist/geometryConnectionClient.js +23 -0
  95. package/dist/geometryDerivationFixtures.js +141 -0
  96. package/dist/geometryDerivationStrategies.js +27 -0
  97. package/dist/geometryDigest.js +13 -0
  98. package/dist/geometryEditChannel.js +70 -0
  99. package/dist/geometryEditIngress.js +263 -0
  100. package/dist/geometryEdits.js +366 -0
  101. package/dist/geometryEnvelope.js +41 -0
  102. package/dist/geometryGridRaycast.js +92 -0
  103. package/dist/geometryGridSweep.js +92 -0
  104. package/dist/geometryHeightfield.js +166 -0
  105. package/dist/geometryHeightfieldRaycast.js +74 -0
  106. package/dist/geometryHeightfieldSweep.js +85 -0
  107. package/dist/geometryHeightfieldVolume.js +45 -0
  108. package/dist/geometryHost.js +322 -0
  109. package/dist/geometryHostDirectory.js +207 -0
  110. package/dist/geometryHostMutations.js +137 -0
  111. package/dist/geometryHostStreams.js +124 -0
  112. package/dist/geometryHttpBody.js +76 -0
  113. package/dist/geometryHttpRoutes.js +112 -0
  114. package/dist/geometryImportGltf.js +300 -0
  115. package/dist/geometryImportLdtk.js +54 -0
  116. package/dist/geometryImportPng.js +144 -0
  117. package/dist/geometryImportPublication.js +67 -0
  118. package/dist/geometryImportTiled.js +39 -0
  119. package/dist/geometryImportTiles.js +136 -0
  120. package/dist/geometryImportVox.js +130 -0
  121. package/dist/geometryImportedSource.js +101 -0
  122. package/dist/geometryInspectEndpoint.js +248 -0
  123. package/dist/geometryInspection.js +92 -0
  124. package/dist/geometryInstall.js +121 -0
  125. package/dist/geometryJournalArchiveData.js +21 -0
  126. package/dist/geometryJournalArchiveIndex.js +330 -0
  127. package/dist/geometryJournalArchiveTable.js +21 -0
  128. package/dist/geometryJournalCompaction.js +100 -0
  129. package/dist/geometryJournalPatch.js +47 -0
  130. package/dist/geometryJournalRetention.js +112 -0
  131. package/dist/geometryJournalRetentionSchemas.js +36 -0
  132. package/dist/geometryJournalRetentionSweep.js +112 -0
  133. package/dist/geometryJournalRetentionWorkflow.js +28 -0
  134. package/dist/geometryJournalRetentionWorkflowData.js +31 -0
  135. package/dist/geometryJournalStorage.js +148 -0
  136. package/dist/geometryLoader.js +118 -0
  137. package/dist/geometryManifest.js +113 -0
  138. package/dist/geometryManifestChannel.js +93 -0
  139. package/dist/geometryManifestClient.js +122 -0
  140. package/dist/geometryManifestData.js +49 -0
  141. package/dist/geometryManifestPorts.js +5 -0
  142. package/dist/geometryManifestPublication.js +109 -0
  143. package/dist/geometryManifestSource.js +68 -0
  144. package/dist/geometryMigrationJournal.js +14 -0
  145. package/dist/geometryMigrationStrategies.js +7 -0
  146. package/dist/geometryMigrations.js +323 -0
  147. package/dist/geometryNativeMetadata.js +52 -0
  148. package/dist/geometryPatch.js +170 -0
  149. package/dist/geometryPersistence.js +449 -0
  150. package/dist/geometryPersistenceCapture.js +69 -0
  151. package/dist/geometryPersistenceData.js +140 -0
  152. package/dist/geometryPersistencePorts.js +5 -0
  153. package/dist/geometryPlayerAdmission.js +34 -0
  154. package/dist/geometryPlayerEditOwner.js +265 -0
  155. package/dist/geometryPlayerEdits.js +49 -0
  156. package/dist/geometryPrepared.js +188 -0
  157. package/dist/geometryPrivacyFence.js +24 -0
  158. package/dist/geometryProceduralPublication.js +91 -0
  159. package/dist/geometryProceduralWorker.js +164 -0
  160. package/dist/geometryPublication.js +110 -0
  161. package/dist/geometryRayAlgebra.js +116 -0
  162. package/dist/geometryReadClient.js +157 -0
  163. package/dist/geometryReadPorts.js +5 -0
  164. package/dist/geometryReadRpc.js +27 -0
  165. package/dist/geometryReadRpcRoutes.js +47 -0
  166. package/dist/geometryReliablePublication.js +82 -0
  167. package/dist/geometryReloadPorts.js +46 -0
  168. package/dist/geometryReloadSource.js +278 -0
  169. package/dist/geometryRenderCache.js +165 -0
  170. package/dist/geometryRenderLod.js +102 -0
  171. package/dist/geometryRollback.js +125 -0
  172. package/dist/geometryRollbackCoordinator.js +203 -0
  173. package/dist/geometryRollbackPorts.js +46 -0
  174. package/dist/geometryRollbackSource.js +209 -0
  175. package/dist/geometryRollbackStore.js +198 -0
  176. package/dist/geometrySchemas.js +27 -0
  177. package/dist/geometryServer.d.ts +2766 -0
  178. package/dist/geometryServer.js +62 -0
  179. package/dist/geometryShapeRaycast.js +111 -0
  180. package/dist/geometryShapeSegments.js +34 -0
  181. package/dist/geometryShapes.js +223 -0
  182. package/dist/geometrySnapshot.js +76 -0
  183. package/dist/geometrySnapshotChannel.js +160 -0
  184. package/dist/geometrySnapshotClient.js +159 -0
  185. package/dist/geometrySnapshotPreparation.js +76 -0
  186. package/dist/geometrySnapshotServer.js +191 -0
  187. package/dist/geometrySqlOwner.js +21 -0
  188. package/dist/geometryStorage.js +127 -0
  189. package/dist/geometryStorageGrant.js +69 -0
  190. package/dist/geometryStorageIdentity.js +9 -0
  191. package/dist/geometryTileArtifact.js +10 -0
  192. package/dist/geometryTileCodec.js +194 -0
  193. package/dist/geometryTileCollision.js +96 -0
  194. package/dist/geometryTileNavigation.js +128 -0
  195. package/dist/geometryTileView.js +35 -0
  196. package/dist/geometryVersionActivation.js +114 -0
  197. package/dist/geometryVersionClient.js +238 -0
  198. package/dist/geometryVersionCompare.js +40 -0
  199. package/dist/geometryVersionMigration.js +106 -0
  200. package/dist/geometryVoxel.js +253 -0
  201. package/dist/geometryWorldEntitySubject.js +32 -0
  202. package/dist/geometryWorldExtent.js +12 -0
  203. package/dist/geometryWorldMetadata.js +38 -0
  204. package/dist/geometryWorldStrategyFixtures.js +127 -0
  205. package/dist/geometryWorldView.js +307 -0
  206. package/dist/host.js +128 -0
  207. package/dist/hostBinding.js +277 -0
  208. package/dist/hostCellObservation.js +114 -0
  209. package/dist/hostClientCapacity.js +90 -0
  210. package/dist/hostCommandScope.js +64 -0
  211. package/dist/hostController.js +3094 -0
  212. package/dist/hostDeployment.js +65 -0
  213. package/dist/hostDrain.js +152 -0
  214. package/dist/hostDrainPorts.js +5 -0
  215. package/dist/hostDriver.js +179 -0
  216. package/dist/hostLane.js +288 -0
  217. package/dist/hostListener.js +79 -0
  218. package/dist/hostListenerBinding.js +19 -0
  219. package/dist/hostLoopObservation.js +90 -0
  220. package/dist/hostMetrics.js +56 -0
  221. package/dist/hostRegistryBinding.js +418 -0
  222. package/dist/hostSelection.js +16 -0
  223. package/dist/hostShutdown.js +47 -0
  224. package/dist/hostTurnObservation.js +53 -0
  225. package/dist/identities.js +4 -0
  226. package/dist/index.d.ts +8632 -0
  227. package/dist/index.js +232 -0
  228. package/dist/inputReceipts.js +63 -0
  229. package/dist/inputRedundancy.js +55 -0
  230. package/dist/inspect.js +238 -0
  231. package/dist/lockstep.d.ts +436 -0
  232. package/dist/lockstep.js +382 -0
  233. package/dist/lockstepAdmission.js +262 -0
  234. package/dist/lockstepAdmissionCodec.js +94 -0
  235. package/dist/lockstepAdmissionPorts.js +5 -0
  236. package/dist/lockstepClientSession.js +578 -0
  237. package/dist/lockstepDefinition.js +148 -0
  238. package/dist/lockstepHostLoop.js +243 -0
  239. package/dist/lockstepInitialAdmission.js +67 -0
  240. package/dist/lockstepInitialStrategyFixtures.js +45 -0
  241. package/dist/lockstepJournal.js +395 -0
  242. package/dist/lockstepJournalCodec.js +254 -0
  243. package/dist/lockstepJournalPorts.js +5 -0
  244. package/dist/lockstepJournalRebuild.js +208 -0
  245. package/dist/lockstepJournalRows.js +57 -0
  246. package/dist/lockstepMembers.js +131 -0
  247. package/dist/lockstepMessages.js +47 -0
  248. package/dist/lockstepOwnedRoom.js +764 -0
  249. package/dist/lockstepPolicies.js +84 -0
  250. package/dist/lockstepReact.js +47 -0
  251. package/dist/lockstepRecoveryTruth.js +121 -0
  252. package/dist/lockstepRosterConfig.js +32 -0
  253. package/dist/lockstepSeed.js +12 -0
  254. package/dist/lockstepSeedFixture.js +20 -0
  255. package/dist/lockstepServer.d.ts +3897 -0
  256. package/dist/lockstepServer.js +325 -0
  257. package/dist/lockstepServerConfig.js +101 -0
  258. package/dist/lockstepServerRoles.js +403 -0
  259. package/dist/lockstepServerStrategyFixtures.js +33 -0
  260. package/dist/lockstepStrategies.js +6 -0
  261. package/dist/lockstepStrategyFixtures.js +137 -0
  262. package/dist/lockstepTerminal.js +90 -0
  263. package/dist/lockstepTerminalPorts.js +5 -0
  264. package/dist/lockstepTransport.js +773 -0
  265. package/dist/lockstepTransportConfig.js +32 -0
  266. package/dist/lockstepWireRoster.js +34 -0
  267. package/dist/matchRoomProvider.js +32 -0
  268. package/dist/matchRooms.js +19 -0
  269. package/dist/membershipObserver.js +47 -0
  270. package/dist/moderation.js +98 -0
  271. package/dist/movementSpecials.js +104 -0
  272. package/dist/ownership.js +17 -0
  273. package/dist/ownershipWithdrawal.js +18 -0
  274. package/dist/pcg32.js +96 -0
  275. package/dist/ports.d.ts +1241 -0
  276. package/dist/ports.js +11 -0
  277. package/dist/quaternion.js +70 -0
  278. package/dist/react.d.ts +406 -0
  279. package/dist/react.js +109 -0
  280. package/dist/reaper-app/rooms.reaper.workflow.server.tsx +5 -0
  281. package/dist/reaper-app/rooms.reaper.workflow.tsx +13 -0
  282. package/dist/reaper.js +243 -0
  283. package/dist/reaperSchemas.js +42 -0
  284. package/dist/reaperWorkflow.js +70 -0
  285. package/dist/recovery.js +189 -0
  286. package/dist/recoverySeats.js +26 -0
  287. package/dist/replay.d.ts +273 -0
  288. package/dist/replay.js +485 -0
  289. package/dist/replayPorts.js +5 -0
  290. package/dist/replayRecording.js +67 -0
  291. package/dist/replaySchema.js +157 -0
  292. package/dist/replayStorage.d.ts +149 -0
  293. package/dist/replayStorage.js +485 -0
  294. package/dist/reservationBatch.js +422 -0
  295. package/dist/reservationSchemas.js +17 -0
  296. package/dist/reservations.js +259 -0
  297. package/dist/reservePort.js +69 -0
  298. package/dist/resolvedOptions.js +4 -0
  299. package/dist/room.d.ts +1006 -0
  300. package/dist/room.js +284 -0
  301. package/dist/roomAccessSweep.js +95 -0
  302. package/dist/roomAppCommandControl.js +59 -0
  303. package/dist/roomAuthoringStrategy.js +17 -0
  304. package/dist/roomErasure.js +198 -0
  305. package/dist/roomPoolRuntimeDefaults.js +24 -0
  306. package/dist/roomPoolSelection.js +19 -0
  307. package/dist/roomPoolTopology.js +212 -0
  308. package/dist/rpc.d.ts +551 -0
  309. package/dist/rpc.js +112 -0
  310. package/dist/rpcClient.js +152 -0
  311. package/dist/rpcRoutes.js +28 -0
  312. package/dist/runtime.js +1123 -0
  313. package/dist/schemaHistory.js +98 -0
  314. package/dist/seatStore.js +151 -0
  315. package/dist/seatStrategyFixtures.js +52 -0
  316. package/dist/seatSubject.js +32 -0
  317. package/dist/seats.js +130 -0
  318. package/dist/serverSession.js +811 -0
  319. package/dist/serverSessionConfig.js +43 -0
  320. package/dist/sessionAdmission.js +53 -0
  321. package/dist/sidecarAdmission.js +103 -0
  322. package/dist/sidecarConfig.js +116 -0
  323. package/dist/sidecarConfigPublication.js +64 -0
  324. package/dist/sidecarHostListener.js +208 -0
  325. package/dist/sidecarIpc.js +205 -0
  326. package/dist/sidecarPeer.js +310 -0
  327. package/dist/sidecarProcessPort.js +28 -0
  328. package/dist/sidecarRuntime.js +168 -0
  329. package/dist/sidecarSelection.js +142 -0
  330. package/dist/sidecarWire.js +178 -0
  331. package/dist/sidecarWrites.js +163 -0
  332. package/dist/simulation.d.ts +391 -0
  333. package/dist/simulation.js +282 -0
  334. package/dist/simulationAuthoring.js +29 -0
  335. package/dist/simulationBytes.js +27 -0
  336. package/dist/simulationConformance.js +305 -0
  337. package/dist/simulationInputHistoryCapture.js +35 -0
  338. package/dist/simulationInputHistoryWire.js +193 -0
  339. package/dist/simulationOptionsWire.js +78 -0
  340. package/dist/simulationRecoveryWire.js +134 -0
  341. package/dist/simulationReplay.js +127 -0
  342. package/dist/simulationSnapshotWire.js +112 -0
  343. package/dist/simulationState.js +178 -0
  344. package/dist/snapshotBlob.js +126 -0
  345. package/dist/snapshotBlobCleanup.js +93 -0
  346. package/dist/snapshotBlobIndex.js +38 -0
  347. package/dist/snapshotBudget.js +80 -0
  348. package/dist/snapshotChain.js +185 -0
  349. package/dist/snapshotErasure.js +172 -0
  350. package/dist/snapshotInspection.js +105 -0
  351. package/dist/snapshotSegmentBlobs.js +58 -0
  352. package/dist/snapshotUploads.js +166 -0
  353. package/dist/socketTransport.js +253 -0
  354. package/dist/spatial.js +104 -0
  355. package/dist/spectatorPolicy.js +26 -0
  356. package/dist/spectatorProducer.js +89 -0
  357. package/dist/startFailureCause.js +4 -0
  358. package/dist/stateCodec.js +658 -0
  359. package/dist/strategies.d.ts +210 -0
  360. package/dist/strategies.js +8 -0
  361. package/dist/strategiesServer.d.ts +286 -0
  362. package/dist/strategiesServer.js +11 -0
  363. package/dist/strategyFixtures.js +182 -0
  364. package/dist/streamFraming.js +122 -0
  365. package/dist/streamTransport.js +266 -0
  366. package/dist/subjectAdmission.js +50 -0
  367. package/dist/subjectPrivacy.js +281 -0
  368. package/dist/subjectPrivacyBinding.js +90 -0
  369. package/dist/systemManifest.js +182 -0
  370. package/dist/tables.js +159 -0
  371. package/dist/testHarness.js +89 -0
  372. package/dist/testing.d.ts +3684 -0
  373. package/dist/testing.js +221 -0
  374. package/dist/testingPorts.js +271 -0
  375. package/dist/testingServer.d.ts +4060 -0
  376. package/dist/testingServer.js +18 -0
  377. package/dist/transform.d.ts +692 -0
  378. package/dist/transform.js +217 -0
  379. package/dist/transform3d.js +118 -0
  380. package/dist/transformCollection.js +24 -0
  381. package/dist/transformCollection3d.js +24 -0
  382. package/dist/transformCollectionCore.js +156 -0
  383. package/dist/transformFrames.js +121 -0
  384. package/dist/transformPrediction3d.js +127 -0
  385. package/dist/transformRules.js +123 -0
  386. package/dist/transformSchemas.js +20 -0
  387. package/dist/transport.js +32 -0
  388. package/dist/transportAuthoring.js +29 -0
  389. package/dist/transportCleanup.js +22 -0
  390. package/dist/transportConformance.js +124 -0
  391. package/dist/transportConnector.js +82 -0
  392. package/dist/transportEndpoints.js +38 -0
  393. package/dist/transportsServer.d.ts +5515 -0
  394. package/dist/transportsServer.js +6 -0
  395. package/dist/viewProjection.js +16 -0
  396. package/dist/web.d.ts +2286 -0
  397. package/dist/web.js +518 -0
  398. package/dist/webTransportClient.js +173 -0
  399. package/dist/wire.d.ts +992 -0
  400. package/dist/wire.js +492 -0
  401. package/dist/withdrawalPort.js +28 -0
  402. package/dist/world.d.ts +1894 -0
  403. package/dist/world.js +333 -0
  404. package/dist/worldActorReceipts.js +48 -0
  405. package/dist/worldActorTransferSnapshot.js +14 -0
  406. package/dist/worldAdmissionPending.js +8 -0
  407. package/dist/worldBoundaryCoordinator.js +148 -0
  408. package/dist/worldCatalog.js +81 -0
  409. package/dist/worldCellAllocation.js +203 -0
  410. package/dist/worldCellDestination.js +68 -0
  411. package/dist/worldCells.js +489 -0
  412. package/dist/worldChange.js +32 -0
  413. package/dist/worldClient.js +664 -0
  414. package/dist/worldClientControl.js +141 -0
  415. package/dist/worldClientPendingInput.js +16 -0
  416. package/dist/worldClientRpc.js +133 -0
  417. package/dist/worldClientRpcRoutes.js +43 -0
  418. package/dist/worldClientSchemas.js +28 -0
  419. package/dist/worldCommands.js +140 -0
  420. package/dist/worldData.js +42 -0
  421. package/dist/worldDefaultBinding.js +377 -0
  422. package/dist/worldDefaultGroupAdmission.js +82 -0
  423. package/dist/worldDefaultGroupAppServices.js +31 -0
  424. package/dist/worldDefaultGroupCompensation.js +109 -0
  425. package/dist/worldDefaultGroupContinuation.js +96 -0
  426. package/dist/worldDefaultGroupControl.js +72 -0
  427. package/dist/worldDefaultGroupMembers.js +85 -0
  428. package/dist/worldDefaultGroups.js +21 -0
  429. package/dist/worldDefaultPending.js +79 -0
  430. package/dist/worldDefaultService.js +245 -0
  431. package/dist/worldEntities.js +2980 -0
  432. package/dist/worldEntityCodec.js +21 -0
  433. package/dist/worldEntityHandoffView.js +154 -0
  434. package/dist/worldGeometry.js +170 -0
  435. package/dist/worldGhostAdmission.js +65 -0
  436. package/dist/worldGhostDestination.js +118 -0
  437. package/dist/worldGhostGateway.js +132 -0
  438. package/dist/worldGhostHandshake.js +108 -0
  439. package/dist/worldGhostHost.js +42 -0
  440. package/dist/worldGhostIngress.js +132 -0
  441. package/dist/worldGhostNeighborhood.js +70 -0
  442. package/dist/worldGhostNeighbors.js +86 -0
  443. package/dist/worldGhostOutbound.js +110 -0
  444. package/dist/worldGhostPublisher.js +216 -0
  445. package/dist/worldGhostReceiver.js +213 -0
  446. package/dist/worldGhostSender.js +146 -0
  447. package/dist/worldGhostSocket.js +78 -0
  448. package/dist/worldGhostWire.js +172 -0
  449. package/dist/worldGroupCommand.js +49 -0
  450. package/dist/worldGroupDeadline.js +115 -0
  451. package/dist/worldGroupPreparation.js +115 -0
  452. package/dist/worldGroupReadyControl.js +128 -0
  453. package/dist/worldGroupSupervisor.js +120 -0
  454. package/dist/worldHandoffMetrics.js +59 -0
  455. package/dist/worldHandoffView.js +100 -0
  456. package/dist/worldHostSource.js +69 -0
  457. package/dist/worldInspectEndpoint.js +250 -0
  458. package/dist/worldInspection.js +109 -0
  459. package/dist/worldInstanceAdmission.js +31 -0
  460. package/dist/worldInstanceAllocation.js +116 -0
  461. package/dist/worldInstanceDestination.js +64 -0
  462. package/dist/worldInstanceExpiry.js +282 -0
  463. package/dist/worldInstanceExpirySupervisor.js +88 -0
  464. package/dist/worldInstanceLifecycle.js +103 -0
  465. package/dist/worldInstanceState.js +52 -0
  466. package/dist/worldInstances.js +478 -0
  467. package/dist/worldJoin.js +56 -0
  468. package/dist/worldLayers.js +151 -0
  469. package/dist/worldLeases.js +78 -0
  470. package/dist/worldManifest.js +25 -0
  471. package/dist/worldMovement.js +63 -0
  472. package/dist/worldPersistence.js +134 -0
  473. package/dist/worldProjection.js +221 -0
  474. package/dist/worldReact.js +110 -0
  475. package/dist/worldRecoveryActor.js +35 -0
  476. package/dist/worldReturnAnchor.js +49 -0
  477. package/dist/worldRoomHooks.js +57 -0
  478. package/dist/worldRoomPool.js +27 -0
  479. package/dist/worldRoomSteps.js +133 -0
  480. package/dist/worldSeatBinding.js +36 -0
  481. package/dist/worldServer.d.ts +6936 -0
  482. package/dist/worldServer.js +48 -0
  483. package/dist/worldSourceSeatPending.js +9 -0
  484. package/dist/worldStrategyFixtures.js +164 -0
  485. package/dist/worldTesting.js +27 -0
  486. package/dist/worldTransitionDefaults.js +198 -0
  487. package/dist/worldTransitionExecutor.js +519 -0
  488. package/dist/worldTransitionGroup.js +113 -0
  489. package/dist/worldTransitionPhysicalSteps.js +40 -0
  490. package/dist/worldTransitionResolver.js +228 -0
  491. package/dist/worldTransitionSeatGroup.js +64 -0
  492. package/dist/worldTransitionSeats.js +260 -0
  493. package/dist/worldTransitionState.js +95 -0
  494. package/dist/worldTransitions.js +101 -0
  495. package/package.json +189 -4
@@ -0,0 +1,29 @@
1
+ import { RoomAuthoringError as e } from "./errors.js";
2
+ //#region src/simulationAuthoring.ts
3
+ function t(t) {
4
+ throw new e({
5
+ room: "simulation",
6
+ detail: t
7
+ });
8
+ }
9
+ var n = (e, n, r) => {
10
+ if (!e || typeof e != "object" || Object.getPrototypeOf(e) !== Object.prototype) return t("Simulation declarations require own plain data");
11
+ let i = {};
12
+ for (let r of Reflect.ownKeys(e)) {
13
+ let a = Object.getOwnPropertyDescriptor(e, r);
14
+ if (typeof r != "string" || !n.includes(r) || !a?.enumerable || !("value" in a)) return t("Simulation declarations contain unknown fields or accessors");
15
+ Object.defineProperty(i, r, {
16
+ value: a.value,
17
+ enumerable: !0
18
+ });
19
+ }
20
+ return r.some((e) => !Object.hasOwn(i, e)) ? t("Required simulation declaration is absent") : i;
21
+ }, r = (e) => {
22
+ if (e && typeof e == "object") {
23
+ for (let t of Reflect.ownKeys(e)) r(Object.getOwnPropertyDescriptor(e, t)?.value);
24
+ Object.freeze(e);
25
+ }
26
+ return e;
27
+ }, i = (e) => e instanceof Promise ? (Promise.prototype.then.call(e, void 0, () => void 0), t("Simulation init/step/hash/prediction callbacks must be synchronous")) : e;
28
+ //#endregion
29
+ export { r as freezeSimulationValue, n as simulationOwnData, i as simulationSyncValue };
@@ -0,0 +1,27 @@
1
+ import { BudgetExceeded as e, ProtocolError as t } from "./errors.js";
2
+ //#region src/simulationBytes.ts
3
+ function n(e) {
4
+ throw new t({ detail: e });
5
+ }
6
+ var r = Object.getPrototypeOf(Uint8Array.prototype), i = Object.getOwnPropertyDescriptor(r, "byteLength")?.get, a = Object.getOwnPropertyDescriptor(r, "byteOffset")?.get, o = Object.getOwnPropertyDescriptor(r, "buffer")?.get, s = (t, r, s = "simulationBytes") => {
7
+ if (!(t instanceof Uint8Array) || !i || !a || !o) return n("Simulation input requires actual byte-array data");
8
+ let c, l, u;
9
+ try {
10
+ c = i.call(t), l = a.call(t), u = o.call(t);
11
+ } catch {
12
+ return n("Simulation byte-array identity is invalid");
13
+ }
14
+ if (c > r) throw new e({
15
+ budget: s,
16
+ limit: r
17
+ });
18
+ if (!(u instanceof ArrayBuffer)) return n("Simulation input cannot borrow shared byte storage");
19
+ try {
20
+ let e = new Uint8Array(c);
21
+ return Uint8Array.prototype.set.call(e, new Uint8Array(u, l, c)), e;
22
+ } catch {
23
+ return n("Simulation byte storage changed during capture");
24
+ }
25
+ };
26
+ //#endregion
27
+ export { s as captureSimulationBytes };
@@ -0,0 +1,305 @@
1
+ import { BudgetExceeded as e, ProtocolError as t, RoomAuthoringError as n, SimulationConformanceDivergence as r, SimulationConformanceFailure as i } from "./errors.js";
2
+ import { captureUint64Words as a, unsignedWord as o } from "./fixedWords.js";
3
+ import { Pcg32 as s } from "./pcg32.js";
4
+ import { freezeSimulationValue as c, simulationOwnData as l, simulationSyncValue as u } from "./simulationAuthoring.js";
5
+ import { captureSimulationBytes as d } from "./simulationBytes.js";
6
+ import { schemaSimulationHash as f } from "./simulationState.js";
7
+ import { createSimulationOptionsCodec as p } from "./simulationOptionsWire.js";
8
+ import { createSimulationInputHistoryCodec as m } from "./simulationInputHistoryWire.js";
9
+ import { assertCapturedSimulation as h, createSimulationRunner as g } from "./simulation.js";
10
+ import { RoomInputCodec as _, RoomStateCodec as v } from "./stateCodec.js";
11
+ import { Result as y } from "effect";
12
+ //#region src/simulationConformance.ts
13
+ function b(e) {
14
+ throw new n({
15
+ room: "simulation-conformance",
16
+ detail: e
17
+ });
18
+ }
19
+ var x = (e, t) => e.length === t.length && e.every((e, n) => e === t[n]), S = (e, t, n, r, i) => {
20
+ let a = Object.hasOwn(e, t) ? e[t] : n;
21
+ return !Number.isSafeInteger(a) || a < r || a > i ? b("Conformance requires bounded integer work limits") : a;
22
+ }, C = (e = {}) => {
23
+ let t = {
24
+ maxTicks: 65536,
25
+ maxCaseBytes: 16777216,
26
+ maxStateBytes: 1048576,
27
+ maxRetainedStateBytes: 67108864,
28
+ maxWorkSteps: 262144,
29
+ maxObservations: 65537,
30
+ rollbackHorizonTicks: 8,
31
+ replayEveryTicks: 8
32
+ }, n = l(e, Object.keys(t), []);
33
+ return Object.freeze({
34
+ maxTicks: S(n, "maxTicks", t.maxTicks, 1, 65536),
35
+ maxCaseBytes: S(n, "maxCaseBytes", t.maxCaseBytes, 32, 16777216),
36
+ maxStateBytes: S(n, "maxStateBytes", t.maxStateBytes, 1, 16777216),
37
+ maxRetainedStateBytes: S(n, "maxRetainedStateBytes", t.maxRetainedStateBytes, 1, 268435456),
38
+ maxWorkSteps: S(n, "maxWorkSteps", t.maxWorkSteps, 1, 4194304),
39
+ maxObservations: S(n, "maxObservations", t.maxObservations, 2, 65537),
40
+ rollbackHorizonTicks: S(n, "rollbackHorizonTicks", t.rollbackHorizonTicks, 1, 4096),
41
+ replayEveryTicks: S(n, "replayEveryTicks", t.replayEveryTicks, 1, 65536)
42
+ });
43
+ }, w = (t, n) => {
44
+ h(t);
45
+ let r = l(n, [
46
+ "seed",
47
+ "options",
48
+ "playerIds",
49
+ "sample",
50
+ "inputSeed",
51
+ "ticks",
52
+ "maxBytes"
53
+ ], [
54
+ "seed",
55
+ "options",
56
+ "playerIds",
57
+ "sample"
58
+ ]), i = o(r.seed), a = Object.hasOwn(r, "inputSeed") ? o(r.inputSeed) : i, d = S(r, "ticks", 1e4, 1, 65536), f = S(r, "maxBytes", 16777216, 32, 16777216), g = r.playerIds;
59
+ if (typeof r.sample != "function" || !Array.isArray(g) || !g.length || g.length > 64 || Reflect.ownKeys(g).length !== g.length + 1) return b("Conformance case requires a synchronous sampler and a complete own player roster");
60
+ let x = Object.freeze(Array.from({ length: g.length }, (e, t) => {
61
+ let n = Object.getOwnPropertyDescriptor(g, String(t));
62
+ return !n?.enumerable || !("value" in n) ? b("Conformance roster holes/accessors refuse") : o(n.value);
63
+ }).sort((e, t) => e - t));
64
+ if (new Set(x).size !== x.length) return b("Conformance players must be unique");
65
+ let C = p(t).encode(r.options), w = new _(t.definition.input, t.inputCodec.limits), T = new s(a), E = r.sample, D = [], O = C.length + 16 + x.length * 4;
66
+ if (O > f) throw new e({
67
+ budget: "simulationConformanceCaseBytes",
68
+ limit: f
69
+ });
70
+ for (let n = 1; n <= d; n++) {
71
+ if (O += 4, O > f) throw new e({
72
+ budget: "simulationConformanceCaseBytes",
73
+ limit: f
74
+ });
75
+ let r = x.map((r) => {
76
+ let i = c(t.inputCodec.capture(u(E(Object.freeze({
77
+ tick: n,
78
+ playerId: r,
79
+ rng: T
80
+ }))))), a = w.full(i);
81
+ if (y.isFailure(a)) throw a.failure;
82
+ if (O += 4 + a.success.length, O > f) throw new e({
83
+ budget: "simulationConformanceCaseBytes",
84
+ limit: f
85
+ });
86
+ return Object.freeze({
87
+ playerId: r,
88
+ input: i
89
+ });
90
+ });
91
+ D.push(Object.freeze({
92
+ tick: n,
93
+ inputs: Object.freeze(r)
94
+ }));
95
+ }
96
+ let k = m(t, {
97
+ maxBytes: f - C.length,
98
+ maxTicks: d,
99
+ maxPlayers: x.length
100
+ }).encode({
101
+ fromTick: 0,
102
+ playerIds: x,
103
+ inputs: D
104
+ });
105
+ return Object.freeze({
106
+ seed: i,
107
+ stateSchemaHash: new v(t.definition.state, t.stateCodec.limits).schemaHash,
108
+ options: C,
109
+ inputs: k
110
+ });
111
+ }, T = (t, n, r) => {
112
+ h(t);
113
+ let i = l(n, [
114
+ "seed",
115
+ "stateSchemaHash",
116
+ "options",
117
+ "inputs"
118
+ ], [
119
+ "seed",
120
+ "stateSchemaHash",
121
+ "options",
122
+ "inputs"
123
+ ]), a = o(i.seed), s = o(i.stateSchemaHash), c = d(i.options, r.maxCaseBytes, "simulationConformanceCaseBytes"), u = d(i.inputs, r.maxCaseBytes, "simulationConformanceCaseBytes");
124
+ if (c.length + u.length > r.maxCaseBytes) throw new e({
125
+ budget: "simulationConformanceCaseBytes",
126
+ limit: r.maxCaseBytes
127
+ });
128
+ if (t.stateCodec.limits.maxBytes > r.maxStateBytes) throw new e({
129
+ budget: "simulationConformanceStateBytes",
130
+ limit: r.maxStateBytes
131
+ });
132
+ if (s !== new v(t.definition.state, t.stateCodec.limits).schemaHash) return b("Conformance case requires the same captured state layout");
133
+ let f = p(t).decode(c), g = m(t, {
134
+ maxBytes: r.maxCaseBytes,
135
+ maxTicks: r.maxTicks,
136
+ maxPlayers: 64
137
+ }), _ = g.decode(u), y = _.inputs.length;
138
+ if (!x(g.encode(_), u)) return b("Conformance input case must use its canonical encoded intentions");
139
+ if (_.fromTick !== 0 || !y) return b("Conformance requires a nonempty complete tick-zero case");
140
+ if (y + 1 > r.maxObservations) throw new e({
141
+ budget: "simulationConformanceObservations",
142
+ limit: r.maxObservations
143
+ });
144
+ return {
145
+ seed: a,
146
+ options: f,
147
+ history: _,
148
+ ticks: y,
149
+ case: Object.freeze({
150
+ seed: a,
151
+ stateSchemaHash: s,
152
+ options: c,
153
+ inputs: u
154
+ })
155
+ };
156
+ }, E = Object.freeze([
157
+ 83,
158
+ 67,
159
+ 70,
160
+ 1
161
+ ]), D = 20, O = (t, n, r = {}) => {
162
+ let i = C(r), a = T(t, n, i).case, o = D + a.options.length + a.inputs.length;
163
+ if (o > i.maxCaseBytes) throw new e({
164
+ budget: "simulationConformanceArtifactBytes",
165
+ limit: i.maxCaseBytes
166
+ });
167
+ let s = new Uint8Array(o), c = new DataView(s.buffer);
168
+ return s.set(E), c.setUint32(4, a.seed, !0), c.setUint32(8, a.stateSchemaHash, !0), c.setUint32(12, a.options.length, !0), c.setUint32(16, a.inputs.length, !0), s.set(a.options, D), s.set(a.inputs, D + a.options.length), s;
169
+ }, k = (e, n, r = {}) => {
170
+ let i = C(r), a = d(n, i.maxCaseBytes, "simulationConformanceArtifactBytes");
171
+ if (a.length < D || E.some((e, t) => a[t] !== e)) throw new t({ detail: "Unknown or truncated simulation conformance artifact" });
172
+ let o = new DataView(a.buffer), s = o.getUint32(12, !0), c = o.getUint32(16, !0), l = a.length - D;
173
+ if (s < 12 || c < 20 || s > l || c !== l - s) throw new t({ detail: "Conformance artifact lengths exceed exact physical bytes" });
174
+ return T(e, {
175
+ seed: o.getUint32(4, !0),
176
+ stateSchemaHash: o.getUint32(8, !0),
177
+ options: a.subarray(D, D + s),
178
+ inputs: a.subarray(D + s)
179
+ }, i).case;
180
+ }, A = (e, t) => Object.freeze({
181
+ tick: t.tick,
182
+ schemaHash: f(e.stateCodec, t.state),
183
+ hash: Object.freeze({ ...t.hash }),
184
+ rng: Object.freeze({ ...t.rng })
185
+ }), j = (e, t) => e.hi === t.hi && e.lo === t.lo, M = (e, t, n) => {
186
+ if (e.tick !== t.tick) return b("Conformance observations must name the same contiguous tick");
187
+ for (let i of ["schemaHash", "hash"]) if (!j(e[i], t[i])) throw new r({
188
+ tick: e.tick,
189
+ phase: n,
190
+ component: i
191
+ });
192
+ if (e.rng.stateHi !== t.rng.stateHi || e.rng.stateLo !== t.rng.stateLo || e.rng.incrementHi !== t.rng.incrementHi || e.rng.incrementLo !== t.rng.incrementLo) throw new r({
193
+ tick: e.tick,
194
+ phase: n,
195
+ component: "rng"
196
+ });
197
+ }, N = (e, t, n, r, a) => {
198
+ try {
199
+ return r();
200
+ } catch {
201
+ throw new i({
202
+ tick: a?.() ?? e,
203
+ phase: t,
204
+ operation: n
205
+ });
206
+ }
207
+ }, P = (t, n, r = {}) => {
208
+ let i = C(r), a = T(t, n, i);
209
+ if (a.ticks > i.maxWorkSteps) throw new e({
210
+ budget: "simulationConformanceSteps",
211
+ limit: i.maxWorkSteps
212
+ });
213
+ if (t.stateCodec.limits.maxBytes > Math.floor(i.maxRetainedStateBytes / (i.rollbackHorizonTicks + 3))) throw new e({
214
+ budget: "simulationConformanceRetainedStateBytes",
215
+ limit: i.maxRetainedStateBytes
216
+ });
217
+ let o = N(0, "trace", "init", () => g(t, a.seed, a.options, {
218
+ maxPlayers: a.history.playerIds.length,
219
+ rollbackHorizonTicks: i.rollbackHorizonTicks,
220
+ maxReplaySteps: i.rollbackHorizonTicks
221
+ })), s = [A(t, o.snapshot())];
222
+ for (let e of a.history.inputs) s.push(N(e.tick, "trace", "step", () => A(t, o.advance(e.inputs))));
223
+ return Object.freeze({
224
+ case: a.case,
225
+ observations: Object.freeze(s)
226
+ });
227
+ }, F = (t, n, r = {}) => {
228
+ let i = C(r), a = T(t, n, i), o = a.ticks * 3;
229
+ for (let e = 1; e <= a.ticks; e++) (e % i.replayEveryTicks === 0 || e === a.ticks) && (o += Math.min(e, i.rollbackHorizonTicks));
230
+ if (o > i.maxWorkSteps) throw new e({
231
+ budget: "simulationConformanceSteps",
232
+ limit: i.maxWorkSteps
233
+ });
234
+ if (t.stateCodec.limits.maxBytes > Math.floor(i.maxRetainedStateBytes / (4 * (i.rollbackHorizonTicks + 3)))) throw new e({
235
+ budget: "simulationConformanceRetainedStateBytes",
236
+ limit: i.maxRetainedStateBytes
237
+ });
238
+ let s = {
239
+ maxPlayers: a.history.playerIds.length,
240
+ rollbackHorizonTicks: i.rollbackHorizonTicks,
241
+ maxReplaySteps: i.rollbackHorizonTicks
242
+ }, c = N(0, "repeat", "init", () => g(t, a.seed, a.options, s)), l = N(0, "repeat", "init", () => g(t, a.seed, a.options, s)), u = N(0, "rollback", "init", () => g(t, a.seed, a.options, s)), d = [A(t, c.snapshot())];
243
+ M(d[0], A(t, l.snapshot()), "repeat"), M(d[0], A(t, u.snapshot()), "rollback");
244
+ let f = 2, p = 0, m = 0;
245
+ for (let e of a.history.inputs) {
246
+ let n = N(e.tick, "repeat", "step", () => A(t, c.advance(e.inputs)));
247
+ if (d.push(n), p++, M(n, N(e.tick, "repeat", "step", () => A(t, l.advance(e.inputs))), "repeat"), p++, f++, M(n, N(e.tick, "rollback", "step", () => A(t, u.advance(e.inputs))), "rollback"), p++, f++, e.tick % i.replayEveryTicks !== 0 && e.tick !== a.ticks) continue;
248
+ let r = Math.max(1, e.tick - i.rollbackHorizonTicks + 1), o = N(r, "rollback", "replay", () => u.replaceInputs(r, a.history.inputs[r - 1].inputs), () => u.lastFailedTransitionTick);
249
+ p += o.steps, m++;
250
+ for (let n = r; n <= e.tick; n++) M(d[n], A(t, u.snapshotAt(n)), "rollback"), f++;
251
+ }
252
+ let h = Object.freeze({
253
+ case: a.case,
254
+ observations: Object.freeze(d)
255
+ });
256
+ return Object.freeze({
257
+ scope: "local-repeat-and-rollback",
258
+ trace: h,
259
+ ticks: a.ticks,
260
+ stepsExecuted: p,
261
+ comparisons: f,
262
+ replays: m
263
+ });
264
+ }, I = (e, t, n) => {
265
+ let r = l(t, ["case", "observations"], ["case", "observations"]), i = T(e, r.case, n), o = r.observations;
266
+ if (!Array.isArray(o) || o.length !== i.ticks + 1 || Reflect.ownKeys(o).length !== o.length + 1) return b("Trace observations require the complete own contiguous case frontier");
267
+ let c = Array.from({ length: o.length }, (e, t) => {
268
+ let n = Object.getOwnPropertyDescriptor(o, String(t));
269
+ if (!n?.enumerable || !("value" in n)) return b("Trace observation holes/accessors refuse");
270
+ let r = l(n.value, [
271
+ "tick",
272
+ "schemaHash",
273
+ "hash",
274
+ "rng"
275
+ ], [
276
+ "tick",
277
+ "schemaHash",
278
+ "hash",
279
+ "rng"
280
+ ]);
281
+ if (r.tick !== t) return b("Trace tick sequence changed");
282
+ let i = new s(0);
283
+ return i.restore(r.rng), Object.freeze({
284
+ tick: t,
285
+ schemaHash: a(r.schemaHash),
286
+ hash: a(r.hash),
287
+ rng: i.snapshot()
288
+ });
289
+ });
290
+ return Object.freeze({
291
+ case: i.case,
292
+ observations: Object.freeze(c)
293
+ });
294
+ }, L = (e, t, n, r = {}) => {
295
+ let i = C(r), a = I(e, t, i), o = I(e, n, i);
296
+ if (a.case.seed !== o.case.seed || a.case.stateSchemaHash !== o.case.stateSchemaHash || !x(a.case.options, o.case.options) || !x(a.case.inputs, o.case.inputs)) return b("Trace comparison requires exactly the same encoded case");
297
+ for (let e = 0; e < a.observations.length; e++) M(a.observations[e], o.observations[e], "provided-trace");
298
+ return Object.freeze({
299
+ scope: "provided-trace-comparison",
300
+ ticks: a.observations.length - 1,
301
+ comparisons: a.observations.length
302
+ });
303
+ };
304
+ //#endregion
305
+ export { L as compareSimulationConformanceTraces, w as createSimulationConformanceCase, k as decodeSimulationConformanceCase, O as encodeSimulationConformanceCase, P as runSimulationConformanceTrace, F as simulationConformance };
@@ -0,0 +1,35 @@
1
+ import { ProtocolError as e } from "./errors.js";
2
+ import { unsignedWord as t } from "./fixedWords.js";
3
+ import { simulationOwnData as n } from "./simulationAuthoring.js";
4
+ import { captureSimulationInputs as r } from "./simulation.js";
5
+ //#region src/simulationInputHistoryCapture.ts
6
+ function i(t) {
7
+ throw new e({ detail: t });
8
+ }
9
+ var a = (e, a, o, s, c, l = () => void 0, u = /* @__PURE__ */ new Map()) => {
10
+ if (t(a), !Number.isInteger(c) || c < 1 || c > 65536 || !Array.isArray(s) || s.length > c || Reflect.ownKeys(s).length !== s.length + 1 || s.length > 4294967295 - a) return i("Confirmed input continuation exceeds dense/tick/work limits");
11
+ if (!Array.isArray(o) || !o.length || o.length > 64 || Reflect.ownKeys(o).length !== o.length + 1) return i("Confirmed input history requires a bounded complete own roster");
12
+ let d = Array.from({ length: o.length }, (e, n) => {
13
+ let r = Object.getOwnPropertyDescriptor(o, String(n));
14
+ return !r?.enumerable || !("value" in r) ? i("Confirmed input roster holes/accessors refuse") : t(r.value);
15
+ }).sort((e, t) => e - t);
16
+ if (new Set(d).size !== d.length) return i("Confirmed input roster IDs must be unique");
17
+ for (let [e, t] of u) if (!d.includes(e) || !Number.isSafeInteger(t) || t <= a) return i("Confirmed input join must name a roster player inside the history");
18
+ let f = [];
19
+ for (let t = 0; t < s.length; t++) {
20
+ let o = Object.getOwnPropertyDescriptor(s, String(t));
21
+ if (!o?.enumerable || !("value" in o)) return i("Confirmed input continuation holes/accessors refuse");
22
+ let c = n(o.value, ["tick", "inputs"], ["tick", "inputs"]);
23
+ if (c.tick !== a + t + 1) return i("Confirmed input continuation must be contiguous after its actual base");
24
+ let p = u.size ? d.filter((e) => (u.get(e) ?? 0) <= c.tick) : d, m = r(e, c.inputs, d.length);
25
+ if (m.length !== p.length || m.some((e, t) => e.playerId !== p[t])) return i("Confirmed input continuation must match the complete actual roster");
26
+ let h = Object.freeze({
27
+ tick: c.tick,
28
+ inputs: m
29
+ });
30
+ l(h), f.push(h);
31
+ }
32
+ return Object.freeze(f);
33
+ };
34
+ //#endregion
35
+ export { a as captureSimulationInputHistory };
@@ -0,0 +1,193 @@
1
+ import { BudgetExceeded as e, ProtocolError as t, RoomAuthoringError as n } from "./errors.js";
2
+ import { unsignedWord as r } from "./fixedWords.js";
3
+ import { simulationOwnData as i } from "./simulationAuthoring.js";
4
+ import { captureSimulationBytes as a } from "./simulationBytes.js";
5
+ import { captureSimulationInputHistory as o } from "./simulationInputHistoryCapture.js";
6
+ import { assertCapturedSimulation as s } from "./simulation.js";
7
+ import { RoomInputCodec as c } from "./stateCodec.js";
8
+ import { Result as l } from "effect";
9
+ //#region src/simulationInputHistoryWire.ts
10
+ var u = Object.freeze([
11
+ 76,
12
+ 83,
13
+ 73,
14
+ 1
15
+ ]), d = Object.freeze([
16
+ 76,
17
+ 83,
18
+ 73,
19
+ 2
20
+ ]), f = 16;
21
+ function p(e) {
22
+ throw new t({ detail: e });
23
+ }
24
+ var m = class {
25
+ #e;
26
+ #t;
27
+ #n;
28
+ #r = !1;
29
+ constructor(e, t = {}) {
30
+ s(e), this.#e = e;
31
+ let r = i(t, [
32
+ "maxBytes",
33
+ "maxPlayers",
34
+ "maxTicks"
35
+ ], []), a = {
36
+ maxBytes: 16777216,
37
+ maxPlayers: 64,
38
+ maxTicks: 4096
39
+ }, o = {
40
+ maxBytes: 16777216,
41
+ maxPlayers: 64,
42
+ maxTicks: 65536
43
+ }, l = { ...a };
44
+ for (let e of Object.keys(a)) {
45
+ let t = Object.hasOwn(r, e) ? r[e] : a[e];
46
+ if (!Number.isInteger(t) || t < (e === "maxBytes" ? 20 : 1) || t > o[e]) throw new n({
47
+ room: "simulation",
48
+ detail: "Input history requires bounded bytes/players/ticks"
49
+ });
50
+ Object.defineProperty(l, e, {
51
+ value: t,
52
+ enumerable: !0
53
+ });
54
+ }
55
+ this.#n = Object.freeze(l), this.#t = new c(e.definition.input, e.inputCodec.limits);
56
+ }
57
+ work(e) {
58
+ if (this.#r) return p("Input history codec cannot reenter capture/encoding/decoding");
59
+ this.#r = !0;
60
+ try {
61
+ return e();
62
+ } finally {
63
+ this.#r = !1;
64
+ }
65
+ }
66
+ pack(t) {
67
+ let n = i(t, [
68
+ "fromTick",
69
+ "playerIds",
70
+ "inputs",
71
+ "joins"
72
+ ], [
73
+ "fromTick",
74
+ "playerIds",
75
+ "inputs"
76
+ ]), a = r(n.fromTick), s = n.playerIds;
77
+ if (!Array.isArray(s) || !s.length || s.length > this.#n.maxPlayers || Reflect.ownKeys(s).length !== s.length + 1) return p("Input history roster exceeds complete own/count work");
78
+ let c = Object.freeze(Array.from({ length: s.length }, (e, t) => {
79
+ let n = Object.getOwnPropertyDescriptor(s, String(t));
80
+ return !n?.enumerable || !("value" in n) ? p("Input history roster holes/accessors refuse") : r(n.value);
81
+ }).sort((e, t) => e - t)), u = Object.hasOwn(n, "joins") ? n.joins : [];
82
+ if (!Array.isArray(u) || u.length > c.length || Reflect.ownKeys(u).length !== u.length + 1) return p("Input history joins exceed the roster");
83
+ let d = /* @__PURE__ */ new Map();
84
+ for (let e = 0; e < u.length; e++) {
85
+ let t = Object.getOwnPropertyDescriptor(u, String(e));
86
+ if (!t?.enumerable || !("value" in t)) return p("Input history join holes/accessors refuse");
87
+ let n = i(t.value, ["playerId", "tick"], ["playerId", "tick"]), a = r(n.playerId);
88
+ if (d.has(a)) return p("Input history joins name each player once");
89
+ d.set(a, r(n.tick));
90
+ }
91
+ let m = f + c.length * (d.size ? 8 : 4);
92
+ if (m > this.#n.maxBytes) throw new e({
93
+ budget: "simulationInputHistoryBytes",
94
+ limit: this.#n.maxBytes
95
+ });
96
+ let h = [], g = o(this.#e, a, c, n.inputs, this.#n.maxTicks, (t) => {
97
+ m += 4;
98
+ let n = t.inputs.map((t) => {
99
+ let n = this.#t.full(t.input);
100
+ if (l.isFailure(n)) throw n.failure;
101
+ if (m += 4 + n.success.length, m > this.#n.maxBytes) throw new e({
102
+ budget: "simulationInputHistoryBytes",
103
+ limit: this.#n.maxBytes
104
+ });
105
+ return n.success;
106
+ });
107
+ h.push(Object.freeze(n));
108
+ }, d), _ = Object.freeze([...d].sort((e, t) => e[0] - t[0]).map(([e, t]) => Object.freeze({
109
+ playerId: e,
110
+ tick: t
111
+ })));
112
+ return {
113
+ history: Object.freeze({
114
+ fromTick: a,
115
+ playerIds: c,
116
+ inputs: g,
117
+ ...d.size ? { joins: _ } : {}
118
+ }),
119
+ payloads: h,
120
+ size: m,
121
+ joins: d
122
+ };
123
+ }
124
+ capture(e) {
125
+ return this.work(() => this.pack(e).history);
126
+ }
127
+ encode(e) {
128
+ return this.work(() => {
129
+ let { history: t, payloads: n, size: r, joins: i } = this.pack(e), a = new Uint8Array(r), o = new DataView(a.buffer);
130
+ a.set(i.size ? d : u), o.setUint32(4, t.fromTick, !0), o.setUint32(8, t.playerIds.length, !0), o.setUint32(12, t.inputs.length, !0);
131
+ let s = f;
132
+ for (let e of t.playerIds) o.setUint32(s, e, !0), s += 4, i.size && (o.setUint32(s, i.get(e) ?? 0, !0), s += 4);
133
+ for (let e = 0; e < t.inputs.length; e++) {
134
+ o.setUint32(s, t.inputs[e].tick, !0), s += 4;
135
+ for (let t of n[e]) o.setUint32(s, t.length, !0), s += 4, a.set(t, s), s += t.length;
136
+ }
137
+ return a;
138
+ });
139
+ }
140
+ decode(e) {
141
+ return this.work(() => {
142
+ let t = a(e, this.#n.maxBytes, "simulationInputHistoryBytes"), n = t.length >= f && u.slice(0, 3).every((e, n) => t[n] === e) ? t[3] : 0;
143
+ if (n !== 1 && n !== 2) return p("Input history has an unknown or truncated layout");
144
+ let r = n === 2 ? 8 : 4, i = new DataView(t.buffer), o = i.getUint32(4, !0), s = i.getUint32(8, !0), c = i.getUint32(12, !0);
145
+ if (!s || s > this.#n.maxPlayers || c > this.#n.maxTicks || c > 4294967295 - o) return p("Input history header exceeds player/tick work");
146
+ if (f + s * r + c * (r === 4 ? 4 + s * 4 : 4) > t.length) return p("Input history counts exceed physical bytes");
147
+ let d = f, m = -1, h = [], g = Array.from({ length: s }, () => {
148
+ let e = i.getUint32(d, !0);
149
+ if (d += 4, e <= m) return p("Input history roster must be canonical ascending unique IDs");
150
+ if (m = e, r === 8) {
151
+ let t = i.getUint32(d, !0);
152
+ d += 4, t > 0 && h.push({
153
+ playerId: e,
154
+ tick: t
155
+ });
156
+ }
157
+ return e;
158
+ });
159
+ if (r === 8 && !h.length) return p("Input history v2 must name a late join");
160
+ let _ = new Map(h.map((e) => [e.playerId, e.tick])), v = [];
161
+ for (let e = 0; e < c; e++) {
162
+ if (d + 4 > t.length) return p("Input history tick is truncated");
163
+ let n = i.getUint32(d, !0);
164
+ if (d += 4, n !== o + e + 1) return p("Input history ticks must be contiguous");
165
+ let r = [];
166
+ for (let e of g) {
167
+ if ((_.get(e) ?? 0) > n) continue;
168
+ if (d + 4 > t.length) return p("Input history cell is truncated");
169
+ let a = i.getUint32(d, !0);
170
+ if (d += 4, a > t.length - d) return p("Input history payload exceeds physical bytes");
171
+ let o = this.#t.decodeFull(t.subarray(d, d + a));
172
+ if (l.isFailure(o)) throw o.failure;
173
+ r.push({
174
+ playerId: e,
175
+ input: o.success
176
+ }), d += a;
177
+ }
178
+ v.push({
179
+ tick: n,
180
+ inputs: r
181
+ });
182
+ }
183
+ return d === t.length ? this.pack({
184
+ fromTick: o,
185
+ playerIds: g,
186
+ inputs: v,
187
+ ...h.length ? { joins: h } : {}
188
+ }).history : p("Input history has trailing bytes");
189
+ });
190
+ }
191
+ }, h = (e, t = {}) => new m(e, t);
192
+ //#endregion
193
+ export { m as SimulationInputHistoryCodec, h as createSimulationInputHistoryCodec };
@@ -0,0 +1,78 @@
1
+ import { ProtocolError as e, RoomAuthoringError as t } from "./errors.js";
2
+ import { freezeSimulationValue as n } from "./simulationAuthoring.js";
3
+ import { captureSimulationBytes as r } from "./simulationBytes.js";
4
+ import { assertCapturedSimulation as i } from "./simulation.js";
5
+ import { RoomInputCodec as a } from "./stateCodec.js";
6
+ import { Result as o } from "effect";
7
+ //#region src/simulationOptionsWire.ts
8
+ var s = 12, c = (e, t) => {
9
+ if (Object.is(e, t)) return !0;
10
+ if (!e || !t || typeof e != "object" || typeof t != "object" || Array.isArray(e) !== Array.isArray(t)) return !1;
11
+ let n = Reflect.ownKeys(e);
12
+ return n.length === Reflect.ownKeys(t).length && n.every((n) => Object.hasOwn(t, n) && c(Object.getOwnPropertyDescriptor(e, n)?.value, Object.getOwnPropertyDescriptor(t, n)?.value));
13
+ }, l = class {
14
+ #e;
15
+ #t;
16
+ #n = !1;
17
+ constructor(e) {
18
+ i(e), this.#e = e, this.#t = new a(e.definition.options, e.optionsCodec.limits, "f64");
19
+ }
20
+ get schemaHash() {
21
+ return this.#t.schemaHash;
22
+ }
23
+ get maxBytes() {
24
+ return this.#e.optionsCodec.limits.maxBytes + s;
25
+ }
26
+ work(t) {
27
+ if (this.#n) throw new e({ detail: "Options codec cannot reenter author capture" });
28
+ this.#n = !0;
29
+ try {
30
+ return t();
31
+ } finally {
32
+ this.#n = !1;
33
+ }
34
+ }
35
+ captureOwned(e) {
36
+ let r = n(this.#e.optionsCodec.capture(e)), i = this.#t.full(r);
37
+ if (o.isFailure(i)) throw i.failure;
38
+ let a = this.#t.decodeFull(i.success);
39
+ if (o.isFailure(a)) throw a.failure;
40
+ if (!c(r, n(this.#e.optionsCodec.capture(a.success)))) throw new t({
41
+ room: "simulation",
42
+ detail: "Declared option precision or quantization cannot preserve the captured game options"
43
+ });
44
+ return r;
45
+ }
46
+ capture(e) {
47
+ return this.work(() => this.captureOwned(e));
48
+ }
49
+ encode(e) {
50
+ return this.work(() => {
51
+ let t = this.captureOwned(e), n = this.#t.full(t);
52
+ if (o.isFailure(n)) throw n.failure;
53
+ let r = n.success, i = new Uint8Array(s + r.length), a = new DataView(i.buffer);
54
+ return i.set([
55
+ 76,
56
+ 83,
57
+ 79,
58
+ 1
59
+ ]), a.setUint32(4, this.schemaHash, !0), a.setUint32(8, r.length, !0), i.set(r, s), i;
60
+ });
61
+ }
62
+ decode(t) {
63
+ return this.work(() => {
64
+ let n = r(t, this.maxBytes, "simulationOptionsBytes");
65
+ if (n.length < s || n[0] !== 76 || n[1] !== 83 || n[2] !== 79 || n[3] !== 1) throw new e({ detail: "Unknown or truncated simulation options envelope" });
66
+ let i = new DataView(n.buffer);
67
+ if (i.getUint32(4, !0) !== this.schemaHash || i.getUint32(8, !0) !== n.length - s) throw new e({ detail: "Simulation options layout or length changed" });
68
+ let a = this.#t.decodeFull(n.subarray(s));
69
+ if (o.isFailure(a)) throw a.failure;
70
+ let c = this.captureOwned(a.success), l = this.#t.full(c);
71
+ if (o.isFailure(l)) throw l.failure;
72
+ if (l.success.length !== n.length - s || l.success.some((e, t) => e !== n[t + s])) throw new e({ detail: "Noncanonical simulation options envelope" });
73
+ return c;
74
+ });
75
+ }
76
+ }, u = (e) => new l(e);
77
+ //#endregion
78
+ export { l as SimulationOptionsCodec, u as createSimulationOptionsCodec };