@urun-sh/core 0.2.21 → 0.2.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - Removed the dead compositing-era scene-graph type exports (`Layer`, `SceneContext`,
6
+ `SceneGraph`, `LayoutConfig`, `LayoutContext`) — they documented `useScene()`/`useLayout()`
7
+ hooks that no longer exist anywhere. Type-only removal; no runtime surface change.
8
+ Guarded by `compositing-era-removed.test.ts`.
9
+
5
10
  - Add owner-only `Session.end()` for acknowledged terminal release through the existing authenticated session-request release endpoint. It returns a typed `ended`/`canceled` outcome, memoizes concurrent and repeated calls, and leaves `disconnect()` as the reconnectable transport-detach primitive. Consume-only viewer handles reject terminal release with `SessionEndUnavailableError`; release failures reject with `SessionEndError`.
6
11
 
7
12
  ## 0.2.19
package/README.md CHANGED
@@ -26,7 +26,7 @@ const session = app.generate({ prompt: 'A sunset' })
26
26
  // arrive ASYNCHRONOUSLY — subscribe with `.on('track', …)`; never read `.track` once.
27
27
  const video = session.stream('video')
28
28
  video.on('track', (track) => {
29
- videoElement.srcObject = new MediaStream([track])
29
+ if (track) videoElement.srcObject = new MediaStream([track])
30
30
  })
31
31
 
32
32
  // Drive the app by writing DESIRED state into the control doc; the runtime reactively
@@ -70,13 +70,22 @@ second hand-poll (`pipeline.bind` / `stage.bind(doc, mapping)` are retired). Kee
70
70
  - `session.stream(name)` — get a named symmetric stream (media or data); first use decides direction.
71
71
  - `session.stream(name).track` — read the latest inbound track (consume side).
72
72
  - `session.stream(name).on('track', cb)` — subscribe to inbound tracks as they arrive.
73
- - `session.stream(name).attach(track)` — produce: send a local browser track upstream.
74
- - `session.stream(name).detach()` — stop producing the local browser track.
73
+ - `session.stream(name).attach(track)` — produce: send a local browser MIC/AUDIO track upstream.
74
+ - `session.stream(name).attachVideo(track)` — produce: send a local browser VIDEO track upstream
75
+ (a later call swaps the source via `replaceTrack`). `detach()` / `detachVideo()` stop producing.
76
+ - `session.stream(name).emit(payload)` / `.messages()` — the DATA lane: produce a payload on the
77
+ named stream / consume it as an async iterable (subscribing is opt-in).
75
78
  - `session.stream(name).seek(seconds)` — seek a persisted finite stream to seconds from start.
76
79
  - `session.stream(name).seek('live')` — return a live stream to the live edge.
77
80
  - `session.doc(name).get()` — read the merged document snapshot.
78
81
  - `session.doc(name).set(patch)` — write desired state into a session document.
79
82
  - `session.doc(name).on('change', cb)` — react to runtime-published document changes.
83
+ - `session.request(payload)` / `.requestStream(payload)` / `.complete(payload)` — correlated
84
+ request/response riding a session doc (reconnect-safe); `requestStream` yields incremental deltas.
85
+ - `session.onPhase(cb)` / `session.whenLive()` — the nine honest lifecycle phases and the
86
+ "is media ready?" gate (rejects with a typed `SessionFailedError`).
87
+ - `session.end()` / `session.disconnect()` — terminal release vs. detach-and-stay-reconnectable.
88
+ - `Session.attach(sessionId, options)` — join a running session as a consume-only viewer.
80
89
  - `createStore(options)` — content-addressed global store: `get(key)` / `has(key)` reads and
81
90
  `on(name, cb)` / `emit(name, data)` global streams. (App-scoped `store.cache` is a runtime
82
91
  concern; content-addressed blobs — `store.model`/`store.path`/`store.repo` — are not app-scoped.)
@@ -1,5 +1,5 @@
1
- import { d as AppOptions, c as App$1, T as SessionPhase, X as SessionStatus, V as SessionPhaseName, A as AccessTokenOptions$1, B as RuntimeArtifact, E as RuntimeArtifactDownload, R as Recording, I as Session$1, C as ChannelEndpoint, a2 as TransportSession, e as AttachOptions, J as SessionDiagnostic, a as ActivationEvent, x as RecordingsAccessor, F as RuntimeArtifactsAccessor, O as SessionEndResult, Y as SessionStream$1, a1 as StreamDataTransport, N as SessionDocumentImpl, a0 as StreamChunkOptions, i as ChunkReadable, P as Presence, m as DocConnector, y as RequestOptions, z as RequestStreamOptions, $ as StoreOptions, _ as Store, g as ChannelMultiplexer, Q as SessionFailureKind, a4 as TransportState } from './stream-data-bZAHTqK-.mjs';
2
- export { b as ActivationState, L as Layer, n as LayoutConfig, o as LayoutContext, M as MediaChunkBinding, q as MediaChunkSource, r as MediaChunkSourceFactory, s as MediaRecorderChunkSourceOptions, t as PresenceState, u as RecordingBucket, v as RecordingLifecycle, w as RecordingStatus, G as RuntimeAvailability, S as SceneContext, H as SceneGraph, K as SessionDocument, U as SessionPhaseError, Z as SessionText, a8 as isPendingRecording, a9 as mediaRecorderChunkSource } from './stream-data-bZAHTqK-.mjs';
1
+ import { d as AppOptions, c as App$1, J as SessionPhase, Q as SessionStatus, N as SessionPhaseName, A as AccessTokenOptions$1, x as RuntimeArtifact, y as RuntimeArtifactDownload, R as Recording, S as Session$1, C as ChannelEndpoint, Z as TransportSession, e as AttachOptions, E as SessionDiagnostic, a as ActivationEvent, u as RecordingsAccessor, z as RuntimeArtifactsAccessor, H as SessionEndResult, T as SessionStream$1, Y as StreamDataTransport, G as SessionDocumentImpl, X as StreamChunkOptions, i as ChunkReadable, P as Presence, m as DocConnector, v as RequestOptions, w as RequestStreamOptions, W as StoreOptions, V as Store, g as ChannelMultiplexer, I as SessionFailureKind, $ as TransportState } from './stream-data-BQso6wNv.mjs';
2
+ export { b as ActivationState, M as MediaChunkBinding, n as MediaChunkSource, o as MediaChunkSourceFactory, p as MediaRecorderChunkSourceOptions, q as PresenceState, r as RecordingBucket, s as RecordingLifecycle, t as RecordingStatus, B as RuntimeAvailability, F as SessionDocument, K as SessionPhaseError, U as SessionText, a3 as isPendingRecording, a4 as mediaRecorderChunkSource } from './stream-data-BQso6wNv.mjs';
3
3
  import 'yjs';
4
4
  import 'y-protocols/awareness';
5
5
 
@@ -845,6 +845,10 @@ declare class WebTransportSession implements MediaSession {
845
845
  readonly kind: "webtransport";
846
846
  private wt;
847
847
  private decoder;
848
+
849
+ private decoderConfig;
850
+
851
+ private decoderErrorsAt;
848
852
  private writer;
849
853
  private deadCb;
850
854
  private deadFired;
@@ -869,6 +873,8 @@ declare class WebTransportSession implements MediaSession {
869
873
  jitterMs: number;
870
874
  };
871
875
  private initDecoder;
876
+
877
+ private onDecoderError;
872
878
  private datagramLoop;
873
879
  private decodeFrame;
874
880
  private sendControl;
@@ -943,6 +949,8 @@ declare class FrameReassembler {
943
949
 
944
950
  push(chunk: Uint8Array): void;
945
951
 
952
+ requireKeyframe(): void;
953
+
946
954
  drainWindow(): {
947
955
  bytes: number;
948
956
  delivered: number;
@@ -1,5 +1,5 @@
1
- import { d as AppOptions, c as App$1, T as SessionPhase, X as SessionStatus, V as SessionPhaseName, A as AccessTokenOptions$1, B as RuntimeArtifact, E as RuntimeArtifactDownload, R as Recording, I as Session$1, C as ChannelEndpoint, a2 as TransportSession, e as AttachOptions, J as SessionDiagnostic, a as ActivationEvent, x as RecordingsAccessor, F as RuntimeArtifactsAccessor, O as SessionEndResult, Y as SessionStream$1, a1 as StreamDataTransport, N as SessionDocumentImpl, a0 as StreamChunkOptions, i as ChunkReadable, P as Presence, m as DocConnector, y as RequestOptions, z as RequestStreamOptions, $ as StoreOptions, _ as Store, g as ChannelMultiplexer, Q as SessionFailureKind, a4 as TransportState } from './stream-data-bZAHTqK-.js';
2
- export { b as ActivationState, L as Layer, n as LayoutConfig, o as LayoutContext, M as MediaChunkBinding, q as MediaChunkSource, r as MediaChunkSourceFactory, s as MediaRecorderChunkSourceOptions, t as PresenceState, u as RecordingBucket, v as RecordingLifecycle, w as RecordingStatus, G as RuntimeAvailability, S as SceneContext, H as SceneGraph, K as SessionDocument, U as SessionPhaseError, Z as SessionText, a8 as isPendingRecording, a9 as mediaRecorderChunkSource } from './stream-data-bZAHTqK-.js';
1
+ import { d as AppOptions, c as App$1, J as SessionPhase, Q as SessionStatus, N as SessionPhaseName, A as AccessTokenOptions$1, x as RuntimeArtifact, y as RuntimeArtifactDownload, R as Recording, S as Session$1, C as ChannelEndpoint, Z as TransportSession, e as AttachOptions, E as SessionDiagnostic, a as ActivationEvent, u as RecordingsAccessor, z as RuntimeArtifactsAccessor, H as SessionEndResult, T as SessionStream$1, Y as StreamDataTransport, G as SessionDocumentImpl, X as StreamChunkOptions, i as ChunkReadable, P as Presence, m as DocConnector, v as RequestOptions, w as RequestStreamOptions, W as StoreOptions, V as Store, g as ChannelMultiplexer, I as SessionFailureKind, $ as TransportState } from './stream-data-BQso6wNv.js';
2
+ export { b as ActivationState, M as MediaChunkBinding, n as MediaChunkSource, o as MediaChunkSourceFactory, p as MediaRecorderChunkSourceOptions, q as PresenceState, r as RecordingBucket, s as RecordingLifecycle, t as RecordingStatus, B as RuntimeAvailability, F as SessionDocument, K as SessionPhaseError, U as SessionText, a3 as isPendingRecording, a4 as mediaRecorderChunkSource } from './stream-data-BQso6wNv.js';
3
3
  import 'yjs';
4
4
  import 'y-protocols/awareness';
5
5
 
@@ -845,6 +845,10 @@ declare class WebTransportSession implements MediaSession {
845
845
  readonly kind: "webtransport";
846
846
  private wt;
847
847
  private decoder;
848
+
849
+ private decoderConfig;
850
+
851
+ private decoderErrorsAt;
848
852
  private writer;
849
853
  private deadCb;
850
854
  private deadFired;
@@ -869,6 +873,8 @@ declare class WebTransportSession implements MediaSession {
869
873
  jitterMs: number;
870
874
  };
871
875
  private initDecoder;
876
+
877
+ private onDecoderError;
872
878
  private datagramLoop;
873
879
  private decodeFrame;
874
880
  private sendControl;
@@ -943,6 +949,8 @@ declare class FrameReassembler {
943
949
 
944
950
  push(chunk: Uint8Array): void;
945
951
 
952
+ requireKeyframe(): void;
953
+
946
954
  drainWindow(): {
947
955
  bytes: number;
948
956
  delivered: number;