@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,108 @@
1
+ import { ProtocolError as e } from "./errors.js";
2
+ import { captureWorldData as t } from "./worldData.js";
3
+ import { assertRoomSeatSecrets as n } from "./seats.js";
4
+ import { worldActorCanonicalJson as r } from "./worldActorReceipts.js";
5
+ import { worldGhostWireLayout as i } from "./worldGhostWire.js";
6
+ import { RoomControlTargetSchema as a } from "./controlCarrier.js";
7
+ import { Schema as o } from "effect";
8
+ import { randomUUID as s } from "node:crypto";
9
+ import { signSession as c, verifySessionKeyed as l } from "@voltro/protocol/session";
10
+ //#region src/worldGhostHandshake.ts
11
+ var u = o.NonEmptyString.pipe(o.check(o.isMaxLength(191))), d = o.Int.pipe(o.check(o.isGreaterThan(0))), f = o.Struct({
12
+ source: a,
13
+ target: a,
14
+ tenantId: u,
15
+ roomId: u,
16
+ epoch: d,
17
+ schemaHash: o.Int.pipe(o.check(o.isGreaterThanOrEqualTo(0)))
18
+ }), p = o.Struct({
19
+ ...f.fields,
20
+ purpose: o.Literals(["voltro.rooms.ghost.hello.v1", "voltro.rooms.ghost.welcome.v1"]),
21
+ layout: o.Literal(i),
22
+ mount: u,
23
+ nonce: o.String.pipe(o.check(o.isPattern(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/))),
24
+ issuedAt: o.Int.pipe(o.check(o.isGreaterThanOrEqualTo(0))),
25
+ expiresAt: o.Int.pipe(o.check(o.isGreaterThanOrEqualTo(0)))
26
+ });
27
+ function m() {
28
+ throw new e({ detail: "World ghost process handshake refused" });
29
+ }
30
+ var h = (e) => {
31
+ let a = [
32
+ "projectControlSecrets",
33
+ "mount",
34
+ "epochNow",
35
+ "maxRequestMs",
36
+ "maxSignedBytes"
37
+ ];
38
+ if (!e || Object.getPrototypeOf(e) !== Object.prototype || Reflect.ownKeys(e).length !== a.length || a.some((t) => {
39
+ let n = Object.getOwnPropertyDescriptor(e, t);
40
+ return !n?.enumerable || !("value" in n);
41
+ }) || typeof e.epochNow != "function") return m();
42
+ let d = t(e.projectControlSecrets, 16384), h = o.decodeUnknownSync(u)(e.mount), g = e.epochNow.bind(e), _ = e.maxRequestMs, v = e.maxSignedBytes;
43
+ if (n(d), !Number.isSafeInteger(_) || _ < 1 || _ > 6e4 || !Number.isSafeInteger(v) || v < 1024 || v > 65536) return m();
44
+ let y = () => {
45
+ let e = g();
46
+ return Number.isSafeInteger(e) && e >= 0 && e <= 2 ** 53 - 1 - _ ? e : m();
47
+ }, b = (e) => {
48
+ let n = o.decodeUnknownSync(p)(t(e, v), { onExcessProperty: "error" }), r = y();
49
+ return !Number.isSafeInteger(n.epoch) || n.epoch > 2147483647 || n.schemaHash > 4294967295 || ![
50
+ n.source.startedAt,
51
+ n.target.startedAt,
52
+ n.issuedAt,
53
+ n.expiresAt
54
+ ].every(Number.isSafeInteger) || n.mount !== h || n.issuedAt > r || n.expiresAt <= r || n.expiresAt <= n.issuedAt || n.expiresAt - n.issuedAt > _ ? m() : t(n, v);
55
+ }, x = (e) => {
56
+ let t = b(e), n = y(), i = c({
57
+ type: "serviceAccount",
58
+ id: t.nonce,
59
+ tenantId: h,
60
+ auditActorId: null,
61
+ metadata: JSON.parse(r(t))
62
+ }, d.current, {
63
+ now: () => n,
64
+ ttlSeconds: Math.ceil((t.expiresAt - Math.floor(n / 1e3) * 1e3) / 1e3)
65
+ });
66
+ return Buffer.byteLength(i) > v ? m() : i;
67
+ }, S = (e, t) => {
68
+ if (typeof e != "string" || !e || Buffer.byteLength(e) > v) return m();
69
+ let n = l(e, d, { now: y });
70
+ if (!n || n.subject.type !== "serviceAccount" || n.subject.tenantId !== h) return m();
71
+ let r = b(n.subject.metadata);
72
+ return r.purpose !== t || n.subject.id !== r.nonce ? m() : r;
73
+ };
74
+ return Object.freeze({
75
+ hello: (e) => {
76
+ let n = o.decodeUnknownSync(f)(t(e, v), { onExcessProperty: "error" }), r = y(), a = b({
77
+ ...n,
78
+ purpose: "voltro.rooms.ghost.hello.v1",
79
+ layout: i,
80
+ mount: h,
81
+ nonce: s(),
82
+ issuedAt: r,
83
+ expiresAt: r + _
84
+ });
85
+ return Object.freeze({
86
+ hello: a,
87
+ token: x(a)
88
+ });
89
+ },
90
+ readHello: (e) => S(e, "voltro.rooms.ghost.hello.v1"),
91
+ welcome: (e) => {
92
+ let t = b(e);
93
+ return t.purpose === "voltro.rooms.ghost.hello.v1" ? x({
94
+ ...t,
95
+ purpose: "voltro.rooms.ghost.welcome.v1"
96
+ }) : m();
97
+ },
98
+ readWelcome: (e, t) => {
99
+ let n = b(t), i = S(e, "voltro.rooms.ghost.welcome.v1");
100
+ return n.purpose !== "voltro.rooms.ghost.hello.v1" || r({
101
+ ...i,
102
+ purpose: n.purpose
103
+ }) !== r(n) ? m() : i;
104
+ }
105
+ });
106
+ };
107
+ //#endregion
108
+ export { h as makeWorldGhostHandshake };
@@ -0,0 +1,42 @@
1
+ import { ProtocolError as e } from "./errors.js";
2
+ import { captureWorldData as t } from "./worldData.js";
3
+ import { makeWorldGhostReceiver as n } from "./worldGhostReceiver.js";
4
+ import { Effect as r } from "effect";
5
+ //#region src/worldGhostHost.ts
6
+ var i = (i, a) => {
7
+ let o = [
8
+ "tenantId",
9
+ "target",
10
+ "maxEntities",
11
+ "maxFrameBytes",
12
+ "maxRetainedBytes",
13
+ "ttlMs",
14
+ "now",
15
+ "authorizePeer"
16
+ ];
17
+ if (!a || Object.getPrototypeOf(a) !== Object.prototype || Reflect.ownKeys(a).length !== o.length || o.some((e) => {
18
+ let t = Object.getOwnPropertyDescriptor(a, e);
19
+ return !t?.enumerable || !("value" in t);
20
+ }) || typeof a.authorizePeer != "function" || typeof a.now != "function") throw new e({ detail: "Host ghost receiver requires own acquired capabilities" });
21
+ let s = t(a.target, 4096), c = a.tenantId, l = a.maxFrameBytes, u = a.authorizePeer.bind(a), d = (t) => r.tryPromise({
22
+ try: t,
23
+ catch: () => new e({ detail: "Actual Host ghost operation remains incomplete" })
24
+ }), f = n({
25
+ tenantId: c,
26
+ roomId: s.roomId,
27
+ hostId: i.host.id,
28
+ epoch: s.epoch,
29
+ maxEntities: a.maxEntities,
30
+ maxFrameBytes: l,
31
+ maxRetainedBytes: a.maxRetainedBytes,
32
+ ttlMs: a.ttlMs,
33
+ now: a.now.bind(a),
34
+ authorizePeer: u,
35
+ admit: (e, t) => d(() => i.admitWorldNeighborGhost(s.roomId, c, s.epoch, s, e, t, l, u)),
36
+ apply: (e, t, n) => d(() => i.applyWorldNeighborGhost(s.roomId, c, s.epoch, s, e, t, l, u, n)),
37
+ remove: (e, t) => d(() => i.removeWorldNeighborGhost(s.roomId, c, s.epoch, e, t, l))
38
+ });
39
+ return i.ownWorldGhostReceiver(s.roomId, c, s.epoch, f, a.ttlMs);
40
+ };
41
+ //#endregion
42
+ export { i as makeRoomWorldGhostReceiver };
@@ -0,0 +1,132 @@
1
+ import { ProtocolError as e } from "./errors.js";
2
+ import { captureRoomTransportDataMethod as t } from "./transportAuthoring.js";
3
+ import { worldActorCanonicalJson as n } from "./worldActorReceipts.js";
4
+ import { captureWorldGhostWithdrawal as r } from "./worldGhostReceiver.js";
5
+ import { makeWorldGhostWireCodec as i } from "./worldGhostWire.js";
6
+ import { Effect as a } from "effect";
7
+ import { createHash as o } from "node:crypto";
8
+ //#region src/worldGhostIngress.ts
9
+ var s = () => new e({ detail: "World ghost ingress remains incomplete" }), c = (e, c) => {
10
+ let l = [
11
+ "state",
12
+ "maxEntities",
13
+ "maxRetainedBytes",
14
+ "maxFrameBytes",
15
+ "maxHeaderBytes",
16
+ "maxSnapshotBytes",
17
+ "receive"
18
+ ];
19
+ if (!c || Object.getPrototypeOf(c) !== Object.prototype || Reflect.ownKeys(c).some((e) => typeof e != "string" || ![...l, "withdraw"].includes(e)) || l.some((e) => {
20
+ let t = Object.getOwnPropertyDescriptor(c, e);
21
+ return !t?.enumerable || !("value" in t);
22
+ }) || typeof c.receive != "function" || e.name !== "ws" || e.signal.aborted || !Number.isSafeInteger(c.maxEntities) || c.maxEntities < 1 || c.maxEntities > 4096 || !Number.isSafeInteger(c.maxRetainedBytes) || c.maxRetainedBytes < 1 || c.maxRetainedBytes > 67108864) throw s();
23
+ let u = Object.getOwnPropertyDescriptor(c, "withdraw");
24
+ if (u && (!("value" in u) || typeof u.value != "function") || !u && "withdraw" in c) throw s();
25
+ let d = u ? c.withdraw.bind(c) : void 0, f = c.maxEntities, p = c.maxRetainedBytes, m = c.maxFrameBytes, h = c.receive.bind(c), g = i(c.state, {
26
+ maxFrameBytes: m,
27
+ maxHeaderBytes: c.maxHeaderBytes,
28
+ maxSnapshotBytes: c.maxSnapshotBytes
29
+ }), _ = t(e.reliable, "onFrame", "Ghost ingress requires actual WS listener"), v = t(e.reliable, "send", "Ghost ingress requires actual bounded WS writer"), y = t(e, "close", "Ghost ingress requires actual WS withdrawal"), b = /* @__PURE__ */ new Map(), x = 0, S, C, w, T = !1, E, D = !1, O, k = async (e, t) => {
30
+ let n = new TextEncoder().encode(JSON.stringify({
31
+ entityId: t.frame.capture.entityId,
32
+ sequence: t.frame.sequence,
33
+ digest: t.digest
34
+ }));
35
+ if (n.length > 1024) throw s();
36
+ let r = new Uint8Array(n.length + 1);
37
+ r[0] = e, r.set(n, 1), D = !0, await v(r);
38
+ }, A = async (e) => {
39
+ let t = e.subarray(1), i = e[0] === 4 ? r(JSON.parse(new TextDecoder("utf-8", { fatal: !0 }).decode(t))) : void 0, c = i ?? g.inspect(t), l = o("sha256").update(t).digest("hex"), u = b.get(c.entityId), m;
40
+ if (u && u.frame.sequence === c.sequence) {
41
+ if (u.digest !== l || !!u.withdrawal != !!i) throw s();
42
+ m = u;
43
+ } else {
44
+ if (u && (!u.applied || u.frame.sequence >= c.sequence) || !u && b.size >= f || i && (!d || !u || u.withdrawal || i.baseSequence !== u.frame.sequence || i.sourceRoomId !== u.frame.capture.source.roomId || i.sourceEpoch !== u.frame.capture.source.epoch)) throw s();
45
+ let e = i ? {
46
+ ...u.frame,
47
+ sequence: i.sequence
48
+ } : g.decode(t, u?.withdrawal ? void 0 : u?.frame), r = new TextEncoder().encode(n(e)).length;
49
+ if (x - (u?.bytes ?? 0) + r > p) throw s();
50
+ m = {
51
+ frame: e,
52
+ digest: l,
53
+ bytes: r,
54
+ ...i ? { withdrawal: i } : {},
55
+ applied: !1
56
+ }, b.set(c.entityId, m), x += r - (u?.bytes ?? 0);
57
+ }
58
+ if (!m.applied) try {
59
+ let e = m.withdrawal ? d(m.withdrawal) : h(m.frame);
60
+ if (!a.isEffect(e)) throw s();
61
+ let t = await a.runPromise(e);
62
+ if (t !== "applied" && t !== "duplicate") throw s();
63
+ m.applied = !0;
64
+ } catch {
65
+ T || await k(3, m);
66
+ return;
67
+ }
68
+ T || await k(2, m);
69
+ }, j = (e) => {
70
+ E ??= e, T = !0, O = void 0;
71
+ try {
72
+ y(1008, "World ghost channel refused");
73
+ } catch (e) {
74
+ E = e;
75
+ }
76
+ }, M = () => {
77
+ T = !0, O = void 0;
78
+ }, N = () => {
79
+ if (T = !0, O = void 0, w) return w;
80
+ let t = (async () => {
81
+ S && await S.catch(() => void 0), C &&= (C(), void 0), e.signal.removeEventListener("abort", M), b.clear(), x = 0;
82
+ })();
83
+ return w = t, t.catch(() => {
84
+ w === t && (w = void 0);
85
+ }), t;
86
+ }, P = (e) => {
87
+ D = !1;
88
+ let t = Promise.resolve().then(() => A(e));
89
+ S = t, t.then(() => {
90
+ S === t && (S = void 0);
91
+ let e = O;
92
+ O = void 0, e && !T && P(e);
93
+ }, (e) => {
94
+ S === t && (S = void 0), j(e);
95
+ });
96
+ };
97
+ e.signal.addEventListener("abort", M, { once: !0 });
98
+ try {
99
+ let t = _((e) => {
100
+ if (!T) {
101
+ if (!(e instanceof Uint8Array) || e.length < 2 || e.length > m + 1 || e[0] !== 1 && e[0] !== 4 || e[0] === 4 && e.length > 1025) j(s());
102
+ else if (S) {
103
+ if (!D || O) {
104
+ j(s());
105
+ return;
106
+ }
107
+ O = Uint8Array.from(e);
108
+ } else P(Uint8Array.from(e));
109
+ }
110
+ });
111
+ if (typeof t != "function") throw s();
112
+ C = t, e.signal.aborted && M();
113
+ } catch (t) {
114
+ throw j(t), e.signal.removeEventListener("abort", M), t;
115
+ }
116
+ return Object.freeze({
117
+ close: N,
118
+ settled: async () => {
119
+ for (; S;) await S;
120
+ if (E !== void 0) throw E;
121
+ },
122
+ snapshot: () => Object.freeze({
123
+ retained: b.size,
124
+ retainedBytes: x,
125
+ busy: S !== void 0,
126
+ queuedBytes: O?.byteLength ?? 0,
127
+ fenced: T
128
+ })
129
+ });
130
+ };
131
+ //#endregion
132
+ export { c as bindWorldGhostIngress };
@@ -0,0 +1,70 @@
1
+ import { BudgetExceeded as e, ProtocolError as t } from "./errors.js";
2
+ import { captureWorldData as n } from "./worldData.js";
3
+ import { worldBoundsShareEdge as r } from "./worldTransitions.js";
4
+ import { captureWorldCatalog as i, worldCellAt as a } from "./world.js";
5
+ //#region src/worldGhostNeighborhood.ts
6
+ var o = (o) => {
7
+ let s = () => {
8
+ throw new t({ detail: "World ghost neighborhood requires bounded declared coordinates" });
9
+ }, c = [
10
+ "world",
11
+ "maxZoneChecks",
12
+ "maxCandidateCells"
13
+ ];
14
+ (!o || Object.getPrototypeOf(o) !== Object.prototype || Reflect.ownKeys(o).length !== c.length || c.some((e) => {
15
+ let t = Object.getOwnPropertyDescriptor(o, e);
16
+ return !t?.enumerable || !("value" in t);
17
+ })) && s();
18
+ let l = i([o.world])[0], u = o.maxZoneChecks, d = o.maxCandidateCells;
19
+ if ((!Number.isSafeInteger(u) || u < 1 || u > 65536 || !Number.isSafeInteger(d) || d < 1 || d > 65536) && s(), l.zones.length > u) throw new e({
20
+ budget: "worldGhostZones",
21
+ limit: u
22
+ });
23
+ return (t) => {
24
+ let i = n(t, 4096);
25
+ if (Object.keys(i).sort().join(",") !== "at,layer,zone" || !Number.isSafeInteger(i.layer) || i.layer < 1) return s();
26
+ let o = a(l, {
27
+ zone: i.zone,
28
+ at: i.at
29
+ }), c = l.zones.find((e) => e.id === o.zone);
30
+ if (i.layer > 1 && !c.layering) return s();
31
+ let u = l.handoff.ghostUnits, f = [], p = 0;
32
+ for (let t of l.zones) {
33
+ if (t.id !== o.zone && !c.neighbors.includes(t.id) || i.layer > 1 && !t.layering) continue;
34
+ let n = Math.max(t.bounds[0][0], o.bounds[0][0], i.at[0] - u), r = Math.min(t.bounds[1][0], o.bounds[1][0], i.at[0] + u), a = Math.max(t.bounds[0][1], o.bounds[0][1], i.at[1] - u), s = Math.min(t.bounds[1][1], o.bounds[1][1], i.at[1] + u);
35
+ if (n > r || a > s) continue;
36
+ let l = t.cells?.size ?? Math.max(t.bounds[1][0] - t.bounds[0][0], t.bounds[1][1] - t.bounds[0][1]), m = Math.ceil((t.bounds[1][0] - t.bounds[0][0]) / l), h = Math.ceil((t.bounds[1][1] - t.bounds[0][1]) / l), g = Math.max(0, Math.floor((n - t.bounds[0][0]) / l) - 1), _ = Math.min(m - 1, Math.floor((r - t.bounds[0][0]) / l)), v = Math.max(0, Math.floor((a - t.bounds[0][1]) / l) - 1), y = Math.min(h - 1, Math.floor((s - t.bounds[0][1]) / l)), b = (_ - g + 1) * (y - v + 1);
37
+ if (!Number.isSafeInteger(b) || b > d - p) throw new e({
38
+ budget: "worldGhostCandidateCells",
39
+ limit: d
40
+ });
41
+ p += b, f.push({
42
+ zone: t,
43
+ size: l,
44
+ firstX: g,
45
+ lastX: _,
46
+ firstY: v,
47
+ lastY: y
48
+ });
49
+ }
50
+ let m = [];
51
+ for (let e of f) for (let t = e.firstX; t <= e.lastX; t++) for (let n = e.firstY; n <= e.lastY; n++) {
52
+ let c = a(l, {
53
+ zone: e.zone.id,
54
+ at: [e.zone.bounds[0][0] + t * e.size, e.zone.bounds[0][1] + n * e.size]
55
+ });
56
+ if (c.column !== t || c.row !== n) return s();
57
+ if (c.id === o.id || !r(o.bounds, c.bounds)) continue;
58
+ let d = Math.max(c.bounds[0][0] - i.at[0], 0, i.at[0] - c.bounds[1][0]), f = Math.max(c.bounds[0][1] - i.at[1], 0, i.at[1] - c.bounds[1][1]), p = Math.hypot(d, f);
59
+ !Number.isFinite(p) || p > u || m.push(Object.freeze({
60
+ cell: c,
61
+ layer: i.layer,
62
+ distance: p,
63
+ prepare: p <= l.handoff.marginUnits
64
+ }));
65
+ }
66
+ return m.sort((e, t) => (e.cell.zone < t.cell.zone ? -1 : +(e.cell.zone > t.cell.zone)) || e.cell.row - t.cell.row || e.cell.column - t.cell.column), Object.freeze(m);
67
+ };
68
+ };
69
+ //#endregion
70
+ export { o as makeWorldGhostNeighborhood };
@@ -0,0 +1,86 @@
1
+ import { ProtocolError as e } from "./errors.js";
2
+ import { captureWorldData as t } from "./worldData.js";
3
+ import { makeWorldGhostNeighborhood as n } from "./worldGhostNeighborhood.js";
4
+ import { captureWorldCatalog as r, worldCellAt as i } from "./world.js";
5
+ import { dataStoreWorldCells as a } from "./worldCells.js";
6
+ import { Effect as o } from "effect";
7
+ //#region src/worldGhostNeighbors.ts
8
+ var s = (s, c) => {
9
+ let l = () => {
10
+ throw new e({ detail: "Ghost neighbor observation lost declared source ownership" });
11
+ }, u = [
12
+ "tenantId",
13
+ "world",
14
+ "epochNow",
15
+ "maxZoneChecks",
16
+ "maxCandidateCells",
17
+ "maxObservationBytes",
18
+ "authorize"
19
+ ];
20
+ (!c || Object.getPrototypeOf(c) !== Object.prototype || Reflect.ownKeys(c).length !== u.length || u.some((e) => {
21
+ let t = Object.getOwnPropertyDescriptor(c, e);
22
+ return !t?.enumerable || !("value" in t);
23
+ })) && l();
24
+ let d = r([c.world])[0], f = c.tenantId, p = c.maxObservationBytes;
25
+ (typeof f != "string" || !/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,190}$/.test(f) || typeof c.epochNow != "function" || typeof c.authorize != "function" || !Number.isSafeInteger(p) || p < 1 || p > 16777216) && l();
26
+ let m = n({
27
+ world: d,
28
+ maxZoneChecks: c.maxZoneChecks,
29
+ maxCandidateCells: c.maxCandidateCells
30
+ }), h = c.authorize.bind(c), g = c.epochNow.bind(c);
31
+ return Object.freeze({ observe: (n) => o.suspend(() => {
32
+ let e = t(n, 4096);
33
+ if (Object.keys(e).sort().join(",") !== "at,epoch,hostId,layer,roomId,tenantId,worldId,zoneId" || e.tenantId !== f || e.worldId !== d.name || typeof e.hostId != "string" || !e.hostId || typeof e.roomId != "string" || !e.roomId || !Number.isSafeInteger(e.epoch) || e.epoch < 1) return l();
34
+ let r = m({
35
+ zone: e.zoneId,
36
+ at: e.at,
37
+ layer: e.layer
38
+ }), c = i(d, {
39
+ zone: e.zoneId,
40
+ at: e.at
41
+ }), u = {
42
+ tenantId: f,
43
+ worldId: d.name,
44
+ zoneId: e.zoneId,
45
+ cellId: c.id,
46
+ layer: e.layer
47
+ }, _ = (t) => o.suspend(() => {
48
+ let n = h(Object.freeze({
49
+ source: e,
50
+ target: t
51
+ }));
52
+ return o.isEffect(n) ? n : l();
53
+ }), v = a(s, {
54
+ worlds: [d],
55
+ epochNow: g,
56
+ maxListedCells: 1,
57
+ authorize: () => o.void
58
+ }), y = () => _(null).pipe(o.flatMap(() => v.observe(u)), o.map((t) => !t || t.state !== "live" || t.hostId !== e.hostId || t.roomId !== e.roomId || t.epoch !== e.epoch ? l() : t));
59
+ return o.gen(function* () {
60
+ let e = yield* y(), n = [];
61
+ for (let t of r) {
62
+ let r = Object.freeze({
63
+ tenantId: f,
64
+ worldId: d.name,
65
+ zoneId: t.cell.zone,
66
+ cellId: t.cell.id,
67
+ layer: t.layer
68
+ });
69
+ yield* _(r);
70
+ let i = yield* v.inspect(r);
71
+ if (i?.roomId === e.roomId) return l();
72
+ n.push(Object.freeze({
73
+ ...t,
74
+ placement: i
75
+ }));
76
+ }
77
+ let i = yield* y();
78
+ return i.id !== e.id || i.revision !== e.revision ? l() : t({
79
+ source: i,
80
+ neighbors: n
81
+ }, p);
82
+ });
83
+ }).pipe(o.catchCause(() => o.fail(new e({ detail: "Ghost neighbor observation remains incomplete" })))) });
84
+ };
85
+ //#endregion
86
+ export { s as dataStoreWorldGhostNeighbors };
@@ -0,0 +1,110 @@
1
+ import { ProtocolError as e } from "./errors.js";
2
+ import { simulationOwnData as t } from "./simulationAuthoring.js";
3
+ import { captureWorldData as n } from "./worldData.js";
4
+ import { captureRoomTransportClock as r, captureRoomTransportDataMethod as i } from "./transportAuthoring.js";
5
+ import { RoomTransportCleanupFailure as a } from "./transportCleanup.js";
6
+ //#region src/worldGhostOutbound.ts
7
+ var o = (e) => {
8
+ let a = [
9
+ "carrier",
10
+ "sender",
11
+ "socket",
12
+ "path",
13
+ "handshakeTimeoutMs",
14
+ "maxSignedBytes",
15
+ "authorize"
16
+ ];
17
+ t(e, a, a);
18
+ let o = t(e.socket, [
19
+ "factory",
20
+ "clock",
21
+ "connectTimeoutMs",
22
+ "drainPollMs",
23
+ "maxFrameBytes",
24
+ "maxPendingBytes",
25
+ "maxPendingFrames",
26
+ "highWaterBytes",
27
+ "maxListeners"
28
+ ], []), s = e.carrier;
29
+ return Object.freeze({
30
+ path: e.path,
31
+ handshakeTimeoutMs: e.handshakeTimeoutMs,
32
+ maxSignedBytes: e.maxSignedBytes,
33
+ sender: n(e.sender, 1024),
34
+ socket: Object.freeze({
35
+ ...o,
36
+ ...o.clock ? { clock: r(o.clock) } : {},
37
+ ...o.factory ? { factory: i(o, "factory", "Ghost socket requires captured factory") } : {}
38
+ }),
39
+ carrier: Object.freeze({
40
+ hello: i(s, "hello", "Ghost sender requires signed Hello"),
41
+ readHello: i(s, "readHello", "Ghost sender requires Hello verification"),
42
+ welcome: i(s, "welcome", "Ghost sender requires Welcome signing"),
43
+ readWelcome: i(s, "readWelcome", "Ghost sender requires Welcome verification")
44
+ }),
45
+ authorize: i(e, "authorize", "Ghost destination requires current policy")
46
+ });
47
+ }, s = (t) => {
48
+ let r = t.current.bind(t), i = t.validate.bind(t), o = t.acquire.bind(t), s = t.release.bind(t), c = t.maxSnapshotBytes, l = new AbortController(), u = "opening", d, f, p, m, h = () => new e({ detail: "Source World ghost channel no longer has current ownership" }), g, _ = () => {
49
+ if (u === "closed") return Promise.resolve();
50
+ if (u = "closing", l.abort(), p) return p;
51
+ let e = Promise.resolve().then(async () => {
52
+ await g.catch(() => void 0);
53
+ let e = [];
54
+ try {
55
+ await d?.close();
56
+ } catch (t) {
57
+ e.push(t);
58
+ }
59
+ if (m && await m.catch(() => void 0), f instanceof a) try {
60
+ await f.cleanupAsync(), f = void 0;
61
+ } catch (t) {
62
+ e.push(t);
63
+ }
64
+ if (e.length) throw AggregateError(e, "Source ghost channel cleanup remains incomplete");
65
+ s(), u = "closed";
66
+ });
67
+ return p = e, e.catch(() => {
68
+ p === e && (p = void 0);
69
+ }), e;
70
+ };
71
+ return g = Promise.resolve().then(async () => {
72
+ try {
73
+ if (l.signal.aborted || (await r(), l.signal.aborted) || (d = await o(l.signal), await r(), l.signal.aborted)) throw h();
74
+ u = "ready";
75
+ let e = (e) => {
76
+ if (u !== "ready" || m) return Promise.reject(h());
77
+ let t = Promise.resolve().then(async () => {
78
+ if (await r(), u !== "ready" || (await e(), await r(), u !== "ready")) throw h();
79
+ });
80
+ return m = t, t.then(() => {
81
+ m === t && (m = void 0);
82
+ }, () => {
83
+ m === t && (m = void 0);
84
+ }), t;
85
+ };
86
+ return Object.freeze({
87
+ close: _,
88
+ snapshot: d.snapshot,
89
+ withdraw: (t, n) => e(() => d.withdraw(t, n)),
90
+ send: (t) => {
91
+ let r;
92
+ try {
93
+ r = n(t, c), i(r);
94
+ } catch (e) {
95
+ return Promise.reject(e);
96
+ }
97
+ return e(() => d.send(r));
98
+ }
99
+ });
100
+ } catch (e) {
101
+ throw f = e, u !== "closing" && (u = "failed"), e;
102
+ }
103
+ }), g.catch(() => void 0), Object.freeze({
104
+ ready: g,
105
+ close: _,
106
+ status: () => u
107
+ });
108
+ };
109
+ //#endregion
110
+ export { o as captureRoomWorldGhostOutboundOptions, s as ownWorldGhostOutbound };