spatialdds 0.7.3__tar.gz → 0.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. {spatialdds-0.7.3 → spatialdds-0.8.0}/PKG-INFO +40 -8
  2. {spatialdds-0.7.3 → spatialdds-0.8.0}/README.md +39 -7
  3. {spatialdds-0.7.3 → spatialdds-0.8.0}/pyproject.toml +1 -1
  4. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/__init__.py +1 -1
  5. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/openapi.html +1 -1
  6. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/openapi.yaml +313 -21
  7. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/__init__.py +2 -1
  8. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/_participant.py +56 -8
  9. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/codec.py +8 -1
  10. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/record.py +5 -2
  11. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/records.py +9 -1
  12. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/serve.py +43 -2
  13. spatialdds-0.8.0/spatialdds/server/bus.py +121 -0
  14. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/gateway.py +101 -4
  15. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/gw_http.py +172 -16
  16. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/idlmodel.py +36 -0
  17. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/mcapmeta.py +5 -0
  18. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/pin.py +6 -1
  19. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/publish.py +215 -15
  20. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/webjson.py +127 -1
  21. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/PKG-INFO +40 -8
  22. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/SOURCES.txt +1 -0
  23. {spatialdds-0.7.3 → spatialdds-0.8.0}/setup.cfg +0 -0
  24. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/anchors.idl +0 -0
  25. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/argeo.idl +0 -0
  26. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/common.idl +0 -0
  27. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/core.idl +0 -0
  28. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/discovery.idl +0 -0
  29. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/events.idl +0 -0
  30. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/lidar.idl +0 -0
  31. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/mapping.idl +0 -0
  32. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/provisional/owm.idl +0 -0
  33. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/provisional/radio.idl +0 -0
  34. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/provisional/rf_beam.idl +0 -0
  35. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/rad.idl +0 -0
  36. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/semantics.idl +0 -0
  37. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/slam_frontend.idl +0 -0
  38. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/types.idl +0 -0
  39. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/vio.idl +0 -0
  40. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/idl/vision.idl +0 -0
  41. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/registry.json +0 -0
  42. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/builtin_Time.json +0 -0
  43. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorDelta.json +0 -0
  44. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorEntry.json +0 -0
  45. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSet.json +0 -0
  46. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSetRequest.json +0 -0
  47. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_anchors_AnchorSetResponse.json +0 -0
  48. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_argeo_NodeGeo.json +0 -0
  49. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_argeo_QualityRequirements.json +0 -0
  50. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_argeo_VpsRequest.json +0 -0
  51. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_argeo_VpsResponse.json +0 -0
  52. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_AssetRef.json +0 -0
  53. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_FrameRef.json +0 -0
  54. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_KV.json +0 -0
  55. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_MetaKV.json +0 -0
  56. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_common_Vec2.json +0 -0
  57. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_Aabb3.json +0 -0
  58. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_BlobChunk.json +0 -0
  59. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_BlobRef.json +0 -0
  60. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_ComponentRef.json +0 -0
  61. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_Edge.json +0 -0
  62. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_EntityBinding.json +0 -0
  63. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_FrameTransform.json +0 -0
  64. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_FramedPose.json +0 -0
  65. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_GeoAnchor.json +0 -0
  66. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_GeoPose.json +0 -0
  67. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_NavSatStatus.json +0 -0
  68. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_Node.json +0 -0
  69. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_PlannedTrajectory.json +0 -0
  70. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_PlannedWaypoint.json +0 -0
  71. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_PoseSE3.json +0 -0
  72. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_SnapshotRequest.json +0 -0
  73. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_SnapshotResponse.json +0 -0
  74. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_TileKey.json +0 -0
  75. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_TileMeta.json +0 -0
  76. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_core_TilePatch.json +0 -0
  77. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_Announce.json +0 -0
  78. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_Capabilities.json +0 -0
  79. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_ContentAnnounce.json +0 -0
  80. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageElement.json +0 -0
  81. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageFilter.json +0 -0
  82. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageHint.json +0 -0
  83. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageQuery.json +0 -0
  84. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_CoverageResponse.json +0 -0
  85. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_Depart.json +0 -0
  86. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_KV.json +0 -0
  87. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_ProfileSupport.json +0 -0
  88. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_ServiceSummary.json +0 -0
  89. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_TopicMeta.json +0 -0
  90. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_Transform.json +0 -0
  91. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_disco_ValidityWindow.json +0 -0
  92. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_events_CrossingLine.json +0 -0
  93. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_events_SpatialEvent.json +0 -0
  94. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_events_SpatialZone.json +0 -0
  95. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_events_ZoneState.json +0 -0
  96. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_Edge.json +0 -0
  97. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_MapAlignment.json +0 -0
  98. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_MapEvent.json +0 -0
  99. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_MapMeta.json +0 -0
  100. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_mapping_MapQuality.json +0 -0
  101. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_owm_Entity.json +0 -0
  102. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_owm_ModelCommand.json +0 -0
  103. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_owm_ModelPose.json +0 -0
  104. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Detection2D.json +0 -0
  105. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Detection2DSet.json +0 -0
  106. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Detection3D.json +0 -0
  107. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Detection3DSet.json +0 -0
  108. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_FusedTrack.json +0 -0
  109. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_FusedTrackSet.json +0 -0
  110. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_Keypoint3D.json +0 -0
  111. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_semantics_KeypointLink.json +0 -0
  112. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_Axis.json +0 -0
  113. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_FrameHeader.json +0 -0
  114. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_FrameQuality.json +0 -0
  115. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_Linspace.json +0 -0
  116. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_ROI.json +0 -0
  117. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_ROIReply.json +0 -0
  118. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_ROIRequest.json +0 -0
  119. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_common_StreamMeta.json +0 -0
  120. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarDetection.json +0 -0
  121. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarDetectionSet.json +0 -0
  122. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarFrame.json +0 -0
  123. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_lidar_LidarMeta.json +0 -0
  124. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadDetection.json +0 -0
  125. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadDetectionSet.json +0 -0
  126. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadSensorMeta.json +0 -0
  127. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadTensorFrame.json +0 -0
  128. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rad_RadTensorMeta.json +0 -0
  129. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioObservation.json +0 -0
  130. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioScan.json +0 -0
  131. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_radio_RadioSensorMeta.json +0 -0
  132. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamArraySet.json +0 -0
  133. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamFrame.json +0 -0
  134. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_rf_beam_RfBeamMeta.json +0 -0
  135. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_CamIntrinsics.json +0 -0
  136. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_Keypoint2D.json +0 -0
  137. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_Track2D.json +0 -0
  138. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionDetections.json +0 -0
  139. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionFrame.json +0 -0
  140. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_sensing_vision_VisionMeta.json +0 -0
  141. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_CameraInfo.json +0 -0
  142. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_Feature2D.json +0 -0
  143. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_FeatureMatch.json +0 -0
  144. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_KeyframeFeatures.json +0 -0
  145. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_Landmark.json +0 -0
  146. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_MatchSet.json +0 -0
  147. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_TrackObs.json +0 -0
  148. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_slam_frontend_Tracklet.json +0 -0
  149. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_FusedState.json +0 -0
  150. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_ImuInfo.json +0 -0
  151. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_ImuSample.json +0 -0
  152. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_MagnetometerSample.json +0 -0
  153. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/schemas/spatial_vio_SensorFusionSample.json +0 -0
  154. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/artifacts/serializer_tables.json +0 -0
  155. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/canonical.py +0 -0
  156. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/canonjson.py +0 -0
  157. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/client.py +0 -0
  158. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/_extra.py +0 -0
  159. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/blob.py +0 -0
  160. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/qos.py +0 -0
  161. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/registry.py +0 -0
  162. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/__init__.py +0 -0
  163. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/_field_aliases.py +0 -0
  164. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/builtin/__init__.py +0 -0
  165. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/builtin/_types.py +0 -0
  166. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/__init__.py +0 -0
  167. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/anchors/__init__.py +0 -0
  168. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/anchors/_anchors.py +0 -0
  169. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/argeo/__init__.py +0 -0
  170. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/argeo/_argeo.py +0 -0
  171. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/common/__init__.py +0 -0
  172. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/common/_types.py +0 -0
  173. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/core/GnssService/__init__.py +0 -0
  174. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/core/GnssService/_core.py +0 -0
  175. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/core/__init__.py +0 -0
  176. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/core/_core.py +0 -0
  177. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/disco/__init__.py +0 -0
  178. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/disco/_discovery.py +0 -0
  179. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/__init__.py +0 -0
  180. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/_events.py +0 -0
  181. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/__init__.py +0 -0
  182. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/crossing_direction_enum/__init__.py +0 -0
  183. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/crossing_direction_enum/_events.py +0 -0
  184. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/event_state_enum/__init__.py +0 -0
  185. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/event_state_enum/_events.py +0 -0
  186. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/event_type_enum/__init__.py +0 -0
  187. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/event_type_enum/_events.py +0 -0
  188. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/severity_enum/__init__.py +0 -0
  189. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/severity_enum/_events.py +0 -0
  190. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/zone_kind_enum/__init__.py +0 -0
  191. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/events/enums/zone_kind_enum/_events.py +0 -0
  192. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/__init__.py +0 -0
  193. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/_mapping.py +0 -0
  194. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/__init__.py +0 -0
  195. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/alignment_method/__init__.py +0 -0
  196. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/alignment_method/_mapping.py +0 -0
  197. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/edge_type/__init__.py +0 -0
  198. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/edge_type/_mapping.py +0 -0
  199. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_event_kind/__init__.py +0 -0
  200. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_event_kind/_mapping.py +0 -0
  201. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_kind/__init__.py +0 -0
  202. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_kind/_mapping.py +0 -0
  203. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_status/__init__.py +0 -0
  204. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/mapping/enums/map_status/_mapping.py +0 -0
  205. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/owm/__init__.py +0 -0
  206. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/owm/_owm.py +0 -0
  207. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/semantics/__init__.py +0 -0
  208. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/semantics/_semantics.py +0 -0
  209. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/__init__.py +0 -0
  210. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/common/__init__.py +0 -0
  211. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/common/_common.py +0 -0
  212. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/lidar/__init__.py +0 -0
  213. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/lidar/_lidar.py +0 -0
  214. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/rad/__init__.py +0 -0
  215. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/rad/_rad.py +0 -0
  216. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/radio/__init__.py +0 -0
  217. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/radio/_radio.py +0 -0
  218. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/rf_beam/__init__.py +0 -0
  219. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/rf_beam/_rf_beam.py +0 -0
  220. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/vision/__init__.py +0 -0
  221. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/sensing/vision/_vision.py +0 -0
  222. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/slam_frontend/__init__.py +0 -0
  223. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/slam_frontend/_slam_frontend.py +0 -0
  224. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/vio/__init__.py +0 -0
  225. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/dds/types/spatial/vio/_vio.py +0 -0
  226. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/assets/duck.gltf +0 -0
  227. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/assets/fountain-label.txt +0 -0
  228. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/assets/fountain-marker.gltf +0 -0
  229. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/fountain-anchors.mcap +0 -0
  230. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/manifests/content-fountain-label.json +0 -0
  231. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/demo/manifests/content-fountain-marker.json +0 -0
  232. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/errors.py +0 -0
  233. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/events.py +0 -0
  234. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/frames.py +0 -0
  235. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/journal.py +0 -0
  236. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/recency.py +0 -0
  237. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/__init__.py +0 -0
  238. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/commands.py +0 -0
  239. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/limits.py +0 -0
  240. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/tenancy.py +0 -0
  241. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/server/xcdr2.py +0 -0
  242. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds/tokens.py +0 -0
  243. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/dependency_links.txt +0 -0
  244. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/entry_points.txt +0 -0
  245. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/requires.txt +0 -0
  246. {spatialdds-0.7.3 → spatialdds-0.8.0}/spatialdds.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spatialdds
3
- Version: 0.7.3
3
+ Version: 0.8.0
4
4
  Summary: SpatialDDS for programs: a client for the web binding (Appendix N), a native DDS participant, and the reference registry behind one command.
5
5
  Author: Open AR Cloud
6
6
  License: Apache-2.0
@@ -114,7 +114,7 @@ What it asks of you, and what it will not guess:
114
114
  | `service_id` and `authority` | to write or announce |
115
115
  | `qos_profile` | where the §3.3.2 row names none, as `model_entity`'s and `model_pose`'s do; the refusal lists the §3.3.3 profiles that fit, or pass a `sd.dds.Profile(...)` extension |
116
116
  | `on_exit="keep"` or `"withdraw"` | on every latched, keyed writer: whether a record outlives its writer is a claim only you can make |
117
- | `withdraw(key, reason=...)` | with an empty reason |
117
+ | `withdraw(key, reason=..., **changes)` | with an empty reason, or a change to the members it sets itself or to the key |
118
118
 
119
119
  And what it does without being asked:
120
120
 
@@ -602,6 +602,35 @@ explicitly was tried first and is what missed two paths.
602
602
 
603
603
  If your clients are not browsers, nothing here changes anything for you.
604
604
 
605
+ ## New in 0.8.0: a world from HTTP
606
+
607
+ The `entity` lane is publishable, and so is any keyed type a deployment
608
+ registers (`serve --extension MODULE`), so a browser or curl can populate an
609
+ OWM scene. A DECLARED or AUTHORED entity holds until withdrawn. An OBSERVED or
610
+ DERIVED one declares how often it will be said again, `?refresh=<seconds>`,
611
+ and when nobody says it again the gateway withdraws it, a terminal sample and
612
+ then a dispose, "refresh lapsed". A claim's asserter is the bearer token's
613
+ principal. With `serve --dds-domain N` the gateway writes all of it to a DDS
614
+ bus too, from its own participant. The record lanes are unchanged. The rules
615
+ and a measured session are in
616
+ [docs/PUBLISH.md](https://github.com/OpenArCloud/spatialdds-py/blob/main/docs/PUBLISH.md#world-lanes-entities-and-claims-080).
617
+
618
+ ## New in 0.7.4: what the first extension found
619
+
620
+ A deployment's own type, registered with `sd.dds.extend()`, is now served
621
+ the way a pinned one is. The gateway publishes a schema for it, written from
622
+ the model it decodes the type with by the specification generator's rules,
623
+ because N.2 requires a schema for every type an endpoint serves. A
624
+ recording's extension lane is served latched when its writer opened it so,
625
+ and `serve --public FQN` opens it to uncredentialed readers.
626
+
627
+ - `withdraw(key, reason=..., **changes)` sets other members on the terminal
628
+ sample, such as a closed validity interval.
629
+ - `close()` finishes when a reader is slow to acknowledge (cyclonedds-python
630
+ 11.0.1 raised on that timeout).
631
+ - `sd.stamp` keeps `nanosec` in range, and floors a time before the epoch.
632
+ - `sd.dds.extensions()` and `sd.dds.extension_of()` are exported.
633
+
605
634
  ## New in 0.7.3: what the first migration found
606
635
 
607
636
  Mostly additive; one fix changes bytes. Every frame this package builds now
@@ -679,7 +708,7 @@ Two changes may need a line of yours:
679
708
  The security fixes, the limits table and the details are in the
680
709
  [changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
681
710
 
682
- ## Not in 0.7.3
711
+ ## Not in 0.8.0
683
712
 
684
713
  Stated so nobody waits for them:
685
714
 
@@ -711,8 +740,11 @@ supplied. That second form is `sd.asset_ref`. A published release has to stay
711
740
  reproducible from a public commit, so the API could not change under the same
712
741
  number.
713
742
 
714
- On the registry, four things are deferred rather than missing, and the same
715
- four are on the 1.9 candidates list: **leases** (nothing expires; `ttl_sec` is
716
- advice to caches), **per-provider scopes** (one token, one operator),
717
- **server-set identity** (`provider_id` is whatever the publisher says), and
718
- **upstream subscriptions** (a registry does not follow another registry).
743
+ On the registry, these are deferred rather than missing, and each is on the
744
+ 1.9 candidates list: **leases for records** (world lanes have them since
745
+ 0.8.0; a record's `ttl_sec` is still advice to caches), **per-record
746
+ ownership** (a token is scoped to scenes, and within a scene to everything),
747
+ **server-set identity for records** (a claim's asserter comes from the
748
+ credential since 0.8.0; a record's `provider_id` is whatever the publisher
749
+ says), and **upstream subscriptions** (a registry does not follow another
750
+ registry).
@@ -86,7 +86,7 @@ What it asks of you, and what it will not guess:
86
86
  | `service_id` and `authority` | to write or announce |
87
87
  | `qos_profile` | where the §3.3.2 row names none, as `model_entity`'s and `model_pose`'s do; the refusal lists the §3.3.3 profiles that fit, or pass a `sd.dds.Profile(...)` extension |
88
88
  | `on_exit="keep"` or `"withdraw"` | on every latched, keyed writer: whether a record outlives its writer is a claim only you can make |
89
- | `withdraw(key, reason=...)` | with an empty reason |
89
+ | `withdraw(key, reason=..., **changes)` | with an empty reason, or a change to the members it sets itself or to the key |
90
90
 
91
91
  And what it does without being asked:
92
92
 
@@ -574,6 +574,35 @@ explicitly was tried first and is what missed two paths.
574
574
 
575
575
  If your clients are not browsers, nothing here changes anything for you.
576
576
 
577
+ ## New in 0.8.0: a world from HTTP
578
+
579
+ The `entity` lane is publishable, and so is any keyed type a deployment
580
+ registers (`serve --extension MODULE`), so a browser or curl can populate an
581
+ OWM scene. A DECLARED or AUTHORED entity holds until withdrawn. An OBSERVED or
582
+ DERIVED one declares how often it will be said again, `?refresh=<seconds>`,
583
+ and when nobody says it again the gateway withdraws it, a terminal sample and
584
+ then a dispose, "refresh lapsed". A claim's asserter is the bearer token's
585
+ principal. With `serve --dds-domain N` the gateway writes all of it to a DDS
586
+ bus too, from its own participant. The record lanes are unchanged. The rules
587
+ and a measured session are in
588
+ [docs/PUBLISH.md](https://github.com/OpenArCloud/spatialdds-py/blob/main/docs/PUBLISH.md#world-lanes-entities-and-claims-080).
589
+
590
+ ## New in 0.7.4: what the first extension found
591
+
592
+ A deployment's own type, registered with `sd.dds.extend()`, is now served
593
+ the way a pinned one is. The gateway publishes a schema for it, written from
594
+ the model it decodes the type with by the specification generator's rules,
595
+ because N.2 requires a schema for every type an endpoint serves. A
596
+ recording's extension lane is served latched when its writer opened it so,
597
+ and `serve --public FQN` opens it to uncredentialed readers.
598
+
599
+ - `withdraw(key, reason=..., **changes)` sets other members on the terminal
600
+ sample, such as a closed validity interval.
601
+ - `close()` finishes when a reader is slow to acknowledge (cyclonedds-python
602
+ 11.0.1 raised on that timeout).
603
+ - `sd.stamp` keeps `nanosec` in range, and floors a time before the epoch.
604
+ - `sd.dds.extensions()` and `sd.dds.extension_of()` are exported.
605
+
577
606
  ## New in 0.7.3: what the first migration found
578
607
 
579
608
  Mostly additive; one fix changes bytes. Every frame this package builds now
@@ -651,7 +680,7 @@ Two changes may need a line of yours:
651
680
  The security fixes, the limits table and the details are in the
652
681
  [changelog](https://github.com/OpenArCloud/spatialdds-py/blob/main/lib/spatialdds/CHANGELOG.md).
653
682
 
654
- ## Not in 0.7.3
683
+ ## Not in 0.8.0
655
684
 
656
685
  Stated so nobody waits for them:
657
686
 
@@ -683,8 +712,11 @@ supplied. That second form is `sd.asset_ref`. A published release has to stay
683
712
  reproducible from a public commit, so the API could not change under the same
684
713
  number.
685
714
 
686
- On the registry, four things are deferred rather than missing, and the same
687
- four are on the 1.9 candidates list: **leases** (nothing expires; `ttl_sec` is
688
- advice to caches), **per-provider scopes** (one token, one operator),
689
- **server-set identity** (`provider_id` is whatever the publisher says), and
690
- **upstream subscriptions** (a registry does not follow another registry).
715
+ On the registry, these are deferred rather than missing, and each is on the
716
+ 1.9 candidates list: **leases for records** (world lanes have them since
717
+ 0.8.0; a record's `ttl_sec` is still advice to caches), **per-record
718
+ ownership** (a token is scoped to scenes, and within a scene to everything),
719
+ **server-set identity for records** (a claim's asserter comes from the
720
+ credential since 0.8.0; a record's `provider_id` is whatever the publisher
721
+ says), and **upstream subscriptions** (a registry does not follow another
722
+ registry).
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "spatialdds"
7
- version = "0.7.3"
7
+ version = "0.8.0"
8
8
  description = "SpatialDDS for programs: a client for the web binding (Appendix N), a native DDS participant, and the reference registry behind one command."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -41,7 +41,7 @@ __all__ = [
41
41
  "participant", "MissingExtra", "dds", "events", "frames", "Recency",
42
42
  ]
43
43
 
44
- __version__ = "0.7.3"
44
+ __version__ = "0.8.0"
45
45
  #: The SpatialDDS-spec commit whose Appendix N and generated artifacts this
46
46
  #: package implements. Package versions and specification versions move
47
47
  #: independently; this is the one that says what the wire looks like.
@@ -14,4 +14,4 @@ border-bottom:1px solid var(--line)}p{margin:.35rem 0}.mut,.sum .auth{color:
14
14
  var(--mut)}.auth{font-size:.85rem;margin-left:.4rem}.v{display:inline-block;
15
15
  min-width:4.2rem;font:600 12px ui-monospace,monospace;letter-spacing:.04em;
16
16
  color:var(--acc)}.codes{font:12px ui-monospace,monospace;color:var(--mut)}
17
- .s{margin-right:.5rem}.s4,.s5{color:#b5482c}a{color:var(--acc)}</style></head><body><main><h1>SpatialDDS web binding (spatialdds-py)</h1><p class=mut>Version 0.7.3 · OpenAPI 3.1.0 · generated, never hand-written · <a href='openapi'>openapi.yaml</a></p><p>Generated by <code>tools/gen_openapi.py</code> from the gateway&#x27;s own tables and the published JSON Schemas; never edited by hand. Reads are open; writes take a bearer token scoped to scenes. The WebSocket streams (N.5) are described on each collection path, not modelled.</p><h2>Operations</h2><section id="search"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/search</code></h3><p class="sum">Services near a geohash (§8.2.3 manifests) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="searchPost"><h3><span class="v post">POST</span> <code>/.well-known/spatialdds/search</code></h3><p class="sum">The same search, as a POST body <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="listSchemas"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/schemas</code></h3><p class="sum">The published JSON Schemas, by type <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="getSchema"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/schemas/{type}</code></h3><p class="sum"> <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="bootstrap"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/bootstrap</code></h3><p class="sum">DDS-join material (N.2); optional <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="resolverMetadata"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/resolver</code></h3><p class="sum">§7.5.2 resolver metadata <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="openapi"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/openapi</code></h3><p class="sum">This document <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="openapiPage"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/openapi.html</code></h3><p class="sum">This document as a static reference page <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="resolve"><h3><span class="v get">GET</span> <code>/spatialdds/resolve</code></h3><p class="sum">Resolve a URI to its manifest (§7.5.2) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">400</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putManifest"><h3><span class="v put">PUT</span> <code>/spatialdds/resolve</code></h3><p class="sum">Publish a manifest, keyed by its own <code>id</code> <span class="auth">token</span></p><p>The <code>uri</code> parameter is not used; the body&#x27;s <code>id</code> is the key. Its scene segment is the lane. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>).</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawManifest"><h3><span class="v delete">DELETE</span> <code>/spatialdds/resolve</code></h3><p class="sum">Withdraw a manifest; <code>resolve</code> then answers 404 <span class="auth">token</span></p><p>Owner-checked by the URI&#x27;s scene segment. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>).</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="getAsset"><h3><span class="v get">GET</span> <code>/assets/{name}</code></h3><p class="sum">Asset bytes this endpoint hosts (implementation-defined) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="listAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/announce/v1</code></h3><p class="sum">Every spatial.disco.Announce instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandAnnounce"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/announce/v1</code></h3><p class="sum">An N.6 command addressed through the announce lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">One spatial.disco.Announce instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putAnnounce"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.disco.Announce <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body&#x27;s key must equal the URL&#x27;s. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawAnnounce"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.disco.Announce <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;s WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listContentAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/content_announce/v1</code></h3><p class="sum">Every spatial.disco.ContentAnnounce instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandContentAnnounce"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/content_announce/v1</code></h3><p class="sum">An N.6 command addressed through the content_announce lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getContentAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">One spatial.disco.ContentAnnounce instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putContentAnnounce"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.disco.ContentAnnounce <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body&#x27;s key must equal the URL&#x27;s. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawContentAnnounce"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.disco.ContentAnnounce <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;s WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listGeoAnchor"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/geo_anchor/v1</code></h3><p class="sum">Every spatial.core.GeoAnchor instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandGeoAnchor"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/geo_anchor/v1</code></h3><p class="sum">An N.6 command addressed through the geo_anchor lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getGeoAnchor"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">One spatial.core.GeoAnchor instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putGeoAnchor"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.core.GeoAnchor <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body&#x27;s key must equal the URL&#x27;s. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawGeoAnchor"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.core.GeoAnchor <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;s WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listInstances"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/{type}/{version}</code></h3><p class="sum">Any other served topic, read-only <span class="auth">token for operator-scoped</span></p><p>Latched types answer with the latched set; streamed types with the replayed window. Public or operator-scoped per the type: <code>spatial.core.FrameTransform</code> latched public, <code>spatial.events.CrossingLine</code> latched public, <code>spatial.events.SpatialEvent</code> stream bearer, <code>spatial.events.SpatialZone</code> latched public, <code>spatial.owm.Entity</code> latched bearer, <code>spatial.owm.ModelPose</code> stream bearer, <code>spatial.semantics.Detection2DSet</code> stream bearer, <code>spatial.semantics.Detection3DSet</code> stream bearer, <code>spatial.semantics.FusedTrackSet</code> stream bearer. **The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listWellKnownInstances"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/{stream}/{type}/{version}</code></h3><p class="sum">A four-segment topic&#x27;s collection <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/&lt;stream&gt;/&lt;type&gt;/&lt;version&gt;</code>, no scene), such as the discovery announce lane, served exactly as a scene-scoped collection is: latched set, <code>ETag</code>, <code>304</code>, the same access classes, and the N.5 stream by upgrading the same path. Read-only: a topic with no scene is in no lane. **The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="getWellKnownInstance"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/{stream}/{type}/{version}/{key}</code></h3><p class="sum">One instance of a four-segment topic <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/&lt;stream&gt;/&lt;type&gt;/&lt;version&gt;</code>, no scene), such as the discovery announce lane, served exactly as a scene-scoped collection is: latched set, <code>ETag</code>, <code>304</code>, the same access classes, and the N.5 stream by upgrading the same path. Read-only: a topic with no scene is in no lane. </p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><h2>Schemas</h2><p class=mut>115 components, from the published JSON Schemas at <code>/.well-known/spatialdds/schemas</code>.</p></main></body></html>
17
+ .s{margin-right:.5rem}.s4,.s5{color:#b5482c}a{color:var(--acc)}</style></head><body><main><h1>SpatialDDS web binding (spatialdds-py)</h1><p class=mut>Version 0.8.0 · OpenAPI 3.1.0 · generated, never hand-written · <a href='openapi'>openapi.yaml</a></p><p>Generated by <code>tools/gen_openapi.py</code> from the gateway&#x27;s own tables and the published JSON Schemas; never edited by hand. Reads are open; writes take a bearer token scoped to scenes. The WebSocket streams (N.5) are described on each collection path, not modelled. A deployment&#x27;s own keyed types (<code>serve --extension</code>) are publishable on their own collection paths, under the same rules as the entity lane when they carry <code>basis</code>, <code>state</code>, <code>state_reason</code> and <code>stamp</code>; a type that names an <code>asserter</code> has it stamped or verified as the bearer token&#x27;s principal (<code>asserter-not-principal</code>, <code>asserter-ungrounded</code>). Their paths are not listed here, because the deployment chooses them.</p><h2>Operations</h2><section id="search"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/search</code></h3><p class="sum">Services near a geohash (§8.2.3 manifests) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="searchPost"><h3><span class="v post">POST</span> <code>/.well-known/spatialdds/search</code></h3><p class="sum">The same search, as a POST body <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="listSchemas"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/schemas</code></h3><p class="sum">The published JSON Schemas, by type <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="getSchema"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/schemas/{type}</code></h3><p class="sum"> <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="bootstrap"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/bootstrap</code></h3><p class="sum">DDS-join material (N.2); optional <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="resolverMetadata"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/resolver</code></h3><p class="sum">§7.5.2 resolver metadata <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="openapi"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/openapi</code></h3><p class="sum">This document <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="openapiPage"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/openapi.html</code></h3><p class="sum">This document as a static reference page <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">429</span></p></section><section id="resolve"><h3><span class="v get">GET</span> <code>/spatialdds/resolve</code></h3><p class="sum">Resolve a URI to its manifest (§7.5.2) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">400</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putManifest"><h3><span class="v put">PUT</span> <code>/spatialdds/resolve</code></h3><p class="sum">Publish a manifest, keyed by its own <code>id</code> <span class="auth">token</span></p><p>The <code>uri</code> parameter is not used; the body&#x27;s <code>id</code> is the key. Its scene segment is the lane. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>).</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawManifest"><h3><span class="v delete">DELETE</span> <code>/spatialdds/resolve</code></h3><p class="sum">Withdraw a manifest; <code>resolve</code> then answers 404 <span class="auth">token</span></p><p>Owner-checked by the URI&#x27;s scene segment. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>).</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="getAsset"><h3><span class="v get">GET</span> <code>/assets/{name}</code></h3><p class="sum">Asset bytes this endpoint hosts (implementation-defined) <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="listAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/announce/v1</code></h3><p class="sum">Every spatial.disco.Announce instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandAnnounce"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/announce/v1</code></h3><p class="sum">An N.6 command addressed through the announce lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">One spatial.disco.Announce instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putAnnounce"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.disco.Announce <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body&#x27;s key must equal the URL&#x27;s. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawAnnounce"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/announce/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.disco.Announce <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;s WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listContentAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/content_announce/v1</code></h3><p class="sum">Every spatial.disco.ContentAnnounce instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandContentAnnounce"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/content_announce/v1</code></h3><p class="sum">An N.6 command addressed through the content_announce lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getContentAnnounce"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">One spatial.disco.ContentAnnounce instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putContentAnnounce"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.disco.ContentAnnounce <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body&#x27;s key must equal the URL&#x27;s. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawContentAnnounce"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/content_announce/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.disco.ContentAnnounce <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;s WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listEntity"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/entity/v1</code></h3><p class="sum">Every spatial.owm.Entity instance in the latched set <span class="auth">token</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandEntity"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/entity/v1</code></h3><p class="sum">An N.6 command addressed through the entity lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getEntity"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/entity/v1/{key}</code></h3><p class="sum">One spatial.owm.Entity instance <span class="auth">token</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putEntity"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/entity/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.owm.Entity <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body&#x27;s key must equal the URL&#x27;s. <code>If-Match</code> is honoured when present. **Basis gates liveliness.** A DECLARED or AUTHORED body is a declaration and holds until withdrawn; it takes no <code>refresh</code>. An DERIVED or OBSERVED body must declare <code>refresh</code>, and be PUT again within it; when it lapses the gateway withdraws the instance itself, a terminal sample (RETIRED) then the dispose, both with the reason <code>refresh lapsed</code>. On a gateway with a DDS domain the instance is written there too, from the gateway&#x27;s own participant.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s5">503</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="withdrawEntity"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/entity/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.owm.Entity <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). A terminal sample (RETIRED, with the reason) streams first, then the dispose with its <code>reason</code>, on the collection&#x27;s WebSocket and, on a gateway with a DDS domain, on the bus.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listGeoAnchor"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/geo_anchor/v1</code></h3><p class="sum">Every spatial.core.GeoAnchor instance in the latched set <span class="auth">open</span></p><p>**The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="commandGeoAnchor"><h3><span class="v post">POST</span> <code>/{scene}/{stream}/geo_anchor/v1</code></h3><p class="sum">An N.6 command addressed through the geo_anchor lane <span class="auth">token</span></p><p>Accepted only on a lane whose topic advertises <code>accepts_commands</code>; otherwise <code>405</code>. **Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch.</p><p class="codes"><span class="s s2">202</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">409</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span></p></section><section id="getGeoAnchor"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">One spatial.core.GeoAnchor instance <span class="auth">open</span></p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">404</span> <span class="s s4">429</span></p></section><section id="putGeoAnchor"><h3><span class="v put">PUT</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">Publish or replace a spatial.core.GeoAnchor <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). Every member of the record is required: a body is a whole record, never a patch. The body&#x27;s key must equal the URL&#x27;s. <code>If-Match</code> is honoured when present.</p><p class="codes"><span class="s s2">200</span> <span class="s s2">201</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">405</span> <span class="s s4">412</span> <span class="s s4">429</span> <span class="s s4">413</span> <span class="s s4">415</span> <span class="s s5">503</span></p></section><section id="withdrawGeoAnchor"><h3><span class="v delete">DELETE</span> <code>/{scene}/{stream}/geo_anchor/v1/{key}</code></h3><p class="sum">Withdraw (dispose) a spatial.core.GeoAnchor <span class="auth">token</span></p><p>**Writes are per lane.** The path&#x27;s first segment is the scene; the bearer token must be granted it (<code>tenancy.WRITE_REFUSALS</code>). The dispose streams on the collection&#x27;s WebSocket with its <code>reason</code>.</p><p class="codes"><span class="s s2">204</span> <span class="s s4">400</span> <span class="s s4">401</span> <span class="s s4">403</span> <span class="s s4">404</span> <span class="s s4">405</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listInstances"><h3><span class="v get">GET</span> <code>/{scene}/{stream}/{type}/{version}</code></h3><p class="sum">Any other served topic, read-only <span class="auth">token for operator-scoped</span></p><p>Latched types answer with the latched set; streamed types with the replayed window. Public or operator-scoped per the type: <code>spatial.core.FrameTransform</code> latched public, <code>spatial.events.CrossingLine</code> latched public, <code>spatial.events.SpatialEvent</code> stream bearer, <code>spatial.events.SpatialZone</code> latched public, <code>spatial.owm.ModelPose</code> stream bearer, <code>spatial.semantics.Detection2DSet</code> stream bearer, <code>spatial.semantics.Detection3DSet</code> stream bearer, <code>spatial.semantics.FusedTrackSet</code> stream bearer. **The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="listWellKnownInstances"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/{stream}/{type}/{version}</code></h3><p class="sum">A four-segment topic&#x27;s collection <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/&lt;stream&gt;/&lt;type&gt;/&lt;version&gt;</code>, no scene), such as the discovery announce lane, served exactly as a scene-scoped collection is: latched set, <code>ETag</code>, <code>304</code>, the same access classes, and the N.5 stream by upgrading the same path. Read-only: a topic with no scene is in no lane. **The same URL is also a WebSocket** (N.5): connect with <code>wss://</code> and receive the latched set as <code>sample</code> events, exactly one <code>end_of_replay</code> carrying the replay count, then live <code>sample</code> and <code>dispose</code> events (<code>{event, topic, key, data | reason}</code>). Not modelled here; see [Appendix N.5](https://spatialdds.org/v1.8/appendix-n/).</p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><section id="getWellKnownInstance"><h3><span class="v get">GET</span> <code>/.well-known/spatialdds/{stream}/{type}/{version}/{key}</code></h3><p class="sum">One instance of a four-segment topic <span class="auth">token for operator-scoped</span></p><p>A four-segment topic (<code>spatialdds/&lt;stream&gt;/&lt;type&gt;/&lt;version&gt;</code>, no scene), such as the discovery announce lane, served exactly as a scene-scoped collection is: latched set, <code>ETag</code>, <code>304</code>, the same access classes, and the N.5 stream by upgrading the same path. Read-only: a topic with no scene is in no lane. </p><p class="codes"><span class="s s2">200</span> <span class="s s3">304</span> <span class="s s4">401</span> <span class="s s4">404</span> <span class="s s4">429</span> <span class="s s5">503</span></p></section><h2>Schemas</h2><p class=mut>115 components, from the published JSON Schemas at <code>/.well-known/spatialdds/schemas</code>.</p></main></body></html>