@voltro/plugin-rooms 0.0.0-stage → 0.88.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 +24492 -0
  2. package/LICENSE +61 -0
  3. package/README.md +9204 -2
  4. package/SECURITY.md +56 -0
  5. package/THIRD-PARTY-NOTICES.md +12496 -0
  6. package/dist/actor.js +1473 -0
  7. package/dist/apiBinding.js +677 -0
  8. package/dist/apiRegistryBinding.js +398 -0
  9. package/dist/apiReservations.js +432 -0
  10. package/dist/baselines.js +72 -0
  11. package/dist/bots.d.ts +1485 -0
  12. package/dist/bots.js +562 -0
  13. package/dist/catalog.js +79 -0
  14. package/dist/checkpointJson.js +23 -0
  15. package/dist/checkpointStore.js +385 -0
  16. package/dist/client.js +55 -0
  17. package/dist/clockSync.js +50 -0
  18. package/dist/collision.js +155 -0
  19. package/dist/commandDelivery.js +100 -0
  20. package/dist/commandRecord.js +10 -0
  21. package/dist/commandWithdrawal.js +182 -0
  22. package/dist/connection.js +496 -0
  23. package/dist/controlCarrier.js +374 -0
  24. package/dist/controlRegistry.js +78 -0
  25. package/dist/controlTarget.js +44 -0
  26. package/dist/controlTransport.js +573 -0
  27. package/dist/developmentBinding.js +112 -0
  28. package/dist/directory.js +322 -0
  29. package/dist/directoryProjection.js +116 -0
  30. package/dist/errors.d.ts +125 -0
  31. package/dist/errors.js +52 -0
  32. package/dist/fixed.d.ts +284 -0
  33. package/dist/fixed.js +10 -0
  34. package/dist/fixed32.js +133 -0
  35. package/dist/fixedCollision.js +59 -0
  36. package/dist/fixedCollision32.js +108 -0
  37. package/dist/fixedMath.js +55 -0
  38. package/dist/fixedRaw.js +10 -0
  39. package/dist/fixedSlabs.js +33 -0
  40. package/dist/fixedTrig.js +47 -0
  41. package/dist/fixedTrig32.js +37 -0
  42. package/dist/fixedVectors.js +112 -0
  43. package/dist/fixedVectors32.js +94 -0
  44. package/dist/fixedWide.js +49 -0
  45. package/dist/fixedWords.js +45 -0
  46. package/dist/gateway.js +56 -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 +81 -0
  54. package/dist/geometryActorInventory.js +107 -0
  55. package/dist/geometryAdminClient.js +86 -0
  56. package/dist/geometryAdminData.js +31 -0
  57. package/dist/geometryAdminFixtures.js +49 -0
  58. package/dist/geometryAdminPorts.js +4 -0
  59. package/dist/geometryAdminRpc.js +57 -0
  60. package/dist/geometryAdminRpcRoutes.js +48 -0
  61. package/dist/geometryAdminSchemas.js +38 -0
  62. package/dist/geometryAdministration.js +189 -0
  63. package/dist/geometryAdministrationPorts.js +4 -0
  64. package/dist/geometryApiBinding.js +164 -0
  65. package/dist/geometryAppStorage.js +57 -0
  66. package/dist/geometryArtifacts.js +197 -0
  67. package/dist/geometryAssetBundle.js +116 -0
  68. package/dist/geometryAssetClient.js +24 -0
  69. package/dist/geometryAssetData.js +105 -0
  70. package/dist/geometryAssetHttp.js +122 -0
  71. package/dist/geometryAssetPorts.js +4 -0
  72. package/dist/geometryAssetRpc.js +29 -0
  73. package/dist/geometryAssetRpcRoutes.js +39 -0
  74. package/dist/geometryAssetStorageGrant.js +102 -0
  75. package/dist/geometryBoxOverlap.js +109 -0
  76. package/dist/geometryCatalogueDigest.js +110 -0
  77. package/dist/geometryCellCoverage.js +84 -0
  78. package/dist/geometryCellLoader.js +27 -0
  79. package/dist/geometryChannel.js +133 -0
  80. package/dist/geometryChunkHttp.js +53 -0
  81. package/dist/geometryChunkLeases.js +21 -0
  82. package/dist/geometryClient.d.ts +1429 -0
  83. package/dist/geometryClient.js +148 -0
  84. package/dist/geometryClientChunks.js +329 -0
  85. package/dist/geometryClientDelta.js +24 -0
  86. package/dist/geometryClientHttp.js +36 -0
  87. package/dist/geometryClientInterest.js +108 -0
  88. package/dist/geometryClientStatic.js +33 -0
  89. package/dist/geometryCms.d.ts +763 -0
  90. package/dist/geometryCms.js +216 -0
  91. package/dist/geometryCommitCoordinator.js +240 -0
  92. package/dist/geometryCompactionFixture.js +83 -0
  93. package/dist/geometryCompactionStrategies.js +37 -0
  94. package/dist/geometryConnectionClient.js +22 -0
  95. package/dist/geometryDerivationFixtures.js +140 -0
  96. package/dist/geometryDerivationStrategies.js +26 -0
  97. package/dist/geometryDigest.js +12 -0
  98. package/dist/geometryEditChannel.js +69 -0
  99. package/dist/geometryEditIngress.js +262 -0
  100. package/dist/geometryEdits.js +365 -0
  101. package/dist/geometryEnvelope.js +40 -0
  102. package/dist/geometryGridRaycast.js +91 -0
  103. package/dist/geometryGridSweep.js +91 -0
  104. package/dist/geometryHeightfield.js +165 -0
  105. package/dist/geometryHeightfieldRaycast.js +73 -0
  106. package/dist/geometryHeightfieldSweep.js +84 -0
  107. package/dist/geometryHeightfieldVolume.js +44 -0
  108. package/dist/geometryHost.js +321 -0
  109. package/dist/geometryHostDirectory.js +206 -0
  110. package/dist/geometryHostMutations.js +136 -0
  111. package/dist/geometryHostStreams.js +123 -0
  112. package/dist/geometryHttpBody.js +75 -0
  113. package/dist/geometryHttpRoutes.js +111 -0
  114. package/dist/geometryImportGltf.js +299 -0
  115. package/dist/geometryImportLdtk.js +53 -0
  116. package/dist/geometryImportPng.js +143 -0
  117. package/dist/geometryImportPublication.js +66 -0
  118. package/dist/geometryImportTiled.js +38 -0
  119. package/dist/geometryImportTiles.js +135 -0
  120. package/dist/geometryImportVox.js +129 -0
  121. package/dist/geometryImportedSource.js +100 -0
  122. package/dist/geometryInspectEndpoint.js +247 -0
  123. package/dist/geometryInspection.js +91 -0
  124. package/dist/geometryInstall.js +120 -0
  125. package/dist/geometryJournalArchiveData.js +20 -0
  126. package/dist/geometryJournalArchiveIndex.js +329 -0
  127. package/dist/geometryJournalArchiveTable.js +20 -0
  128. package/dist/geometryJournalCompaction.js +99 -0
  129. package/dist/geometryJournalPatch.js +46 -0
  130. package/dist/geometryJournalRetention.js +111 -0
  131. package/dist/geometryJournalRetentionSchemas.js +35 -0
  132. package/dist/geometryJournalRetentionSweep.js +111 -0
  133. package/dist/geometryJournalRetentionWorkflow.js +27 -0
  134. package/dist/geometryJournalRetentionWorkflowData.js +30 -0
  135. package/dist/geometryJournalStorage.js +147 -0
  136. package/dist/geometryLoader.js +117 -0
  137. package/dist/geometryManifest.js +112 -0
  138. package/dist/geometryManifestChannel.js +92 -0
  139. package/dist/geometryManifestClient.js +121 -0
  140. package/dist/geometryManifestData.js +48 -0
  141. package/dist/geometryManifestPorts.js +4 -0
  142. package/dist/geometryManifestPublication.js +108 -0
  143. package/dist/geometryManifestSource.js +67 -0
  144. package/dist/geometryMigrationJournal.js +13 -0
  145. package/dist/geometryMigrationStrategies.js +6 -0
  146. package/dist/geometryMigrations.js +322 -0
  147. package/dist/geometryNativeMetadata.js +51 -0
  148. package/dist/geometryPatch.js +169 -0
  149. package/dist/geometryPersistence.js +448 -0
  150. package/dist/geometryPersistenceCapture.js +68 -0
  151. package/dist/geometryPersistenceData.js +139 -0
  152. package/dist/geometryPersistencePorts.js +4 -0
  153. package/dist/geometryPlayerAdmission.js +33 -0
  154. package/dist/geometryPlayerEditOwner.js +264 -0
  155. package/dist/geometryPlayerEdits.js +48 -0
  156. package/dist/geometryPrepared.js +187 -0
  157. package/dist/geometryPrivacyFence.js +23 -0
  158. package/dist/geometryProceduralPublication.js +90 -0
  159. package/dist/geometryProceduralWorker.js +163 -0
  160. package/dist/geometryPublication.js +109 -0
  161. package/dist/geometryRayAlgebra.js +115 -0
  162. package/dist/geometryReadClient.js +156 -0
  163. package/dist/geometryReadPorts.js +4 -0
  164. package/dist/geometryReadRpc.js +26 -0
  165. package/dist/geometryReadRpcRoutes.js +46 -0
  166. package/dist/geometryReliablePublication.js +81 -0
  167. package/dist/geometryReloadPorts.js +45 -0
  168. package/dist/geometryReloadSource.js +277 -0
  169. package/dist/geometryRenderCache.js +164 -0
  170. package/dist/geometryRenderLod.js +101 -0
  171. package/dist/geometryRollback.js +124 -0
  172. package/dist/geometryRollbackCoordinator.js +202 -0
  173. package/dist/geometryRollbackPorts.js +45 -0
  174. package/dist/geometryRollbackSource.js +208 -0
  175. package/dist/geometryRollbackStore.js +197 -0
  176. package/dist/geometrySchemas.js +26 -0
  177. package/dist/geometryServer.d.ts +2766 -0
  178. package/dist/geometryServer.js +62 -0
  179. package/dist/geometryShapeRaycast.js +110 -0
  180. package/dist/geometryShapeSegments.js +33 -0
  181. package/dist/geometryShapes.js +222 -0
  182. package/dist/geometrySnapshot.js +75 -0
  183. package/dist/geometrySnapshotChannel.js +159 -0
  184. package/dist/geometrySnapshotClient.js +158 -0
  185. package/dist/geometrySnapshotPreparation.js +75 -0
  186. package/dist/geometrySnapshotServer.js +190 -0
  187. package/dist/geometrySqlOwner.js +20 -0
  188. package/dist/geometryStorage.js +126 -0
  189. package/dist/geometryStorageGrant.js +68 -0
  190. package/dist/geometryStorageIdentity.js +8 -0
  191. package/dist/geometryTileArtifact.js +9 -0
  192. package/dist/geometryTileCodec.js +193 -0
  193. package/dist/geometryTileCollision.js +95 -0
  194. package/dist/geometryTileNavigation.js +127 -0
  195. package/dist/geometryTileView.js +34 -0
  196. package/dist/geometryVersionActivation.js +113 -0
  197. package/dist/geometryVersionClient.js +237 -0
  198. package/dist/geometryVersionCompare.js +39 -0
  199. package/dist/geometryVersionMigration.js +105 -0
  200. package/dist/geometryVoxel.js +252 -0
  201. package/dist/geometryWorldEntitySubject.js +31 -0
  202. package/dist/geometryWorldExtent.js +11 -0
  203. package/dist/geometryWorldMetadata.js +37 -0
  204. package/dist/geometryWorldStrategyFixtures.js +126 -0
  205. package/dist/geometryWorldView.js +306 -0
  206. package/dist/host.js +127 -0
  207. package/dist/hostBinding.js +276 -0
  208. package/dist/hostCellObservation.js +113 -0
  209. package/dist/hostClientCapacity.js +89 -0
  210. package/dist/hostCommandScope.js +63 -0
  211. package/dist/hostController.js +3093 -0
  212. package/dist/hostDeployment.js +64 -0
  213. package/dist/hostDrain.js +151 -0
  214. package/dist/hostDrainPorts.js +4 -0
  215. package/dist/hostDriver.js +178 -0
  216. package/dist/hostLane.js +287 -0
  217. package/dist/hostListener.js +78 -0
  218. package/dist/hostListenerBinding.js +18 -0
  219. package/dist/hostLoopObservation.js +89 -0
  220. package/dist/hostMetrics.js +55 -0
  221. package/dist/hostRegistryBinding.js +417 -0
  222. package/dist/hostSelection.js +15 -0
  223. package/dist/hostShutdown.js +46 -0
  224. package/dist/hostTurnObservation.js +52 -0
  225. package/dist/identities.js +3 -0
  226. package/dist/index.d.ts +8632 -0
  227. package/dist/index.js +231 -0
  228. package/dist/inputReceipts.js +62 -0
  229. package/dist/inputRedundancy.js +54 -0
  230. package/dist/inspect.js +237 -0
  231. package/dist/lockstep.d.ts +436 -0
  232. package/dist/lockstep.js +381 -0
  233. package/dist/lockstepAdmission.js +261 -0
  234. package/dist/lockstepAdmissionCodec.js +93 -0
  235. package/dist/lockstepAdmissionPorts.js +4 -0
  236. package/dist/lockstepClientSession.js +577 -0
  237. package/dist/lockstepDefinition.js +147 -0
  238. package/dist/lockstepHostLoop.js +242 -0
  239. package/dist/lockstepInitialAdmission.js +66 -0
  240. package/dist/lockstepInitialStrategyFixtures.js +44 -0
  241. package/dist/lockstepJournal.js +394 -0
  242. package/dist/lockstepJournalCodec.js +253 -0
  243. package/dist/lockstepJournalPorts.js +4 -0
  244. package/dist/lockstepJournalRebuild.js +207 -0
  245. package/dist/lockstepJournalRows.js +56 -0
  246. package/dist/lockstepMembers.js +130 -0
  247. package/dist/lockstepMessages.js +46 -0
  248. package/dist/lockstepOwnedRoom.js +763 -0
  249. package/dist/lockstepPolicies.js +83 -0
  250. package/dist/lockstepReact.js +46 -0
  251. package/dist/lockstepRecoveryTruth.js +120 -0
  252. package/dist/lockstepRosterConfig.js +31 -0
  253. package/dist/lockstepSeed.js +11 -0
  254. package/dist/lockstepSeedFixture.js +19 -0
  255. package/dist/lockstepServer.d.ts +3897 -0
  256. package/dist/lockstepServer.js +324 -0
  257. package/dist/lockstepServerConfig.js +100 -0
  258. package/dist/lockstepServerRoles.js +402 -0
  259. package/dist/lockstepServerStrategyFixtures.js +32 -0
  260. package/dist/lockstepStrategies.js +5 -0
  261. package/dist/lockstepStrategyFixtures.js +136 -0
  262. package/dist/lockstepTerminal.js +89 -0
  263. package/dist/lockstepTerminalPorts.js +4 -0
  264. package/dist/lockstepTransport.js +772 -0
  265. package/dist/lockstepTransportConfig.js +31 -0
  266. package/dist/lockstepWireRoster.js +33 -0
  267. package/dist/matchRoomProvider.js +31 -0
  268. package/dist/matchRooms.js +18 -0
  269. package/dist/membershipObserver.js +46 -0
  270. package/dist/moderation.js +97 -0
  271. package/dist/movementSpecials.js +103 -0
  272. package/dist/ownership.js +16 -0
  273. package/dist/ownershipWithdrawal.js +17 -0
  274. package/dist/pcg32.js +95 -0
  275. package/dist/ports.d.ts +1241 -0
  276. package/dist/ports.js +10 -0
  277. package/dist/quaternion.js +69 -0
  278. package/dist/react.d.ts +406 -0
  279. package/dist/react.js +108 -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 +242 -0
  283. package/dist/reaperSchemas.js +41 -0
  284. package/dist/reaperWorkflow.js +69 -0
  285. package/dist/recovery.js +188 -0
  286. package/dist/recoverySeats.js +25 -0
  287. package/dist/replay.d.ts +273 -0
  288. package/dist/replay.js +484 -0
  289. package/dist/replayPorts.js +4 -0
  290. package/dist/replayRecording.js +66 -0
  291. package/dist/replaySchema.js +156 -0
  292. package/dist/replayStorage.d.ts +149 -0
  293. package/dist/replayStorage.js +484 -0
  294. package/dist/reservationBatch.js +421 -0
  295. package/dist/reservationSchemas.js +16 -0
  296. package/dist/reservations.js +258 -0
  297. package/dist/reservePort.js +68 -0
  298. package/dist/resolvedOptions.js +3 -0
  299. package/dist/room.d.ts +1006 -0
  300. package/dist/room.js +283 -0
  301. package/dist/roomAccessSweep.js +94 -0
  302. package/dist/roomAppCommandControl.js +58 -0
  303. package/dist/roomAuthoringStrategy.js +16 -0
  304. package/dist/roomErasure.js +197 -0
  305. package/dist/roomPoolRuntimeDefaults.js +23 -0
  306. package/dist/roomPoolSelection.js +18 -0
  307. package/dist/roomPoolTopology.js +211 -0
  308. package/dist/rpc.d.ts +551 -0
  309. package/dist/rpc.js +111 -0
  310. package/dist/rpcClient.js +151 -0
  311. package/dist/rpcRoutes.js +27 -0
  312. package/dist/runtime.js +1122 -0
  313. package/dist/schemaHistory.js +97 -0
  314. package/dist/seatStore.js +150 -0
  315. package/dist/seatStrategyFixtures.js +51 -0
  316. package/dist/seatSubject.js +31 -0
  317. package/dist/seats.js +129 -0
  318. package/dist/serverSession.js +810 -0
  319. package/dist/serverSessionConfig.js +42 -0
  320. package/dist/sessionAdmission.js +52 -0
  321. package/dist/sidecarAdmission.js +102 -0
  322. package/dist/sidecarConfig.js +115 -0
  323. package/dist/sidecarConfigPublication.js +63 -0
  324. package/dist/sidecarHostListener.js +207 -0
  325. package/dist/sidecarIpc.js +204 -0
  326. package/dist/sidecarPeer.js +309 -0
  327. package/dist/sidecarProcessPort.js +27 -0
  328. package/dist/sidecarRuntime.js +167 -0
  329. package/dist/sidecarSelection.js +141 -0
  330. package/dist/sidecarWire.js +177 -0
  331. package/dist/sidecarWrites.js +162 -0
  332. package/dist/simulation.d.ts +391 -0
  333. package/dist/simulation.js +281 -0
  334. package/dist/simulationAuthoring.js +28 -0
  335. package/dist/simulationBytes.js +26 -0
  336. package/dist/simulationConformance.js +304 -0
  337. package/dist/simulationInputHistoryCapture.js +34 -0
  338. package/dist/simulationInputHistoryWire.js +192 -0
  339. package/dist/simulationOptionsWire.js +77 -0
  340. package/dist/simulationRecoveryWire.js +133 -0
  341. package/dist/simulationReplay.js +126 -0
  342. package/dist/simulationSnapshotWire.js +111 -0
  343. package/dist/simulationState.js +177 -0
  344. package/dist/snapshotBlob.js +125 -0
  345. package/dist/snapshotBlobCleanup.js +92 -0
  346. package/dist/snapshotBlobIndex.js +37 -0
  347. package/dist/snapshotBudget.js +79 -0
  348. package/dist/snapshotChain.js +184 -0
  349. package/dist/snapshotErasure.js +171 -0
  350. package/dist/snapshotInspection.js +104 -0
  351. package/dist/snapshotSegmentBlobs.js +57 -0
  352. package/dist/snapshotUploads.js +165 -0
  353. package/dist/socketTransport.js +252 -0
  354. package/dist/spatial.js +103 -0
  355. package/dist/spectatorPolicy.js +25 -0
  356. package/dist/spectatorProducer.js +88 -0
  357. package/dist/startFailureCause.js +3 -0
  358. package/dist/stateCodec.js +657 -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 +181 -0
  364. package/dist/streamFraming.js +121 -0
  365. package/dist/streamTransport.js +265 -0
  366. package/dist/subjectAdmission.js +49 -0
  367. package/dist/subjectPrivacy.js +280 -0
  368. package/dist/subjectPrivacyBinding.js +89 -0
  369. package/dist/systemManifest.js +181 -0
  370. package/dist/tables.js +158 -0
  371. package/dist/testHarness.js +88 -0
  372. package/dist/testing.d.ts +3684 -0
  373. package/dist/testing.js +220 -0
  374. package/dist/testingPorts.js +270 -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 +216 -0
  379. package/dist/transform3d.js +117 -0
  380. package/dist/transformCollection.js +23 -0
  381. package/dist/transformCollection3d.js +23 -0
  382. package/dist/transformCollectionCore.js +155 -0
  383. package/dist/transformFrames.js +120 -0
  384. package/dist/transformPrediction3d.js +126 -0
  385. package/dist/transformRules.js +122 -0
  386. package/dist/transformSchemas.js +19 -0
  387. package/dist/transport.js +31 -0
  388. package/dist/transportAuthoring.js +28 -0
  389. package/dist/transportCleanup.js +21 -0
  390. package/dist/transportConformance.js +123 -0
  391. package/dist/transportConnector.js +81 -0
  392. package/dist/transportEndpoints.js +37 -0
  393. package/dist/transportsServer.d.ts +5515 -0
  394. package/dist/transportsServer.js +6 -0
  395. package/dist/viewProjection.js +15 -0
  396. package/dist/web.d.ts +2286 -0
  397. package/dist/web.js +517 -0
  398. package/dist/webTransportClient.js +172 -0
  399. package/dist/wire.d.ts +992 -0
  400. package/dist/wire.js +491 -0
  401. package/dist/withdrawalPort.js +27 -0
  402. package/dist/world.d.ts +1894 -0
  403. package/dist/world.js +332 -0
  404. package/dist/worldActorReceipts.js +47 -0
  405. package/dist/worldActorTransferSnapshot.js +13 -0
  406. package/dist/worldAdmissionPending.js +7 -0
  407. package/dist/worldBoundaryCoordinator.js +147 -0
  408. package/dist/worldCatalog.js +80 -0
  409. package/dist/worldCellAllocation.js +202 -0
  410. package/dist/worldCellDestination.js +67 -0
  411. package/dist/worldCells.js +488 -0
  412. package/dist/worldChange.js +31 -0
  413. package/dist/worldClient.js +663 -0
  414. package/dist/worldClientControl.js +140 -0
  415. package/dist/worldClientPendingInput.js +15 -0
  416. package/dist/worldClientRpc.js +132 -0
  417. package/dist/worldClientRpcRoutes.js +42 -0
  418. package/dist/worldClientSchemas.js +27 -0
  419. package/dist/worldCommands.js +139 -0
  420. package/dist/worldData.js +41 -0
  421. package/dist/worldDefaultBinding.js +376 -0
  422. package/dist/worldDefaultGroupAdmission.js +81 -0
  423. package/dist/worldDefaultGroupAppServices.js +30 -0
  424. package/dist/worldDefaultGroupCompensation.js +108 -0
  425. package/dist/worldDefaultGroupContinuation.js +95 -0
  426. package/dist/worldDefaultGroupControl.js +71 -0
  427. package/dist/worldDefaultGroupMembers.js +84 -0
  428. package/dist/worldDefaultGroups.js +20 -0
  429. package/dist/worldDefaultPending.js +78 -0
  430. package/dist/worldDefaultService.js +244 -0
  431. package/dist/worldEntities.js +2979 -0
  432. package/dist/worldEntityCodec.js +20 -0
  433. package/dist/worldEntityHandoffView.js +153 -0
  434. package/dist/worldGeometry.js +169 -0
  435. package/dist/worldGhostAdmission.js +64 -0
  436. package/dist/worldGhostDestination.js +117 -0
  437. package/dist/worldGhostGateway.js +131 -0
  438. package/dist/worldGhostHandshake.js +107 -0
  439. package/dist/worldGhostHost.js +41 -0
  440. package/dist/worldGhostIngress.js +131 -0
  441. package/dist/worldGhostNeighborhood.js +69 -0
  442. package/dist/worldGhostNeighbors.js +85 -0
  443. package/dist/worldGhostOutbound.js +109 -0
  444. package/dist/worldGhostPublisher.js +215 -0
  445. package/dist/worldGhostReceiver.js +212 -0
  446. package/dist/worldGhostSender.js +145 -0
  447. package/dist/worldGhostSocket.js +77 -0
  448. package/dist/worldGhostWire.js +171 -0
  449. package/dist/worldGroupCommand.js +48 -0
  450. package/dist/worldGroupDeadline.js +114 -0
  451. package/dist/worldGroupPreparation.js +114 -0
  452. package/dist/worldGroupReadyControl.js +127 -0
  453. package/dist/worldGroupSupervisor.js +119 -0
  454. package/dist/worldHandoffMetrics.js +58 -0
  455. package/dist/worldHandoffView.js +99 -0
  456. package/dist/worldHostSource.js +68 -0
  457. package/dist/worldInspectEndpoint.js +249 -0
  458. package/dist/worldInspection.js +108 -0
  459. package/dist/worldInstanceAdmission.js +30 -0
  460. package/dist/worldInstanceAllocation.js +115 -0
  461. package/dist/worldInstanceDestination.js +63 -0
  462. package/dist/worldInstanceExpiry.js +281 -0
  463. package/dist/worldInstanceExpirySupervisor.js +87 -0
  464. package/dist/worldInstanceLifecycle.js +102 -0
  465. package/dist/worldInstanceState.js +51 -0
  466. package/dist/worldInstances.js +477 -0
  467. package/dist/worldJoin.js +55 -0
  468. package/dist/worldLayers.js +150 -0
  469. package/dist/worldLeases.js +77 -0
  470. package/dist/worldManifest.js +24 -0
  471. package/dist/worldMovement.js +62 -0
  472. package/dist/worldPersistence.js +133 -0
  473. package/dist/worldProjection.js +220 -0
  474. package/dist/worldReact.js +109 -0
  475. package/dist/worldRecoveryActor.js +34 -0
  476. package/dist/worldReturnAnchor.js +48 -0
  477. package/dist/worldRoomHooks.js +56 -0
  478. package/dist/worldRoomPool.js +26 -0
  479. package/dist/worldRoomSteps.js +132 -0
  480. package/dist/worldSeatBinding.js +35 -0
  481. package/dist/worldServer.d.ts +6936 -0
  482. package/dist/worldServer.js +48 -0
  483. package/dist/worldSourceSeatPending.js +8 -0
  484. package/dist/worldStrategyFixtures.js +163 -0
  485. package/dist/worldTesting.js +26 -0
  486. package/dist/worldTransitionDefaults.js +197 -0
  487. package/dist/worldTransitionExecutor.js +518 -0
  488. package/dist/worldTransitionGroup.js +112 -0
  489. package/dist/worldTransitionPhysicalSteps.js +39 -0
  490. package/dist/worldTransitionResolver.js +227 -0
  491. package/dist/worldTransitionSeatGroup.js +63 -0
  492. package/dist/worldTransitionSeats.js +259 -0
  493. package/dist/worldTransitionState.js +94 -0
  494. package/dist/worldTransitions.js +100 -0
  495. package/package.json +189 -4
@@ -0,0 +1,91 @@
1
+ import { Schema as e } from "effect";
2
+ // src/geometryInspection.ts
3
+ var t = e.String.pipe(e.check(e.isMinLength(1)), e.check(e.isMaxLength(191)), e.check(e.makeFilter((e) => e.trim() === e))), n = e.Number.pipe(e.check(e.isInt()), e.check(e.isGreaterThanOrEqualTo(0)), e.check(e.makeFilter(Number.isSafeInteger))), r = n.pipe(e.check(e.isGreaterThan(0))), i = e.Int.pipe(e.check(e.makeFilter((e) => e >= -2147483648 && e <= 2147483647))), a = e.Literals([
4
+ "2d-tiles",
5
+ "2d-heightfield",
6
+ "3d-shapes",
7
+ "3d-voxel"
8
+ ]), o = e.String.pipe(e.check(e.makeFilter((e) => Number.isFinite(Date.parse(e))))), s = e.Literals([
9
+ "versions",
10
+ "deltas",
11
+ "journal",
12
+ "migrations",
13
+ "archives"
14
+ ]), c = e.Struct({
15
+ worldId: t,
16
+ kind: a,
17
+ staticSource: e.Literals([
18
+ "cms",
19
+ "imported",
20
+ "procedural"
21
+ ]),
22
+ chunkSizeRaw: r,
23
+ dynamicEnabled: e.Boolean,
24
+ migrationStrategy: e.Literals(["default", "custom"]),
25
+ compactionStrategy: e.Literals(["default", "custom"]),
26
+ collisionDeriveStrategy: e.Literals(["default", "custom"]),
27
+ navDeriveStrategy: e.Literals(["default", "custom"]),
28
+ opValidatorStrategy: e.Literals(["default", "custom"]),
29
+ applyOpStrategy: e.Literals(["default", "custom"]),
30
+ overlapTestBudget: r,
31
+ rayCellBudget: r,
32
+ deltaByteBudget: r,
33
+ preparedChunkBudget: r,
34
+ preparedByteBudget: r,
35
+ marginChunks: n
36
+ }), l = e.Struct({
37
+ cx: i,
38
+ cy: i,
39
+ cz: e.optional(i)
40
+ }), u = e.Struct({
41
+ id: t,
42
+ worldId: t,
43
+ kind: a,
44
+ version: t,
45
+ coordinates: e.NullOr(l),
46
+ revision: e.NullOr(n),
47
+ changed: e.NullOr(e.Boolean),
48
+ manifestChunks: e.NullOr(r),
49
+ migration: e.NullOr(e.Struct({
50
+ fromVersion: t,
51
+ fromRevision: n,
52
+ decision: e.Literals([
53
+ "kept",
54
+ "discarded",
55
+ "custom"
56
+ ]),
57
+ staticChanged: e.Boolean
58
+ })),
59
+ observedAt: o
60
+ }), d = e.Struct({
61
+ installed: e.Boolean,
62
+ sourceBound: e.Boolean,
63
+ migrationsInstalled: e.Boolean,
64
+ assetUrlsInstalled: e.Boolean,
65
+ archivesInstalled: e.Boolean,
66
+ retentionInstalled: e.Boolean,
67
+ adminControlsInstalled: e.Boolean,
68
+ page: e.Struct({
69
+ tenantId: t,
70
+ table: s,
71
+ after: e.NullOr(t),
72
+ nextAfter: e.NullOr(t)
73
+ }),
74
+ configuration: e.Array(c).pipe(e.check(e.isMaxLength(256))),
75
+ rows: e.Array(u).pipe(e.check(e.isMaxLength(50)))
76
+ }).pipe(e.check(e.makeFilter((e) => {
77
+ if (e.installed !== e.configuration.length > 0 || e.sourceBound && !e.installed || e.migrationsInstalled && !e.installed || e.assetUrlsInstalled && !e.installed || e.archivesInstalled && !e.installed || e.retentionInstalled && !e.archivesInstalled || e.adminControlsInstalled && !e.installed || new Set(e.configuration.map((e) => e.worldId)).size !== e.configuration.length || new Set(e.rows.map((e) => e.id)).size !== e.rows.length || !e.installed && (e.rows.length || e.page.after !== null || e.page.nextAfter !== null) || e.page.table === "migrations" && !e.migrationsInstalled && (e.rows.length || e.page.after !== null || e.page.nextAfter !== null) || e.page.table === "archives" && !e.archivesInstalled && (e.rows.length || e.page.after !== null || e.page.nextAfter !== null)) return !1;
78
+ for (let t of e.configuration) if (t.worldId.length > 96 || t.chunkSizeRaw > 2147483647 || t.deltaByteBudget < 512 || t.deltaByteBudget > 16777216 || t.preparedChunkBudget > 65536 || t.preparedByteBudget < 512 || t.preparedByteBudget > 268435456 || t.marginChunks > 64 || t.rayCellBudget > 1048576 || t.overlapTestBudget > 1048576) return !1;
79
+ for (let t = 0; t < e.rows.length; t++) {
80
+ let n = e.rows[t], r = n.kind === "3d-shapes" || n.kind === "3d-voxel";
81
+ if (n.worldId.length > 96 || n.version.length > 96 || n.manifestChunks !== null && n.manifestChunks > 4096 || e.page.after !== null && n.id <= e.page.after || t > 0 && e.rows[t - 1].id >= n.id) return !1;
82
+ if (e.page.table === "migrations") {
83
+ if (n.coordinates === null || Object.hasOwn(n.coordinates, "cz") !== r || n.revision === null || n.revision > 1 || n.changed !== null || n.manifestChunks !== null || n.migration === null || n.migration.fromVersion.length > 96 || n.migration.fromVersion === n.version || n.migration.decision === "kept" && n.migration.staticChanged || n.migration.decision === "discarded" && !n.migration.staticChanged) return !1;
84
+ } else if (n.migration !== null) return !1;
85
+ else if (e.page.table === "versions") {
86
+ if (n.coordinates !== null || n.revision !== null || n.changed !== null || n.manifestChunks === null) return !1;
87
+ } else if (n.coordinates === null || n.manifestChunks !== null || n.revision === null || Object.hasOwn(n.coordinates, "cz") !== r || (e.page.table === "deltas" ? n.revision < 1 || n.changed !== null : n.changed === null || n.changed && n.revision < 1)) return !1;
88
+ }
89
+ return e.page.nextAfter === null || e.rows.length === 50 && e.page.nextAfter === e.rows.at(-1)?.id;
90
+ }))), f = (t) => e.decodeUnknownSync(d)(t);
91
+ export { d as GeometryInspectionSchema, s as GeometryInspectionTableSchema, f as decodeGeometryInspection };
@@ -0,0 +1,120 @@
1
+ import { ProtocolError as e } from "./errors.js";
2
+ import { dataStoreGeometryPersistence as t } from "./geometryPersistence.js";
3
+ import { dataStoreRoomHostGeometry as n } from "./geometryHostDirectory.js";
4
+ import { dataStoreGeometryManifest as r } from "./geometryManifest.js";
5
+ import { dataStoreGeometryAdministration as i } from "./geometryAdministration.js";
6
+ import { makeRoomGeometryStreams as a } from "./geometryHostStreams.js";
7
+ import { makeRoomGeometryMutations as o } from "./geometryHostMutations.js";
8
+ import { makeGeometryChunkLeases as s } from "./geometryChunkLeases.js";
9
+ import { makeRoomGeometryRollbackSource as c } from "./geometryRollbackSource.js";
10
+ import { dataStoreGeometryRollbackPreparation as l } from "./geometryRollbackStore.js";
11
+ import { worldEntityGeometrySubject as u } from "./geometryWorldEntitySubject.js";
12
+ import { Effect as d } from "effect";
13
+ import { ConnectionRegistry as f } from "@voltro/kv/connection";
14
+ import { HotStore as p, layerRoutedHotRedis as m } from "@voltro/kv/hot";
15
+ // src/geometryInstall.ts
16
+ function h(t) {
17
+ throw new e({ detail: t });
18
+ }
19
+ var g = (e) => {
20
+ if (!e || !Array.isArray(e.worlds) || !e.worlds.length || typeof e.epochNow != "function" || !e.staticSource || typeof e.select != "function" || [
21
+ "persistence",
22
+ "cells",
23
+ "manifestRoot",
24
+ "manifestChunk"
25
+ ].some((t) => typeof e.rights?.[t] != "function") || typeof e.privacy?.quiesceSubject != "function" || typeof e.privacy.eraseSubjectContent != "function") return h("Geometry installation needs Worlds, a clock, a static source, version selection, rights and privacy policies");
26
+ if ((e.edits || e.rollback) && !e.hotConnection) return h("Geometry edits and rollback need the shared Redis connection for chunk leases");
27
+ let g = (n) => t(n, {
28
+ worlds: e.worlds,
29
+ staticSource: e.staticSource,
30
+ epochNow: e.epochNow,
31
+ authorize: e.rights.persistence,
32
+ quiesceSubject: e.privacy.quiesceSubject,
33
+ eraseSubjectContent: e.privacy.eraseSubjectContent
34
+ }), _ = (t) => r(t, {
35
+ authorizeRoot: e.rights.manifestRoot,
36
+ authorizeChunk: e.rights.manifestChunk
37
+ }), v = (e) => e.replace(/[^A-Za-z0-9._:-]/g, "_") + ":geometry", y = (e) => ("rooms-" + e.replace(/[^A-Za-z0-9:_-]/g, "_")).slice(0, 86) + ":geometry";
38
+ return Object.freeze({
39
+ bindGeometry: async (t) => {
40
+ if (e.administration && !t.geometryControl) return h("Geometry administration needs roomsPlugin({ geometryAdminControls: true })");
41
+ let n = g(t.store), r = e.administration && t.geometryControl ? i(t.store, {
42
+ control: t.geometryControl,
43
+ authorize: e.administration.authorize,
44
+ worlds: t.worlds,
45
+ ...e.administration.maxChunks === void 0 ? {} : { maxChunks: e.administration.maxChunks },
46
+ ...e.administration.maxScannedChunks === void 0 ? {} : { maxScannedChunks: e.administration.maxScannedChunks }
47
+ }) : void 0;
48
+ return Object.freeze({
49
+ source: Object.freeze({
50
+ worlds: t.worlds,
51
+ service: n,
52
+ manifest: _(t.store),
53
+ ...r ? { administration: r } : {},
54
+ ...e.reads ? { readGrants: e.reads } : {}
55
+ }),
56
+ release: async () => {}
57
+ });
58
+ },
59
+ hostGeometry: async (t, r) => {
60
+ let i = t.store, b = g(i), x = e.leaseTtlMs ?? 1e4, S;
61
+ if (e.hotConnection) {
62
+ let n = e.hotConnection;
63
+ if (S = await t.runEffect(p.pipe(d.provide(m({
64
+ consumer: v(r),
65
+ connection: n
66
+ })), d.provideService(f, t.registry))), S.capabilities.atomicMulti !== !0) return h("Geometry chunk leases need an atomic HotStore");
67
+ }
68
+ let C = (e) => s(S, {
69
+ namespace: y(r),
70
+ tenantId: e.scope.tenantId,
71
+ ttlMs: x
72
+ });
73
+ return n(i, {
74
+ worlds: e.worlds,
75
+ epochNow: e.epochNow,
76
+ maxListedCells: e.maxListedCells ?? 64,
77
+ authorize: e.rights.cells,
78
+ persistence: b,
79
+ select: e.select,
80
+ ...e.streams ? { streams: (t, n) => {
81
+ let r = e.streams, o = r.resolveSubject ?? u(i), s = r.recovery;
82
+ return a(t, n, {
83
+ source: _(i),
84
+ authorizeRecipient: r.authorizeRecipient,
85
+ authorizeChunk: r.authorizeChunk,
86
+ resolveSubject: o,
87
+ ...s ? { recovery: {
88
+ manifest: _(i),
89
+ persistence: b,
90
+ staticSource: e.staticSource,
91
+ resolveSubject: o,
92
+ authorize: s.authorize,
93
+ ...s.requestChannel === void 0 ? {} : { requestChannel: s.requestChannel },
94
+ ...s.responseChannel === void 0 ? {} : { responseChannel: s.responseChannel }
95
+ } } : {}
96
+ });
97
+ } } : {},
98
+ ...e.edits ? { mutations: (t, n) => o(t, n, {
99
+ persistence: b,
100
+ leases: C(t),
101
+ authorizeIntent: e.edits.authorizeIntent,
102
+ authorizeRecipient: e.edits.authorizeRecipient,
103
+ now: e.edits.now,
104
+ resolveSubject: e.edits.resolveSubject ?? u(i)
105
+ }) } : {},
106
+ ...e.rollback ? { rollback: c({
107
+ authorize: e.rollback.authorize,
108
+ persistence: b,
109
+ preparation: l(i, {
110
+ persistence: b,
111
+ staticSource: e.staticSource,
112
+ authorize: e.rollback.prepare
113
+ }),
114
+ leases: (e) => d.succeed(C(e))
115
+ }) } : {}
116
+ });
117
+ }
118
+ });
119
+ };
120
+ export { g as sqlRoomsGeometry };
@@ -0,0 +1,20 @@
1
+ import { ProtocolError as e } from "./errors.js";
2
+ import { geometryOwnData as t } from "./geometryTileCodec.js";
3
+ import { captureGeometryReceipt as n, geometryPersistenceInteger as r, geometryPersistenceSha as i } from "./geometryPersistenceData.js";
4
+ // src/geometryJournalArchiveData.ts
5
+ var a = (e) => {
6
+ let a = t(e, [
7
+ "receipt",
8
+ "patchSha256",
9
+ "size"
10
+ ]);
11
+ return Object.freeze({
12
+ receipt: n(a.receipt),
13
+ patchSha256: i(a.patchSha256),
14
+ size: r(a.size, 16, 16777216)
15
+ });
16
+ }, o = (t, n) => {
17
+ let r = t.scope;
18
+ if (n.kind !== r.kind || n.worldId !== r.worldId || n.version !== r.version || n.layerSetId !== r.layerSetId || n.cx !== r.cx || n.cy !== r.cy || n.cz !== r.cz || n.baseRevision !== t.baseRevision || n.revision !== t.revision || n.changed !== t.changed || n.blobSha256 !== t.blobSha256 || n.contentSha256 !== t.contentSha256) throw new e({ detail: "Geometry journal archive differs from its native receipt" });
19
+ };
20
+ export { o as assertGeometryJournalPatchReceipt, a as captureGeometryJournalArchiveReference };
@@ -0,0 +1,329 @@
1
+ import { BudgetExceeded as e, ProtocolError as t } from "./errors.js";
2
+ import { captureSimulationBytes as n } from "./simulationBytes.js";
3
+ import { geometryOwnData as r } from "./geometryTileCodec.js";
4
+ import { captureGeometryOwner as i, captureGeometryPersistenceScope as a, captureGeometryPrivacyTarget as o, captureGeometryReceipt as s, captureGeometrySubject as c, geometryPersistenceId as l, geometryPersistenceInteger as u } from "./geometryPersistenceData.js";
5
+ import { GEO_JOURNAL_ARCHIVES_TABLE as d, geometryJournalArchivesTable as f } from "./geometryJournalArchiveTable.js";
6
+ import { decodeGeometryPatch as p } from "./geometryPatch.js";
7
+ import { assertRoomSubjectAdmission as m } from "./subjectAdmission.js";
8
+ import { assertGeometryJournalPatchReceipt as h, captureGeometryJournalArchiveReference as g } from "./geometryJournalArchiveData.js";
9
+ import { captureRoomSnapshotEffectRunner as _ } from "./snapshotBlobIndex.js";
10
+ import { assertGeometryPrivacyFence as v } from "./geometryPrivacyFence.js";
11
+ import { geometryPersistenceDigest as y, geometryPersistenceScopeKey as b } from "./geometryPersistenceCapture.js";
12
+ import { GEO_JOURNAL_TABLE as x } from "./geometryPersistence.js";
13
+ import { and as S, eq as C, generateId as w } from "@voltro/database";
14
+ import { Context as T, Effect as E, Layer as D } from "effect";
15
+ // src/geometryJournalArchiveIndex.ts
16
+ var O = class extends T.Service()("@voltro/GeometryJournalArchiveIndexPort") {}, k = () => new t({ detail: "Geometry durable journal archive index remains unconfirmed" }), A = (e, t) => JSON.stringify(e) === JSON.stringify(t), j = (e, t) => y(JSON.stringify([e.tenantId, t])), M = (e, t) => S(C("tenantId", e.tenantId), C("scopeKey", b(e)), C("requestKey", j(e, t))), N = (e) => {
17
+ if (e.releasedAt === null) return !1;
18
+ let t = e.releasedAt, n = t instanceof Date ? t.getTime() : typeof t == "string" ? Date.parse(t) : NaN;
19
+ if (!Number.isSafeInteger(n) || n < 0 || n > 864e13) throw k();
20
+ return !0;
21
+ }, P = (e) => S(C("tenantId", e.tenantId), C("subjectId", e.subject.id), C("subjectKind", e.subject.kind)), F = (e) => D.succeed(O, e), I = (t, f) => {
22
+ let T = r(f, [
23
+ "archive",
24
+ "epochNow",
25
+ "authorize",
26
+ "quiesceSubject",
27
+ "maxPatchBytes",
28
+ "maxPrivacyRows",
29
+ "maxPrivacyBytes"
30
+ ], [
31
+ "archive",
32
+ "epochNow",
33
+ "authorize",
34
+ "quiesceSubject"
35
+ ]), D = r(T.archive, [
36
+ "store",
37
+ "load",
38
+ "release"
39
+ ]), O = T.epochNow, F = T.authorize, I = T.quiesceSubject, L = (e, t, n, r) => Object.hasOwn(T, e) ? u(T[e], n, r) : t, R = L("maxPatchBytes", 262144, 512, 16777216), z = L("maxPrivacyRows", 4096, 1, 65536), B = L("maxPrivacyBytes", 16777216, 512, 268435456);
40
+ if (Object.values(D).some((e) => typeof e != "function") || typeof O != "function" || typeof F != "function" || typeof I != "function") throw k();
41
+ let V = D.store.bind(T.archive), H = D.load.bind(T.archive), U = D.release.bind(T.archive), W = F, G = I, K = O, q = (e, t, n, r = !1, i = 2) => e.query({
42
+ table: t,
43
+ predicate: n,
44
+ order: [{
45
+ column: "id",
46
+ direction: "asc"
47
+ }],
48
+ take: i,
49
+ skip: void 0,
50
+ projection: void 0,
51
+ ...r ? { lock: "update" } : {}
52
+ }), J = async (e, t) => {
53
+ if (!E.isEffect(t)) throw k();
54
+ return e(t);
55
+ }, Y = (t) => E.flatMap(E.context(), (n) => E.uninterruptible(E.tryPromise({
56
+ try: () => t(_(n)),
57
+ catch: (t) => t instanceof e ? t : k()
58
+ }))), X = async (e, t, n) => {
59
+ if (await J(e, W(t, n)) !== void 0) throw k();
60
+ }, Z = (e, t, r, a) => {
61
+ let o = s(e.receipt), u = i(e.owner), d = c({
62
+ id: e.subjectId,
63
+ kind: e.subjectKind
64
+ }), f = n(e.patch, R, "geometryJournalArchiveIndexPatchBytes"), m = f.length ? y(f) : a?.patchSha256, g = f.length || a?.size;
65
+ if (!m || g === void 0 || g > R || a && !A(a.receipt, o) || !A(o.scope, t) || o.requestId !== r || e.tenantId !== t.tenantId || e.scopeKey !== b(t) || e.requestKey !== j(t, r) || e.requestDigest !== y(JSON.stringify([
66
+ t,
67
+ u,
68
+ d,
69
+ r,
70
+ m
71
+ ]))) throw k();
72
+ return f.length && h(o, p(f, {
73
+ maxBytes: R,
74
+ maxMetadataBytes: Math.min(4096, R - 16)
75
+ }).metadata), {
76
+ journalId: l(e.id),
77
+ receipt: o,
78
+ patch: f,
79
+ patchSha256: m,
80
+ patchSize: g,
81
+ subject: d,
82
+ requestDigest: y(JSON.stringify([
83
+ t,
84
+ u,
85
+ d,
86
+ r,
87
+ m
88
+ ]))
89
+ };
90
+ }, Q = (e, t, n) => {
91
+ let r = g(e.archive);
92
+ if (e.tenantId !== t.tenantId || e.scopeKey !== b(t) || e.requestKey !== j(t, n) || !A(r.receipt.scope, t) || r.receipt.requestId !== n || r.size > R) throw k();
93
+ return l(e.id), l(e.journalId), N(e), c({
94
+ id: e.subjectId,
95
+ kind: e.subjectKind
96
+ }), r;
97
+ }, $ = (e, t, n, r) => {
98
+ let i = Q(e, n, r);
99
+ if (e.journalId !== t.journalId || e.requestDigest !== t.requestDigest || e.subjectId !== t.subject.id || e.subjectKind !== t.subject.kind || !A(i.receipt, t.receipt) || i.patchSha256 !== t.patchSha256 || i.size !== t.patchSize) throw k();
100
+ return i;
101
+ };
102
+ return Object.freeze({
103
+ archive: (e, n) => {
104
+ let r, i;
105
+ try {
106
+ r = a(e), i = l(n);
107
+ } catch {
108
+ return E.fail(k());
109
+ }
110
+ return Y(async (e) => {
111
+ await X(e, "archive", r);
112
+ let n = await t.transactional(async (e) => {
113
+ let t = await q(e, x, M(r, i)), n = await q(e, d, M(r, i));
114
+ if (t.length !== 1 || n.length > 1 || n.length && N(n[0])) throw k();
115
+ let a = n.length ? Q(n[0], r, i) : void 0, o = Z(t[0], r, i, a);
116
+ return await m(e, {
117
+ tenantId: r.tenantId,
118
+ subjectId: o.subject.id
119
+ }), {
120
+ original: o,
121
+ ref: n.length ? $(n[0], o, r, i) : null
122
+ };
123
+ });
124
+ if (n.ref) {
125
+ let t = await J(e, H(n.ref));
126
+ if (y(t) !== n.ref.patchSha256) throw k();
127
+ return await X(e, "archive", r), n.ref;
128
+ }
129
+ if (!n.original.patch.length) throw k();
130
+ let a = g(await J(e, V(n.original.receipt, n.original.patch)));
131
+ if (!A(a.receipt, n.original.receipt) || a.patchSha256 !== y(n.original.patch) || a.size !== n.original.patch.length) throw k();
132
+ return await X(e, "archive", r), t.transactional(async (e) => {
133
+ let t = await q(e, x, M(r, i), !0);
134
+ if (t.length !== 1) throw k();
135
+ let o = Z(t[0], r, i, a);
136
+ if (await m(e, {
137
+ tenantId: r.tenantId,
138
+ subjectId: o.subject.id
139
+ }), o.journalId !== n.original.journalId || o.requestDigest !== n.original.requestDigest) throw k();
140
+ let s = await q(e, d, M(r, i), !0);
141
+ if (s.length > 1) throw k();
142
+ if (s.length) {
143
+ if (N(s[0])) throw k();
144
+ return $(s[0], o, r, i);
145
+ }
146
+ return await e.insert(d, {
147
+ id: w({
148
+ kind: "typeid",
149
+ prefix: "garch"
150
+ }, d),
151
+ tenantId: r.tenantId,
152
+ journalId: o.journalId,
153
+ scopeKey: b(r),
154
+ requestKey: j(r, i),
155
+ requestDigest: o.requestDigest,
156
+ subjectId: o.subject.id,
157
+ subjectKind: o.subject.kind,
158
+ archive: a,
159
+ createdAt: new Date(u(K(), 0, 864e13)),
160
+ releasedAt: null
161
+ }), a;
162
+ });
163
+ });
164
+ },
165
+ load: (e, n) => {
166
+ let r, i;
167
+ try {
168
+ r = a(e), i = l(n);
169
+ } catch {
170
+ return E.fail(k());
171
+ }
172
+ return Y(async (e) => {
173
+ await X(e, "load", r);
174
+ let n = await q(t, x, M(r, i)), a = await q(t, d, M(r, i));
175
+ if (n.length !== 1 || a.length !== 1 || N(a[0])) throw k();
176
+ let o = Q(a[0], r, i), s = $(a[0], Z(n[0], r, i, o), r, i), c = await J(e, H(s));
177
+ if (y(c) !== s.patchSha256 || c.length !== s.size) throw k();
178
+ return await X(e, "load", r), new Uint8Array(c);
179
+ });
180
+ },
181
+ exportSubject: (n) => {
182
+ let r;
183
+ try {
184
+ r = o(n);
185
+ } catch {
186
+ return E.fail(k());
187
+ }
188
+ return Y(async (n) => {
189
+ await X(n, "export", r);
190
+ let i = await q(t, d, S(P(r), C("releasedAt", null)), !1, z + 1);
191
+ if (i.length > z) throw new e({
192
+ budget: "geometryJournalArchivePrivacyRows",
193
+ limit: z
194
+ });
195
+ let a = 0, o = i.map((t) => {
196
+ let n = g(t.archive);
197
+ if (t.tenantId !== r.tenantId || t.subjectId !== r.subject.id || t.subjectKind !== r.subject.kind || (Q(t, n.receipt.scope, n.receipt.requestId), N(t))) throw k();
198
+ if (a += n.size + new TextEncoder().encode(JSON.stringify(n)).length, a > B) throw new e({
199
+ budget: "geometryJournalArchivePrivacyBytes",
200
+ limit: B
201
+ });
202
+ return {
203
+ reference: n,
204
+ row: t
205
+ };
206
+ }), s = [];
207
+ for (let { reference: e, row: i } of o) {
208
+ let a = await q(t, x, M(e.receipt.scope, e.receipt.requestId));
209
+ if (a.length !== 1) throw k();
210
+ let o = Z(a[0], e.receipt.scope, e.receipt.requestId, e);
211
+ if (!A(o.subject, r.subject) || o.patchSha256 !== e.patchSha256) throw k();
212
+ $(i, o, e.receipt.scope, e.receipt.requestId);
213
+ let c = await J(n, H(e));
214
+ if (y(c) !== e.patchSha256 || c.length !== e.size) throw k();
215
+ s.push(Object.freeze({
216
+ reference: e,
217
+ patch: new Uint8Array(c)
218
+ }));
219
+ }
220
+ return await X(n, "export", r), Object.freeze(s);
221
+ });
222
+ },
223
+ eraseSubject: (n) => {
224
+ let r;
225
+ try {
226
+ r = o(n);
227
+ } catch {
228
+ return E.fail(k());
229
+ }
230
+ return Y(async (n) => {
231
+ if (await X(n, "erase", r), await v(t, r), await J(n, G(r)) !== void 0) throw k();
232
+ let i = await q(t, d, P(r), !1, z + 1), a = await q(t, x, P(r), !1, z + 1);
233
+ if (i.length > z || a.length > z) throw new e({
234
+ budget: "geometryJournalArchivePrivacyRows",
235
+ limit: z
236
+ });
237
+ let o = 0, c = /* @__PURE__ */ new Map();
238
+ for (let e of i) {
239
+ let t = g(e.archive), n = j(t.receipt.scope, t.receipt.requestId);
240
+ if (e.tenantId !== r.tenantId || e.subjectId !== r.subject.id || e.subjectKind !== r.subject.kind || c.has(n)) throw k();
241
+ Q(e, t.receipt.scope, t.receipt.requestId), o += new TextEncoder().encode(JSON.stringify({
242
+ ref: t,
243
+ requestDigest: e.requestDigest
244
+ })).length, c.set(n, {
245
+ row: e,
246
+ ref: t
247
+ });
248
+ }
249
+ let f = a.map((t) => {
250
+ let n = s(t.receipt), i = c.get(j(n.scope, n.requestId)), a = Z(t, n.scope, n.requestId, i?.ref);
251
+ if (t.tenantId !== r.tenantId || !A(a.subject, r.subject)) throw k();
252
+ let l = i ? $(i.row, a, n.scope, n.requestId) : g({
253
+ receipt: a.receipt,
254
+ patchSha256: a.patchSha256,
255
+ size: a.patchSize
256
+ });
257
+ if (o += a.patch.length + new TextEncoder().encode(JSON.stringify(l)).length, o > B) throw new e({
258
+ budget: "geometryJournalArchivePrivacyBytes",
259
+ limit: B
260
+ });
261
+ return {
262
+ original: a,
263
+ ref: l,
264
+ entry: i
265
+ };
266
+ });
267
+ for (let { row: e } of c.values()) if (!f.some((t) => t.original.journalId === e.journalId) && !N(e)) throw k();
268
+ if (o > B) throw new e({
269
+ budget: "geometryJournalArchivePrivacyBytes",
270
+ limit: B
271
+ });
272
+ for (let e of f) await X(n, "erase", r), await v(t, r), e.entry && N(e.entry.row) || await J(n, U(e.ref)), e.entry && await t.transactional(async (t) => {
273
+ await v(t, r);
274
+ let n = await q(t, x, M(e.ref.receipt.scope, e.ref.receipt.requestId), !0), i = await q(t, d, S(P(r), C("id", e.entry.row.id)), !0);
275
+ if (i.length !== 1 || n.length !== 1) throw k();
276
+ let a = Z(n[0], e.ref.receipt.scope, e.ref.receipt.requestId, e.ref);
277
+ $(i[0], a, e.ref.receipt.scope, e.ref.receipt.requestId), N(i[0]) || await t.update(d, l(i[0].id), { releasedAt: new Date(u(K(), 0, 864e13)) });
278
+ });
279
+ await X(n, "erase", r);
280
+ });
281
+ }
282
+ });
283
+ }, L = (e) => {
284
+ let t = r(e, [
285
+ "archive",
286
+ "load",
287
+ "exportSubject",
288
+ "eraseSubject"
289
+ ]);
290
+ if (typeof t.exportSubject != "function" || typeof t.eraseSubject != "function") throw k();
291
+ let n = t.exportSubject.bind(e), i = t.eraseSubject.bind(e), a = (e, t) => {
292
+ let n = r(t, [
293
+ "tenantId",
294
+ "requestId",
295
+ "kind",
296
+ "completed"
297
+ ], [
298
+ "tenantId",
299
+ "requestId",
300
+ "kind"
301
+ ]);
302
+ return o({
303
+ tenantId: n.tenantId,
304
+ requestId: n.requestId,
305
+ subject: {
306
+ id: e,
307
+ kind: n.kind
308
+ }
309
+ });
310
+ };
311
+ return Object.freeze({
312
+ tables: Object.freeze([f]),
313
+ onExport: (e, t) => {
314
+ try {
315
+ return n(a(e, t));
316
+ } catch {
317
+ return E.fail(k());
318
+ }
319
+ },
320
+ onErase: (e, t) => {
321
+ try {
322
+ return i(a(e, t));
323
+ } catch {
324
+ return E.fail(k());
325
+ }
326
+ }
327
+ });
328
+ };
329
+ export { O as GeometryJournalArchiveIndexPort, I as dataStoreGeometryJournalArchiveIndex, F as geometryJournalArchiveIndexLayer, L as geometryJournalArchiveIndexPrivacyHooks };
@@ -0,0 +1,20 @@
1
+ import { id as e, json as t, table as n, text as r, timestamp as i } from "@voltro/database";
2
+ // src/geometryJournalArchiveTable.ts
3
+ var a = "_voltro_geo_journal_archives", o = n(a, {
4
+ id: e({ prefix: "garch" }),
5
+ tenantId: r().maxLength(191),
6
+ journalId: r().maxLength(191),
7
+ scopeKey: r().maxLength(64),
8
+ requestKey: r().maxLength(64),
9
+ requestDigest: r().maxLength(64),
10
+ subjectId: r().maxLength(191),
11
+ subjectKind: r().maxLength(8),
12
+ archive: t(),
13
+ createdAt: i(),
14
+ releasedAt: i().nullable()
15
+ }).unique("byGeometryJournalArchiveRequest", ["tenantId", "requestKey"]).index(["tenantId", "scopeKey"]).index([
16
+ "tenantId",
17
+ "subjectId",
18
+ "subjectKind"
19
+ ]);
20
+ export { a as GEO_JOURNAL_ARCHIVES_TABLE, o as geometryJournalArchivesTable };
@@ -0,0 +1,99 @@
1
+ import { BudgetExceeded as e, ProtocolError as t } from "./errors.js";
2
+ import { captureSimulationBytes as n } from "./simulationBytes.js";
3
+ import { geometryOwnData as r } from "./geometryTileCodec.js";
4
+ import { captureGeometryOwner as i, captureGeometryPersistenceScope as a, captureGeometryReceipt as o, captureGeometrySubject as s, geometryPersistenceId as c, geometryPersistenceInteger as l } from "./geometryPersistenceData.js";
5
+ import { GEO_JOURNAL_ARCHIVES_TABLE as u } from "./geometryJournalArchiveTable.js";
6
+ import { decodeGeometryPatch as d } from "./geometryPatch.js";
7
+ import { assertRoomSubjectAdmission as f } from "./subjectAdmission.js";
8
+ import { assertGeometryJournalPatchReceipt as p, captureGeometryJournalArchiveReference as m } from "./geometryJournalArchiveData.js";
9
+ import { captureRoomSnapshotEffectRunner as h } from "./snapshotBlobIndex.js";
10
+ import { geometryPersistenceDigest as g, geometryPersistenceScopeKey as _ } from "./geometryPersistenceCapture.js";
11
+ import { GEO_JOURNAL_TABLE as v } from "./geometryPersistence.js";
12
+ import { and as y, eq as b } from "@voltro/database";
13
+ import { Context as x, Effect as S, Layer as C } from "effect";
14
+ // src/geometryJournalCompaction.ts
15
+ var w = class extends x.Service()("@voltro/GeometryJournalCompactionPort") {}, T = () => new t({ detail: "Native geometry journal inline compaction remains unconfirmed" }), E = (e) => C.succeed(w, e), D = (t, x) => {
16
+ let C = r(x, [
17
+ "archive",
18
+ "authorize",
19
+ "maxPatchBytes"
20
+ ], ["archive", "authorize"]), w = r(C.archive, [
21
+ "archive",
22
+ "load",
23
+ "exportSubject",
24
+ "eraseSubject"
25
+ ]), E = C.authorize, D = Object.hasOwn(C, "maxPatchBytes") ? l(C.maxPatchBytes, 512, 16777216) : 262144;
26
+ if (Object.values(w).some((e) => typeof e != "function") || typeof E != "function") throw T();
27
+ let O = w.archive.bind(C.archive), k = w.load.bind(C.archive), A = E;
28
+ return Object.freeze({ compact: (r, l) => {
29
+ let x, C;
30
+ try {
31
+ x = a(r), C = c(l);
32
+ } catch {
33
+ return S.fail(T());
34
+ }
35
+ return S.flatMap(S.context(), (r) => S.uninterruptible(S.tryPromise({
36
+ try: async () => {
37
+ let e = h(r), a = async (t) => {
38
+ if (!S.isEffect(t)) throw T();
39
+ return e(t);
40
+ };
41
+ if (await a(A(x, C)) !== void 0) throw T();
42
+ let l = m(await a(O(x, C))), w = n(await a(k(x, C)), D, "geometryJournalCompactionPatchBytes");
43
+ if (JSON.stringify(l.receipt.scope) !== JSON.stringify(x) || l.receipt.requestId !== C || l.size !== w.length || l.patchSha256 !== g(w) || (p(l.receipt, d(w, {
44
+ maxBytes: D,
45
+ maxMetadataBytes: Math.min(4096, D - 16)
46
+ }).metadata), await a(A(x, C)) !== void 0)) throw T();
47
+ return t.transactional(async (e) => {
48
+ let t = y(b("tenantId", x.tenantId), b("scopeKey", _(x)), b("requestKey", g(JSON.stringify([x.tenantId, C])))), r = await e.query({
49
+ table: v,
50
+ predicate: t,
51
+ order: [{
52
+ column: "id",
53
+ direction: "asc"
54
+ }],
55
+ take: 2,
56
+ skip: void 0,
57
+ projection: void 0,
58
+ lock: "update"
59
+ });
60
+ if (r.length !== 1) throw T();
61
+ let a = r[0], d = o(a.receipt), p = i(a.owner), h = s({
62
+ id: a.subjectId,
63
+ kind: a.subjectKind
64
+ }), S = await e.query({
65
+ table: u,
66
+ predicate: t,
67
+ order: [{
68
+ column: "id",
69
+ direction: "asc"
70
+ }],
71
+ take: 2,
72
+ skip: void 0,
73
+ projection: void 0,
74
+ lock: "update"
75
+ });
76
+ if (S.length !== 1) throw T();
77
+ let E = S[0], O = m(E.archive), k = g(JSON.stringify([
78
+ x,
79
+ p,
80
+ h,
81
+ C,
82
+ l.patchSha256
83
+ ])), A = n(a.patch, D, "geometryJournalCompactionPatchBytes");
84
+ if (JSON.stringify(d) !== JSON.stringify(l.receipt) || a.tenantId !== x.tenantId || a.scopeKey !== _(x) || a.requestKey !== g(JSON.stringify([x.tenantId, C])) || a.requestDigest !== k || JSON.stringify(O) !== JSON.stringify(l) || E.journalId !== a.id || E.requestDigest !== k || E.subjectId !== h.id || E.subjectKind !== h.kind) throw T();
85
+ if (await f(e, {
86
+ tenantId: x.tenantId,
87
+ subjectId: h.id
88
+ }), !A.length) return !1;
89
+ if (A.length !== w.length || g(A) !== l.patchSha256) throw T();
90
+ let j = await e.update(v, c(a.id), { patch: /* @__PURE__ */ new Uint8Array() });
91
+ if (!j || n(j.patch, D, "geometryJournalCompactionPatchBytes").length !== 0 || j.requestDigest !== k || JSON.stringify(o(j.receipt)) !== JSON.stringify(d)) throw T();
92
+ return !0;
93
+ });
94
+ },
95
+ catch: (t) => t instanceof e ? t : T()
96
+ })));
97
+ } });
98
+ };
99
+ export { w as GeometryJournalCompactionPort, D as dataStoreGeometryJournalCompaction, E as geometryJournalCompactionLayer };