@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,210 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
|
|
3
|
+
export declare const defaultLockstepDesync: (_incident: LockstepDesyncContext, configuredAction: LockstepDesyncAction) => LockstepDesyncAction;
|
|
4
|
+
|
|
5
|
+
export declare const defaultLockstepRefereeLag: (configuredTicks: number) => number;
|
|
6
|
+
|
|
7
|
+
export declare const defaultLockstepStallPolicy: (offered: LockstepStallPolicyOptions) => LockstepStallPolicy;
|
|
8
|
+
|
|
9
|
+
/** Actual default budget slot; every value is configuration, not a proof. */
|
|
10
|
+
export declare const defaultRoomBudgets: (overrides?: Partial<RoomBudgets>) => RoomBudgets;
|
|
11
|
+
|
|
12
|
+
export declare const defaultRoomReconnectPolicy: (options?: Partial<{
|
|
13
|
+
readonly graceMs: number;
|
|
14
|
+
}>) => {
|
|
15
|
+
readonly graceMs: number;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/** Pure resource-lifetime scheduler, not a store or simulation hot-data backend.
|
|
19
|
+
* FIFO head reservation prevents a stream of small snapshots starving a large
|
|
20
|
+
* one. Durable boundaries account debt instead of losing committed intentions. */
|
|
21
|
+
export declare const defaultRoomSnapshotBudget: RoomSnapshotBudgetFactory;
|
|
22
|
+
|
|
23
|
+
/** Actual checkpoint cadence/encoding default, captured when the Room is defined.
|
|
24
|
+
* Commands, initial publication and terminal persistence bypass this cadence. */
|
|
25
|
+
export declare const defaultRoomSnapshotPolicy: <S>(options?: Readonly<Partial<RoomSnapshotPolicy<S>>>) => RoomSnapshotPolicy<S>;
|
|
26
|
+
|
|
27
|
+
/** Configuration only; no capacity assertion, history allocation or authority. */
|
|
28
|
+
export declare const defaultRoomSpectatorPolicy: (input?: Readonly<Partial<RoomSpectatorPolicy>>) => RoomSpectatorPolicy;
|
|
29
|
+
|
|
30
|
+
/** Per-client output remains detached even for the full-state default. */
|
|
31
|
+
export declare const defaultRoomView: <S>(context: RoomViewContext<S>) => S;
|
|
32
|
+
|
|
33
|
+
/** Pure exported default. SQL/borrowed membership supply eligible candidates;
|
|
34
|
+
* this function neither allocates a room nor mutates advertised capacity. */
|
|
35
|
+
export declare const leastLoadedRoomHostInRegion: (hosts: ReadonlyArray<RoomHostListing>, region: string) => RoomHostListing | null;
|
|
36
|
+
|
|
37
|
+
declare type LockstepDesyncAction = 'resync' | 'end' | 'flag';
|
|
38
|
+
|
|
39
|
+
declare interface LockstepDesyncContext {
|
|
40
|
+
readonly tick: number;
|
|
41
|
+
readonly playerId: number;
|
|
42
|
+
readonly expected: Uint64Words;
|
|
43
|
+
readonly received: Uint64Words;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
declare interface LockstepStallPolicy {
|
|
47
|
+
readonly afterTicks: number;
|
|
48
|
+
readonly action: 'pause' | 'drop-player';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
declare interface LockstepStallPolicyOptions {
|
|
52
|
+
readonly afterTicks?: number;
|
|
53
|
+
readonly action?: 'pause' | 'drop-player';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Actual default prediction. Caller supplies bounded captured input and owns
|
|
57
|
+
* copy/authority; returning the last value does not confirm a server tick. */
|
|
58
|
+
export declare const repeatLastLockstepInput: <I>(last: I, _context: {
|
|
59
|
+
readonly playerId: number;
|
|
60
|
+
readonly tick: number;
|
|
61
|
+
}) => I;
|
|
62
|
+
|
|
63
|
+
export declare interface RoomAuthoringStrategies<S = unknown> {
|
|
64
|
+
readonly budgets?: (options: Readonly<Partial<RoomBudgets>>) => RoomBudgets;
|
|
65
|
+
readonly reconnectPolicy?: (options: Readonly<Partial<{
|
|
66
|
+
readonly graceMs: number;
|
|
67
|
+
}>>) => {
|
|
68
|
+
readonly graceMs: number;
|
|
69
|
+
};
|
|
70
|
+
readonly snapshotPolicy?: (options: Readonly<Partial<RoomSnapshotPolicy<S>>>) => RoomSnapshotPolicy<S>;
|
|
71
|
+
readonly spectatorPolicy?: (options: Readonly<Partial<RoomSpectatorPolicy>>) => RoomSpectatorPolicy;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export declare interface RoomBudgets {
|
|
75
|
+
readonly inputsPerSecond: number;
|
|
76
|
+
readonly bytesPerSecond: number;
|
|
77
|
+
readonly burst: number;
|
|
78
|
+
readonly maxQueuedInputs: number;
|
|
79
|
+
readonly maxOutboxCommands: number;
|
|
80
|
+
readonly maxScheduledHooks: number;
|
|
81
|
+
readonly maxQueuedLifecycleHooks: number;
|
|
82
|
+
readonly maxNpcs: number;
|
|
83
|
+
/** A player input acting on state older than this many milliseconds behind the newest state
|
|
84
|
+
* the Host sent that client is dropped (it arrived too late to apply fairly). */
|
|
85
|
+
readonly inputLatencyBudgetMs: number;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
declare interface RoomClient {
|
|
89
|
+
readonly sessionId: string;
|
|
90
|
+
readonly subjectId: string | null;
|
|
91
|
+
readonly tenantId: string;
|
|
92
|
+
/** App data the API resolved for this seat (`seatAttributes` on the Rooms API binding), signed into
|
|
93
|
+
* the seat; absent without one. Not a secret from the player: it travels in their seat token. */
|
|
94
|
+
readonly attributes?: RoomSeatAttributes | undefined;
|
|
95
|
+
/** Actor-owned classification, never accepted from a socket input. */
|
|
96
|
+
readonly isBot?: boolean | undefined;
|
|
97
|
+
readonly countsAsPlayer?: boolean | undefined;
|
|
98
|
+
send(channel: string, payload: unknown): void;
|
|
99
|
+
kick(reason: string): void;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
declare interface RoomCodecLimits {
|
|
103
|
+
readonly maxBytes: number;
|
|
104
|
+
readonly maxCollectionLength: number;
|
|
105
|
+
readonly maxFieldId: number;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
declare interface RoomHostListing {
|
|
109
|
+
readonly pool?: string | undefined;
|
|
110
|
+
readonly clientCapacity?: number | undefined;
|
|
111
|
+
readonly id: string;
|
|
112
|
+
readonly address: string;
|
|
113
|
+
readonly webTransportAddress?: string | undefined;
|
|
114
|
+
readonly webTransportCertificateHash?: string | undefined;
|
|
115
|
+
readonly region: string;
|
|
116
|
+
readonly capacity: number;
|
|
117
|
+
readonly rooms: number;
|
|
118
|
+
readonly clients: number;
|
|
119
|
+
readonly cpu: number;
|
|
120
|
+
readonly lastHeartbeatAt: number;
|
|
121
|
+
/** Last registered SQL routing admission, not proof of membership liveness. */
|
|
122
|
+
readonly ready: boolean;
|
|
123
|
+
/** Process identity, never a sender-clock liveness deadline. */
|
|
124
|
+
readonly membership?: {
|
|
125
|
+
readonly instanceId: string | undefined;
|
|
126
|
+
readonly startedAt: number;
|
|
127
|
+
} | undefined;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
declare type RoomScalar = string | number | boolean | null;
|
|
131
|
+
|
|
132
|
+
/** App data for one seat, resolved by the API when the seat is reserved (`seatAttributes`) and signed
|
|
133
|
+
* into it; scalars only, at most 16 keys and 2 KiB. */
|
|
134
|
+
declare type RoomSeatAttributes = Readonly<Record<string, RoomScalar>>;
|
|
135
|
+
|
|
136
|
+
export declare type RoomSnapshotBudgetFactory = (options: Readonly<RoomSnapshotBudgetOptions>) => RoomSnapshotBudgetService;
|
|
137
|
+
|
|
138
|
+
export declare interface RoomSnapshotBudgetOptions {
|
|
139
|
+
readonly budgetBytesPerSec?: number;
|
|
140
|
+
readonly burstBytes?: number;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export declare interface RoomSnapshotBudgetService {
|
|
144
|
+
/** Account a durable boundary without dropping commands/initial/terminal
|
|
145
|
+
* state. Its debt defers subsequent periodic snapshots. */
|
|
146
|
+
forced(bytes: number, now: number): void;
|
|
147
|
+
periodic(roomId: string, bytes: number, now: number): boolean;
|
|
148
|
+
/** A blocked periodic head cannot be bypassed by smaller periodic payloads. */
|
|
149
|
+
blocked(roomId: string): boolean;
|
|
150
|
+
forget(roomId: string): void;
|
|
151
|
+
metrics(): {
|
|
152
|
+
readonly deferred: number;
|
|
153
|
+
readonly forcedBytes: number;
|
|
154
|
+
readonly periodicBytes: number;
|
|
155
|
+
readonly debtBytes: number;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export declare interface RoomSnapshotPolicy<S> {
|
|
160
|
+
readonly everyMs: number;
|
|
161
|
+
readonly onlyIfChanged: boolean;
|
|
162
|
+
readonly mode: 'full' | 'delta';
|
|
163
|
+
readonly fullEvery: number;
|
|
164
|
+
readonly keepFulls: number;
|
|
165
|
+
readonly store: 'auto';
|
|
166
|
+
/** Maximum inline codec payload; the host may impose a smaller cutoff. */
|
|
167
|
+
readonly maxInlineBytes: number;
|
|
168
|
+
/** Full-schema projection of volatile data; never a partial-state format. */
|
|
169
|
+
readonly pick: (state: S) => S;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export declare interface RoomSpectatorPolicy {
|
|
173
|
+
readonly delayMs: number;
|
|
174
|
+
readonly retentionMs: number;
|
|
175
|
+
readonly maxFrames: number;
|
|
176
|
+
readonly maxBytes: number;
|
|
177
|
+
readonly maxFrameBytes: number;
|
|
178
|
+
readonly checkpointEveryMs: number;
|
|
179
|
+
readonly maxDeliveryFrames: number;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export declare interface RoomViewContext<S> {
|
|
183
|
+
readonly state: S;
|
|
184
|
+
readonly client: Pick<RoomClient, 'sessionId' | 'subjectId' | 'tenantId' | 'isBot' | 'countsAsPlayer' | 'attributes'>;
|
|
185
|
+
readonly role: 'player' | 'spectator';
|
|
186
|
+
readonly tick: number;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Exported default hash slot, reusing the admitted schema state codec. */
|
|
190
|
+
export declare const schemaSimulationHash: <S extends Schema.Codec<unknown, unknown>>(codec: SimulationStateCodec<S>, state: S["Type"]) => Uint64Words;
|
|
191
|
+
|
|
192
|
+
declare interface SimulationStateCodec<S extends Schema.Codec<unknown, unknown>> {
|
|
193
|
+
readonly limits: SimulationValueLimits;
|
|
194
|
+
/** Admitted capture/hash plan, not a binary Room wire schema. */
|
|
195
|
+
schemaDescription?(): string;
|
|
196
|
+
capture(value: unknown): (S)["Type"];
|
|
197
|
+
hash(value: (S)["Type"]): Uint64Words;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
declare interface SimulationValueLimits extends RoomCodecLimits {
|
|
201
|
+
readonly maxNodes: number;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Exact unsigned 64-bit integer as independent 32-bit words. */
|
|
205
|
+
declare interface Uint64Words {
|
|
206
|
+
readonly hi: number;
|
|
207
|
+
readonly lo: number;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export { }
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { schemaSimulationHash as e } from "./simulationState.js";
|
|
2
|
+
import { defaultLockstepDesync as t, defaultLockstepRefereeLag as n, defaultLockstepStallPolicy as r } from "./lockstepPolicies.js";
|
|
3
|
+
import { defaultRoomSpectatorPolicy as i } from "./spectatorPolicy.js";
|
|
4
|
+
import { defaultRoomBudgets as a, defaultRoomReconnectPolicy as o, defaultRoomSnapshotPolicy as s, defaultRoomView as c } from "./room.js";
|
|
5
|
+
import { defaultRoomSnapshotBudget as l } from "./snapshotBudget.js";
|
|
6
|
+
import { leastLoadedRoomHostInRegion as u } from "./hostSelection.js";
|
|
7
|
+
import { repeatLastLockstepInput as d } from "./lockstepStrategies.js";
|
|
8
|
+
export { t as defaultLockstepDesync, n as defaultLockstepRefereeLag, r as defaultLockstepStallPolicy, a as defaultRoomBudgets, o as defaultRoomReconnectPolicy, l as defaultRoomSnapshotBudget, s as defaultRoomSnapshotPolicy, i as defaultRoomSpectatorPolicy, c as defaultRoomView, u as leastLoadedRoomHostInRegion, d as repeatLastLockstepInput, e as schemaSimulationHash };
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
import { SessionSecrets } from '@voltro/protocol/session';
|
|
3
|
+
|
|
4
|
+
export declare const captureRoomLockstepInitialStrategies: (offered?: Partial<RoomLockstepInitialStrategies>) => RoomLockstepInitialStrategies;
|
|
5
|
+
|
|
6
|
+
export declare const defaultLockstepDesync: (_incident: LockstepDesyncContext, configuredAction: LockstepDesyncAction) => LockstepDesyncAction;
|
|
7
|
+
|
|
8
|
+
export declare const defaultLockstepRefereeLag: (configuredTicks: number) => number;
|
|
9
|
+
|
|
10
|
+
export declare const defaultLockstepStallPolicy: (offered: LockstepStallPolicyOptions) => LockstepStallPolicy;
|
|
11
|
+
|
|
12
|
+
/** Actual default budget slot; every value is configuration, not a proof. */
|
|
13
|
+
export declare const defaultRoomBudgets: (overrides?: Partial<RoomBudgets>) => RoomBudgets;
|
|
14
|
+
|
|
15
|
+
export declare const defaultRoomReconnectPolicy: (options?: Partial<{
|
|
16
|
+
readonly graceMs: number;
|
|
17
|
+
}>) => {
|
|
18
|
+
readonly graceMs: number;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/** Pure resource-lifetime scheduler, not a store or simulation hot-data backend.
|
|
22
|
+
* FIFO head reservation prevents a stream of small snapshots starving a large
|
|
23
|
+
* one. Durable boundaries account debt instead of losing committed intentions. */
|
|
24
|
+
export declare const defaultRoomSnapshotBudget: RoomSnapshotBudgetFactory;
|
|
25
|
+
|
|
26
|
+
/** Actual checkpoint cadence/encoding default, captured when the Room is defined.
|
|
27
|
+
* Commands, initial publication and terminal persistence bypass this cadence. */
|
|
28
|
+
export declare const defaultRoomSnapshotPolicy: <S>(options?: Readonly<Partial<RoomSnapshotPolicy<S>>>) => RoomSnapshotPolicy<S>;
|
|
29
|
+
|
|
30
|
+
/** Configuration only; no capacity assertion, history allocation or authority. */
|
|
31
|
+
export declare const defaultRoomSpectatorPolicy: (input?: Readonly<Partial<RoomSpectatorPolicy>>) => RoomSpectatorPolicy;
|
|
32
|
+
|
|
33
|
+
/** Per-client output remains detached even for the full-state default. */
|
|
34
|
+
export declare const defaultRoomView: <S>(context: RoomViewContext<S>) => S;
|
|
35
|
+
|
|
36
|
+
/** Public opaque ordinal selected by the actual server, never identity authority. */
|
|
37
|
+
export declare const firstFreeRoomLockstepPlayerId: (offered: RoomLockstepInitialPlayerContext) => number;
|
|
38
|
+
|
|
39
|
+
/** Pure exported default. SQL/borrowed membership supply eligible candidates;
|
|
40
|
+
* this function neither allocates a room nor mutates advertised capacity. */
|
|
41
|
+
export declare const leastLoadedRoomHostInRegion: (hosts: ReadonlyArray<RoomHostListing>, region: string) => RoomHostListing | null;
|
|
42
|
+
|
|
43
|
+
declare type LockstepDesyncAction = 'resync' | 'end' | 'flag';
|
|
44
|
+
|
|
45
|
+
declare interface LockstepDesyncContext {
|
|
46
|
+
readonly tick: number;
|
|
47
|
+
readonly playerId: number;
|
|
48
|
+
readonly expected: Uint64Words;
|
|
49
|
+
readonly received: Uint64Words;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
declare interface LockstepStallPolicy {
|
|
53
|
+
readonly afterTicks: number;
|
|
54
|
+
readonly action: 'pause' | 'drop-player';
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
declare interface LockstepStallPolicyOptions {
|
|
58
|
+
readonly afterTicks?: number;
|
|
59
|
+
readonly action?: 'pause' | 'drop-player';
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Outside-tick server creation slot. Public simulation seed, recorded once in
|
|
63
|
+
* SQL before Seats; never a credential, clock-derived seed or player state. */
|
|
64
|
+
export declare const randomRoomLockstepSeed: () => number;
|
|
65
|
+
|
|
66
|
+
/** Actual default prediction. Caller supplies bounded captured input and owns
|
|
67
|
+
* copy/authority; returning the last value does not confirm a server tick. */
|
|
68
|
+
export declare const repeatLastLockstepInput: <I>(last: I, _context: {
|
|
69
|
+
readonly playerId: number;
|
|
70
|
+
readonly tick: number;
|
|
71
|
+
}) => I;
|
|
72
|
+
|
|
73
|
+
export declare const resolveRoomLockstepInitialPlayerId: (offered: RoomLockstepInitialPlayerContext, strategy?: RoomLockstepInitialStrategies["playerId"]) => number;
|
|
74
|
+
|
|
75
|
+
export declare const resolveRoomLockstepInitialStart: (offered: RoomLockstepInitialRosterContext, strategy?: RoomLockstepInitialStrategies["start"]) => boolean;
|
|
76
|
+
|
|
77
|
+
export declare const resolveRoomLockstepSeed: (source?: typeof randomRoomLockstepSeed) => number;
|
|
78
|
+
|
|
79
|
+
export declare interface RoomAuthoringStrategies<S = unknown> {
|
|
80
|
+
readonly budgets?: (options: Readonly<Partial<RoomBudgets>>) => RoomBudgets;
|
|
81
|
+
readonly reconnectPolicy?: (options: Readonly<Partial<{
|
|
82
|
+
readonly graceMs: number;
|
|
83
|
+
}>>) => {
|
|
84
|
+
readonly graceMs: number;
|
|
85
|
+
};
|
|
86
|
+
readonly snapshotPolicy?: (options: Readonly<Partial<RoomSnapshotPolicy<S>>>) => RoomSnapshotPolicy<S>;
|
|
87
|
+
readonly spectatorPolicy?: (options: Readonly<Partial<RoomSpectatorPolicy>>) => RoomSpectatorPolicy;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export declare interface RoomBudgets {
|
|
91
|
+
readonly inputsPerSecond: number;
|
|
92
|
+
readonly bytesPerSecond: number;
|
|
93
|
+
readonly burst: number;
|
|
94
|
+
readonly maxQueuedInputs: number;
|
|
95
|
+
readonly maxOutboxCommands: number;
|
|
96
|
+
readonly maxScheduledHooks: number;
|
|
97
|
+
readonly maxQueuedLifecycleHooks: number;
|
|
98
|
+
readonly maxNpcs: number;
|
|
99
|
+
/** A player input acting on state older than this many milliseconds behind the newest state
|
|
100
|
+
* the Host sent that client is dropped (it arrived too late to apply fairly). */
|
|
101
|
+
readonly inputLatencyBudgetMs: number;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
declare interface RoomClient {
|
|
105
|
+
readonly sessionId: string;
|
|
106
|
+
readonly subjectId: string | null;
|
|
107
|
+
readonly tenantId: string;
|
|
108
|
+
/** App data the API resolved for this seat (`seatAttributes` on the Rooms API binding), signed into
|
|
109
|
+
* the seat; absent without one. Not a secret from the player: it travels in their seat token. */
|
|
110
|
+
readonly attributes?: RoomSeatAttributes | undefined;
|
|
111
|
+
/** Actor-owned classification, never accepted from a socket input. */
|
|
112
|
+
readonly isBot?: boolean | undefined;
|
|
113
|
+
readonly countsAsPlayer?: boolean | undefined;
|
|
114
|
+
send(channel: string, payload: unknown): void;
|
|
115
|
+
kick(reason: string): void;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
declare interface RoomCodecLimits {
|
|
119
|
+
readonly maxBytes: number;
|
|
120
|
+
readonly maxCollectionLength: number;
|
|
121
|
+
readonly maxFieldId: number;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
declare interface RoomHostListing {
|
|
125
|
+
readonly pool?: string | undefined;
|
|
126
|
+
readonly clientCapacity?: number | undefined;
|
|
127
|
+
readonly id: string;
|
|
128
|
+
readonly address: string;
|
|
129
|
+
readonly webTransportAddress?: string | undefined;
|
|
130
|
+
readonly webTransportCertificateHash?: string | undefined;
|
|
131
|
+
readonly region: string;
|
|
132
|
+
readonly capacity: number;
|
|
133
|
+
readonly rooms: number;
|
|
134
|
+
readonly clients: number;
|
|
135
|
+
readonly cpu: number;
|
|
136
|
+
readonly lastHeartbeatAt: number;
|
|
137
|
+
/** Last registered SQL routing admission, not proof of membership liveness. */
|
|
138
|
+
readonly ready: boolean;
|
|
139
|
+
/** Process identity, never a sender-clock liveness deadline. */
|
|
140
|
+
readonly membership?: {
|
|
141
|
+
readonly instanceId: string | undefined;
|
|
142
|
+
readonly startedAt: number;
|
|
143
|
+
} | undefined;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export declare interface RoomLockstepInitialPlayerContext extends RoomLockstepInitialRosterContext {
|
|
147
|
+
/** Server-private current admitted identity, never projected to the roster wire. */
|
|
148
|
+
readonly subjectId: string;
|
|
149
|
+
readonly sessionId: string;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export declare interface RoomLockstepInitialRosterContext extends RoomLockstepRosterScope {
|
|
153
|
+
readonly maxPlayers: number;
|
|
154
|
+
readonly players: ReadonlyArray<RoomLockstepRosterPlayer>;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export declare interface RoomLockstepInitialStrategies {
|
|
158
|
+
readonly playerId: (context: RoomLockstepInitialPlayerContext) => number;
|
|
159
|
+
readonly start: (context: RoomLockstepInitialRosterContext) => boolean;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
declare interface RoomLockstepRosterPlayer {
|
|
163
|
+
readonly slot: number;
|
|
164
|
+
readonly playerId: number;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
declare interface RoomLockstepRosterScope {
|
|
168
|
+
readonly roomId: string;
|
|
169
|
+
readonly tenantId: string;
|
|
170
|
+
readonly epoch: number;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
declare type RoomScalar = string | number | boolean | null;
|
|
174
|
+
|
|
175
|
+
/** App data for one seat, resolved by the API when the seat is reserved (`seatAttributes`) and signed
|
|
176
|
+
* into it; scalars only, at most 16 keys and 2 KiB. */
|
|
177
|
+
declare type RoomSeatAttributes = Readonly<Record<string, RoomScalar>>;
|
|
178
|
+
|
|
179
|
+
export declare type RoomSeatClaims = Omit<(typeof SeatClaimsSchema)["Type"], 'purpose'>;
|
|
180
|
+
|
|
181
|
+
export declare interface RoomSeatTokenStrategies {
|
|
182
|
+
readonly sign: typeof signRoomSeat;
|
|
183
|
+
readonly verify: typeof verifiedRoomSeatClaims;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export declare type RoomSnapshotBudgetFactory = (options: Readonly<RoomSnapshotBudgetOptions>) => RoomSnapshotBudgetService;
|
|
187
|
+
|
|
188
|
+
export declare interface RoomSnapshotBudgetOptions {
|
|
189
|
+
readonly budgetBytesPerSec?: number;
|
|
190
|
+
readonly burstBytes?: number;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export declare interface RoomSnapshotBudgetService {
|
|
194
|
+
/** Account a durable boundary without dropping commands/initial/terminal
|
|
195
|
+
* state. Its debt defers subsequent periodic snapshots. */
|
|
196
|
+
forced(bytes: number, now: number): void;
|
|
197
|
+
periodic(roomId: string, bytes: number, now: number): boolean;
|
|
198
|
+
/** A blocked periodic head cannot be bypassed by smaller periodic payloads. */
|
|
199
|
+
blocked(roomId: string): boolean;
|
|
200
|
+
forget(roomId: string): void;
|
|
201
|
+
metrics(): {
|
|
202
|
+
readonly deferred: number;
|
|
203
|
+
readonly forcedBytes: number;
|
|
204
|
+
readonly periodicBytes: number;
|
|
205
|
+
readonly debtBytes: number;
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export declare interface RoomSnapshotPolicy<S> {
|
|
210
|
+
readonly everyMs: number;
|
|
211
|
+
readonly onlyIfChanged: boolean;
|
|
212
|
+
readonly mode: 'full' | 'delta';
|
|
213
|
+
readonly fullEvery: number;
|
|
214
|
+
readonly keepFulls: number;
|
|
215
|
+
readonly store: 'auto';
|
|
216
|
+
/** Maximum inline codec payload; the host may impose a smaller cutoff. */
|
|
217
|
+
readonly maxInlineBytes: number;
|
|
218
|
+
/** Full-schema projection of volatile data; never a partial-state format. */
|
|
219
|
+
readonly pick: (state: S) => S;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export declare interface RoomSpectatorPolicy {
|
|
223
|
+
readonly delayMs: number;
|
|
224
|
+
readonly retentionMs: number;
|
|
225
|
+
readonly maxFrames: number;
|
|
226
|
+
readonly maxBytes: number;
|
|
227
|
+
readonly maxFrameBytes: number;
|
|
228
|
+
readonly checkpointEveryMs: number;
|
|
229
|
+
readonly maxDeliveryFrames: number;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export declare interface RoomViewContext<S> {
|
|
233
|
+
readonly state: S;
|
|
234
|
+
readonly client: Pick<RoomClient, 'sessionId' | 'subjectId' | 'tenantId' | 'isBot' | 'countsAsPlayer' | 'attributes'>;
|
|
235
|
+
readonly role: 'player' | 'spectator';
|
|
236
|
+
readonly tick: number;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/** Exported default hash slot, reusing the admitted schema state codec. */
|
|
240
|
+
export declare const schemaSimulationHash: <S extends Schema.Codec<unknown, unknown>>(codec: SimulationStateCodec<S>, state: S["Type"]) => Uint64Words;
|
|
241
|
+
|
|
242
|
+
declare const SeatClaimsSchema: Schema.Struct<{
|
|
243
|
+
readonly purpose: Schema.Literal<"voltro.rooms.seat.v1">;
|
|
244
|
+
readonly roomId: Schema.NonEmptyString;
|
|
245
|
+
readonly sessionId: Schema.NonEmptyString;
|
|
246
|
+
readonly subjectId: Schema.NullOr<Schema.NonEmptyString>;
|
|
247
|
+
readonly subjectType: Schema.optionalKey<Schema.Literals<readonly ["user", "apiKey", "serviceAccount"]>>;
|
|
248
|
+
readonly subjectKind: Schema.optionalKey<Schema.Literal<"guest">>;
|
|
249
|
+
readonly tenantId: Schema.NonEmptyString;
|
|
250
|
+
readonly epoch: Schema.Int;
|
|
251
|
+
readonly nonce: Schema.NonEmptyString;
|
|
252
|
+
readonly expiresAt: Schema.Number;
|
|
253
|
+
readonly role: Schema.Literals<readonly ["player", "spectator"]>;
|
|
254
|
+
readonly attributes: Schema.optionalKey<Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.Null]>>>;
|
|
255
|
+
}>;
|
|
256
|
+
|
|
257
|
+
/** The caller supplies project-owned Rooms keys, never API-session keys.
|
|
258
|
+
* This is the ordinary framework HMAC primitive with a dedicated purpose and
|
|
259
|
+
* identity carrier, not an additional signature implementation. */
|
|
260
|
+
export declare const signRoomSeat: (claims: RoomSeatClaims, secrets: SessionSecrets, nowMs: number) => Uint8Array;
|
|
261
|
+
|
|
262
|
+
declare interface SimulationStateCodec<S extends Schema.Codec<unknown, unknown>> {
|
|
263
|
+
readonly limits: SimulationValueLimits;
|
|
264
|
+
/** Admitted capture/hash plan, not a binary Room wire schema. */
|
|
265
|
+
schemaDescription?(): string;
|
|
266
|
+
capture(value: unknown): (S)["Type"];
|
|
267
|
+
hash(value: (S)["Type"]): Uint64Words;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
declare interface SimulationValueLimits extends RoomCodecLimits {
|
|
271
|
+
readonly maxNodes: number;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export declare const startFullRoomLockstepRoster: (offered: RoomLockstepInitialRosterContext) => boolean;
|
|
275
|
+
|
|
276
|
+
/** Exact unsigned 64-bit integer as independent 32-bit words. */
|
|
277
|
+
declare interface Uint64Words {
|
|
278
|
+
readonly hi: number;
|
|
279
|
+
readonly lo: number;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/** Signature, purpose and exact millisecond expiry are checked before any
|
|
283
|
+
* durable seat operation. A valid token grants no application scopes. */
|
|
284
|
+
export declare const verifiedRoomSeatClaims: (token: Uint8Array, secrets: SessionSecrets, nowMs: number) => RoomSeatClaims;
|
|
285
|
+
|
|
286
|
+
export { }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { schemaSimulationHash as e } from "./simulationState.js";
|
|
2
|
+
import { defaultLockstepDesync as t, defaultLockstepRefereeLag as n, defaultLockstepStallPolicy as r } from "./lockstepPolicies.js";
|
|
3
|
+
import { defaultRoomSpectatorPolicy as i } from "./spectatorPolicy.js";
|
|
4
|
+
import { defaultRoomBudgets as a, defaultRoomReconnectPolicy as o, defaultRoomSnapshotPolicy as s, defaultRoomView as c } from "./room.js";
|
|
5
|
+
import { signRoomSeat as l, verifiedRoomSeatClaims as u } from "./seats.js";
|
|
6
|
+
import { defaultRoomSnapshotBudget as d } from "./snapshotBudget.js";
|
|
7
|
+
import { captureRoomLockstepInitialStrategies as f, firstFreeRoomLockstepPlayerId as p, resolveRoomLockstepInitialPlayerId as m, resolveRoomLockstepInitialStart as h, startFullRoomLockstepRoster as g } from "./lockstepInitialAdmission.js";
|
|
8
|
+
import { randomRoomLockstepSeed as _, resolveRoomLockstepSeed as v } from "./lockstepSeed.js";
|
|
9
|
+
import { leastLoadedRoomHostInRegion as y } from "./hostSelection.js";
|
|
10
|
+
import { repeatLastLockstepInput as b } from "./lockstepStrategies.js";
|
|
11
|
+
export { f as captureRoomLockstepInitialStrategies, t as defaultLockstepDesync, n as defaultLockstepRefereeLag, r as defaultLockstepStallPolicy, a as defaultRoomBudgets, o as defaultRoomReconnectPolicy, d as defaultRoomSnapshotBudget, s as defaultRoomSnapshotPolicy, i as defaultRoomSpectatorPolicy, c as defaultRoomView, p as firstFreeRoomLockstepPlayerId, y as leastLoadedRoomHostInRegion, _ as randomRoomLockstepSeed, b as repeatLastLockstepInput, m as resolveRoomLockstepInitialPlayerId, h as resolveRoomLockstepInitialStart, v as resolveRoomLockstepSeed, e as schemaSimulationHash, l as signRoomSeat, g as startFullRoomLockstepRoster, u as verifiedRoomSeatClaims };
|