@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.
- package/CHANGELOG.md +24329 -0
- package/LICENSE +61 -0
- package/README.md +9204 -2
- package/SECURITY.md +56 -0
- package/THIRD-PARTY-NOTICES.md +11322 -0
- package/dist/actor.js +1474 -0
- package/dist/apiBinding.js +678 -0
- package/dist/apiRegistryBinding.js +399 -0
- package/dist/apiReservations.js +433 -0
- package/dist/baselines.js +73 -0
- package/dist/bots.d.ts +1485 -0
- package/dist/bots.js +563 -0
- package/dist/catalog.js +80 -0
- package/dist/checkpointJson.js +24 -0
- package/dist/checkpointStore.js +386 -0
- package/dist/client.js +56 -0
- package/dist/clockSync.js +51 -0
- package/dist/collision.js +156 -0
- package/dist/commandDelivery.js +101 -0
- package/dist/commandRecord.js +11 -0
- package/dist/commandWithdrawal.js +183 -0
- package/dist/connection.js +497 -0
- package/dist/controlCarrier.js +375 -0
- package/dist/controlRegistry.js +79 -0
- package/dist/controlTarget.js +45 -0
- package/dist/controlTransport.js +574 -0
- package/dist/developmentBinding.js +113 -0
- package/dist/directory.js +323 -0
- package/dist/directoryProjection.js +117 -0
- package/dist/errors.d.ts +125 -0
- package/dist/errors.js +53 -0
- package/dist/fixed.d.ts +284 -0
- package/dist/fixed.js +10 -0
- package/dist/fixed32.js +134 -0
- package/dist/fixedCollision.js +60 -0
- package/dist/fixedCollision32.js +109 -0
- package/dist/fixedMath.js +56 -0
- package/dist/fixedRaw.js +11 -0
- package/dist/fixedSlabs.js +34 -0
- package/dist/fixedTrig.js +48 -0
- package/dist/fixedTrig32.js +38 -0
- package/dist/fixedVectors.js +113 -0
- package/dist/fixedVectors32.js +95 -0
- package/dist/fixedWide.js +50 -0
- package/dist/fixedWords.js +46 -0
- package/dist/gateway.js +57 -0
- package/dist/geometry-retention-app/rooms.geometryJournalRetention.workflow.server.tsx +4 -0
- package/dist/geometry-retention-app/rooms.geometryJournalRetention.workflow.tsx +14 -0
- package/dist/geometry-worker/worker.d.mts +2 -0
- package/dist/geometry-worker/worker.mjs +50 -0
- package/dist/geometry.d.ts +2249 -0
- package/dist/geometry.js +40 -0
- package/dist/geometryActivation.js +82 -0
- package/dist/geometryActorInventory.js +108 -0
- package/dist/geometryAdminClient.js +87 -0
- package/dist/geometryAdminData.js +32 -0
- package/dist/geometryAdminFixtures.js +50 -0
- package/dist/geometryAdminPorts.js +5 -0
- package/dist/geometryAdminRpc.js +58 -0
- package/dist/geometryAdminRpcRoutes.js +49 -0
- package/dist/geometryAdminSchemas.js +39 -0
- package/dist/geometryAdministration.js +190 -0
- package/dist/geometryAdministrationPorts.js +5 -0
- package/dist/geometryApiBinding.js +165 -0
- package/dist/geometryAppStorage.js +58 -0
- package/dist/geometryArtifacts.js +198 -0
- package/dist/geometryAssetBundle.js +117 -0
- package/dist/geometryAssetClient.js +25 -0
- package/dist/geometryAssetData.js +106 -0
- package/dist/geometryAssetHttp.js +123 -0
- package/dist/geometryAssetPorts.js +5 -0
- package/dist/geometryAssetRpc.js +30 -0
- package/dist/geometryAssetRpcRoutes.js +40 -0
- package/dist/geometryAssetStorageGrant.js +103 -0
- package/dist/geometryBoxOverlap.js +110 -0
- package/dist/geometryCatalogueDigest.js +111 -0
- package/dist/geometryCellCoverage.js +85 -0
- package/dist/geometryCellLoader.js +28 -0
- package/dist/geometryChannel.js +134 -0
- package/dist/geometryChunkHttp.js +54 -0
- package/dist/geometryChunkLeases.js +22 -0
- package/dist/geometryClient.d.ts +1429 -0
- package/dist/geometryClient.js +149 -0
- package/dist/geometryClientChunks.js +330 -0
- package/dist/geometryClientDelta.js +25 -0
- package/dist/geometryClientHttp.js +37 -0
- package/dist/geometryClientInterest.js +109 -0
- package/dist/geometryClientStatic.js +34 -0
- package/dist/geometryCms.d.ts +763 -0
- package/dist/geometryCms.js +217 -0
- package/dist/geometryCommitCoordinator.js +241 -0
- package/dist/geometryCompactionFixture.js +84 -0
- package/dist/geometryCompactionStrategies.js +38 -0
- package/dist/geometryConnectionClient.js +23 -0
- package/dist/geometryDerivationFixtures.js +141 -0
- package/dist/geometryDerivationStrategies.js +27 -0
- package/dist/geometryDigest.js +13 -0
- package/dist/geometryEditChannel.js +70 -0
- package/dist/geometryEditIngress.js +263 -0
- package/dist/geometryEdits.js +366 -0
- package/dist/geometryEnvelope.js +41 -0
- package/dist/geometryGridRaycast.js +92 -0
- package/dist/geometryGridSweep.js +92 -0
- package/dist/geometryHeightfield.js +166 -0
- package/dist/geometryHeightfieldRaycast.js +74 -0
- package/dist/geometryHeightfieldSweep.js +85 -0
- package/dist/geometryHeightfieldVolume.js +45 -0
- package/dist/geometryHost.js +322 -0
- package/dist/geometryHostDirectory.js +207 -0
- package/dist/geometryHostMutations.js +137 -0
- package/dist/geometryHostStreams.js +124 -0
- package/dist/geometryHttpBody.js +76 -0
- package/dist/geometryHttpRoutes.js +112 -0
- package/dist/geometryImportGltf.js +300 -0
- package/dist/geometryImportLdtk.js +54 -0
- package/dist/geometryImportPng.js +144 -0
- package/dist/geometryImportPublication.js +67 -0
- package/dist/geometryImportTiled.js +39 -0
- package/dist/geometryImportTiles.js +136 -0
- package/dist/geometryImportVox.js +130 -0
- package/dist/geometryImportedSource.js +101 -0
- package/dist/geometryInspectEndpoint.js +248 -0
- package/dist/geometryInspection.js +92 -0
- package/dist/geometryInstall.js +121 -0
- package/dist/geometryJournalArchiveData.js +21 -0
- package/dist/geometryJournalArchiveIndex.js +330 -0
- package/dist/geometryJournalArchiveTable.js +21 -0
- package/dist/geometryJournalCompaction.js +100 -0
- package/dist/geometryJournalPatch.js +47 -0
- package/dist/geometryJournalRetention.js +112 -0
- package/dist/geometryJournalRetentionSchemas.js +36 -0
- package/dist/geometryJournalRetentionSweep.js +112 -0
- package/dist/geometryJournalRetentionWorkflow.js +28 -0
- package/dist/geometryJournalRetentionWorkflowData.js +31 -0
- package/dist/geometryJournalStorage.js +148 -0
- package/dist/geometryLoader.js +118 -0
- package/dist/geometryManifest.js +113 -0
- package/dist/geometryManifestChannel.js +93 -0
- package/dist/geometryManifestClient.js +122 -0
- package/dist/geometryManifestData.js +49 -0
- package/dist/geometryManifestPorts.js +5 -0
- package/dist/geometryManifestPublication.js +109 -0
- package/dist/geometryManifestSource.js +68 -0
- package/dist/geometryMigrationJournal.js +14 -0
- package/dist/geometryMigrationStrategies.js +7 -0
- package/dist/geometryMigrations.js +323 -0
- package/dist/geometryNativeMetadata.js +52 -0
- package/dist/geometryPatch.js +170 -0
- package/dist/geometryPersistence.js +449 -0
- package/dist/geometryPersistenceCapture.js +69 -0
- package/dist/geometryPersistenceData.js +140 -0
- package/dist/geometryPersistencePorts.js +5 -0
- package/dist/geometryPlayerAdmission.js +34 -0
- package/dist/geometryPlayerEditOwner.js +265 -0
- package/dist/geometryPlayerEdits.js +49 -0
- package/dist/geometryPrepared.js +188 -0
- package/dist/geometryPrivacyFence.js +24 -0
- package/dist/geometryProceduralPublication.js +91 -0
- package/dist/geometryProceduralWorker.js +164 -0
- package/dist/geometryPublication.js +110 -0
- package/dist/geometryRayAlgebra.js +116 -0
- package/dist/geometryReadClient.js +157 -0
- package/dist/geometryReadPorts.js +5 -0
- package/dist/geometryReadRpc.js +27 -0
- package/dist/geometryReadRpcRoutes.js +47 -0
- package/dist/geometryReliablePublication.js +82 -0
- package/dist/geometryReloadPorts.js +46 -0
- package/dist/geometryReloadSource.js +278 -0
- package/dist/geometryRenderCache.js +165 -0
- package/dist/geometryRenderLod.js +102 -0
- package/dist/geometryRollback.js +125 -0
- package/dist/geometryRollbackCoordinator.js +203 -0
- package/dist/geometryRollbackPorts.js +46 -0
- package/dist/geometryRollbackSource.js +209 -0
- package/dist/geometryRollbackStore.js +198 -0
- package/dist/geometrySchemas.js +27 -0
- package/dist/geometryServer.d.ts +2766 -0
- package/dist/geometryServer.js +62 -0
- package/dist/geometryShapeRaycast.js +111 -0
- package/dist/geometryShapeSegments.js +34 -0
- package/dist/geometryShapes.js +223 -0
- package/dist/geometrySnapshot.js +76 -0
- package/dist/geometrySnapshotChannel.js +160 -0
- package/dist/geometrySnapshotClient.js +159 -0
- package/dist/geometrySnapshotPreparation.js +76 -0
- package/dist/geometrySnapshotServer.js +191 -0
- package/dist/geometrySqlOwner.js +21 -0
- package/dist/geometryStorage.js +127 -0
- package/dist/geometryStorageGrant.js +69 -0
- package/dist/geometryStorageIdentity.js +9 -0
- package/dist/geometryTileArtifact.js +10 -0
- package/dist/geometryTileCodec.js +194 -0
- package/dist/geometryTileCollision.js +96 -0
- package/dist/geometryTileNavigation.js +128 -0
- package/dist/geometryTileView.js +35 -0
- package/dist/geometryVersionActivation.js +114 -0
- package/dist/geometryVersionClient.js +238 -0
- package/dist/geometryVersionCompare.js +40 -0
- package/dist/geometryVersionMigration.js +106 -0
- package/dist/geometryVoxel.js +253 -0
- package/dist/geometryWorldEntitySubject.js +32 -0
- package/dist/geometryWorldExtent.js +12 -0
- package/dist/geometryWorldMetadata.js +38 -0
- package/dist/geometryWorldStrategyFixtures.js +127 -0
- package/dist/geometryWorldView.js +307 -0
- package/dist/host.js +128 -0
- package/dist/hostBinding.js +277 -0
- package/dist/hostCellObservation.js +114 -0
- package/dist/hostClientCapacity.js +90 -0
- package/dist/hostCommandScope.js +64 -0
- package/dist/hostController.js +3094 -0
- package/dist/hostDeployment.js +65 -0
- package/dist/hostDrain.js +152 -0
- package/dist/hostDrainPorts.js +5 -0
- package/dist/hostDriver.js +179 -0
- package/dist/hostLane.js +288 -0
- package/dist/hostListener.js +79 -0
- package/dist/hostListenerBinding.js +19 -0
- package/dist/hostLoopObservation.js +90 -0
- package/dist/hostMetrics.js +56 -0
- package/dist/hostRegistryBinding.js +418 -0
- package/dist/hostSelection.js +16 -0
- package/dist/hostShutdown.js +47 -0
- package/dist/hostTurnObservation.js +53 -0
- package/dist/identities.js +4 -0
- package/dist/index.d.ts +8632 -0
- package/dist/index.js +232 -0
- package/dist/inputReceipts.js +63 -0
- package/dist/inputRedundancy.js +55 -0
- package/dist/inspect.js +238 -0
- package/dist/lockstep.d.ts +436 -0
- package/dist/lockstep.js +382 -0
- package/dist/lockstepAdmission.js +262 -0
- package/dist/lockstepAdmissionCodec.js +94 -0
- package/dist/lockstepAdmissionPorts.js +5 -0
- package/dist/lockstepClientSession.js +578 -0
- package/dist/lockstepDefinition.js +148 -0
- package/dist/lockstepHostLoop.js +243 -0
- package/dist/lockstepInitialAdmission.js +67 -0
- package/dist/lockstepInitialStrategyFixtures.js +45 -0
- package/dist/lockstepJournal.js +395 -0
- package/dist/lockstepJournalCodec.js +254 -0
- package/dist/lockstepJournalPorts.js +5 -0
- package/dist/lockstepJournalRebuild.js +208 -0
- package/dist/lockstepJournalRows.js +57 -0
- package/dist/lockstepMembers.js +131 -0
- package/dist/lockstepMessages.js +47 -0
- package/dist/lockstepOwnedRoom.js +764 -0
- package/dist/lockstepPolicies.js +84 -0
- package/dist/lockstepReact.js +47 -0
- package/dist/lockstepRecoveryTruth.js +121 -0
- package/dist/lockstepRosterConfig.js +32 -0
- package/dist/lockstepSeed.js +12 -0
- package/dist/lockstepSeedFixture.js +20 -0
- package/dist/lockstepServer.d.ts +3897 -0
- package/dist/lockstepServer.js +325 -0
- package/dist/lockstepServerConfig.js +101 -0
- package/dist/lockstepServerRoles.js +403 -0
- package/dist/lockstepServerStrategyFixtures.js +33 -0
- package/dist/lockstepStrategies.js +6 -0
- package/dist/lockstepStrategyFixtures.js +137 -0
- package/dist/lockstepTerminal.js +90 -0
- package/dist/lockstepTerminalPorts.js +5 -0
- package/dist/lockstepTransport.js +773 -0
- package/dist/lockstepTransportConfig.js +32 -0
- package/dist/lockstepWireRoster.js +34 -0
- package/dist/matchRoomProvider.js +32 -0
- package/dist/matchRooms.js +19 -0
- package/dist/membershipObserver.js +47 -0
- package/dist/moderation.js +98 -0
- package/dist/movementSpecials.js +104 -0
- package/dist/ownership.js +17 -0
- package/dist/ownershipWithdrawal.js +18 -0
- package/dist/pcg32.js +96 -0
- package/dist/ports.d.ts +1241 -0
- package/dist/ports.js +11 -0
- package/dist/quaternion.js +70 -0
- package/dist/react.d.ts +406 -0
- package/dist/react.js +109 -0
- package/dist/reaper-app/rooms.reaper.workflow.server.tsx +5 -0
- package/dist/reaper-app/rooms.reaper.workflow.tsx +13 -0
- package/dist/reaper.js +243 -0
- package/dist/reaperSchemas.js +42 -0
- package/dist/reaperWorkflow.js +70 -0
- package/dist/recovery.js +189 -0
- package/dist/recoverySeats.js +26 -0
- package/dist/replay.d.ts +273 -0
- package/dist/replay.js +485 -0
- package/dist/replayPorts.js +5 -0
- package/dist/replayRecording.js +67 -0
- package/dist/replaySchema.js +157 -0
- package/dist/replayStorage.d.ts +149 -0
- package/dist/replayStorage.js +485 -0
- package/dist/reservationBatch.js +422 -0
- package/dist/reservationSchemas.js +17 -0
- package/dist/reservations.js +259 -0
- package/dist/reservePort.js +69 -0
- package/dist/resolvedOptions.js +4 -0
- package/dist/room.d.ts +1006 -0
- package/dist/room.js +284 -0
- package/dist/roomAccessSweep.js +95 -0
- package/dist/roomAppCommandControl.js +59 -0
- package/dist/roomAuthoringStrategy.js +17 -0
- package/dist/roomErasure.js +198 -0
- package/dist/roomPoolRuntimeDefaults.js +24 -0
- package/dist/roomPoolSelection.js +19 -0
- package/dist/roomPoolTopology.js +212 -0
- package/dist/rpc.d.ts +551 -0
- package/dist/rpc.js +112 -0
- package/dist/rpcClient.js +152 -0
- package/dist/rpcRoutes.js +28 -0
- package/dist/runtime.js +1123 -0
- package/dist/schemaHistory.js +98 -0
- package/dist/seatStore.js +151 -0
- package/dist/seatStrategyFixtures.js +52 -0
- package/dist/seatSubject.js +32 -0
- package/dist/seats.js +130 -0
- package/dist/serverSession.js +811 -0
- package/dist/serverSessionConfig.js +43 -0
- package/dist/sessionAdmission.js +53 -0
- package/dist/sidecarAdmission.js +103 -0
- package/dist/sidecarConfig.js +116 -0
- package/dist/sidecarConfigPublication.js +64 -0
- package/dist/sidecarHostListener.js +208 -0
- package/dist/sidecarIpc.js +205 -0
- package/dist/sidecarPeer.js +310 -0
- package/dist/sidecarProcessPort.js +28 -0
- package/dist/sidecarRuntime.js +168 -0
- package/dist/sidecarSelection.js +142 -0
- package/dist/sidecarWire.js +178 -0
- package/dist/sidecarWrites.js +163 -0
- package/dist/simulation.d.ts +391 -0
- package/dist/simulation.js +282 -0
- package/dist/simulationAuthoring.js +29 -0
- package/dist/simulationBytes.js +27 -0
- package/dist/simulationConformance.js +305 -0
- package/dist/simulationInputHistoryCapture.js +35 -0
- package/dist/simulationInputHistoryWire.js +193 -0
- package/dist/simulationOptionsWire.js +78 -0
- package/dist/simulationRecoveryWire.js +134 -0
- package/dist/simulationReplay.js +127 -0
- package/dist/simulationSnapshotWire.js +112 -0
- package/dist/simulationState.js +178 -0
- package/dist/snapshotBlob.js +126 -0
- package/dist/snapshotBlobCleanup.js +93 -0
- package/dist/snapshotBlobIndex.js +38 -0
- package/dist/snapshotBudget.js +80 -0
- package/dist/snapshotChain.js +185 -0
- package/dist/snapshotErasure.js +172 -0
- package/dist/snapshotInspection.js +105 -0
- package/dist/snapshotSegmentBlobs.js +58 -0
- package/dist/snapshotUploads.js +166 -0
- package/dist/socketTransport.js +253 -0
- package/dist/spatial.js +104 -0
- package/dist/spectatorPolicy.js +26 -0
- package/dist/spectatorProducer.js +89 -0
- package/dist/startFailureCause.js +4 -0
- package/dist/stateCodec.js +658 -0
- package/dist/strategies.d.ts +210 -0
- package/dist/strategies.js +8 -0
- package/dist/strategiesServer.d.ts +286 -0
- package/dist/strategiesServer.js +11 -0
- package/dist/strategyFixtures.js +182 -0
- package/dist/streamFraming.js +122 -0
- package/dist/streamTransport.js +266 -0
- package/dist/subjectAdmission.js +50 -0
- package/dist/subjectPrivacy.js +281 -0
- package/dist/subjectPrivacyBinding.js +90 -0
- package/dist/systemManifest.js +182 -0
- package/dist/tables.js +159 -0
- package/dist/testHarness.js +89 -0
- package/dist/testing.d.ts +3684 -0
- package/dist/testing.js +221 -0
- package/dist/testingPorts.js +271 -0
- package/dist/testingServer.d.ts +4060 -0
- package/dist/testingServer.js +18 -0
- package/dist/transform.d.ts +692 -0
- package/dist/transform.js +217 -0
- package/dist/transform3d.js +118 -0
- package/dist/transformCollection.js +24 -0
- package/dist/transformCollection3d.js +24 -0
- package/dist/transformCollectionCore.js +156 -0
- package/dist/transformFrames.js +121 -0
- package/dist/transformPrediction3d.js +127 -0
- package/dist/transformRules.js +123 -0
- package/dist/transformSchemas.js +20 -0
- package/dist/transport.js +32 -0
- package/dist/transportAuthoring.js +29 -0
- package/dist/transportCleanup.js +22 -0
- package/dist/transportConformance.js +124 -0
- package/dist/transportConnector.js +82 -0
- package/dist/transportEndpoints.js +38 -0
- package/dist/transportsServer.d.ts +5515 -0
- package/dist/transportsServer.js +6 -0
- package/dist/viewProjection.js +16 -0
- package/dist/web.d.ts +2286 -0
- package/dist/web.js +518 -0
- package/dist/webTransportClient.js +173 -0
- package/dist/wire.d.ts +992 -0
- package/dist/wire.js +492 -0
- package/dist/withdrawalPort.js +28 -0
- package/dist/world.d.ts +1894 -0
- package/dist/world.js +333 -0
- package/dist/worldActorReceipts.js +48 -0
- package/dist/worldActorTransferSnapshot.js +14 -0
- package/dist/worldAdmissionPending.js +8 -0
- package/dist/worldBoundaryCoordinator.js +148 -0
- package/dist/worldCatalog.js +81 -0
- package/dist/worldCellAllocation.js +203 -0
- package/dist/worldCellDestination.js +68 -0
- package/dist/worldCells.js +489 -0
- package/dist/worldChange.js +32 -0
- package/dist/worldClient.js +664 -0
- package/dist/worldClientControl.js +141 -0
- package/dist/worldClientPendingInput.js +16 -0
- package/dist/worldClientRpc.js +133 -0
- package/dist/worldClientRpcRoutes.js +43 -0
- package/dist/worldClientSchemas.js +28 -0
- package/dist/worldCommands.js +140 -0
- package/dist/worldData.js +42 -0
- package/dist/worldDefaultBinding.js +377 -0
- package/dist/worldDefaultGroupAdmission.js +82 -0
- package/dist/worldDefaultGroupAppServices.js +31 -0
- package/dist/worldDefaultGroupCompensation.js +109 -0
- package/dist/worldDefaultGroupContinuation.js +96 -0
- package/dist/worldDefaultGroupControl.js +72 -0
- package/dist/worldDefaultGroupMembers.js +85 -0
- package/dist/worldDefaultGroups.js +21 -0
- package/dist/worldDefaultPending.js +79 -0
- package/dist/worldDefaultService.js +245 -0
- package/dist/worldEntities.js +2980 -0
- package/dist/worldEntityCodec.js +21 -0
- package/dist/worldEntityHandoffView.js +154 -0
- package/dist/worldGeometry.js +170 -0
- package/dist/worldGhostAdmission.js +65 -0
- package/dist/worldGhostDestination.js +118 -0
- package/dist/worldGhostGateway.js +132 -0
- package/dist/worldGhostHandshake.js +108 -0
- package/dist/worldGhostHost.js +42 -0
- package/dist/worldGhostIngress.js +132 -0
- package/dist/worldGhostNeighborhood.js +70 -0
- package/dist/worldGhostNeighbors.js +86 -0
- package/dist/worldGhostOutbound.js +110 -0
- package/dist/worldGhostPublisher.js +216 -0
- package/dist/worldGhostReceiver.js +213 -0
- package/dist/worldGhostSender.js +146 -0
- package/dist/worldGhostSocket.js +78 -0
- package/dist/worldGhostWire.js +172 -0
- package/dist/worldGroupCommand.js +49 -0
- package/dist/worldGroupDeadline.js +115 -0
- package/dist/worldGroupPreparation.js +115 -0
- package/dist/worldGroupReadyControl.js +128 -0
- package/dist/worldGroupSupervisor.js +120 -0
- package/dist/worldHandoffMetrics.js +59 -0
- package/dist/worldHandoffView.js +100 -0
- package/dist/worldHostSource.js +69 -0
- package/dist/worldInspectEndpoint.js +250 -0
- package/dist/worldInspection.js +109 -0
- package/dist/worldInstanceAdmission.js +31 -0
- package/dist/worldInstanceAllocation.js +116 -0
- package/dist/worldInstanceDestination.js +64 -0
- package/dist/worldInstanceExpiry.js +282 -0
- package/dist/worldInstanceExpirySupervisor.js +88 -0
- package/dist/worldInstanceLifecycle.js +103 -0
- package/dist/worldInstanceState.js +52 -0
- package/dist/worldInstances.js +478 -0
- package/dist/worldJoin.js +56 -0
- package/dist/worldLayers.js +151 -0
- package/dist/worldLeases.js +78 -0
- package/dist/worldManifest.js +25 -0
- package/dist/worldMovement.js +63 -0
- package/dist/worldPersistence.js +134 -0
- package/dist/worldProjection.js +221 -0
- package/dist/worldReact.js +110 -0
- package/dist/worldRecoveryActor.js +35 -0
- package/dist/worldReturnAnchor.js +49 -0
- package/dist/worldRoomHooks.js +57 -0
- package/dist/worldRoomPool.js +27 -0
- package/dist/worldRoomSteps.js +133 -0
- package/dist/worldSeatBinding.js +36 -0
- package/dist/worldServer.d.ts +6936 -0
- package/dist/worldServer.js +48 -0
- package/dist/worldSourceSeatPending.js +9 -0
- package/dist/worldStrategyFixtures.js +164 -0
- package/dist/worldTesting.js +27 -0
- package/dist/worldTransitionDefaults.js +198 -0
- package/dist/worldTransitionExecutor.js +519 -0
- package/dist/worldTransitionGroup.js +113 -0
- package/dist/worldTransitionPhysicalSteps.js +40 -0
- package/dist/worldTransitionResolver.js +228 -0
- package/dist/worldTransitionSeatGroup.js +64 -0
- package/dist/worldTransitionSeats.js +260 -0
- package/dist/worldTransitionState.js +95 -0
- package/dist/worldTransitions.js +101 -0
- package/package.json +189 -4
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { BudgetExceeded as e } from "./errors.js";
|
|
2
|
+
import { captureSimulationBytes as t } from "./simulationBytes.js";
|
|
3
|
+
import { createGeometryTileCodec as n, geometryOwnData as r, geometryTileRefusal as i } from "./geometryTileCodec.js";
|
|
4
|
+
//#region src/geometryImportTiles.ts
|
|
5
|
+
var a = (e, t = -2147483648, n = 2147483647) => typeof e == "number" && Number.isSafeInteger(e) && e >= t && e <= n ? e === 0 ? 0 : e : i(), o = (e) => !e || typeof e != "object" || Object.getPrototypeOf(e) !== Object.prototype ? i() : e, s = (e, t) => {
|
|
6
|
+
if (!Array.isArray(e) || e.length > t || Reflect.ownKeys(e).length !== e.length + 1) return i();
|
|
7
|
+
for (let t = 0; t < e.length; t++) {
|
|
8
|
+
let n = Object.getOwnPropertyDescriptor(e, String(t));
|
|
9
|
+
if (!n?.enumerable || !("value" in n)) return i();
|
|
10
|
+
}
|
|
11
|
+
return e;
|
|
12
|
+
}, c = (e) => typeof e == "string" && e.length > 0 && e.length <= 256 ? e : i(), l = (e) => typeof e == "string" && /^[A-Za-z0-9][A-Za-z0-9._:-]{0,95}$/.test(e) ? e : i(), u = (e) => {
|
|
13
|
+
let t = r(e, ["key", "solid"]);
|
|
14
|
+
return typeof t.key != "string" || !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$/.test(t.key) || typeof t.solid != "boolean" ? i() : Object.freeze({
|
|
15
|
+
key: t.key,
|
|
16
|
+
solid: t.solid
|
|
17
|
+
});
|
|
18
|
+
}, d = [
|
|
19
|
+
"worldId",
|
|
20
|
+
"layerSetId",
|
|
21
|
+
"version",
|
|
22
|
+
"origin",
|
|
23
|
+
"chunkSide",
|
|
24
|
+
"tileSizeRaw",
|
|
25
|
+
"materials",
|
|
26
|
+
"maxInputBytes",
|
|
27
|
+
"maxCells",
|
|
28
|
+
"maxRegions",
|
|
29
|
+
"maxChunks",
|
|
30
|
+
"codecLimits"
|
|
31
|
+
], f = (e, c, f) => {
|
|
32
|
+
let p = r(e, [...d, ...c], [
|
|
33
|
+
"worldId",
|
|
34
|
+
"layerSetId",
|
|
35
|
+
"version",
|
|
36
|
+
"origin",
|
|
37
|
+
"materials",
|
|
38
|
+
...f
|
|
39
|
+
]), m = (e, t, n) => a(Object.hasOwn(p, e) ? p[e] : t, 1, n), h = m("maxInputBytes", 16777216, 67108864), g = m("maxCells", 1048576, 4194304), _ = m("maxRegions", 4096, 16384), v = m("maxChunks", 256, 4096), y = m("chunkSide", 64, 1024), b = m("tileSizeRaw", 65536, 2147483647), x = r(p.origin, ["x", "y"]), S = a(x.x), C = a(x.y), w = l(p.worldId), T = l(p.layerSetId), E = l(p.version), D = [
|
|
40
|
+
"maxSide",
|
|
41
|
+
"maxCells",
|
|
42
|
+
"maxPalette",
|
|
43
|
+
"maxRuns",
|
|
44
|
+
"maxBytes"
|
|
45
|
+
], O = Object.hasOwn(p, "codecLimits") ? r(p.codecLimits, D, []) : {}, k = Object.fromEntries(D.filter((e) => Object.hasOwn(O, e)).map((e) => [e, a(O[e], 1, 16777216)])), A = n(k), j = /* @__PURE__ */ new Map(), M = /* @__PURE__ */ new Map();
|
|
46
|
+
if (y > A.limits.maxSide || y * y > A.limits.maxCells || y * b > 2147483647) return i();
|
|
47
|
+
for (let e of s(p.materials, 4096)) {
|
|
48
|
+
let t = r(e, [
|
|
49
|
+
"sourceId",
|
|
50
|
+
"flip",
|
|
51
|
+
"material"
|
|
52
|
+
], ["sourceId", "material"]), n = a(t.sourceId, 0, 4294967295), o = a(Object.hasOwn(t, "flip") ? t.flip : 0, 0, 3), s = u(t.material), c = `${n}:${o}`;
|
|
53
|
+
if (j.has(c) || M.has(s.key) && M.get(s.key) !== s.solid) return i();
|
|
54
|
+
M.set(s.key, s.solid), j.set(c, s);
|
|
55
|
+
}
|
|
56
|
+
if (!j.size) return i();
|
|
57
|
+
if (Object.hasOwn(p, "emptyMaterial")) {
|
|
58
|
+
let e = u(p.emptyMaterial);
|
|
59
|
+
if (M.has(e.key) && M.get(e.key) !== e.solid) return i();
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
data: p,
|
|
63
|
+
maxCells: g,
|
|
64
|
+
maxRegions: _,
|
|
65
|
+
maxChunks: v,
|
|
66
|
+
side: y,
|
|
67
|
+
tileSizeRaw: b,
|
|
68
|
+
x: S,
|
|
69
|
+
y: C,
|
|
70
|
+
worldId: w,
|
|
71
|
+
layerSetId: T,
|
|
72
|
+
version: E,
|
|
73
|
+
codec: A,
|
|
74
|
+
selectMaterial: (e, t = 0) => j.get(`${a(e, 0, 4294967295)}:${a(t, 0, 3)}`) ?? i(),
|
|
75
|
+
parse: (e) => {
|
|
76
|
+
let n = t(e, h, "geometryImportBytes");
|
|
77
|
+
try {
|
|
78
|
+
return o(JSON.parse(new TextDecoder("utf-8", { fatal: !0 }).decode(n)));
|
|
79
|
+
} catch {
|
|
80
|
+
return i();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}, p = (t, n) => {
|
|
85
|
+
if (!n.length || n.length > t.maxRegions) return i();
|
|
86
|
+
let { side: r } = t, o = /* @__PURE__ */ new Map(), s = 0;
|
|
87
|
+
for (let c of n) {
|
|
88
|
+
if (s += c.width * c.height, s > t.maxCells) throw new e({
|
|
89
|
+
budget: "geometryImportCells",
|
|
90
|
+
limit: t.maxCells
|
|
91
|
+
});
|
|
92
|
+
if (c.cells.length !== c.width * c.height) return i();
|
|
93
|
+
a(c.x), a(c.y), a(c.x + c.width - 1), a(c.y + c.height - 1);
|
|
94
|
+
let n = Math.floor(c.x / r), l = Math.floor((c.x + c.width - 1) / r), u = Math.floor(c.y / r), d = Math.floor((c.y + c.height - 1) / r);
|
|
95
|
+
if ((l - n + 1) * (d - u + 1) > t.maxChunks) throw new e({
|
|
96
|
+
budget: "geometryImportChunks",
|
|
97
|
+
limit: t.maxChunks
|
|
98
|
+
});
|
|
99
|
+
for (let i = u; i <= d; i++) for (let a = n; a <= l; a++) {
|
|
100
|
+
let n = `${a}:${i}`;
|
|
101
|
+
if (!o.has(n)) {
|
|
102
|
+
if (o.size >= t.maxChunks || (o.size + 1) * r * r > t.maxCells) throw new e({
|
|
103
|
+
budget: "geometryImportChunks",
|
|
104
|
+
limit: t.maxChunks
|
|
105
|
+
});
|
|
106
|
+
o.set(n, {
|
|
107
|
+
cx: a,
|
|
108
|
+
cy: i,
|
|
109
|
+
seen: new Uint8Array(r * r),
|
|
110
|
+
cells: Array(r * r),
|
|
111
|
+
count: 0
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
for (let e of n) for (let t = 0; t < e.height; t++) for (let n = 0; n < e.width; n++) {
|
|
117
|
+
let a = e.x + n, s = e.y + t, c = Math.floor(a / r), l = Math.floor(s / r), u = o.get(`${c}:${l}`), d = (s - l * r) * r + (a - c * r);
|
|
118
|
+
if (u.seen[d]) return i();
|
|
119
|
+
u.seen[d] = 1, u.cells[d] = e.cells[t * e.width + n], u.count++;
|
|
120
|
+
}
|
|
121
|
+
return [...o.values()].some((e) => e.count !== r * r) ? i() : Object.freeze([...o.values()].sort((e, t) => e.cy - t.cy || e.cx - t.cx).map((e) => t.codec.create({
|
|
122
|
+
address: {
|
|
123
|
+
worldId: t.worldId,
|
|
124
|
+
layerSetId: t.layerSetId,
|
|
125
|
+
cx: e.cx,
|
|
126
|
+
cy: e.cy
|
|
127
|
+
},
|
|
128
|
+
version: t.version,
|
|
129
|
+
width: r,
|
|
130
|
+
height: r,
|
|
131
|
+
tileSizeRaw: t.tileSizeRaw,
|
|
132
|
+
cells: e.cells
|
|
133
|
+
})));
|
|
134
|
+
};
|
|
135
|
+
//#endregion
|
|
136
|
+
export { f as admitTileImport, p as collectImportedTiles, s as importArray, a as importInteger, u as importMaterial, c as importName, o as importRecord };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { BudgetExceeded as e } from "./errors.js";
|
|
2
|
+
import { captureSimulationBytes as t } from "./simulationBytes.js";
|
|
3
|
+
import { geometryOwnData as n, geometryTileRefusal as r } from "./geometryTileCodec.js";
|
|
4
|
+
import { createGeometryVoxelCodec as i } from "./geometryVoxel.js";
|
|
5
|
+
import { importArray as a, importInteger as o, importMaterial as s } from "./geometryImportTiles.js";
|
|
6
|
+
//#region src/geometryImportVox.ts
|
|
7
|
+
var c = (e) => typeof e == "string" && /^[A-Za-z0-9][A-Za-z0-9._:-]{0,95}$/.test(e) ? e : r(), l = (l, u) => {
|
|
8
|
+
let d = n(u, [
|
|
9
|
+
"worldId",
|
|
10
|
+
"layerSetId",
|
|
11
|
+
"version",
|
|
12
|
+
"origin",
|
|
13
|
+
"axes",
|
|
14
|
+
"chunkSide",
|
|
15
|
+
"voxelSizeRaw",
|
|
16
|
+
"modelIndex",
|
|
17
|
+
"emptyMaterial",
|
|
18
|
+
"materials",
|
|
19
|
+
"maxInputBytes",
|
|
20
|
+
"maxVoxels",
|
|
21
|
+
"maxChunks",
|
|
22
|
+
"maxFileChunks",
|
|
23
|
+
"codecLimits"
|
|
24
|
+
], [
|
|
25
|
+
"worldId",
|
|
26
|
+
"layerSetId",
|
|
27
|
+
"version",
|
|
28
|
+
"origin",
|
|
29
|
+
"axes",
|
|
30
|
+
"emptyMaterial",
|
|
31
|
+
"materials"
|
|
32
|
+
]), f = (e, t, n) => o(Object.hasOwn(d, e) ? d[e] : t, 1, n), p = f("maxInputBytes", 16777216, 67108864), m = f("maxVoxels", 1048576, 16777216), h = f("maxChunks", 256, 4096), g = f("maxFileChunks", 4096, 16384), _ = f("chunkSide", 64, 128), v = f("voxelSizeRaw", 65536, 2147483647), y = n(d.origin, [
|
|
33
|
+
"cx",
|
|
34
|
+
"cy",
|
|
35
|
+
"cz"
|
|
36
|
+
]), b = o(y.cx), x = o(y.cy), S = o(y.cz), C = c(d.worldId), w = c(d.layerSetId), T = c(d.version), E = s(d.emptyMaterial), D = [
|
|
37
|
+
"maxSide",
|
|
38
|
+
"maxVoxels",
|
|
39
|
+
"maxPalette",
|
|
40
|
+
"maxSections",
|
|
41
|
+
"maxRunsPerSection",
|
|
42
|
+
"maxBytes"
|
|
43
|
+
], O = Object.hasOwn(d, "codecLimits") ? n(d.codecLimits, D, []) : {}, k = Object.fromEntries(D.filter((e) => Object.hasOwn(O, e)).map((e) => [e, o(O[e], 1, 16777216)])), A = i(k), j = /* @__PURE__ */ new Map(), M = /* @__PURE__ */ new Map([[E.key, E.solid]]);
|
|
44
|
+
if (d.axes !== "xyz" && d.axes !== "xzy" || _ % 16 || _ > A.limits.maxSide || _ ** 3 > A.limits.maxVoxels || (_ / 16) ** 3 > A.limits.maxSections || _ * v > 2147483647) return r();
|
|
45
|
+
for (let e of a(d.materials, 255)) {
|
|
46
|
+
let t = n(e, ["colorIndex", "material"]), i = o(t.colorIndex, 1, 255), a = s(t.material);
|
|
47
|
+
if (j.has(i) || M.has(a.key) && M.get(a.key) !== a.solid) return r();
|
|
48
|
+
j.set(i, a), M.set(a.key, a.solid);
|
|
49
|
+
}
|
|
50
|
+
let N = t(l, p, "geometryImportBytes"), P = new DataView(N.buffer), F = (e) => String.fromCharCode(...N.subarray(e, e + 4));
|
|
51
|
+
if (N.length < 20 || F(0) !== "VOX " || P.getInt32(4, !0) !== 150 || F(8) !== "MAIN" || P.getInt32(12, !0) !== 0 || P.getInt32(16, !0) !== N.length - 20) return r();
|
|
52
|
+
let I = [], L = 20, R = 0, z, B, V = !1;
|
|
53
|
+
for (; L < N.length;) {
|
|
54
|
+
if (++R > g) throw new e({
|
|
55
|
+
budget: "geometryVoxFileChunks",
|
|
56
|
+
limit: g
|
|
57
|
+
});
|
|
58
|
+
if (N.length - L < 12) return r();
|
|
59
|
+
let t = F(L), n = P.getInt32(L + 4, !0), i = P.getInt32(L + 8, !0), a = L + 12, s = a + n;
|
|
60
|
+
if (n < 0 || i !== 0 || s > N.length) return r();
|
|
61
|
+
if (t === "PACK") {
|
|
62
|
+
if (R !== 1 || n !== 4 || z !== void 0) return r();
|
|
63
|
+
z = o(P.getInt32(a, !0), 1, Math.floor(g / 2));
|
|
64
|
+
} else if (t === "SIZE") {
|
|
65
|
+
if (B || V || n !== 12) return r();
|
|
66
|
+
B = {
|
|
67
|
+
x: o(P.getInt32(a, !0), 1, 256),
|
|
68
|
+
y: o(P.getInt32(a + 4, !0), 1, 256),
|
|
69
|
+
z: o(P.getInt32(a + 8, !0), 1, 256)
|
|
70
|
+
};
|
|
71
|
+
} else if (t === "XYZI") {
|
|
72
|
+
if (!B || n < 4 || V) return r();
|
|
73
|
+
let e = o(P.getInt32(a, !0), 0, m);
|
|
74
|
+
if (n !== 4 + e * 4) return r();
|
|
75
|
+
I.push({
|
|
76
|
+
...B,
|
|
77
|
+
voxels: N.subarray(a + 4, s),
|
|
78
|
+
count: e
|
|
79
|
+
}), B = void 0;
|
|
80
|
+
} else if (t === "RGBA") {
|
|
81
|
+
if (B || V || !I.length || n !== 1024) return r();
|
|
82
|
+
V = !0;
|
|
83
|
+
} else return r();
|
|
84
|
+
L = s;
|
|
85
|
+
}
|
|
86
|
+
if (B || !I.length || (z === void 0 ? I.length !== 1 : z !== I.length) || I.length > 1 && !Object.hasOwn(d, "modelIndex")) return r();
|
|
87
|
+
let H = I[o(Object.hasOwn(d, "modelIndex") ? d.modelIndex : 0, 0, I.length - 1)], U = H.x, W = d.axes === "xyz" ? H.y : H.z, G = d.axes === "xyz" ? H.z : H.y, K = U * W * G, q = U / _, J = W / _, Y = G / _;
|
|
88
|
+
if (U % _ || W % _ || G % _) return r();
|
|
89
|
+
if (K > m) throw new e({
|
|
90
|
+
budget: "geometryImportVoxels",
|
|
91
|
+
limit: m
|
|
92
|
+
});
|
|
93
|
+
if (q * J * Y > h) throw new e({
|
|
94
|
+
budget: "geometryImportChunks",
|
|
95
|
+
limit: h
|
|
96
|
+
});
|
|
97
|
+
o(b + q - 1), o(x + J - 1), o(S + Y - 1);
|
|
98
|
+
let X = new Uint8Array(K), Z = new Uint8Array(K);
|
|
99
|
+
for (let e = 0; e < H.count; e++) {
|
|
100
|
+
let t = H.voxels[e * 4], n = H.voxels[e * 4 + 1], i = H.voxels[e * 4 + 2], a = H.voxels[e * 4 + 3], o = d.axes === "xyz" ? n : i, s = d.axes === "xyz" ? i : n;
|
|
101
|
+
if (t >= U || o >= W || s >= G || !a || !j.has(a)) return r();
|
|
102
|
+
let c = (s * W + o) * U + t;
|
|
103
|
+
if (Z[c]) return r();
|
|
104
|
+
Z[c] = 1, X[c] = a;
|
|
105
|
+
}
|
|
106
|
+
let Q = [];
|
|
107
|
+
for (let e = 0; e < Y; e++) for (let t = 0; t < J; t++) for (let n = 0; n < q; n++) {
|
|
108
|
+
let r = [];
|
|
109
|
+
for (let i = 0; i < _; i++) for (let a = 0; a < _; a++) for (let o = 0; o < _; o++) {
|
|
110
|
+
let s = X[((e * _ + i) * W + t * _ + a) * U + n * _ + o];
|
|
111
|
+
r.push(s ? j.get(s) : E);
|
|
112
|
+
}
|
|
113
|
+
Q.push(A.create({
|
|
114
|
+
address: {
|
|
115
|
+
worldId: C,
|
|
116
|
+
layerSetId: w,
|
|
117
|
+
cx: b + n,
|
|
118
|
+
cy: x + t,
|
|
119
|
+
cz: S + e
|
|
120
|
+
},
|
|
121
|
+
version: T,
|
|
122
|
+
side: _,
|
|
123
|
+
voxelSizeRaw: v,
|
|
124
|
+
voxels: r
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
return Object.freeze(Q);
|
|
128
|
+
};
|
|
129
|
+
//#endregion
|
|
130
|
+
export { l as importVoxGeometry };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { BudgetExceeded as e, ProtocolError as t } from "./errors.js";
|
|
2
|
+
import { geometryOwnData as n } from "./geometryTileCodec.js";
|
|
3
|
+
import { verifyGeometryArtifact as r } from "./geometryArtifacts.js";
|
|
4
|
+
import { assertGeometryArtifactScope as i, captureGeometryCodecProfiles as a, geometryPersistenceId as o, geometryPersistenceInteger as s } from "./geometryPersistenceData.js";
|
|
5
|
+
import { geometryChunkHasWorldExtent as c } from "./geometryWorldExtent.js";
|
|
6
|
+
import { captureWorldCatalog as l } from "./world.js";
|
|
7
|
+
import { captureGeometryVersion as u } from "./geometryPersistenceCapture.js";
|
|
8
|
+
import { Effect as d } from "effect";
|
|
9
|
+
import { isAbsolute as f, join as p, relative as m, resolve as h, sep as g } from "node:path";
|
|
10
|
+
import { constants as _, promises as v } from "node:fs";
|
|
11
|
+
//#region src/geometryImportedSource.ts
|
|
12
|
+
var y = () => new t({ detail: "Imported geometry package identity, native bytes or exact declared scope remains unconfirmed" }), b = (e, t) => {
|
|
13
|
+
let n = m(e, t);
|
|
14
|
+
return !!n && !f(n) && n !== ".." && !n.startsWith(".." + g);
|
|
15
|
+
}, x = (t, m, g = {}) => {
|
|
16
|
+
try {
|
|
17
|
+
let x = l([t])[0], S = x.geometry, C = n(m, [
|
|
18
|
+
"tenantId",
|
|
19
|
+
"version",
|
|
20
|
+
"appRoot"
|
|
21
|
+
]), w = o(C.tenantId), T = o(C.version, 96), E = C.appRoot, D = n(g, [
|
|
22
|
+
"maxChunks",
|
|
23
|
+
"maxArtifactBytes",
|
|
24
|
+
"maxManifestBytes",
|
|
25
|
+
"codecLimits"
|
|
26
|
+
], []), O = (e, t, n, r) => s(Object.hasOwn(D, e) ? D[e] : t, n, r), k = O("maxChunks", 256, 1, 4096), A = O("maxArtifactBytes", 52428800, 64, 268435456), j = O("maxManifestBytes", 262144, 256, 16777216), M = a(Object.hasOwn(D, "codecLimits") ? D.codecLimits : {});
|
|
27
|
+
if (!S || S.static.kind !== "imported" || typeof E != "string" || !f(E) || h(E) !== E || /[\u0000-\u001f\u007f]/.test(E)) return d.fail(y());
|
|
28
|
+
let N = h(E, S.static.directory);
|
|
29
|
+
return b(E, N) ? d.uninterruptible(d.tryPromise({
|
|
30
|
+
try: async () => {
|
|
31
|
+
if (await v.realpath(E) !== E || await v.realpath(N) !== N) throw y();
|
|
32
|
+
let t = await v.open(N, _.O_RDONLY | _.O_DIRECTORY | _.O_NOFOLLOW);
|
|
33
|
+
try {
|
|
34
|
+
let a = await t.stat();
|
|
35
|
+
if (!a.isDirectory()) throw y();
|
|
36
|
+
let o = async () => {
|
|
37
|
+
let e = await v.lstat(N);
|
|
38
|
+
if (!e.isDirectory() || e.dev !== a.dev || e.ino !== a.ino || await v.realpath(N) !== N) throw y();
|
|
39
|
+
}, s = async (t, n) => {
|
|
40
|
+
await o();
|
|
41
|
+
let r = p(N, t), i = await v.open(r, _.O_RDONLY | _.O_NOFOLLOW);
|
|
42
|
+
try {
|
|
43
|
+
let t = await i.stat(), a = await v.lstat(r);
|
|
44
|
+
if (!t.isFile() || !a.isFile() || a.dev !== t.dev || a.ino !== t.ino) throw y();
|
|
45
|
+
if (t.size > n) throw new e({
|
|
46
|
+
budget: "geometryImportedSourceBytes",
|
|
47
|
+
limit: n
|
|
48
|
+
});
|
|
49
|
+
let s = new Uint8Array(t.size + 1), c = 0;
|
|
50
|
+
for (; c < s.length;) {
|
|
51
|
+
let e = await i.read(s, c, s.length - c, null);
|
|
52
|
+
if (!e.bytesRead) break;
|
|
53
|
+
c += e.bytesRead;
|
|
54
|
+
}
|
|
55
|
+
let l = await i.stat(), u = await v.lstat(r);
|
|
56
|
+
if (c !== t.size || l.size !== t.size || l.mtimeMs !== t.mtimeMs || l.ctimeMs !== t.ctimeMs || u.dev !== t.dev || u.ino !== t.ino) throw y();
|
|
57
|
+
return await o(), s.subarray(0, c);
|
|
58
|
+
} finally {
|
|
59
|
+
await i.close();
|
|
60
|
+
}
|
|
61
|
+
}, l = await s("manifest.json", j), d = n(JSON.parse(new TextDecoder("utf-8", { fatal: !0 }).decode(l)), [
|
|
62
|
+
"tenantId",
|
|
63
|
+
"kind",
|
|
64
|
+
"worldId",
|
|
65
|
+
"version",
|
|
66
|
+
"chunks",
|
|
67
|
+
"manifestSha256"
|
|
68
|
+
]), f = u({
|
|
69
|
+
tenantId: d.tenantId,
|
|
70
|
+
kind: d.kind,
|
|
71
|
+
worldId: d.worldId,
|
|
72
|
+
version: d.version,
|
|
73
|
+
chunks: d.chunks
|
|
74
|
+
}, k, j);
|
|
75
|
+
if (f.tenantId !== w || f.kind !== S.kind || f.worldId !== x.name || f.version !== T || d.manifestSha256 !== f.manifestSha256) throw y();
|
|
76
|
+
let m = [], h = 0;
|
|
77
|
+
for (let e of f.chunks) {
|
|
78
|
+
let t = await s(e.blobSha256 + ".bin", Math.min(16777216, A - h));
|
|
79
|
+
h += t.length;
|
|
80
|
+
let n = await r(e.kind, t, e.blobSha256, M.get(e.kind) ?? {});
|
|
81
|
+
if (i(n, e), n.contentSha256 !== e.contentSha256 || !c(n, S.chunkSizeRaw)) throw y();
|
|
82
|
+
m.push(n);
|
|
83
|
+
}
|
|
84
|
+
let g = await s("manifest.json", j);
|
|
85
|
+
if (g.length !== l.length || g.some((e, t) => e !== l[t])) throw y();
|
|
86
|
+
return await o(), Object.freeze({
|
|
87
|
+
manifest: f,
|
|
88
|
+
artifacts: Object.freeze(m)
|
|
89
|
+
});
|
|
90
|
+
} finally {
|
|
91
|
+
await t.close();
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
catch: (t) => t instanceof e ? t : y()
|
|
95
|
+
})) : d.fail(y());
|
|
96
|
+
} catch (t) {
|
|
97
|
+
return d.fail(t instanceof e ? t : y());
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
//#endregion
|
|
101
|
+
export { x as loadImportedGeometryPublication };
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { captureGeometryKind as e, captureGeometryPersistenceScope as t, captureGeometryReceipt as n, geometryPersistenceId as r, geometryPersistenceInteger as i } from "./geometryPersistenceData.js";
|
|
2
|
+
import { defaultGeometryApplyOp as a, defaultGeometryOpValidator as o } from "./geometryEdits.js";
|
|
3
|
+
import { defaultGeometryCollisionDerive as s, defaultGeometryNavDerive as c } from "./geometryDerivationStrategies.js";
|
|
4
|
+
import { GEO_JOURNAL_ARCHIVES_TABLE as l } from "./geometryJournalArchiveTable.js";
|
|
5
|
+
import { defaultGeometryMigrateDelta as u } from "./geometryMigrationStrategies.js";
|
|
6
|
+
import { defaultGeometryCompaction as d } from "./geometryCompactionStrategies.js";
|
|
7
|
+
import { captureWorldCatalog as f } from "./world.js";
|
|
8
|
+
import { GEO_MIGRATIONS_TABLE as p } from "./geometryMigrationJournal.js";
|
|
9
|
+
import { captureGeometryJournalArchiveReference as m } from "./geometryJournalArchiveData.js";
|
|
10
|
+
import { geometryPersistenceDigest as h, geometryPersistenceScopeKey as g, geometryPersistenceVersionKey as _ } from "./geometryPersistenceCapture.js";
|
|
11
|
+
import { GEO_CHUNK_DELTAS_TABLE as v, GEO_JOURNAL_TABLE as y, GEO_VERSIONS_TABLE as b } from "./geometryPersistence.js";
|
|
12
|
+
import { captureGeometryMigrationReceipt as x } from "./geometryMigrations.js";
|
|
13
|
+
import { decodeGeometryInspection as S } from "./geometryInspection.js";
|
|
14
|
+
import { and as C, eq as w, gt as T } from "@voltro/database";
|
|
15
|
+
import { Effect as E, Result as D } from "effect";
|
|
16
|
+
import { parseReplicaSelection as O } from "@voltro/protocol/inspect";
|
|
17
|
+
//#region src/geometryInspectEndpoint.ts
|
|
18
|
+
var k = (e) => {
|
|
19
|
+
let t = e instanceof Date ? e : typeof e == "string" ? new Date(e) : null;
|
|
20
|
+
if (!t || !Number.isFinite(t.getTime())) throw Error("Invalid recorded geometry timestamp");
|
|
21
|
+
return t.toISOString();
|
|
22
|
+
}, A = (A, j) => {
|
|
23
|
+
let M = f(j);
|
|
24
|
+
if (M.length !== A.worlds.length || M.some((e, t) => e !== A.worlds[t])) throw Error("Geometry inspection catalog differs from the actual API owner");
|
|
25
|
+
let N = M.filter((e) => e.geometry !== void 0), P = N.map((e) => {
|
|
26
|
+
let t = e.geometry;
|
|
27
|
+
return {
|
|
28
|
+
worldId: e.name,
|
|
29
|
+
kind: t.kind,
|
|
30
|
+
staticSource: t.static.kind,
|
|
31
|
+
chunkSizeRaw: t.chunkSizeRaw,
|
|
32
|
+
dynamicEnabled: t.dynamic.enabled,
|
|
33
|
+
migrationStrategy: t.strategies.migrateDelta === u ? "default" : "custom",
|
|
34
|
+
compactionStrategy: t.strategies.compaction === d ? "default" : "custom",
|
|
35
|
+
collisionDeriveStrategy: t.strategies.collisionDerive === s ? "default" : "custom",
|
|
36
|
+
navDeriveStrategy: t.strategies.navDerive === c ? "default" : "custom",
|
|
37
|
+
opValidatorStrategy: t.strategies.opValidator === o ? "default" : "custom",
|
|
38
|
+
applyOpStrategy: t.strategies.applyOp === a ? "default" : "custom",
|
|
39
|
+
overlapTestBudget: t.budgets.maxOverlapTests,
|
|
40
|
+
rayCellBudget: t.budgets.maxRayCells,
|
|
41
|
+
deltaByteBudget: t.dynamic.maxDeltaBytesPerChunk,
|
|
42
|
+
preparedChunkBudget: t.budgets.maxPreparedChunks,
|
|
43
|
+
preparedByteBudget: t.budgets.maxPreparedBytes,
|
|
44
|
+
marginChunks: t.streaming.cell.marginChunks
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
method: "GET",
|
|
49
|
+
path: "/geometry",
|
|
50
|
+
scope: "shared-store",
|
|
51
|
+
description: "Declared geometry budgets and paged redacted durable metadata",
|
|
52
|
+
handler: (a) => E.gen(function* () {
|
|
53
|
+
let o = yield* E.result(E.try({
|
|
54
|
+
try: () => {
|
|
55
|
+
let e = new URL(a.url, "http://inspect.local").searchParams;
|
|
56
|
+
O(e), e.delete("replica"), e.delete("replicas");
|
|
57
|
+
for (let t of e.keys()) if (![
|
|
58
|
+
"tenantId",
|
|
59
|
+
"table",
|
|
60
|
+
"after"
|
|
61
|
+
].includes(t) || e.getAll(t).length !== 1) throw Error("Invalid geometry query");
|
|
62
|
+
let t = r(e.get("tenantId")), n = e.get("table") ?? "deltas", i = e.has("after") ? r(e.get("after")) : null;
|
|
63
|
+
if (![
|
|
64
|
+
"versions",
|
|
65
|
+
"deltas",
|
|
66
|
+
"journal",
|
|
67
|
+
"migrations",
|
|
68
|
+
"archives"
|
|
69
|
+
].includes(n) || (!N.length || n === "migrations" && !A.geometryMigrationsEnabled || n === "archives" && !A.geometryJournalArchives) && i !== null) throw Error("Invalid geometry selection");
|
|
70
|
+
return {
|
|
71
|
+
tenantId: t,
|
|
72
|
+
table: n,
|
|
73
|
+
after: i
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
catch: () => "Invalid geometry query"
|
|
77
|
+
}));
|
|
78
|
+
if (D.isFailure(o)) return {
|
|
79
|
+
kind: "json",
|
|
80
|
+
status: 400,
|
|
81
|
+
data: { error: "Geometry inspection requires one tenant and a valid recorded-data page" }
|
|
82
|
+
};
|
|
83
|
+
let s = o.success, c = N.length > 0, u = c && A.geometryMigrationsEnabled, d = c && A.geometryAssetUrls, f = c && A.geometryJournalArchives, j = f && A.geometryJournalRetention, M = c && A.geometryAdminControls;
|
|
84
|
+
if (!c || s.table === "migrations" && !u || s.table === "archives" && !f) return {
|
|
85
|
+
kind: "json",
|
|
86
|
+
data: S({
|
|
87
|
+
installed: c,
|
|
88
|
+
migrationsInstalled: u,
|
|
89
|
+
assetUrlsInstalled: d,
|
|
90
|
+
archivesInstalled: f,
|
|
91
|
+
retentionInstalled: j,
|
|
92
|
+
adminControlsInstalled: M,
|
|
93
|
+
sourceBound: c && A.status().phase === "ready",
|
|
94
|
+
page: {
|
|
95
|
+
...s,
|
|
96
|
+
nextAfter: null
|
|
97
|
+
},
|
|
98
|
+
configuration: P,
|
|
99
|
+
rows: []
|
|
100
|
+
})
|
|
101
|
+
};
|
|
102
|
+
let F = yield* E.result(A.inspect(async (a) => {
|
|
103
|
+
let o = A.status().phase, E = s.table === "versions" ? b : s.table === "deltas" ? v : s.table === "migrations" ? p : s.table === "archives" ? l : y, D = s.table === "archives" ? [
|
|
104
|
+
"id",
|
|
105
|
+
"tenantId",
|
|
106
|
+
"scopeKey",
|
|
107
|
+
"requestKey",
|
|
108
|
+
"archive",
|
|
109
|
+
"createdAt"
|
|
110
|
+
] : s.table === "migrations" ? [
|
|
111
|
+
"id",
|
|
112
|
+
"tenantId",
|
|
113
|
+
"requestKey",
|
|
114
|
+
"inputSha256",
|
|
115
|
+
"fromScopeKey",
|
|
116
|
+
"toScopeKey",
|
|
117
|
+
"receipt",
|
|
118
|
+
"createdAt"
|
|
119
|
+
] : s.table === "versions" ? [
|
|
120
|
+
"id",
|
|
121
|
+
"tenantId",
|
|
122
|
+
"versionKey",
|
|
123
|
+
"worldId",
|
|
124
|
+
"kind",
|
|
125
|
+
"version",
|
|
126
|
+
"manifestChunks",
|
|
127
|
+
"createdAt"
|
|
128
|
+
] : s.table === "deltas" ? [
|
|
129
|
+
"id",
|
|
130
|
+
"tenantId",
|
|
131
|
+
"scopeKey",
|
|
132
|
+
"scope",
|
|
133
|
+
"revision",
|
|
134
|
+
"updatedAt"
|
|
135
|
+
] : [
|
|
136
|
+
"id",
|
|
137
|
+
"tenantId",
|
|
138
|
+
"scopeKey",
|
|
139
|
+
"requestKey",
|
|
140
|
+
"receipt",
|
|
141
|
+
"createdAt"
|
|
142
|
+
], O = await a.query({
|
|
143
|
+
table: E,
|
|
144
|
+
predicate: C(w("tenantId", s.tenantId), ...s.table === "archives" ? [w("releasedAt", null)] : [], ...s.after === null ? [] : [T("id", s.after)]),
|
|
145
|
+
order: [{
|
|
146
|
+
column: "id",
|
|
147
|
+
direction: "asc"
|
|
148
|
+
}],
|
|
149
|
+
take: 51,
|
|
150
|
+
skip: void 0,
|
|
151
|
+
projection: D
|
|
152
|
+
});
|
|
153
|
+
if (O.length > 51 || new Set(O.map((e) => e.id)).size !== O.length || O.some((e, t) => e.tenantId !== s.tenantId || s.after !== null && r(e.id) <= s.after || t > 0 && r(O[t - 1].id) >= r(e.id))) throw Error("Geometry metadata escaped its page scope");
|
|
154
|
+
let N = O.slice(0, 50).map((a) => {
|
|
155
|
+
if (s.table === "migrations") {
|
|
156
|
+
let e = x(a.receipt), t = e.to;
|
|
157
|
+
if (t.tenantId !== s.tenantId || a.requestKey !== e.requestKey || a.inputSha256 !== e.inputSha256 || a.fromScopeKey !== g(e.from) || a.toScopeKey !== g(t)) throw Error("Geometry migration metadata changed scope");
|
|
158
|
+
return {
|
|
159
|
+
id: r(a.id),
|
|
160
|
+
worldId: t.worldId,
|
|
161
|
+
kind: t.kind,
|
|
162
|
+
version: t.version,
|
|
163
|
+
coordinates: {
|
|
164
|
+
cx: t.cx,
|
|
165
|
+
cy: t.cy,
|
|
166
|
+
...t.cz === void 0 ? {} : { cz: t.cz }
|
|
167
|
+
},
|
|
168
|
+
revision: e.revision,
|
|
169
|
+
changed: null,
|
|
170
|
+
manifestChunks: null,
|
|
171
|
+
migration: {
|
|
172
|
+
fromVersion: e.from.version,
|
|
173
|
+
fromRevision: e.fromRevision,
|
|
174
|
+
decision: e.decision,
|
|
175
|
+
staticChanged: e.staticChanged
|
|
176
|
+
},
|
|
177
|
+
observedAt: k(a.createdAt)
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
if (s.table === "versions") {
|
|
181
|
+
let t = {
|
|
182
|
+
tenantId: s.tenantId,
|
|
183
|
+
kind: e(a.kind),
|
|
184
|
+
worldId: r(a.worldId, 96),
|
|
185
|
+
version: r(a.version, 96)
|
|
186
|
+
};
|
|
187
|
+
if (a.versionKey !== _(t)) throw Error("Geometry version metadata could not be admitted");
|
|
188
|
+
return {
|
|
189
|
+
id: r(a.id),
|
|
190
|
+
worldId: t.worldId,
|
|
191
|
+
kind: t.kind,
|
|
192
|
+
version: t.version,
|
|
193
|
+
coordinates: null,
|
|
194
|
+
revision: null,
|
|
195
|
+
changed: null,
|
|
196
|
+
manifestChunks: i(a.manifestChunks, 1, 4096),
|
|
197
|
+
migration: null,
|
|
198
|
+
observedAt: k(a.createdAt)
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
let o = s.table === "archives" ? m(a.archive).receipt : s.table === "journal" ? n(a.receipt) : null, c = o?.scope ?? t(a.scope);
|
|
202
|
+
if (c.tenantId !== s.tenantId || a.scopeKey !== g(c) || o && a.requestKey !== h(JSON.stringify([s.tenantId, o.requestId]))) throw Error("Geometry scope metadata could not be admitted");
|
|
203
|
+
return {
|
|
204
|
+
id: r(a.id),
|
|
205
|
+
worldId: c.worldId,
|
|
206
|
+
kind: c.kind,
|
|
207
|
+
version: c.version,
|
|
208
|
+
coordinates: {
|
|
209
|
+
cx: c.cx,
|
|
210
|
+
cy: c.cy,
|
|
211
|
+
...c.cz === void 0 ? {} : { cz: c.cz }
|
|
212
|
+
},
|
|
213
|
+
revision: o?.revision ?? i(a.revision, 1),
|
|
214
|
+
changed: o?.changed ?? null,
|
|
215
|
+
manifestChunks: null,
|
|
216
|
+
migration: null,
|
|
217
|
+
observedAt: k(s.table === "journal" || s.table === "archives" ? a.createdAt : a.updatedAt)
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
return S({
|
|
221
|
+
installed: c,
|
|
222
|
+
migrationsInstalled: u,
|
|
223
|
+
assetUrlsInstalled: d,
|
|
224
|
+
archivesInstalled: f,
|
|
225
|
+
retentionInstalled: j,
|
|
226
|
+
adminControlsInstalled: M,
|
|
227
|
+
sourceBound: o === "ready",
|
|
228
|
+
configuration: P,
|
|
229
|
+
page: {
|
|
230
|
+
...s,
|
|
231
|
+
nextAfter: O.length > 50 ? N.at(-1).id : null
|
|
232
|
+
},
|
|
233
|
+
rows: N
|
|
234
|
+
});
|
|
235
|
+
}));
|
|
236
|
+
return D.isFailure(F) ? {
|
|
237
|
+
kind: "json",
|
|
238
|
+
status: 503,
|
|
239
|
+
data: { error: "Recorded geometry metadata is unavailable" }
|
|
240
|
+
} : {
|
|
241
|
+
kind: "json",
|
|
242
|
+
data: F.success
|
|
243
|
+
};
|
|
244
|
+
})
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
//#endregion
|
|
248
|
+
export { A as roomsGeometryInspectEndpoint };
|