@ksp-gonogo/sitrep-sdk 0.0.1 → 0.2.0-rc.12
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/LICENSE +2 -2
- package/README.md +48 -8
- package/biome.shared.json +26 -0
- package/dist/__generated__/command-map.d.ts +480 -0
- package/dist/__generated__/command-map.d.ts.map +1 -0
- package/dist/__generated__/command-map.js +265 -0
- package/dist/__generated__/command-map.js.map +1 -0
- package/dist/__generated__/contract.d.ts +10271 -454
- package/dist/__generated__/contract.d.ts.map +1 -1
- package/dist/__generated__/contract.js +1163 -11
- package/dist/__generated__/contract.js.map +1 -1
- package/dist/__generated__/control-channels.d.ts +116 -0
- package/dist/__generated__/control-channels.d.ts.map +1 -0
- package/dist/__generated__/control-channels.js +29 -0
- package/dist/__generated__/control-channels.js.map +1 -0
- package/dist/__generated__/delay-roles.d.ts +17 -0
- package/dist/__generated__/delay-roles.d.ts.map +1 -0
- package/dist/__generated__/delay-roles.js +72 -0
- package/dist/__generated__/delay-roles.js.map +1 -0
- package/dist/__generated__/error-codes.d.ts +376 -0
- package/dist/__generated__/error-codes.d.ts.map +1 -0
- package/dist/__generated__/error-codes.js +688 -0
- package/dist/__generated__/error-codes.js.map +1 -0
- package/dist/__generated__/frames.d.ts +83 -0
- package/dist/__generated__/frames.d.ts.map +1 -0
- package/dist/__generated__/frames.js +44 -0
- package/dist/__generated__/frames.js.map +1 -0
- package/dist/__generated__/reckonability.d.ts +381 -0
- package/dist/__generated__/reckonability.d.ts.map +1 -0
- package/dist/__generated__/reckonability.js +49 -0
- package/dist/__generated__/reckonability.js.map +1 -0
- package/dist/__generated__/test-theme.d.ts +52 -0
- package/dist/__generated__/test-theme.d.ts.map +1 -0
- package/dist/__generated__/test-theme.js +70 -0
- package/dist/__generated__/test-theme.js.map +1 -0
- package/dist/__generated__/topic-map.d.ts +44 -12
- package/dist/__generated__/topic-map.d.ts.map +1 -1
- package/dist/__generated__/topic-map.js +84 -11
- package/dist/__generated__/topic-map.js.map +1 -1
- package/dist/__generated__/units.d.ts +97 -0
- package/dist/__generated__/units.d.ts.map +1 -0
- package/dist/__generated__/units.js +3302 -0
- package/dist/__generated__/units.js.map +1 -0
- package/dist/api/action-dispatch.d.ts +36 -0
- package/dist/api/action-dispatch.d.ts.map +1 -0
- package/dist/api/action-dispatch.js +79 -0
- package/dist/api/action-dispatch.js.map +1 -0
- package/dist/api/alarm-request.d.ts +118 -0
- package/dist/api/alarm-request.d.ts.map +1 -0
- package/dist/api/alarm-request.js +50 -0
- package/dist/api/alarm-request.js.map +1 -0
- package/dist/api/bodies.d.ts +68 -0
- package/dist/api/bodies.d.ts.map +1 -0
- package/dist/api/bodies.js +103 -0
- package/dist/api/bodies.js.map +1 -0
- package/dist/api/command-rejection.d.ts +104 -0
- package/dist/api/command-rejection.d.ts.map +1 -0
- package/dist/api/command-rejection.js +128 -0
- package/dist/api/command-rejection.js.map +1 -0
- package/dist/api/contribution-slots.d.ts +594 -0
- package/dist/api/contribution-slots.d.ts.map +1 -0
- package/dist/api/contribution-slots.js +43 -0
- package/dist/api/contribution-slots.js.map +1 -0
- package/dist/api/coverage/CoverageMaskCache.d.ts +52 -0
- package/dist/api/coverage/CoverageMaskCache.d.ts.map +1 -0
- package/dist/api/coverage/CoverageMaskCache.js +89 -0
- package/dist/api/coverage/CoverageMaskCache.js.map +1 -0
- package/dist/api/coverage/CoverageMaskContext.d.ts +35 -0
- package/dist/api/coverage/CoverageMaskContext.d.ts.map +1 -0
- package/dist/api/coverage/CoverageMaskContext.js +53 -0
- package/dist/api/coverage/CoverageMaskContext.js.map +1 -0
- package/dist/api/coverage-source.d.ts +42 -0
- package/dist/api/coverage-source.d.ts.map +1 -0
- package/dist/api/coverage-source.js +118 -0
- package/dist/api/coverage-source.js.map +1 -0
- package/dist/api/error-codes.d.ts +32 -0
- package/dist/api/error-codes.d.ts.map +1 -0
- package/dist/api/error-codes.js +77 -0
- package/dist/api/error-codes.js.map +1 -0
- package/dist/api/event-reveal.d.ts +56 -0
- package/dist/api/event-reveal.d.ts.map +1 -0
- package/dist/api/event-reveal.js +53 -0
- package/dist/api/event-reveal.js.map +1 -0
- package/dist/api/host.d.ts +130 -0
- package/dist/api/host.d.ts.map +1 -0
- package/dist/api/host.js +57 -0
- package/dist/api/host.js.map +1 -0
- package/dist/api/index.d.ts +604 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +671 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/localStorageStore.d.ts +50 -0
- package/dist/api/localStorageStore.d.ts.map +1 -0
- package/dist/api/localStorageStore.js +151 -0
- package/dist/api/localStorageStore.js.map +1 -0
- package/dist/api/logger-contract.d.ts +37 -0
- package/dist/api/logger-contract.d.ts.map +1 -0
- package/dist/api/logger-contract.js +2 -0
- package/dist/api/logger-contract.js.map +1 -0
- package/dist/api/logger.d.ts +9 -0
- package/dist/api/logger.d.ts.map +1 -0
- package/dist/api/logger.js +16 -0
- package/dist/api/logger.js.map +1 -0
- package/dist/api/map-poi.d.ts +28 -0
- package/dist/api/map-poi.d.ts.map +1 -0
- package/dist/api/map-poi.js +82 -0
- package/dist/api/map-poi.js.map +1 -0
- package/dist/api/plot-layers.d.ts +240 -0
- package/dist/api/plot-layers.d.ts.map +1 -0
- package/dist/api/plot-layers.js +35 -0
- package/dist/api/plot-layers.js.map +1 -0
- package/dist/api/plots.d.ts +127 -0
- package/dist/api/plots.d.ts.map +1 -0
- package/dist/api/plots.js +39 -0
- package/dist/api/plots.js.map +1 -0
- package/dist/api/registry.d.ts +106 -0
- package/dist/api/registry.d.ts.map +1 -0
- package/dist/api/registry.js +267 -0
- package/dist/api/registry.js.map +1 -0
- package/dist/api/root-providers.d.ts +63 -0
- package/dist/api/root-providers.d.ts.map +1 -0
- package/dist/api/root-providers.js +76 -0
- package/dist/api/root-providers.js.map +1 -0
- package/dist/api/safe-random-uuid.d.ts +8 -0
- package/dist/api/safe-random-uuid.d.ts.map +1 -0
- package/dist/api/safe-random-uuid.js +19 -0
- package/dist/api/safe-random-uuid.js.map +1 -0
- package/dist/api/settings/SettingsContext.d.ts +32 -0
- package/dist/api/settings/SettingsContext.d.ts.map +1 -0
- package/dist/api/settings/SettingsContext.js +46 -0
- package/dist/api/settings/SettingsContext.js.map +1 -0
- package/dist/api/settings/SettingsService.d.ts +36 -0
- package/dist/api/settings/SettingsService.d.ts.map +1 -0
- package/dist/api/settings/SettingsService.js +139 -0
- package/dist/api/settings/SettingsService.js.map +1 -0
- package/dist/api/settings/store.d.ts +67 -0
- package/dist/api/settings/store.d.ts.map +1 -0
- package/dist/api/settings/store.js +160 -0
- package/dist/api/settings/store.js.map +1 -0
- package/dist/api/slots.d.ts +870 -0
- package/dist/api/slots.d.ts.map +1 -0
- package/dist/api/slots.js +45 -0
- package/dist/api/slots.js.map +1 -0
- package/dist/api/station-brokers.d.ts +48 -0
- package/dist/api/station-brokers.d.ts.map +1 -0
- package/dist/api/station-brokers.js +74 -0
- package/dist/api/station-brokers.js.map +1 -0
- package/dist/api/stock-bodies.d.ts +20 -0
- package/dist/api/stock-bodies.d.ts.map +1 -0
- package/dist/api/stock-bodies.js +263 -0
- package/dist/api/stock-bodies.js.map +1 -0
- package/dist/api/tiny-size.d.ts +13 -0
- package/dist/api/tiny-size.d.ts.map +1 -0
- package/dist/api/tiny-size.js +10 -0
- package/dist/api/tiny-size.js.map +1 -0
- package/dist/api/tone.d.ts +25 -0
- package/dist/api/tone.d.ts.map +1 -0
- package/dist/api/tone.js +15 -0
- package/dist/api/tone.js.map +1 -0
- package/dist/api/transport.d.ts +83 -0
- package/dist/api/transport.d.ts.map +1 -0
- package/dist/api/transport.js +2 -0
- package/dist/api/transport.js.map +1 -0
- package/dist/api/types.d.ts +1604 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +19 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/uplink-handles.d.ts +40 -0
- package/dist/api/uplink-handles.d.ts.map +1 -0
- package/dist/api/uplink-handles.js +59 -0
- package/dist/api/uplink-handles.js.map +1 -0
- package/dist/binary-frame.d.ts +116 -0
- package/dist/binary-frame.d.ts.map +1 -0
- package/dist/binary-frame.js +188 -0
- package/dist/binary-frame.js.map +1 -0
- package/dist/burn-clock.d.ts +61 -0
- package/dist/burn-clock.d.ts.map +1 -0
- package/dist/burn-clock.js +82 -0
- package/dist/burn-clock.js.map +1 -0
- package/dist/client.d.ts +8 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +39 -7
- package/dist/client.js.map +1 -1
- package/dist/combine-readings.d.ts +84 -0
- package/dist/combine-readings.d.ts.map +1 -0
- package/dist/combine-readings.js +197 -0
- package/dist/combine-readings.js.map +1 -0
- package/dist/command-delay.d.ts +211 -0
- package/dist/command-delay.d.ts.map +1 -0
- package/dist/command-delay.js +194 -0
- package/dist/command-delay.js.map +1 -0
- package/dist/command-reply-units.d.ts +14 -0
- package/dist/command-reply-units.d.ts.map +1 -0
- package/dist/command-reply-units.js +46 -0
- package/dist/command-reply-units.js.map +1 -0
- package/dist/commands.d.ts +143 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +113 -0
- package/dist/commands.js.map +1 -0
- package/dist/comms-degrade.d.ts +43 -0
- package/dist/comms-degrade.d.ts.map +1 -0
- package/dist/comms-degrade.js +45 -0
- package/dist/comms-degrade.js.map +1 -0
- package/dist/compat-versions.d.ts +42 -0
- package/dist/compat-versions.d.ts.map +1 -0
- package/dist/compat-versions.js +42 -0
- package/dist/compat-versions.js.map +1 -0
- package/dist/contract-enum-names.d.ts +89 -0
- package/dist/contract-enum-names.d.ts.map +1 -0
- package/dist/contract-enum-names.js +90 -0
- package/dist/contract-enum-names.js.map +1 -0
- package/dist/control-channels.d.ts +46 -0
- package/dist/control-channels.d.ts.map +1 -0
- package/dist/control-channels.js +49 -0
- package/dist/control-channels.js.map +1 -0
- package/dist/crew-standing.d.ts +69 -0
- package/dist/crew-standing.d.ts.map +1 -0
- package/dist/crew-standing.js +105 -0
- package/dist/crew-standing.js.map +1 -0
- package/dist/delay-roles.d.ts +96 -0
- package/dist/delay-roles.d.ts.map +1 -0
- package/dist/delay-roles.js +114 -0
- package/dist/delay-roles.js.map +1 -0
- package/dist/descent.d.ts +89 -0
- package/dist/descent.d.ts.map +1 -0
- package/dist/descent.js +96 -0
- package/dist/descent.js.map +1 -0
- package/dist/enum-names.d.ts +18 -0
- package/dist/enum-names.d.ts.map +1 -0
- package/dist/enum-names.js +35 -0
- package/dist/enum-names.js.map +1 -0
- package/dist/envelope.d.ts +15 -3
- package/dist/envelope.d.ts.map +1 -1
- package/dist/envelope.js +1 -0
- package/dist/envelope.js.map +1 -1
- package/dist/event-timeline.d.ts +112 -0
- package/dist/event-timeline.d.ts.map +1 -0
- package/dist/event-timeline.js +120 -0
- package/dist/event-timeline.js.map +1 -0
- package/dist/extensions.d.ts +28 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +36 -0
- package/dist/extensions.js.map +1 -0
- package/dist/field-frames.d.ts +32 -0
- package/dist/field-frames.d.ts.map +1 -0
- package/dist/field-frames.js +41 -0
- package/dist/field-frames.js.map +1 -0
- package/dist/flight/BufferedDataSource.d.ts +260 -0
- package/dist/flight/BufferedDataSource.d.ts.map +1 -0
- package/dist/flight/BufferedDataSource.js +790 -0
- package/dist/flight/BufferedDataSource.js.map +1 -0
- package/dist/flight/DataSourceWrapper.d.ts +33 -0
- package/dist/flight/DataSourceWrapper.d.ts.map +1 -0
- package/dist/flight/DataSourceWrapper.js +55 -0
- package/dist/flight/DataSourceWrapper.js.map +1 -0
- package/dist/flight/ListenerSet.d.ts +28 -0
- package/dist/flight/ListenerSet.d.ts.map +1 -0
- package/dist/flight/ListenerSet.js +66 -0
- package/dist/flight/ListenerSet.js.map +1 -0
- package/dist/flight/debugFlight.d.ts +8 -0
- package/dist/flight/debugFlight.d.ts.map +1 -0
- package/dist/flight/debugFlight.js +14 -0
- package/dist/flight/debugFlight.js.map +1 -0
- package/dist/flight/derive.d.ts +45 -0
- package/dist/flight/derive.d.ts.map +1 -0
- package/dist/flight/derive.js +26 -0
- package/dist/flight/derive.js.map +1 -0
- package/dist/flight/fixtureIO.d.ts +103 -0
- package/dist/flight/fixtureIO.d.ts.map +1 -0
- package/dist/flight/fixtureIO.js +120 -0
- package/dist/flight/fixtureIO.js.map +1 -0
- package/dist/flight/flightAutoDelete.d.ts +33 -0
- package/dist/flight/flightAutoDelete.d.ts.map +1 -0
- package/dist/flight/flightAutoDelete.js +43 -0
- package/dist/flight/flightAutoDelete.js.map +1 -0
- package/dist/flight/flightDetector.d.ts +73 -0
- package/dist/flight/flightDetector.d.ts.map +1 -0
- package/dist/flight/flightDetector.js +167 -0
- package/dist/flight/flightDetector.js.map +1 -0
- package/dist/flight/storage/LocalStorageStore.d.ts +52 -0
- package/dist/flight/storage/LocalStorageStore.d.ts.map +1 -0
- package/dist/flight/storage/LocalStorageStore.js +127 -0
- package/dist/flight/storage/LocalStorageStore.js.map +1 -0
- package/dist/flight/storage/MemoryStore.d.ts +24 -0
- package/dist/flight/storage/MemoryStore.d.ts.map +1 -0
- package/dist/flight/storage/MemoryStore.js +90 -0
- package/dist/flight/storage/MemoryStore.js.map +1 -0
- package/dist/flight/storage/Store.d.ts +37 -0
- package/dist/flight/storage/Store.d.ts.map +1 -0
- package/dist/flight/storage/Store.js +8 -0
- package/dist/flight/storage/Store.js.map +1 -0
- package/dist/flight/types.d.ts +358 -0
- package/dist/flight/types.d.ts.map +1 -0
- package/dist/flight/types.js +10 -0
- package/dist/flight/types.js.map +1 -0
- package/dist/frame-qualifier.d.ts +61 -0
- package/dist/frame-qualifier.d.ts.map +1 -0
- package/dist/frame-qualifier.js +122 -0
- package/dist/frame-qualifier.js.map +1 -0
- package/dist/frames/index.d.ts +133 -0
- package/dist/frames/index.d.ts.map +1 -0
- package/dist/frames/index.js +128 -0
- package/dist/frames/index.js.map +1 -0
- package/dist/index.d.ts +76 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +191 -5
- package/dist/index.js.map +1 -1
- package/dist/ksp-enum-names.d.ts +127 -0
- package/dist/ksp-enum-names.d.ts.map +1 -0
- package/dist/ksp-enum-names.js +128 -0
- package/dist/ksp-enum-names.js.map +1 -0
- package/dist/locked.d.ts +20 -0
- package/dist/locked.d.ts.map +1 -0
- package/dist/locked.js +25 -0
- package/dist/locked.js.map +1 -0
- package/dist/magnitude.d.ts +37 -0
- package/dist/magnitude.d.ts.map +1 -0
- package/dist/magnitude.js +39 -0
- package/dist/magnitude.js.map +1 -0
- package/dist/maneuver-basis.d.ts +19 -0
- package/dist/maneuver-basis.d.ts.map +1 -0
- package/dist/maneuver-basis.js +37 -0
- package/dist/maneuver-basis.js.map +1 -0
- package/dist/media/capture-clock.d.ts +35 -0
- package/dist/media/capture-clock.d.ts.map +1 -0
- package/dist/media/capture-clock.js +26 -0
- package/dist/media/capture-clock.js.map +1 -0
- package/dist/media/delayed-playout-buffer.d.ts +169 -0
- package/dist/media/delayed-playout-buffer.d.ts.map +1 -0
- package/dist/media/delayed-playout-buffer.js +166 -0
- package/dist/media/delayed-playout-buffer.js.map +1 -0
- package/dist/media/encoded-frame-delay.d.ts +115 -0
- package/dist/media/encoded-frame-delay.d.ts.map +1 -0
- package/dist/media/encoded-frame-delay.js +85 -0
- package/dist/media/encoded-frame-delay.js.map +1 -0
- package/dist/media/frame-delay.d.ts +204 -0
- package/dist/media/frame-delay.d.ts.map +1 -0
- package/dist/media/frame-delay.js +237 -0
- package/dist/media/frame-delay.js.map +1 -0
- package/dist/media/index.d.ts +17 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +21 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/radio-support.d.ts +98 -0
- package/dist/media/radio-support.d.ts.map +1 -0
- package/dist/media/radio-support.js +99 -0
- package/dist/media/radio-support.js.map +1 -0
- package/dist/media/shared-delayed-streams.d.ts +119 -0
- package/dist/media/shared-delayed-streams.d.ts.map +1 -0
- package/dist/media/shared-delayed-streams.js +167 -0
- package/dist/media/shared-delayed-streams.js.map +1 -0
- package/dist/media/worker/delay-worker-client.d.ts +106 -0
- package/dist/media/worker/delay-worker-client.d.ts.map +1 -0
- package/dist/media/worker/delay-worker-client.js +207 -0
- package/dist/media/worker/delay-worker-client.js.map +1 -0
- package/dist/media/worker/delay-worker.d.ts +107 -0
- package/dist/media/worker/delay-worker.d.ts.map +1 -0
- package/dist/media/worker/delay-worker.js +604 -0
- package/dist/media/worker/delay-worker.js.map +7 -0
- package/dist/media/worker/presentation-pacer.d.ts +156 -0
- package/dist/media/worker/presentation-pacer.d.ts.map +1 -0
- package/dist/media/worker/presentation-pacer.js +200 -0
- package/dist/media/worker/presentation-pacer.js.map +1 -0
- package/dist/media/worker/time-base.d.ts +44 -0
- package/dist/media/worker/time-base.d.ts.map +1 -0
- package/dist/media/worker/time-base.js +48 -0
- package/dist/media/worker/time-base.js.map +1 -0
- package/dist/media/worker/worker-delay-clock.d.ts +59 -0
- package/dist/media/worker/worker-delay-clock.d.ts.map +1 -0
- package/dist/media/worker/worker-delay-clock.js +89 -0
- package/dist/media/worker/worker-delay-clock.js.map +1 -0
- package/dist/perf/PerfBudget.d.ts +116 -0
- package/dist/perf/PerfBudget.d.ts.map +1 -0
- package/dist/perf/PerfBudget.js +221 -0
- package/dist/perf/PerfBudget.js.map +1 -0
- package/dist/rail-tags.d.ts +156 -0
- package/dist/rail-tags.d.ts.map +1 -0
- package/dist/rail-tags.js +131 -0
- package/dist/rail-tags.js.map +1 -0
- package/dist/raw-field-split.d.ts +32 -0
- package/dist/raw-field-split.d.ts.map +1 -0
- package/dist/raw-field-split.js +46 -0
- package/dist/raw-field-split.js.map +1 -0
- package/dist/reading.d.ts +960 -0
- package/dist/reading.d.ts.map +1 -0
- package/dist/reading.js +529 -0
- package/dist/reading.js.map +1 -0
- package/dist/reckonability.d.ts +52 -0
- package/dist/reckonability.d.ts.map +1 -0
- package/dist/reckonability.js +79 -0
- package/dist/reckonability.js.map +1 -0
- package/dist/registry/index.d.ts +7 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +26 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/runtime-topic-registry.d.ts +99 -0
- package/dist/runtime-topic-registry.d.ts.map +1 -0
- package/dist/runtime-topic-registry.js +182 -0
- package/dist/runtime-topic-registry.js.map +1 -0
- package/dist/spine/arrival-deadline.d.ts +19 -0
- package/dist/spine/arrival-deadline.d.ts.map +1 -0
- package/dist/spine/arrival-deadline.js +38 -0
- package/dist/spine/arrival-deadline.js.map +1 -0
- package/dist/spine/atmospheric-reckoning.d.ts +161 -0
- package/dist/spine/atmospheric-reckoning.d.ts.map +1 -0
- package/dist/spine/atmospheric-reckoning.js +421 -0
- package/dist/spine/atmospheric-reckoning.js.map +1 -0
- package/dist/spine/body-derivations.d.ts +28 -0
- package/dist/spine/body-derivations.d.ts.map +1 -0
- package/dist/spine/body-derivations.js +73 -0
- package/dist/spine/body-derivations.js.map +1 -0
- package/dist/spine/capability-lock.d.ts +43 -0
- package/dist/spine/capability-lock.d.ts.map +1 -0
- package/dist/spine/capability-lock.js +153 -0
- package/dist/spine/capability-lock.js.map +1 -0
- package/dist/spine/celestial-facts.d.ts +181 -0
- package/dist/spine/celestial-facts.d.ts.map +1 -0
- package/dist/spine/celestial-facts.js +212 -0
- package/dist/spine/celestial-facts.js.map +1 -0
- package/dist/spine/channel-error-warning.d.ts +24 -0
- package/dist/spine/channel-error-warning.d.ts.map +1 -0
- package/dist/spine/channel-error-warning.js +51 -0
- package/dist/spine/channel-error-warning.js.map +1 -0
- package/dist/spine/client-reading.d.ts +70 -0
- package/dist/spine/client-reading.d.ts.map +1 -0
- package/dist/spine/client-reading.js +123 -0
- package/dist/spine/client-reading.js.map +1 -0
- package/dist/spine/client-timeline.d.ts +130 -0
- package/dist/spine/client-timeline.d.ts.map +1 -0
- package/dist/spine/client-timeline.js +174 -0
- package/dist/spine/client-timeline.js.map +1 -0
- package/dist/spine/client.d.ts +454 -0
- package/dist/spine/client.d.ts.map +1 -0
- package/dist/spine/client.js +1138 -0
- package/dist/spine/client.js.map +1 -0
- package/dist/spine/clock.d.ts +48 -0
- package/dist/spine/clock.d.ts.map +1 -0
- package/dist/spine/clock.js +22 -0
- package/dist/spine/clock.js.map +1 -0
- package/dist/spine/command-gate.d.ts +89 -0
- package/dist/spine/command-gate.d.ts.map +1 -0
- package/dist/spine/command-gate.js +56 -0
- package/dist/spine/command-gate.js.map +1 -0
- package/dist/spine/comms-delay-reckoning.d.ts +123 -0
- package/dist/spine/comms-delay-reckoning.d.ts.map +1 -0
- package/dist/spine/comms-delay-reckoning.js +166 -0
- package/dist/spine/comms-delay-reckoning.js.map +1 -0
- package/dist/spine/comms-journey.d.ts +74 -0
- package/dist/spine/comms-journey.d.ts.map +1 -0
- package/dist/spine/comms-journey.js +180 -0
- package/dist/spine/comms-journey.js.map +1 -0
- package/dist/spine/comms-path-geometry.d.ts +128 -0
- package/dist/spine/comms-path-geometry.d.ts.map +1 -0
- package/dist/spine/comms-path-geometry.js +172 -0
- package/dist/spine/comms-path-geometry.js.map +1 -0
- package/dist/spine/comms-route.d.ts +52 -0
- package/dist/spine/comms-route.d.ts.map +1 -0
- package/dist/spine/comms-route.js +109 -0
- package/dist/spine/comms-route.js.map +1 -0
- package/dist/spine/connection-error-warning.d.ts +28 -0
- package/dist/spine/connection-error-warning.d.ts.map +1 -0
- package/dist/spine/connection-error-warning.js +49 -0
- package/dist/spine/connection-error-warning.js.map +1 -0
- package/dist/spine/connectivity-history.d.ts +35 -0
- package/dist/spine/connectivity-history.d.ts.map +1 -0
- package/dist/spine/connectivity-history.js +54 -0
- package/dist/spine/connectivity-history.js.map +1 -0
- package/dist/spine/context.d.ts +485 -0
- package/dist/spine/context.d.ts.map +1 -0
- package/dist/spine/context.js +1017 -0
- package/dist/spine/context.js.map +1 -0
- package/dist/spine/contributed-channels.d.ts +48 -0
- package/dist/spine/contributed-channels.d.ts.map +1 -0
- package/dist/spine/contributed-channels.js +104 -0
- package/dist/spine/contributed-channels.js.map +1 -0
- package/dist/spine/contribution-scope.d.ts +19 -0
- package/dist/spine/contribution-scope.d.ts.map +1 -0
- package/dist/spine/contribution-scope.js +62 -0
- package/dist/spine/contribution-scope.js.map +1 -0
- package/dist/spine/contributions.d.ts +77 -0
- package/dist/spine/contributions.d.ts.map +1 -0
- package/dist/spine/contributions.js +180 -0
- package/dist/spine/contributions.js.map +1 -0
- package/dist/spine/control-frame-to-read-frame.d.ts +43 -0
- package/dist/spine/control-frame-to-read-frame.d.ts.map +1 -0
- package/dist/spine/control-frame-to-read-frame.js +79 -0
- package/dist/spine/control-frame-to-read-frame.js.map +1 -0
- package/dist/spine/core-reckoners.d.ts +2 -0
- package/dist/spine/core-reckoners.d.ts.map +1 -0
- package/dist/spine/core-reckoners.js +894 -0
- package/dist/spine/core-reckoners.js.map +1 -0
- package/dist/spine/dashboard-item.d.ts +12 -0
- package/dist/spine/dashboard-item.d.ts.map +1 -0
- package/dist/spine/dashboard-item.js +16 -0
- package/dist/spine/dashboard-item.js.map +1 -0
- package/dist/spine/delay-authority.d.ts +204 -0
- package/dist/spine/delay-authority.d.ts.map +1 -0
- package/dist/spine/delay-authority.js +306 -0
- package/dist/spine/delay-authority.js.map +1 -0
- package/dist/spine/delta-v-budget.d.ts +121 -0
- package/dist/spine/delta-v-budget.d.ts.map +1 -0
- package/dist/spine/delta-v-budget.js +141 -0
- package/dist/spine/delta-v-budget.js.map +1 -0
- package/dist/spine/departure-reckoning.d.ts +37 -0
- package/dist/spine/departure-reckoning.d.ts.map +1 -0
- package/dist/spine/departure-reckoning.js +44 -0
- package/dist/spine/departure-reckoning.js.map +1 -0
- package/dist/spine/dv-stage-resources.d.ts +29 -0
- package/dist/spine/dv-stage-resources.d.ts.map +1 -0
- package/dist/spine/dv-stage-resources.js +95 -0
- package/dist/spine/dv-stage-resources.js.map +1 -0
- package/dist/spine/heartbeat-tracker.d.ts +116 -0
- package/dist/spine/heartbeat-tracker.d.ts.map +1 -0
- package/dist/spine/heartbeat-tracker.js +175 -0
- package/dist/spine/heartbeat-tracker.js.map +1 -0
- package/dist/spine/held-command-actions.d.ts +33 -0
- package/dist/spine/held-command-actions.d.ts.map +1 -0
- package/dist/spine/held-command-actions.js +75 -0
- package/dist/spine/held-command-actions.js.map +1 -0
- package/dist/spine/impact-point.d.ts +97 -0
- package/dist/spine/impact-point.d.ts.map +1 -0
- package/dist/spine/impact-point.js +299 -0
- package/dist/spine/impact-point.js.map +1 -0
- package/dist/spine/index.d.ts +84 -0
- package/dist/spine/index.d.ts.map +1 -0
- package/dist/spine/index.js +132 -0
- package/dist/spine/index.js.map +1 -0
- package/dist/spine/kepler-reckoning.d.ts +244 -0
- package/dist/spine/kepler-reckoning.d.ts.map +1 -0
- package/dist/spine/kepler-reckoning.js +377 -0
- package/dist/spine/kepler-reckoning.js.map +1 -0
- package/dist/spine/kepler.d.ts +296 -0
- package/dist/spine/kepler.d.ts.map +1 -0
- package/dist/spine/kepler.js +330 -0
- package/dist/spine/kepler.js.map +1 -0
- package/dist/spine/lagrange.d.ts +247 -0
- package/dist/spine/lagrange.d.ts.map +1 -0
- package/dist/spine/lagrange.js +379 -0
- package/dist/spine/lagrange.js.map +1 -0
- package/dist/spine/lifecycle.d.ts +244 -0
- package/dist/spine/lifecycle.d.ts.map +1 -0
- package/dist/spine/lifecycle.js +37 -0
- package/dist/spine/lifecycle.js.map +1 -0
- package/dist/spine/lock-scope.d.ts +23 -0
- package/dist/spine/lock-scope.d.ts.map +1 -0
- package/dist/spine/lock-scope.js +10 -0
- package/dist/spine/lock-scope.js.map +1 -0
- package/dist/spine/map-command.d.ts +29 -0
- package/dist/spine/map-command.d.ts.map +1 -0
- package/dist/spine/map-command.js +32 -0
- package/dist/spine/map-command.js.map +1 -0
- package/dist/spine/map-topic.d.ts +60 -0
- package/dist/spine/map-topic.d.ts.map +1 -0
- package/dist/spine/map-topic.js +151 -0
- package/dist/spine/map-topic.js.map +1 -0
- package/dist/spine/mod-settings.d.ts +22 -0
- package/dist/spine/mod-settings.d.ts.map +1 -0
- package/dist/spine/mod-settings.js +42 -0
- package/dist/spine/mod-settings.js.map +1 -0
- package/dist/spine/never-reckonable.d.ts +79 -0
- package/dist/spine/never-reckonable.d.ts.map +1 -0
- package/dist/spine/never-reckonable.js +168 -0
- package/dist/spine/never-reckonable.js.map +1 -0
- package/dist/spine/orbit-patches.d.ts +81 -0
- package/dist/spine/orbit-patches.d.ts.map +1 -0
- package/dist/spine/orbit-patches.js +111 -0
- package/dist/spine/orbit-patches.js.map +1 -0
- package/dist/spine/orbit-trajectory.d.ts +276 -0
- package/dist/spine/orbit-trajectory.d.ts.map +1 -0
- package/dist/spine/orbit-trajectory.js +382 -0
- package/dist/spine/orbit-trajectory.js.map +1 -0
- package/dist/spine/orbital-solve.d.ts +164 -0
- package/dist/spine/orbital-solve.d.ts.map +1 -0
- package/dist/spine/orbital-solve.js +239 -0
- package/dist/spine/orbital-solve.js.map +1 -0
- package/dist/spine/own-craft-vantage.d.ts +80 -0
- package/dist/spine/own-craft-vantage.d.ts.map +1 -0
- package/dist/spine/own-craft-vantage.js +136 -0
- package/dist/spine/own-craft-vantage.js.map +1 -0
- package/dist/spine/past-track.d.ts +46 -0
- package/dist/spine/past-track.d.ts.map +1 -0
- package/dist/spine/past-track.js +62 -0
- package/dist/spine/past-track.js.map +1 -0
- package/dist/spine/powered-reckoning.d.ts +164 -0
- package/dist/spine/powered-reckoning.d.ts.map +1 -0
- package/dist/spine/powered-reckoning.js +514 -0
- package/dist/spine/powered-reckoning.js.map +1 -0
- package/dist/spine/processorEvaluator.d.ts +110 -0
- package/dist/spine/processorEvaluator.d.ts.map +1 -0
- package/dist/spine/processorEvaluator.js +608 -0
- package/dist/spine/processorEvaluator.js.map +1 -0
- package/dist/spine/processors.d.ts +242 -0
- package/dist/spine/processors.d.ts.map +1 -0
- package/dist/spine/processors.js +109 -0
- package/dist/spine/processors.js.map +1 -0
- package/dist/spine/propagation.d.ts +17 -0
- package/dist/spine/propagation.d.ts.map +1 -0
- package/dist/spine/propagation.js +22 -0
- package/dist/spine/propagation.js.map +1 -0
- package/dist/spine/rail-registry.d.ts +21 -0
- package/dist/spine/rail-registry.d.ts.map +1 -0
- package/dist/spine/rail-registry.js +7 -0
- package/dist/spine/rail-registry.js.map +1 -0
- package/dist/spine/reckoners.d.ts +133 -0
- package/dist/spine/reckoners.d.ts.map +1 -0
- package/dist/spine/reckoners.js +245 -0
- package/dist/spine/reckoners.js.map +1 -0
- package/dist/spine/reference-frame.d.ts +286 -0
- package/dist/spine/reference-frame.d.ts.map +1 -0
- package/dist/spine/reference-frame.js +605 -0
- package/dist/spine/reference-frame.js.map +1 -0
- package/dist/spine/replay-recorder.d.ts +72 -0
- package/dist/spine/replay-recorder.d.ts.map +1 -0
- package/dist/spine/replay-recorder.js +101 -0
- package/dist/spine/replay-recorder.js.map +1 -0
- package/dist/spine/replay-session-controller.d.ts +65 -0
- package/dist/spine/replay-session-controller.d.ts.map +1 -0
- package/dist/spine/replay-session-controller.js +220 -0
- package/dist/spine/replay-session-controller.js.map +1 -0
- package/dist/spine/replay-session.d.ts +20 -0
- package/dist/spine/replay-session.d.ts.map +1 -0
- package/dist/spine/replay-session.js +31 -0
- package/dist/spine/replay-session.js.map +1 -0
- package/dist/spine/replay-transport.d.ts +83 -0
- package/dist/spine/replay-transport.d.ts.map +1 -0
- package/dist/spine/replay-transport.js +95 -0
- package/dist/spine/replay-transport.js.map +1 -0
- package/dist/spine/screen.d.ts +46 -0
- package/dist/spine/screen.d.ts.map +1 -0
- package/dist/spine/screen.js +41 -0
- package/dist/spine/screen.js.map +1 -0
- package/dist/spine/settings-registry.d.ts +222 -0
- package/dist/spine/settings-registry.d.ts.map +1 -0
- package/dist/spine/settings-registry.js +43 -0
- package/dist/spine/settings-registry.js.map +1 -0
- package/dist/spine/settings-tabs.d.ts +39 -0
- package/dist/spine/settings-tabs.d.ts.map +1 -0
- package/dist/spine/settings-tabs.js +18 -0
- package/dist/spine/settings-tabs.js.map +1 -0
- package/dist/spine/share-equal.d.ts +11 -0
- package/dist/spine/share-equal.d.ts.map +1 -0
- package/dist/spine/share-equal.js +57 -0
- package/dist/spine/share-equal.js.map +1 -0
- package/dist/spine/size-delta.d.ts +9 -0
- package/dist/spine/size-delta.d.ts.map +1 -0
- package/dist/spine/size-delta.js +19 -0
- package/dist/spine/size-delta.js.map +1 -0
- package/dist/spine/space-center-state.d.ts +44 -0
- package/dist/spine/space-center-state.d.ts.map +1 -0
- package/dist/spine/space-center-state.js +51 -0
- package/dist/spine/space-center-state.js.map +1 -0
- package/dist/spine/stream-status.d.ts +21 -0
- package/dist/spine/stream-status.d.ts.map +1 -0
- package/dist/spine/stream-status.js +48 -0
- package/dist/spine/stream-status.js.map +1 -0
- package/dist/spine/subscribe-read.d.ts +51 -0
- package/dist/spine/subscribe-read.d.ts.map +1 -0
- package/dist/spine/subscribe-read.js +66 -0
- package/dist/spine/subscribe-read.js.map +1 -0
- package/dist/spine/subscriber-identity.d.ts +12 -0
- package/dist/spine/subscriber-identity.d.ts.map +1 -0
- package/dist/spine/subscriber-identity.js +33 -0
- package/dist/spine/subscriber-identity.js.map +1 -0
- package/dist/spine/system-state.d.ts +29 -0
- package/dist/spine/system-state.d.ts.map +1 -0
- package/dist/spine/system-state.js +25 -0
- package/dist/spine/system-state.js.map +1 -0
- package/dist/spine/target-range-reckoning.d.ts +33 -0
- package/dist/spine/target-range-reckoning.d.ts.map +1 -0
- package/dist/spine/target-range-reckoning.js +78 -0
- package/dist/spine/target-range-reckoning.js.map +1 -0
- package/dist/spine/timeline-store.d.ts +1336 -0
- package/dist/spine/timeline-store.d.ts.map +1 -0
- package/dist/spine/timeline-store.js +2893 -0
- package/dist/spine/timeline-store.js.map +1 -0
- package/dist/spine/topic-ownership.d.ts +138 -0
- package/dist/spine/topic-ownership.d.ts.map +1 -0
- package/dist/spine/topic-ownership.js +194 -0
- package/dist/spine/topic-ownership.js.map +1 -0
- package/dist/spine/unowned-warning.d.ts +25 -0
- package/dist/spine/unowned-warning.d.ts.map +1 -0
- package/dist/spine/unowned-warning.js +55 -0
- package/dist/spine/unowned-warning.js.map +1 -0
- package/dist/spine/uplink-clients.d.ts +135 -0
- package/dist/spine/uplink-clients.d.ts.map +1 -0
- package/dist/spine/uplink-clients.js +79 -0
- package/dist/spine/uplink-clients.js.map +1 -0
- package/dist/spine/uplink-health.d.ts +123 -0
- package/dist/spine/uplink-health.d.ts.map +1 -0
- package/dist/spine/uplink-health.js +75 -0
- package/dist/spine/uplink-health.js.map +1 -0
- package/dist/spine/use-action-input.d.ts +3 -0
- package/dist/spine/use-action-input.d.ts.map +1 -0
- package/dist/spine/use-action-input.js +76 -0
- package/dist/spine/use-action-input.js.map +1 -0
- package/dist/spine/use-body-states.d.ts +34 -0
- package/dist/spine/use-body-states.d.ts.map +1 -0
- package/dist/spine/use-body-states.js +23 -0
- package/dist/spine/use-body-states.js.map +1 -0
- package/dist/spine/use-command.d.ts +259 -0
- package/dist/spine/use-command.d.ts.map +1 -0
- package/dist/spine/use-command.js +626 -0
- package/dist/spine/use-command.js.map +1 -0
- package/dist/spine/use-data-sources.d.ts +7 -0
- package/dist/spine/use-data-sources.d.ts.map +1 -0
- package/dist/spine/use-data-sources.js +27 -0
- package/dist/spine/use-data-sources.js.map +1 -0
- package/dist/spine/use-late-telemetry-subscribe.d.ts +59 -0
- package/dist/spine/use-late-telemetry-subscribe.d.ts.map +1 -0
- package/dist/spine/use-late-telemetry-subscribe.js +81 -0
- package/dist/spine/use-late-telemetry-subscribe.js.map +1 -0
- package/dist/spine/use-orbit-trajectory.d.ts +25 -0
- package/dist/spine/use-orbit-trajectory.d.ts.map +1 -0
- package/dist/spine/use-orbit-trajectory.js +45 -0
- package/dist/spine/use-orbit-trajectory.js.map +1 -0
- package/dist/spine/use-processor.d.ts +30 -0
- package/dist/spine/use-processor.d.ts.map +1 -0
- package/dist/spine/use-processor.js +36 -0
- package/dist/spine/use-processor.js.map +1 -0
- package/dist/spine/use-route-commands.d.ts +28 -0
- package/dist/spine/use-route-commands.d.ts.map +1 -0
- package/dist/spine/use-route-commands.js +32 -0
- package/dist/spine/use-route-commands.js.map +1 -0
- package/dist/spine/use-selected-vantage.d.ts +12 -0
- package/dist/spine/use-selected-vantage.d.ts.map +1 -0
- package/dist/spine/use-selected-vantage.js +19 -0
- package/dist/spine/use-selected-vantage.js.map +1 -0
- package/dist/spine/use-stream-event.d.ts +28 -0
- package/dist/spine/use-stream-event.d.ts.map +1 -0
- package/dist/spine/use-stream-event.js +52 -0
- package/dist/spine/use-stream-event.js.map +1 -0
- package/dist/spine/use-stream.d.ts +79 -0
- package/dist/spine/use-stream.d.ts.map +1 -0
- package/dist/spine/use-stream.js +124 -0
- package/dist/spine/use-stream.js.map +1 -0
- package/dist/spine/use-telemetry.d.ts +79 -0
- package/dist/spine/use-telemetry.d.ts.map +1 -0
- package/dist/spine/use-telemetry.js +39 -0
- package/dist/spine/use-telemetry.js.map +1 -0
- package/dist/spine/use-transmissions.d.ts +36 -0
- package/dist/spine/use-transmissions.d.ts.map +1 -0
- package/dist/spine/use-transmissions.js +63 -0
- package/dist/spine/use-transmissions.js.map +1 -0
- package/dist/spine/vantage.d.ts +16 -0
- package/dist/spine/vantage.d.ts.map +1 -0
- package/dist/spine/vantage.js +16 -0
- package/dist/spine/vantage.js.map +1 -0
- package/dist/spine/view-clock.d.ts +232 -0
- package/dist/spine/view-clock.d.ts.map +1 -0
- package/dist/spine/view-clock.js +348 -0
- package/dist/spine/view-clock.js.map +1 -0
- package/dist/spine/wire-payloads.d.ts +232 -0
- package/dist/spine/wire-payloads.d.ts.map +1 -0
- package/dist/spine/wire-payloads.js +2 -0
- package/dist/spine/wire-payloads.js.map +1 -0
- package/dist/testing/console-logger.d.ts +10 -0
- package/dist/testing/console-logger.d.ts.map +1 -0
- package/dist/testing/console-logger.js +23 -0
- package/dist/testing/console-logger.js.map +1 -0
- package/dist/testing/create-test-telemetry-client.d.ts +13 -0
- package/dist/testing/create-test-telemetry-client.d.ts.map +1 -0
- package/dist/testing/create-test-telemetry-client.js +14 -0
- package/dist/testing/create-test-telemetry-client.js.map +1 -0
- package/dist/testing/fake-wall-clock.d.ts +19 -0
- package/dist/testing/fake-wall-clock.d.ts.map +1 -0
- package/dist/testing/fake-wall-clock.js +17 -0
- package/dist/testing/fake-wall-clock.js.map +1 -0
- package/dist/testing/index.d.ts +30 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +99 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/install-act-gate-stretch.d.ts +24 -0
- package/dist/testing/install-act-gate-stretch.d.ts.map +1 -0
- package/dist/testing/install-act-gate-stretch.js +67 -0
- package/dist/testing/install-act-gate-stretch.js.map +1 -0
- package/dist/testing/install-dom-stubs.d.ts +9 -0
- package/dist/testing/install-dom-stubs.d.ts.map +1 -0
- package/dist/testing/install-dom-stubs.js +121 -0
- package/dist/testing/install-dom-stubs.js.map +1 -0
- package/dist/testing/install-real-test-host.d.ts +51 -0
- package/dist/testing/install-real-test-host.d.ts.map +1 -0
- package/dist/testing/install-real-test-host.js +111 -0
- package/dist/testing/install-real-test-host.js.map +1 -0
- package/dist/testing/install-test-host.d.ts +18 -0
- package/dist/testing/install-test-host.d.ts.map +1 -0
- package/dist/testing/install-test-host.js +23 -0
- package/dist/testing/install-test-host.js.map +1 -0
- package/dist/testing/memory-storage.d.ts +10 -0
- package/dist/testing/memory-storage.d.ts.map +1 -0
- package/dist/testing/memory-storage.js +26 -0
- package/dist/testing/memory-storage.js.map +1 -0
- package/dist/testing/mock-data-source.d.ts +46 -0
- package/dist/testing/mock-data-source.d.ts.map +1 -0
- package/dist/testing/mock-data-source.js +74 -0
- package/dist/testing/mock-data-source.js.map +1 -0
- package/dist/testing/recorded-alarm-requests.d.ts +28 -0
- package/dist/testing/recorded-alarm-requests.d.ts.map +1 -0
- package/dist/testing/recorded-alarm-requests.js +24 -0
- package/dist/testing/recorded-alarm-requests.js.map +1 -0
- package/dist/testing/render.d.ts +29 -0
- package/dist/testing/render.d.ts.map +1 -0
- package/dist/testing/render.js +52 -0
- package/dist/testing/render.js.map +1 -0
- package/dist/testing/stream-fixture.d.ts +71 -0
- package/dist/testing/stream-fixture.d.ts.map +1 -0
- package/dist/testing/stream-fixture.js +61 -0
- package/dist/testing/stream-fixture.js.map +1 -0
- package/dist/testing/stub-transport.d.ts +124 -0
- package/dist/testing/stub-transport.d.ts.map +1 -0
- package/dist/testing/stub-transport.js +229 -0
- package/dist/testing/stub-transport.js.map +1 -0
- package/dist/testing/theme.d.ts +59 -0
- package/dist/testing/theme.d.ts.map +1 -0
- package/dist/testing/theme.js +11 -0
- package/dist/testing/theme.js.map +1 -0
- package/dist/timeline.d.ts +63 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +2 -0
- package/dist/timeline.js.map +1 -0
- package/dist/topic-fields.d.ts +55 -0
- package/dist/topic-fields.d.ts.map +1 -0
- package/dist/topic-fields.js +102 -0
- package/dist/topic-fields.js.map +1 -0
- package/dist/topics.d.ts +335 -30
- package/dist/topics.d.ts.map +1 -1
- package/dist/topics.js +183 -28
- package/dist/topics.js.map +1 -1
- package/dist/unit-system/algebra.d.ts +305 -0
- package/dist/unit-system/algebra.d.ts.map +1 -0
- package/dist/unit-system/algebra.js +2 -0
- package/dist/unit-system/algebra.js.map +1 -0
- package/dist/unit-system/calendar.d.ts +74 -0
- package/dist/unit-system/calendar.d.ts.map +1 -0
- package/dist/unit-system/calendar.js +107 -0
- package/dist/unit-system/calendar.js.map +1 -0
- package/dist/unit-system/declarations.d.ts +87 -0
- package/dist/unit-system/declarations.d.ts.map +1 -0
- package/dist/unit-system/declarations.js +2 -0
- package/dist/unit-system/declarations.js.map +1 -0
- package/dist/unit-system/definitions.d.ts +639 -0
- package/dist/unit-system/definitions.d.ts.map +1 -0
- package/dist/unit-system/definitions.js +326 -0
- package/dist/unit-system/definitions.js.map +1 -0
- package/dist/unit-system/dimension.d.ts +29 -0
- package/dist/unit-system/dimension.d.ts.map +1 -0
- package/dist/unit-system/dimension.js +88 -0
- package/dist/unit-system/dimension.js.map +1 -0
- package/dist/unit-system/guards.d.ts +58 -0
- package/dist/unit-system/guards.d.ts.map +1 -0
- package/dist/unit-system/guards.js +73 -0
- package/dist/unit-system/guards.js.map +1 -0
- package/dist/unit-system/index.d.ts +16 -0
- package/dist/unit-system/index.d.ts.map +1 -0
- package/dist/unit-system/index.js +14 -0
- package/dist/unit-system/index.js.map +1 -0
- package/dist/unit-system/registry.d.ts +160 -0
- package/dist/unit-system/registry.d.ts.map +1 -0
- package/dist/unit-system/registry.js +267 -0
- package/dist/unit-system/registry.js.map +1 -0
- package/dist/unit-system/value.d.ts +437 -0
- package/dist/unit-system/value.d.ts.map +1 -0
- package/dist/unit-system/value.js +387 -0
- package/dist/unit-system/value.js.map +1 -0
- package/dist/units.d.ts +159 -0
- package/dist/units.d.ts.map +1 -0
- package/dist/units.js +385 -0
- package/dist/units.js.map +1 -0
- package/dist/uplink-externals.d.ts +65 -0
- package/dist/uplink-externals.d.ts.map +1 -0
- package/dist/uplink-externals.js +87 -0
- package/dist/uplink-externals.js.map +1 -0
- package/dist/uplink-manifest.d.ts +180 -0
- package/dist/uplink-manifest.d.ts.map +1 -0
- package/dist/uplink-manifest.js +214 -0
- package/dist/uplink-manifest.js.map +1 -0
- package/dist/value.d.ts +13 -0
- package/dist/value.d.ts.map +1 -0
- package/dist/value.js +2 -0
- package/dist/value.js.map +1 -0
- package/dist/version.generated.d.ts +7 -0
- package/dist/version.generated.d.ts.map +1 -0
- package/dist/version.generated.js +11 -0
- package/dist/version.generated.js.map +1 -0
- package/dist/view-clock-formula.d.ts +52 -0
- package/dist/view-clock-formula.d.ts.map +1 -0
- package/dist/view-clock-formula.js +46 -0
- package/dist/view-clock-formula.js.map +1 -0
- package/dist/wrap-units.d.ts +55 -0
- package/dist/wrap-units.d.ts.map +1 -0
- package/dist/wrap-units.js +256 -0
- package/dist/wrap-units.js.map +1 -0
- package/package.json +73 -11
- package/src/__generated__/command-map.ts +465 -0
- package/src/__generated__/contract.ts +10986 -0
- package/src/__generated__/control-channels.ts +41 -0
- package/src/__generated__/delay-roles.ts +82 -0
- package/src/__generated__/error-codes.ts +712 -0
- package/src/__generated__/frames.ts +52 -0
- package/src/__generated__/reckonability.ts +86 -0
- package/src/__generated__/test-theme.ts +70 -0
- package/src/__generated__/topic-map.ts +314 -0
- package/src/__generated__/units.json +2755 -0
- package/src/__generated__/units.ts +3398 -0
- package/src/api/action-dispatch.ts +105 -0
- package/src/api/alarm-request.ts +153 -0
- package/src/api/bodies.ts +116 -0
- package/src/api/command-rejection.ts +194 -0
- package/src/api/contribution-slots.ts +666 -0
- package/src/api/coverage/CoverageMaskCache.ts +112 -0
- package/src/api/coverage/CoverageMaskContext.tsx +79 -0
- package/src/api/coverage-source.ts +137 -0
- package/src/api/error-codes.ts +87 -0
- package/src/api/event-reveal.ts +96 -0
- package/src/api/host.ts +213 -0
- package/src/api/index.ts +1170 -0
- package/src/api/localStorageStore.ts +180 -0
- package/src/api/logger-contract.ts +38 -0
- package/src/api/logger.ts +17 -0
- package/src/api/map-poi.ts +98 -0
- package/src/api/plot-layers.ts +257 -0
- package/src/api/plots.ts +169 -0
- package/src/api/registry.ts +324 -0
- package/src/api/root-providers.tsx +136 -0
- package/src/api/safe-random-uuid.ts +22 -0
- package/src/api/settings/SettingsContext.tsx +79 -0
- package/src/api/settings/SettingsService.ts +142 -0
- package/src/api/settings/store.ts +180 -0
- package/src/api/slots.ts +1041 -0
- package/src/api/station-brokers.ts +94 -0
- package/src/api/stock-bodies.ts +281 -0
- package/src/api/tiny-size.ts +9 -0
- package/src/api/tone.ts +41 -0
- package/src/api/transport.ts +98 -0
- package/src/api/types.ts +1903 -0
- package/src/api/uplink-handles.ts +71 -0
- package/src/binary-frame.ts +250 -0
- package/src/burn-clock.ts +115 -0
- package/src/client.ts +56 -0
- package/src/combine-readings.ts +250 -0
- package/src/command-delay.ts +392 -0
- package/src/command-reply-units.ts +63 -0
- package/src/commands.ts +242 -0
- package/src/comms-degrade.ts +68 -0
- package/src/compat-versions.ts +44 -0
- package/src/contract-enum-names.ts +141 -0
- package/src/control-channels.ts +92 -0
- package/src/crew-standing.ts +131 -0
- package/src/delay-roles.ts +187 -0
- package/src/descent.ts +149 -0
- package/src/enum-names.ts +35 -0
- package/src/envelope.ts +45 -0
- package/src/event-timeline.ts +196 -0
- package/src/extensions.ts +58 -0
- package/src/field-frames.ts +70 -0
- package/src/flight/BufferedDataSource.ts +945 -0
- package/src/flight/DataSourceWrapper.ts +79 -0
- package/src/flight/ListenerSet.ts +73 -0
- package/src/flight/debugFlight.ts +16 -0
- package/src/flight/derive.ts +56 -0
- package/src/flight/fixtureIO.ts +197 -0
- package/src/flight/flightAutoDelete.ts +53 -0
- package/src/flight/flightDetector.ts +213 -0
- package/src/flight/storage/LocalStorageStore.ts +160 -0
- package/src/flight/storage/MemoryStore.ts +113 -0
- package/src/flight/storage/Store.ts +52 -0
- package/src/flight/types.ts +408 -0
- package/src/frame-qualifier.ts +153 -0
- package/src/frames/index.ts +177 -0
- package/src/index.ts +576 -0
- package/src/ksp-enum-names.ts +191 -0
- package/src/locked.ts +29 -0
- package/src/magnitude.ts +52 -0
- package/src/maneuver-basis.ts +49 -0
- package/src/media/capture-clock.ts +43 -0
- package/src/media/delayed-playout-buffer.ts +253 -0
- package/src/media/encoded-frame-delay.ts +153 -0
- package/src/media/frame-delay.ts +402 -0
- package/src/media/index.ts +83 -0
- package/src/media/radio-support.ts +132 -0
- package/src/media/shared-delayed-streams.ts +232 -0
- package/src/media/webcodecs-track-io.d.ts +99 -0
- package/src/media/worker/delay-worker-client.ts +312 -0
- package/src/media/worker/delay-worker.ts +433 -0
- package/src/media/worker/presentation-pacer.ts +249 -0
- package/src/media/worker/time-base.ts +55 -0
- package/src/media/worker/worker-delay-clock.ts +122 -0
- package/src/perf/PerfBudget.ts +267 -0
- package/src/rail-tags.ts +221 -0
- package/src/raw-field-split.ts +72 -0
- package/src/reading.ts +1565 -0
- package/src/reckonability.ts +117 -0
- package/src/registry/index.ts +36 -0
- package/src/runtime-topic-registry.ts +204 -0
- package/src/spine/arrival-deadline.ts +48 -0
- package/src/spine/atmospheric-reckoning.ts +540 -0
- package/src/spine/body-derivations.ts +103 -0
- package/src/spine/capability-lock.ts +210 -0
- package/src/spine/celestial-facts.ts +455 -0
- package/src/spine/channel-error-warning.ts +61 -0
- package/src/spine/client-reading.ts +282 -0
- package/src/spine/client-timeline.ts +234 -0
- package/src/spine/client.ts +1336 -0
- package/src/spine/clock.ts +57 -0
- package/src/spine/command-gate.ts +139 -0
- package/src/spine/comms-delay-reckoning.ts +217 -0
- package/src/spine/comms-journey.ts +256 -0
- package/src/spine/comms-path-geometry.ts +237 -0
- package/src/spine/comms-route.ts +142 -0
- package/src/spine/connection-error-warning.ts +54 -0
- package/src/spine/connectivity-history.ts +68 -0
- package/src/spine/context.tsx +1317 -0
- package/src/spine/contributed-channels.ts +126 -0
- package/src/spine/contribution-scope.ts +87 -0
- package/src/spine/contributions.ts +213 -0
- package/src/spine/control-frame-to-read-frame.ts +91 -0
- package/src/spine/core-reckoners.ts +1112 -0
- package/src/spine/dashboard-item.ts +25 -0
- package/src/spine/delay-authority.ts +337 -0
- package/src/spine/delta-v-budget.ts +311 -0
- package/src/spine/departure-reckoning.ts +69 -0
- package/src/spine/dv-stage-resources.ts +137 -0
- package/src/spine/heartbeat-tracker.ts +208 -0
- package/src/spine/held-command-actions.ts +119 -0
- package/src/spine/impact-point.ts +432 -0
- package/src/spine/index.ts +132 -0
- package/src/spine/kepler-reckoning.ts +572 -0
- package/src/spine/kepler.ts +576 -0
- package/src/spine/lagrange.ts +585 -0
- package/src/spine/lifecycle.ts +251 -0
- package/src/spine/lock-scope.ts +27 -0
- package/src/spine/map-command.ts +33 -0
- package/src/spine/map-topic.ts +163 -0
- package/src/spine/mod-settings.ts +47 -0
- package/src/spine/never-reckonable.ts +183 -0
- package/src/spine/orbit-patches.ts +213 -0
- package/src/spine/orbit-trajectory.ts +636 -0
- package/src/spine/orbital-solve.ts +393 -0
- package/src/spine/own-craft-vantage.tsx +161 -0
- package/src/spine/past-track.ts +93 -0
- package/src/spine/powered-reckoning.ts +866 -0
- package/src/spine/processorEvaluator.ts +688 -0
- package/src/spine/processors.ts +353 -0
- package/src/spine/propagation.ts +25 -0
- package/src/spine/rail-registry.ts +27 -0
- package/src/spine/reckoners.ts +317 -0
- package/src/spine/reference-frame.ts +816 -0
- package/src/spine/replay-recorder.ts +128 -0
- package/src/spine/replay-session-controller.ts +282 -0
- package/src/spine/replay-session.tsx +47 -0
- package/src/spine/replay-transport.ts +167 -0
- package/src/spine/screen.tsx +70 -0
- package/src/spine/settings-registry.ts +286 -0
- package/src/spine/settings-tabs.ts +57 -0
- package/src/spine/share-equal.ts +62 -0
- package/src/spine/size-delta.ts +23 -0
- package/src/spine/space-center-state.ts +101 -0
- package/src/spine/stream-status.ts +62 -0
- package/src/spine/subscribe-read.ts +88 -0
- package/src/spine/subscriber-identity.tsx +44 -0
- package/src/spine/system-state.ts +44 -0
- package/src/spine/target-range-reckoning.ts +127 -0
- package/src/spine/timeline-store.ts +3626 -0
- package/src/spine/topic-ownership.ts +211 -0
- package/src/spine/unowned-warning.ts +63 -0
- package/src/spine/uplink-clients.ts +265 -0
- package/src/spine/uplink-health.ts +256 -0
- package/src/spine/use-action-input.ts +87 -0
- package/src/spine/use-body-states.ts +52 -0
- package/src/spine/use-command.ts +1090 -0
- package/src/spine/use-data-sources.ts +43 -0
- package/src/spine/use-late-telemetry-subscribe.ts +111 -0
- package/src/spine/use-orbit-trajectory.ts +50 -0
- package/src/spine/use-processor.ts +56 -0
- package/src/spine/use-route-commands.ts +57 -0
- package/src/spine/use-selected-vantage.ts +23 -0
- package/src/spine/use-stream-event.ts +54 -0
- package/src/spine/use-stream.ts +137 -0
- package/src/spine/use-telemetry.ts +142 -0
- package/src/spine/use-transmissions.ts +100 -0
- package/src/spine/vantage.ts +15 -0
- package/src/spine/view-clock.ts +404 -0
- package/src/spine/wire-payloads.ts +242 -0
- package/src/testing/console-logger.ts +24 -0
- package/src/testing/create-test-telemetry-client.ts +17 -0
- package/src/testing/fake-wall-clock.ts +27 -0
- package/src/testing/index.ts +141 -0
- package/src/testing/install-act-gate-stretch.ts +83 -0
- package/src/testing/install-dom-stubs.ts +137 -0
- package/src/testing/install-real-test-host.ts +177 -0
- package/src/testing/install-test-host.ts +24 -0
- package/src/testing/memory-storage.ts +25 -0
- package/src/testing/mock-data-source.ts +109 -0
- package/src/testing/recorded-alarm-requests.ts +43 -0
- package/src/testing/render.tsx +78 -0
- package/src/testing/stream-fixture.tsx +130 -0
- package/src/testing/stub-transport.ts +289 -0
- package/src/testing/theme.ts +11 -0
- package/src/timeline.ts +68 -0
- package/src/topic-fields.ts +188 -0
- package/src/topics.ts +553 -0
- package/src/unit-system/algebra.ts +472 -0
- package/src/unit-system/calendar.ts +145 -0
- package/src/unit-system/declarations.ts +96 -0
- package/src/unit-system/definitions.ts +385 -0
- package/src/unit-system/dimension.ts +107 -0
- package/src/unit-system/guards.ts +82 -0
- package/src/unit-system/index.ts +68 -0
- package/src/unit-system/registry.ts +381 -0
- package/src/unit-system/value.ts +959 -0
- package/src/units.ts +462 -0
- package/src/uplink-externals.ts +91 -0
- package/src/uplink-manifest.ts +349 -0
- package/src/value.ts +15 -0
- package/src/version.generated.ts +10 -0
- package/src/view-clock-formula.ts +90 -0
- package/src/wrap-units.ts +361 -0
- package/tsconfig.base.json +16 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The per-frame video delay pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Delaying at the `MediaStream` *reference* level, one keyframe per stream, is
|
|
5
|
+
* not enough: a reference changes only on a camera switch or reconnect, so only
|
|
6
|
+
* *when a feed became visible* is delayed, while ongoing motion inside that
|
|
7
|
+
* stream plays live. This module reads the real video
|
|
8
|
+
* track frame-by-frame (WebCodecs "Breakout Box": `MediaStreamTrackProcessor`
|
|
9
|
+
* / `MediaStreamTrackGenerator`, see `webcodecs-track-io.d.ts`), stamps EACH
|
|
10
|
+
* frame with the live interpolated capture UT, and gates release through
|
|
11
|
+
* the SAME `DelayedPlayoutBuffer` telemetry uses (never `arrival + delay`,
|
|
12
|
+
* only `confirmedEdgeUt()`, the single-authority guarantee).
|
|
13
|
+
*
|
|
14
|
+
* `runFrameDelayPipeline` is the pure engine: deliberately decoupled from
|
|
15
|
+
* the real WebCodecs constructors (source/sink are the minimal
|
|
16
|
+
* `ReadableStreamDefaultReader`/`WritableStreamDefaultWriter` shapes, which
|
|
17
|
+
* a real processor/generator satisfy directly with no adapter) so it can be
|
|
18
|
+
* driven with synthetic frames + a manual clock in
|
|
19
|
+
* `frame-delay.block-colour.test.ts`: the real per-frame proof that would
|
|
20
|
+
* have caught the original gap. `createFrameDelayStream` is the thin
|
|
21
|
+
* browser-facing wrapper that supplies the real objects.
|
|
22
|
+
*
|
|
23
|
+
* Browser support: `MediaStreamTrackProcessor`/`Generator` are Chromium-only
|
|
24
|
+
* as of writing. `isFrameDelaySupported()` feature-detects, and the caller
|
|
25
|
+
* (the camera feed) tries the worker backends in `worker/` when this one is
|
|
26
|
+
* unsupported. When none can delay the feed it shows no video: a feed that
|
|
27
|
+
* cannot be delayed is never shown live.
|
|
28
|
+
*
|
|
29
|
+
* Buffer cap: `DelayedPlayoutBuffer`'s existing `maxBufferedBytes` cap
|
|
30
|
+
* doubles here as a FRAME-COUNT cap (every queued item counts `bytes: 1`,
|
|
31
|
+
* real per-frame byte sizes aren't tracked). Default 300 frames is ~10s of
|
|
32
|
+
* headroom at 30fps, comfortably above the realistic multi-second delay
|
|
33
|
+
* range this app models; over-cap eviction drops the oldest queued frame
|
|
34
|
+
* (closing it via `onDrop`) rather than growing unboundedly.
|
|
35
|
+
*/
|
|
36
|
+
import { type DelayClockLike } from "./delayed-playout-buffer.js";
|
|
37
|
+
/**
|
|
38
|
+
* A frame the delay can hold. A decoded `VideoFrame` holds browser resources
|
|
39
|
+
* and must be closed exactly once, so the delay calls `close` on every frame it
|
|
40
|
+
* is done with. An encoded frame has nothing to close, so `close` is optional.
|
|
41
|
+
*
|
|
42
|
+
* @category Delayed video
|
|
43
|
+
*/
|
|
44
|
+
export interface FrameLike {
|
|
45
|
+
close?(): void;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Where the delay reads frames from: a `ReadableStreamDefaultReader`, such as
|
|
49
|
+
* the one `MediaStreamTrackProcessor.readable.getReader()` returns.
|
|
50
|
+
*
|
|
51
|
+
* @category Delayed video
|
|
52
|
+
*/
|
|
53
|
+
export type FrameSource<Frame extends FrameLike> = Pick<ReadableStreamDefaultReader<Frame>, "read" | "cancel">;
|
|
54
|
+
/**
|
|
55
|
+
* Where the delay writes frames to: a `WritableStreamDefaultWriter`, such as
|
|
56
|
+
* the one `MediaStreamTrackGenerator.writable.getWriter()` returns.
|
|
57
|
+
*
|
|
58
|
+
* @category Delayed video
|
|
59
|
+
*/
|
|
60
|
+
export type FrameSink<Frame extends FrameLike> = Pick<WritableStreamDefaultWriter<Frame>, "write" | "close">;
|
|
61
|
+
/**
|
|
62
|
+
* Options for `runFrameDelayPipeline`.
|
|
63
|
+
*
|
|
64
|
+
* @category Delayed video
|
|
65
|
+
*/
|
|
66
|
+
export interface FrameDelayPipelineOptions<Frame extends FrameLike> {
|
|
67
|
+
/**
|
|
68
|
+
* The app's view clock, the same one telemetry is read by.
|
|
69
|
+
*/
|
|
70
|
+
view: DelayClockLike;
|
|
71
|
+
/**
|
|
72
|
+
* Returns the UT to stamp a frame with, called once for each frame as it is
|
|
73
|
+
* read from `source`.
|
|
74
|
+
*/
|
|
75
|
+
captureUt(): number;
|
|
76
|
+
source: FrameSource<Frame>;
|
|
77
|
+
sink: FrameSink<Frame>;
|
|
78
|
+
/**
|
|
79
|
+
* The most frames to hold before dropping the oldest. Defaults to 300. With
|
|
80
|
+
* `frameBytes` supplied, the cap counts bytes instead.
|
|
81
|
+
*/
|
|
82
|
+
maxBufferedFrames?: number;
|
|
83
|
+
/** Non-fatal pipeline errors (a read/write rejection), reported here,
|
|
84
|
+
* never thrown across the internal pump loop. */
|
|
85
|
+
onError?(error: unknown): void;
|
|
86
|
+
/**
|
|
87
|
+
* Whether a frame is a keyframe. Defaults to never, which suits decoded
|
|
88
|
+
* frames; for encoded video, supply `(f) => f.type === "key"`.
|
|
89
|
+
*/
|
|
90
|
+
isKeyframe?(frame: Frame): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* A frame's size for the cap. Defaults to 1, so the cap counts frames; for
|
|
93
|
+
* encoded video, supply `(f) => f.data.byteLength`.
|
|
94
|
+
*/
|
|
95
|
+
frameBytes?(frame: Frame): number;
|
|
96
|
+
/**
|
|
97
|
+
* Passed to {@link DelayedPlayoutBuffer}: `true` for encoded video, unset for
|
|
98
|
+
* decoded.
|
|
99
|
+
*/
|
|
100
|
+
gopSafeEviction?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Spaces released frames out by their own UT intervals rather than writing
|
|
103
|
+
* them at once (see {@link PresentationPacer}). Unset, each frame is written
|
|
104
|
+
* as it is released. When set, call `pipeline.tickPacing(nowWall)` about 60
|
|
105
|
+
* times a second, as {@link startPacingTicker} does.
|
|
106
|
+
*/
|
|
107
|
+
pacing?: {
|
|
108
|
+
/** See `PresentationPacerOptions.maxBacklogSeconds`. */
|
|
109
|
+
maxBacklogSeconds: number;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A running frame delay pipeline, as `runFrameDelayPipeline` returns it.
|
|
114
|
+
*
|
|
115
|
+
* @category Delayed video
|
|
116
|
+
*/
|
|
117
|
+
export interface FrameDelayPipeline {
|
|
118
|
+
/** Drop (closing) whatever's currently queued, WITHOUT tearing down
|
|
119
|
+
* source/sink: the timeline-reset case (revert/quickload/scene reload): the
|
|
120
|
+
* track keeps flowing, only the pre-reset backlog is discarded so it can
|
|
121
|
+
* never surface once the clock sweeps back past those UTs post-reset. */
|
|
122
|
+
flush(): void;
|
|
123
|
+
/** Stop reading, close the sink, and drop (closing) anything still
|
|
124
|
+
* queued. Idempotent: safe to call more than once. */
|
|
125
|
+
dispose(): void;
|
|
126
|
+
/** No-op when `pacing` wasn't supplied to `runFrameDelayPipeline`.
|
|
127
|
+
* Otherwise drains any presentation due at `nowWall` (wall-clock
|
|
128
|
+
* seconds, same basis the caller's own clock reads) through the
|
|
129
|
+
* pacer: see `pacing`'s doc above. */
|
|
130
|
+
tickPacing(nowWall: number): void;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Reads frames from `source`, holds each until the clock reaches its UT, and
|
|
134
|
+
* writes it to `sink`. Every frame read is closed exactly once: after it is
|
|
135
|
+
* written, when it is dropped (over the buffer's cap, on `flush()`, or still
|
|
136
|
+
* held at `dispose()`), or at once if it arrives after `dispose()`.
|
|
137
|
+
*
|
|
138
|
+
* @category Delayed video
|
|
139
|
+
*/
|
|
140
|
+
export declare function runFrameDelayPipeline<Frame extends FrameLike>(opts: FrameDelayPipelineOptions<Frame>): FrameDelayPipeline;
|
|
141
|
+
/**
|
|
142
|
+
* Calls `tickPacing` about 60 times a second until the returned function is
|
|
143
|
+
* called: on each animation frame where there is one, and every 16 ms where
|
|
144
|
+
* there is not, as in a worker.
|
|
145
|
+
*
|
|
146
|
+
* @category Delayed video
|
|
147
|
+
*/
|
|
148
|
+
export declare function startPacingTicker(tickPacing: (nowWall: number) => void, nowWall?: () => number): () => void;
|
|
149
|
+
/**
|
|
150
|
+
* Whether this browser has the WebCodecs track APIs
|
|
151
|
+
* (`MediaStreamTrackProcessor` and `MediaStreamTrackGenerator`) that
|
|
152
|
+
* {@link createFrameDelayStream} needs.
|
|
153
|
+
*
|
|
154
|
+
* @category Delayed video
|
|
155
|
+
*/
|
|
156
|
+
export declare function isFrameDelaySupported(): boolean;
|
|
157
|
+
/**
|
|
158
|
+
* Options for `createFrameDelayStream`.
|
|
159
|
+
*
|
|
160
|
+
* @category Delayed video
|
|
161
|
+
*/
|
|
162
|
+
export interface CreateFrameDelayStreamOptions {
|
|
163
|
+
view: DelayClockLike;
|
|
164
|
+
captureUt(): number;
|
|
165
|
+
maxBufferedFrames?: number;
|
|
166
|
+
onError?(error: unknown): void;
|
|
167
|
+
/** Override the presentation pacer's backlog threshold: see
|
|
168
|
+
* `DEFAULT_PACING_MAX_BACKLOG_SECONDS`. Pacing itself can't be disabled
|
|
169
|
+
* here: this backend always paces (that's the actual jank fix; see
|
|
170
|
+
* `worker/presentation-pacer.ts`'s module doc), only the threshold is
|
|
171
|
+
* tunable. */
|
|
172
|
+
maxPacingBacklogSeconds?: number;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* A delayed copy of a video stream, as `createFrameDelayStream` returns it.
|
|
176
|
+
*
|
|
177
|
+
* @category Delayed video
|
|
178
|
+
*/
|
|
179
|
+
export interface FrameDelayStream {
|
|
180
|
+
/** The delayed output: feed this to a `<video>`'s `srcObject`. */
|
|
181
|
+
stream: MediaStream;
|
|
182
|
+
dispose(): void;
|
|
183
|
+
flush(): void;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The whole of `MediaStream` this reads. Narrower than the DOM type on purpose:
|
|
187
|
+
* a `MediaStream` cannot be constructed outside a browser, so a test standing in
|
|
188
|
+
* for one would otherwise have to be minted through an assertion.
|
|
189
|
+
*/
|
|
190
|
+
export interface VideoTrackSource {
|
|
191
|
+
getVideoTracks(): MediaStreamTrack[];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* A delayed copy of the first video track of `raw`, the `MediaStream` as it
|
|
195
|
+
* arrived, such as the one a WebRTC connection hands over. Returns `null`, and never
|
|
196
|
+
* throws, when that cannot be built here: the browser lacks the APIs, `raw`
|
|
197
|
+
* has no video track, or building the track pipeline threw. Show no video in
|
|
198
|
+
* that case, and say the delay is unavailable. Never show `raw`: it is the
|
|
199
|
+
* live picture, ahead of everything else the operator is looking at.
|
|
200
|
+
*
|
|
201
|
+
* @category Delayed video
|
|
202
|
+
*/
|
|
203
|
+
export declare function createFrameDelayStream(raw: VideoTrackSource, opts: CreateFrameDelayStreamOptions): FrameDelayStream | null;
|
|
204
|
+
//# sourceMappingURL=frame-delay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-delay.d.ts","sourceRoot":"","sources":["../../src/media/frame-delay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/// <reference path="./webcodecs-track-io.d.ts" />
|
|
2
|
+
/**
|
|
3
|
+
* The per-frame video delay pipeline.
|
|
4
|
+
*
|
|
5
|
+
* Delaying at the `MediaStream` *reference* level, one keyframe per stream, is
|
|
6
|
+
* not enough: a reference changes only on a camera switch or reconnect, so only
|
|
7
|
+
* *when a feed became visible* is delayed, while ongoing motion inside that
|
|
8
|
+
* stream plays live. This module reads the real video
|
|
9
|
+
* track frame-by-frame (WebCodecs "Breakout Box": `MediaStreamTrackProcessor`
|
|
10
|
+
* / `MediaStreamTrackGenerator`, see `webcodecs-track-io.d.ts`), stamps EACH
|
|
11
|
+
* frame with the live interpolated capture UT, and gates release through
|
|
12
|
+
* the SAME `DelayedPlayoutBuffer` telemetry uses (never `arrival + delay`,
|
|
13
|
+
* only `confirmedEdgeUt()`, the single-authority guarantee).
|
|
14
|
+
*
|
|
15
|
+
* `runFrameDelayPipeline` is the pure engine: deliberately decoupled from
|
|
16
|
+
* the real WebCodecs constructors (source/sink are the minimal
|
|
17
|
+
* `ReadableStreamDefaultReader`/`WritableStreamDefaultWriter` shapes, which
|
|
18
|
+
* a real processor/generator satisfy directly with no adapter) so it can be
|
|
19
|
+
* driven with synthetic frames + a manual clock in
|
|
20
|
+
* `frame-delay.block-colour.test.ts`: the real per-frame proof that would
|
|
21
|
+
* have caught the original gap. `createFrameDelayStream` is the thin
|
|
22
|
+
* browser-facing wrapper that supplies the real objects.
|
|
23
|
+
*
|
|
24
|
+
* Browser support: `MediaStreamTrackProcessor`/`Generator` are Chromium-only
|
|
25
|
+
* as of writing. `isFrameDelaySupported()` feature-detects, and the caller
|
|
26
|
+
* (the camera feed) tries the worker backends in `worker/` when this one is
|
|
27
|
+
* unsupported. When none can delay the feed it shows no video: a feed that
|
|
28
|
+
* cannot be delayed is never shown live.
|
|
29
|
+
*
|
|
30
|
+
* Buffer cap: `DelayedPlayoutBuffer`'s existing `maxBufferedBytes` cap
|
|
31
|
+
* doubles here as a FRAME-COUNT cap (every queued item counts `bytes: 1`,
|
|
32
|
+
* real per-frame byte sizes aren't tracked). Default 300 frames is ~10s of
|
|
33
|
+
* headroom at 30fps, comfortably above the realistic multi-second delay
|
|
34
|
+
* range this app models; over-cap eviction drops the oldest queued frame
|
|
35
|
+
* (closing it via `onDrop`) rather than growing unboundedly.
|
|
36
|
+
*/
|
|
37
|
+
import { DelayedPlayoutBuffer, } from "./delayed-playout-buffer.js";
|
|
38
|
+
import { PresentationPacer } from "./worker/presentation-pacer.js";
|
|
39
|
+
const DEFAULT_MAX_BUFFERED_FRAMES = 300; // ~10s @ 30fps; see module docstring
|
|
40
|
+
/**
|
|
41
|
+
* Reads frames from `source`, holds each until the clock reaches its UT, and
|
|
42
|
+
* writes it to `sink`. Every frame read is closed exactly once: after it is
|
|
43
|
+
* written, when it is dropped (over the buffer's cap, on `flush()`, or still
|
|
44
|
+
* held at `dispose()`), or at once if it arrives after `dispose()`.
|
|
45
|
+
*
|
|
46
|
+
* @category Delayed video
|
|
47
|
+
*/
|
|
48
|
+
export function runFrameDelayPipeline(opts) {
|
|
49
|
+
let disposed = false;
|
|
50
|
+
const writeAndClose = (data) => {
|
|
51
|
+
opts.sink
|
|
52
|
+
.write(data)
|
|
53
|
+
.catch((err) => opts.onError?.(err))
|
|
54
|
+
.finally(() => {
|
|
55
|
+
data.close?.();
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
// See `FrameDelayPipelineOptions.pacing`'s doc: omitted (the default)
|
|
59
|
+
// preserves the exact pre-pacer behaviour every existing test here
|
|
60
|
+
// exercises: write-and-close synchronously, on release.
|
|
61
|
+
const pacer = opts.pacing
|
|
62
|
+
? new PresentationPacer({
|
|
63
|
+
maxBacklogSeconds: opts.pacing.maxBacklogSeconds,
|
|
64
|
+
onPresent: (f) => writeAndClose(f.data),
|
|
65
|
+
onSkip: (f) => f.data.close?.(),
|
|
66
|
+
})
|
|
67
|
+
: null;
|
|
68
|
+
const buffer = new DelayedPlayoutBuffer({
|
|
69
|
+
view: opts.view,
|
|
70
|
+
maxBufferedBytes: opts.maxBufferedFrames ?? DEFAULT_MAX_BUFFERED_FRAMES,
|
|
71
|
+
gopSafeEviction: opts.gopSafeEviction,
|
|
72
|
+
onRelease: (frame) => {
|
|
73
|
+
const data = frame.data;
|
|
74
|
+
if (!data)
|
|
75
|
+
return;
|
|
76
|
+
if (pacer) {
|
|
77
|
+
pacer.submit({ ut: frame.ut, data });
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
writeAndClose(data);
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
onDrop: (frame) => {
|
|
84
|
+
frame.data?.close?.();
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
async function pump() {
|
|
88
|
+
while (!disposed) {
|
|
89
|
+
let result;
|
|
90
|
+
try {
|
|
91
|
+
result = await opts.source.read();
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
opts.onError?.(err);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (result.done)
|
|
98
|
+
return;
|
|
99
|
+
const frame = result.value;
|
|
100
|
+
if (disposed) {
|
|
101
|
+
frame.close?.();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
buffer.push({
|
|
105
|
+
ut: opts.captureUt(),
|
|
106
|
+
keyframe: opts.isKeyframe?.(frame) ?? false,
|
|
107
|
+
data: frame,
|
|
108
|
+
bytes: opts.frameBytes?.(frame) ?? 1,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
void pump();
|
|
113
|
+
return {
|
|
114
|
+
flush() {
|
|
115
|
+
buffer.flush();
|
|
116
|
+
},
|
|
117
|
+
dispose() {
|
|
118
|
+
if (disposed)
|
|
119
|
+
return;
|
|
120
|
+
disposed = true;
|
|
121
|
+
buffer.dispose();
|
|
122
|
+
pacer?.dispose();
|
|
123
|
+
void Promise.resolve(opts.source.cancel()).catch(() => { });
|
|
124
|
+
void Promise.resolve(opts.sink.close()).catch(() => { });
|
|
125
|
+
},
|
|
126
|
+
tickPacing(nowWall) {
|
|
127
|
+
pacer?.tick(nowWall);
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Calls `tickPacing` about 60 times a second until the returned function is
|
|
133
|
+
* called: on each animation frame where there is one, and every 16 ms where
|
|
134
|
+
* there is not, as in a worker.
|
|
135
|
+
*
|
|
136
|
+
* @category Delayed video
|
|
137
|
+
*/
|
|
138
|
+
export function startPacingTicker(tickPacing, nowWall = () => performance.now() / 1000) {
|
|
139
|
+
const hasRaf = typeof requestAnimationFrame === "function";
|
|
140
|
+
let cancelled = false;
|
|
141
|
+
let handle;
|
|
142
|
+
const tick = () => {
|
|
143
|
+
if (cancelled)
|
|
144
|
+
return;
|
|
145
|
+
tickPacing(nowWall());
|
|
146
|
+
handle = hasRaf ? requestAnimationFrame(tick) : setTimeout(tick, 16);
|
|
147
|
+
};
|
|
148
|
+
handle = hasRaf ? requestAnimationFrame(tick) : setTimeout(tick, 16);
|
|
149
|
+
return () => {
|
|
150
|
+
cancelled = true;
|
|
151
|
+
if (hasRaf)
|
|
152
|
+
cancelAnimationFrame(handle);
|
|
153
|
+
else
|
|
154
|
+
clearTimeout(handle);
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Whether this browser has the WebCodecs track APIs
|
|
159
|
+
* (`MediaStreamTrackProcessor` and `MediaStreamTrackGenerator`) that
|
|
160
|
+
* {@link createFrameDelayStream} needs.
|
|
161
|
+
*
|
|
162
|
+
* @category Delayed video
|
|
163
|
+
*/
|
|
164
|
+
export function isFrameDelaySupported() {
|
|
165
|
+
return (typeof MediaStreamTrackProcessor !== "undefined" &&
|
|
166
|
+
typeof MediaStreamTrackGenerator !== "undefined");
|
|
167
|
+
}
|
|
168
|
+
/** Default backlog threshold for the main-thread backend's presentation
|
|
169
|
+
* pacer (see `runFrameDelayPipeline`'s `pacing` option): generous enough
|
|
170
|
+
* to never trip during normal sample-clamped bursts (telemetry confirms
|
|
171
|
+
* at up to ~10Hz, i.e. ~100ms between edge steps) while still catching a
|
|
172
|
+
* genuine stall (a backgrounded tab, GC pause, etc.) well before it grows
|
|
173
|
+
* into visible added latency. */
|
|
174
|
+
const DEFAULT_PACING_MAX_BACKLOG_SECONDS = 0.5;
|
|
175
|
+
/**
|
|
176
|
+
* A delayed copy of the first video track of `raw`, the `MediaStream` as it
|
|
177
|
+
* arrived, such as the one a WebRTC connection hands over. Returns `null`, and never
|
|
178
|
+
* throws, when that cannot be built here: the browser lacks the APIs, `raw`
|
|
179
|
+
* has no video track, or building the track pipeline threw. Show no video in
|
|
180
|
+
* that case, and say the delay is unavailable. Never show `raw`: it is the
|
|
181
|
+
* live picture, ahead of everything else the operator is looking at.
|
|
182
|
+
*
|
|
183
|
+
* @category Delayed video
|
|
184
|
+
*/
|
|
185
|
+
export function createFrameDelayStream(raw, opts) {
|
|
186
|
+
if (!isFrameDelaySupported())
|
|
187
|
+
return null;
|
|
188
|
+
const track = raw.getVideoTracks()[0];
|
|
189
|
+
if (!track)
|
|
190
|
+
return null;
|
|
191
|
+
try {
|
|
192
|
+
const processor = new MediaStreamTrackProcessor({ track });
|
|
193
|
+
const generator = new MediaStreamTrackGenerator({ kind: "video" });
|
|
194
|
+
const pipeline = runFrameDelayPipeline({
|
|
195
|
+
view: opts.view,
|
|
196
|
+
captureUt: opts.captureUt,
|
|
197
|
+
maxBufferedFrames: opts.maxBufferedFrames,
|
|
198
|
+
source: processor.readable.getReader(),
|
|
199
|
+
sink: generator.writable.getWriter(),
|
|
200
|
+
onError: opts.onError,
|
|
201
|
+
pacing: {
|
|
202
|
+
maxBacklogSeconds: opts.maxPacingBacklogSeconds ?? DEFAULT_PACING_MAX_BACKLOG_SECONDS,
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
// Drive the pacer from a ~60Hz loop for as long as this pipeline lives,
|
|
206
|
+
// the F3 jank fix applies here too (main-thread Breakout Box has no
|
|
207
|
+
// sample-rate limitation of its own; the stutter comes from
|
|
208
|
+
// `ViewClock.confirmedEdgeUt()`'s sample clamp, which affects every
|
|
209
|
+
// backend equally). `requestAnimationFrame` is always available on the
|
|
210
|
+
// real main thread this backend runs on; the `setTimeout` fallback only
|
|
211
|
+
// matters for a non-browser/SSR-like test context.
|
|
212
|
+
const stopTicking = startPacingTicker(pipeline.tickPacing);
|
|
213
|
+
return {
|
|
214
|
+
stream: new MediaStream([generator]),
|
|
215
|
+
dispose: () => {
|
|
216
|
+
stopTicking();
|
|
217
|
+
pipeline.dispose();
|
|
218
|
+
},
|
|
219
|
+
flush: pipeline.flush,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
// Fail OPEN, not through: pipeline construction runs synchronously right
|
|
224
|
+
// after the PRIOR pipeline's un-awaited `source.cancel()` (fired from
|
|
225
|
+
// `dispose()`, never awaited: see `runFrameDelayPipeline`'s own
|
|
226
|
+
// `dispose`). When a build effect rebuilds on the SAME track before that
|
|
227
|
+
// release has actually landed, React StrictMode's mount→unmount→mount
|
|
228
|
+
// cycle, or any effect dep change that isn't `raw`, Chrome can throw
|
|
229
|
+
// `InvalidStateError` ("a MediaStreamTrack may only have one processor
|
|
230
|
+
// at a time"). Treat it exactly like every other can't-build-a-pipeline
|
|
231
|
+
// case: report via `onError` and return null so the caller falls back to
|
|
232
|
+
// live passthrough instead of the throw escaping the effect.
|
|
233
|
+
opts.onError?.(err);
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=frame-delay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-delay.js","sourceRoot":"","sources":["../../src/media/frame-delay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type { CaptureClockSample } from "./capture-clock.js";
|
|
2
|
+
export { interpolateCaptureUt } from "./capture-clock.js";
|
|
3
|
+
export type { DelayClockLike, DelayedPlayoutBufferOptions, StampedFrame, } from "./delayed-playout-buffer.js";
|
|
4
|
+
export { DelayedPlayoutBuffer } from "./delayed-playout-buffer.js";
|
|
5
|
+
export type { EncodedFrameDelayOptions, EncodedTransformerLike, EncodedVideoFrameLike, } from "./encoded-frame-delay.js";
|
|
6
|
+
export { attachEncodedFrameDelayTransform, DEFAULT_MAX_BUFFERED_BYTES, } from "./encoded-frame-delay.js";
|
|
7
|
+
export type { CreateFrameDelayStreamOptions, FrameDelayPipeline, FrameDelayPipelineOptions, FrameDelayStream, FrameLike, FrameSink, FrameSource, } from "./frame-delay.js";
|
|
8
|
+
export { createFrameDelayStream, isFrameDelaySupported, runFrameDelayPipeline, startPacingTicker, } from "./frame-delay.js";
|
|
9
|
+
export type { RadioSupport, RadioUnsupportedReason } from "./radio-support.js";
|
|
10
|
+
export { isRadioSupported, RADIO_CHUNK_FRAMES, RADIO_DECODER_CONFIG, RADIO_ENCODER_CONFIG, RADIO_REQUIRED_GLOBALS, radioSupportStatus, } from "./radio-support.js";
|
|
11
|
+
export type { BuiltDelayedStream, DelayedStreamBuild, DelayedStreamBuildContext, DelayedStreamLease, } from "./shared-delayed-streams.js";
|
|
12
|
+
export { SharedDelayedStreams } from "./shared-delayed-streams.js";
|
|
13
|
+
export type { AttachEncodedFrameDelayOptions, CreateWorkerFrameDelayStreamOptions, EncodedFrameDelayHandle, SnapshottableDelayClock, } from "./worker/delay-worker-client.js";
|
|
14
|
+
export { attachEncodedWorkerFrameDelay, createWorkerFrameDelayStream, } from "./worker/delay-worker-client.js";
|
|
15
|
+
export type { PacedFrame, PresentationPacerOptions, } from "./worker/presentation-pacer.js";
|
|
16
|
+
export { PresentationPacer } from "./worker/presentation-pacer.js";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/media/index.ts"],"names":[],"mappings":"AAaA,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EACV,cAAc,EACd,2BAA2B,EAC3B,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gCAAgC,EAChC,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,6BAA6B,EAC7B,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EACV,8BAA8B,EAC9B,mCAAmC,EACnC,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC;AAQtC,YAAY,EACV,UAAU,EACV,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Generic delayed-media infrastructure: media + time, riding the same
|
|
2
|
+
// `ViewClock` delay authority telemetry reads. None of it is mod-specific: a
|
|
3
|
+
// `DelayedPlayoutBuffer` consumes the clock STRUCTURALLY via `DelayClockLike`,
|
|
4
|
+
// and every camera Uplink needs the same buffer / per-frame pipeline /
|
|
5
|
+
// per-camera sharing. It stays decoupled from any camera SDK: the caller
|
|
6
|
+
// injects the clock, the raw `MediaStream`, and (for the shared cache) the
|
|
7
|
+
// build function.
|
|
8
|
+
//
|
|
9
|
+
// A SUBPATH (`@ksp-gonogo/sitrep-sdk/media`) rather than part of the root
|
|
10
|
+
// barrel, because it pulls WebCodecs/Worker machinery no telemetry-only Uplink
|
|
11
|
+
// wants. A consumer that never imports the subpath never loads any of it, which
|
|
12
|
+
// does not depend on tree-shaking to hold.
|
|
13
|
+
export { interpolateCaptureUt } from "./capture-clock.js";
|
|
14
|
+
export { DelayedPlayoutBuffer } from "./delayed-playout-buffer.js";
|
|
15
|
+
export { attachEncodedFrameDelayTransform, DEFAULT_MAX_BUFFERED_BYTES, } from "./encoded-frame-delay.js";
|
|
16
|
+
export { createFrameDelayStream, isFrameDelaySupported, runFrameDelayPipeline, startPacingTicker, } from "./frame-delay.js";
|
|
17
|
+
export { isRadioSupported, RADIO_CHUNK_FRAMES, RADIO_DECODER_CONFIG, RADIO_ENCODER_CONFIG, RADIO_REQUIRED_GLOBALS, radioSupportStatus, } from "./radio-support.js";
|
|
18
|
+
export { SharedDelayedStreams } from "./shared-delayed-streams.js";
|
|
19
|
+
export { attachEncodedWorkerFrameDelay, createWorkerFrameDelayStream, } from "./worker/delay-worker-client.js";
|
|
20
|
+
export { PresentationPacer } from "./worker/presentation-pacer.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/media/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,6EAA6E;AAC7E,+EAA+E;AAC/E,uEAAuE;AACvE,yEAAyE;AACzE,2EAA2E;AAC3E,kBAAkB;AAClB,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,gFAAgF;AAChF,2CAA2C;AAG3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAMvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAMhE,OAAO,EACL,gCAAgC,EAChC,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAU/B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAOhE,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC;AAYtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability detection for the WebCodecs Opus path the push-to-talk radio
|
|
3
|
+
* rides.
|
|
4
|
+
*
|
|
5
|
+
* The shape mirrors `isFrameDelaySupported()` next door: a synchronous feature
|
|
6
|
+
* detect a caller runs before building anything, so an unsupported browser gets
|
|
7
|
+
* a reported fact instead of a broken pipeline. **A presence check alone is
|
|
8
|
+
* wrong in both directions.** `AudioEncoder`/`AudioDecoder` need a secure
|
|
9
|
+
* context, and on a plain-http origin chromium and firefox leave both
|
|
10
|
+
* constructors `undefined` while webkit exposes them and fails later, at
|
|
11
|
+
* `getUserMedia`.
|
|
12
|
+
*
|
|
13
|
+
* `radioSupportStatus()` therefore asks about the context FIRST and names
|
|
14
|
+
* an insecure origin as its own outcome, so a caller can say "this page is
|
|
15
|
+
* not a secure origin" rather than the falsehood "your browser has no
|
|
16
|
+
* codec". That distinction is operator-facing: the dev server binds the LAN
|
|
17
|
+
* (`packages/app/vite.config.ts`, `server: { host: true }`), so a station
|
|
18
|
+
* opened at `http://<lan-ip>:5173` lands in exactly this state every time.
|
|
19
|
+
* Production over https, and `localhost` dev, are both secure and fine.
|
|
20
|
+
*
|
|
21
|
+
* `tests/playwright/radio-capability.spec.ts` is the cross-engine ratchet
|
|
22
|
+
* over the same facts, including a live encode/decode round trip.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* The WebCodecs constructors the radio needs: `AudioEncoder`, `AudioDecoder`,
|
|
26
|
+
* `AudioData` and `EncodedAudioChunk`. {@link radioSupportStatus} checks for
|
|
27
|
+
* them.
|
|
28
|
+
*
|
|
29
|
+
* @category Radio
|
|
30
|
+
*/
|
|
31
|
+
export declare const RADIO_REQUIRED_GLOBALS: readonly ["AudioEncoder", "AudioDecoder", "AudioData", "EncodedAudioChunk"];
|
|
32
|
+
/**
|
|
33
|
+
* The encoder configuration the radio transmits at, and the one the probe
|
|
34
|
+
* measures: 20 ms chunks of mono 48 kHz audio at a voice-radio bitrate.
|
|
35
|
+
* `bitrate` is a target that some browsers exceed, so size buffers by the
|
|
36
|
+
* measured rate rather than this number.
|
|
37
|
+
*
|
|
38
|
+
* @category Radio
|
|
39
|
+
*/
|
|
40
|
+
export declare const RADIO_ENCODER_CONFIG: {
|
|
41
|
+
readonly codec: "opus";
|
|
42
|
+
readonly sampleRate: 48000;
|
|
43
|
+
readonly numberOfChannels: 1;
|
|
44
|
+
readonly bitrate: 12000;
|
|
45
|
+
};
|
|
46
|
+
/** The decoder half of {@link RADIO_ENCODER_CONFIG}: no bitrate, since a
|
|
47
|
+
* decoder is told what the stream is rather than what to aim for.
|
|
48
|
+
*
|
|
49
|
+
* @category Radio
|
|
50
|
+
*/
|
|
51
|
+
export declare const RADIO_DECODER_CONFIG: {
|
|
52
|
+
readonly codec: "opus";
|
|
53
|
+
readonly sampleRate: 48000;
|
|
54
|
+
readonly numberOfChannels: 1;
|
|
55
|
+
};
|
|
56
|
+
/** Samples per encoded chunk at {@link RADIO_ENCODER_CONFIG}'s sample
|
|
57
|
+
* rate: 20 ms, as Opus and the radio's wire frames both use.
|
|
58
|
+
*
|
|
59
|
+
* @category Radio
|
|
60
|
+
*/
|
|
61
|
+
export declare const RADIO_CHUNK_FRAMES = 960;
|
|
62
|
+
/** Why the radio cannot run here. `insecure-context` the operator can fix
|
|
63
|
+
* by opening the page over https or on localhost; `no-codec` they cannot.
|
|
64
|
+
*
|
|
65
|
+
* @category Radio
|
|
66
|
+
*/
|
|
67
|
+
export type RadioUnsupportedReason = "insecure-context" | "no-codec";
|
|
68
|
+
/**
|
|
69
|
+
* Whether this browser can carry radio audio, and why not when it cannot.
|
|
70
|
+
*
|
|
71
|
+
* @category Radio
|
|
72
|
+
*/
|
|
73
|
+
export type RadioSupport = {
|
|
74
|
+
supported: true;
|
|
75
|
+
} | {
|
|
76
|
+
supported: false;
|
|
77
|
+
reason: RadioUnsupportedReason;
|
|
78
|
+
/** The names from {@link RADIO_REQUIRED_GLOBALS} that were absent.
|
|
79
|
+
* Empty for `insecure-context`, which is diagnosed before the
|
|
80
|
+
* globals are consulted at all. */
|
|
81
|
+
missing: readonly string[];
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Returns whether this browser can run the radio, and why not when it
|
|
85
|
+
* cannot. Use it rather than {@link isRadioSupported} wherever the result is
|
|
86
|
+
* shown, so a page served over plain http says so.
|
|
87
|
+
*
|
|
88
|
+
* @category Radio
|
|
89
|
+
*/
|
|
90
|
+
export declare function radioSupportStatus(): RadioSupport;
|
|
91
|
+
/** Returns whether this page can run the radio: a secure page with every
|
|
92
|
+
* WebCodecs constructor it needs. {@link radioSupportStatus} also says why
|
|
93
|
+
* not.
|
|
94
|
+
*
|
|
95
|
+
* @category Radio
|
|
96
|
+
*/
|
|
97
|
+
export declare function isRadioSupported(): boolean;
|
|
98
|
+
//# sourceMappingURL=radio-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-support.d.ts","sourceRoot":"","sources":["../../src/media/radio-support.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,6EAKzB,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,GAAG,UAAU,CAAC;AAErE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GACnB;IACE,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,sBAAsB,CAAC;IAC/B;;wCAEoC;IACpC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAoBjD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C"}
|