@moq/watch 0.2.5 → 0.2.7

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/README.md CHANGED
@@ -17,6 +17,33 @@ bun add @moq/watch
17
17
  npm add @moq/watch
18
18
  ```
19
19
 
20
+ ### No-build CDN usage
21
+
22
+ For quick demos or embeds where a bundler is overkill, jsDelivr's `+esm`
23
+ endpoint will transform the published npm package into a browser-ready ESM
24
+ module — bare imports like `@moq/hang` are automatically rewritten to
25
+ other `+esm` URLs. No build step or import map required:
26
+
27
+ ```html
28
+ <script type="module">
29
+ import "https://cdn.jsdelivr.net/npm/@moq/watch/element.js/+esm";
30
+ import "https://cdn.jsdelivr.net/npm/@moq/watch/ui/index.js/+esm";
31
+ </script>
32
+
33
+ <moq-watch-ui>
34
+ <moq-watch url="https://relay.example.com/anon" name="room/alice">
35
+ <canvas></canvas>
36
+ </moq-watch>
37
+ </moq-watch-ui>
38
+ ```
39
+
40
+ Pin a version range in the URL for production — e.g.
41
+ `https://cdn.jsdelivr.net/npm/@moq/watch@0.2/element.js/+esm`. esm.sh
42
+ (`https://esm.sh/@moq/watch/element`) works the same way if you prefer it.
43
+
44
+ For anything beyond embedding on a static page you should install the
45
+ package and use a real bundler (the examples below).
46
+
20
47
  ## Web Component
21
48
 
22
49
  The simplest way to watch a stream:
@@ -0,0 +1,33 @@
1
+ import { Time } from "@moq/lite";
2
+ import { type Getter } from "@moq/signals";
3
+ /**
4
+ * Unified interface for the audio buffer between the main thread and the AudioWorklet.
5
+ *
6
+ * Two implementations exist:
7
+ * - `SharedAudioBuffer`: backed by SharedArrayBuffer, lock-free writes via Atomics.
8
+ * - `PostAudioBuffer`: backed by postMessage transfer (the fallback when SAB is unavailable).
9
+ *
10
+ * Use `createAudioBuffer()` to pick the right implementation automatically.
11
+ */
12
+ export interface AudioBuffer {
13
+ readonly rate: number;
14
+ readonly channels: number;
15
+ /** Insert audio samples at the given timestamp. Handles out-of-order writes. */
16
+ insert(timestamp: Time.Micro, data: Float32Array[]): void;
17
+ /** Update the target latency in samples. */
18
+ setLatency(samples: number): void;
19
+ /** Current playback timestamp (derived from reader position). */
20
+ readonly timestamp: Getter<Time.Micro>;
21
+ /** Whether the buffer is stalled (waiting to fill). */
22
+ readonly stalled: Getter<boolean>;
23
+ /** Release any resources (event listeners, intervals, etc.). */
24
+ close(): void;
25
+ }
26
+ /** Returns true when SharedArrayBuffer is available and usable in the current context. */
27
+ export declare function supportsSharedArrayBuffer(): boolean;
28
+ /**
29
+ * Create the best audio buffer implementation for the current environment.
30
+ * Picks `SharedAudioBuffer` when possible, falling back to `PostAudioBuffer`.
31
+ */
32
+ export declare function createAudioBuffer(worklet: AudioWorkletNode, channels: number, rate: number, latencySamples: number): AudioBuffer;
33
+ //# sourceMappingURL=buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/audio/buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAU,KAAK,MAAM,EAAU,MAAM,cAAc,CAAC;AAI3D;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,gFAAgF;IAChF,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE1D,4CAA4C;IAC5C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEvC,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAElC,gEAAgE;IAChE,KAAK,IAAI,IAAI,CAAC;CACd;AAED,0FAA0F;AAC1F,wBAAgB,yBAAyB,IAAI,OAAO,CAMnD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACpB,WAAW,CAOb"}
@@ -1 +1 @@
1
- {"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../src/audio/decoder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG;IAE1B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,UAAU;IAC1B,aAAa,EAAE,MAAM,CAAC;CACtB;AAID,qBAAa,OAAO;;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,CAAiB;IAKnE,QAAQ,CAAC,IAAI,EAAoB,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAG/D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAoB;IAGnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,CAAe;IAI7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAmB;IAIrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAiB;IAOlD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAkB;gBAI/C,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY;IA+UhD,KAAK;CAGL"}
1
+ {"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../src/audio/decoder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG;IAE1B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,UAAU;IAC1B,aAAa,EAAE,MAAM,CAAC;CACtB;AAID,qBAAa,OAAO;;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,CAAiB;IAKnE,QAAQ,CAAC,IAAI,EAAoB,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAG/D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAoB;IAGnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,CAAe;IAI7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAmB;IAIrE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAiB;IAOlD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAkB;gBAO/C,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY;IAgVhD,KAAK;CAGL"}
package/audio/render.d.ts CHANGED
@@ -1,24 +1,33 @@
1
1
  import type { Time } from "@moq/lite";
2
- export type Message = Init | Data | Latency;
2
+ import type { SharedRingBufferInit } from "./shared-ring-buffer";
3
+ export type Message = InitShared | InitPost | Data | Latency;
3
4
  export type ToMain = State;
4
- export interface State {
5
- type: "state";
6
- timestamp: Time.Micro;
7
- stalled: boolean;
5
+ /** Init message when SharedArrayBuffer is available. */
6
+ export interface InitShared extends SharedRingBufferInit {
7
+ type: "init-shared";
8
8
  }
9
+ /** Init message for the postMessage fallback path. */
10
+ export interface InitPost {
11
+ type: "init-post";
12
+ channels: number;
13
+ rate: number;
14
+ latency: Time.Milli;
15
+ }
16
+ /** Audio samples sent via postMessage (fallback path only). */
9
17
  export interface Data {
10
18
  type: "data";
11
19
  data: Float32Array[];
12
20
  timestamp: Time.Micro;
13
21
  }
14
- export interface Init {
15
- type: "init";
16
- rate: number;
17
- channels: number;
18
- latency: Time.Milli;
19
- }
22
+ /** Latency update sent via postMessage (fallback path only). */
20
23
  export interface Latency {
21
24
  type: "latency";
22
25
  latency: Time.Milli;
23
26
  }
27
+ /** State update from the worklet back to main thread (fallback path only). */
28
+ export interface State {
29
+ type: "state";
30
+ timestamp: Time.Micro;
31
+ stalled: boolean;
32
+ }
24
33
  //# sourceMappingURL=render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/audio/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;AAE5C,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC;AAE3B,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;CACpB"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/audio/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;AAC7D,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC;AAE3B,wDAAwD;AACxD,MAAM,WAAW,UAAW,SAAQ,oBAAoB;IACvD,IAAI,EAAE,aAAa,CAAC;CACpB;AAED,sDAAsD;AACtD,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;CACpB;AAED,+DAA+D;AAC/D,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;CACtB;AAED,gEAAgE;AAChE,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;CACpB;AAED,8EAA8E;AAC9E,MAAM,WAAW,KAAK;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CACjB"}
@@ -0,0 +1,55 @@
1
+ import { Time } from "@moq/lite";
2
+ export interface SharedRingBufferInit {
3
+ channels: number;
4
+ capacity: number;
5
+ rate: number;
6
+ samples: SharedArrayBuffer;
7
+ control: SharedArrayBuffer;
8
+ }
9
+ export declare function allocSharedRingBuffer(channels: number, capacity: number, rate: number): SharedRingBufferInit;
10
+ export declare class SharedRingBuffer {
11
+ #private;
12
+ readonly channels: number;
13
+ readonly capacity: number;
14
+ readonly rate: number;
15
+ readonly init: SharedRingBufferInit;
16
+ constructor(init: SharedRingBufferInit);
17
+ /**
18
+ * Insert audio samples at the given timestamp.
19
+ * Main thread only. Handles out-of-order writes, gap filling, and overflow.
20
+ */
21
+ insert(timestamp: Time.Micro, data: Float32Array[]): void;
22
+ /**
23
+ * Read audio samples into the output buffers.
24
+ * AudioWorklet only. Returns the number of samples read.
25
+ */
26
+ read(output: Float32Array[]): number;
27
+ /** Update the target latency in samples. */
28
+ setLatency(samples: number): void;
29
+ /**
30
+ * Allocate a new ring with `newCapacity` samples and copy the unread window
31
+ * [READ, WRITE) plus control state into it. Used when growing capacity so
32
+ * we don't drop buffered audio. If `newCapacity` is smaller than the unread
33
+ * span, the oldest samples are truncated.
34
+ *
35
+ * Main thread only. `resize()` reads from the source `SharedRingBuffer` and
36
+ * writes into a freshly allocated buffer from `allocSharedRingBuffer`, so it
37
+ * relies on the same invariant as `insert()`: no concurrent main-thread
38
+ * writers. The AudioWorklet reader is tolerated via the CAS discipline used
39
+ * by READ/WRITE elsewhere.
40
+ */
41
+ resize(newCapacity: number): SharedRingBuffer;
42
+ /** Current playback timestamp derived from READ position. */
43
+ get timestamp(): Time.Micro;
44
+ /** Whether the buffer is stalled (waiting to fill). */
45
+ get stalled(): boolean;
46
+ /**
47
+ * Number of buffered samples (WRITE - READ).
48
+ *
49
+ * Non-atomic: WRITE and READ are loaded separately, so a concurrent
50
+ * writer/reader can make the two loads inconsistent. Intended for
51
+ * tests and diagnostics, not control-flow decisions.
52
+ */
53
+ get length(): number;
54
+ }
55
+ //# sourceMappingURL=shared-ring-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-ring-buffer.d.ts","sourceRoot":"","sources":["../../src/audio/shared-ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;CAC3B;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAa5G;AA0BD,qBAAa,gBAAgB;;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;gBAKxB,IAAI,EAAE,oBAAoB;IAetC;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI;IA+DzD;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM;IAkCpC,4CAA4C;IAC5C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB;IA8B7C,6DAA6D;IAC7D,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,CAG1B;IAED,uDAAuD;IACvD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;OAMG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;CACD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shared-ring-buffer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-ring-buffer.test.d.ts","sourceRoot":"","sources":["../../src/audio/shared-ring-buffer.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/audio/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAQpC,MAAM,MAAM,MAAM,GAAG;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,MAAM,WAAW,GAAG;IACzB,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGtD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAG7C,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,qBAAa,MAAM;;IAClB,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAGnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAiB;IAGpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAmB;IAGlF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAe;IAGzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAgB;IAExE,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGzC,IAAI,EAAE,IAAI,CAAC;gBAIC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,WAAW;IAgG3C,KAAK,IAAI,IAAI;CAGb"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/audio/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAKpC,MAAM,MAAM,MAAM,GAAG;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,MAAM,WAAW,GAAG;IACzB,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGtD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAG7C,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,qBAAa,MAAM;;IAClB,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAGnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAiB;IAGpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAmB;IAGlF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAe;IAGzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAgB;IAExE,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGzC,IAAI,EAAE,IAAI,CAAC;gBAIC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,WAAW;IA+F3C,KAAK,IAAI,IAAI;CAGb"}
package/backend.d.ts CHANGED
@@ -2,7 +2,7 @@ import * as Moq from "@moq/lite";
2
2
  import { Signal } from "@moq/signals";
3
3
  import * as Audio from "./audio";
4
4
  import type { Broadcast } from "./broadcast";
5
- import { type Latency } from "./sync";
5
+ import { type Latency, Sync } from "./sync";
6
6
  import * as Video from "./video";
7
7
  export interface BufferedRange {
8
8
  start: Moq.Time.Milli;
@@ -49,6 +49,7 @@ export declare class MultiBackend implements Backend {
49
49
  paused: Signal<boolean>;
50
50
  video: VideoBackend;
51
51
  audio: AudioBackend;
52
+ sync: Sync;
52
53
  signals: Moq.Signals.Effect;
53
54
  constructor(props?: MultiBackendProps);
54
55
  close(): void;
package/backend.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EAAU,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,OAAO,EAAQ,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAGjC,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACtB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;CACpB;AACD,MAAM,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;AAG7C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAUpE;AAED,MAAM,WAAW,OAAO;IAEvB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGxB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAGtB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAGtB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGzB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,GAAG,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAC1G,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGtD,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAGpC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEjC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CACnC;AAGD,cAAM,YAAa,YAAW,KAAK,CAAC,OAAO;IAE1C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAGrB,KAAK,8CAAkD;IAGvD,OAAO,8BAA8B;IAGrC,QAAQ,qCAAkC;IAG1C,SAAS,qCAAmD;gBAEhD,MAAM,EAAE,KAAK,CAAC,MAAM;CAGhC;AAGD,cAAM,YAAa,YAAW,KAAK,CAAC,OAAO;IAC1C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAGrB,MAAM,6BAA2B;IAGjC,KAAK,8BAA8B;IAGnC,KAAK,8CAAkD;IAGvD,QAAQ,qCAAkC;gBAE9B,MAAM,EAAE,KAAK,CAAC,MAAM;CAGhC;AAKD,qBAAa,YAAa,YAAW,OAAO;;IAC3C,OAAO,uEAA2E;IAClF,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAExB,KAAK,EAAE,YAAY,CAAC;IAGpB,KAAK,EAAE,YAAY,CAAC;IAMpB,OAAO,qBAAgB;gBAEX,KAAK,CAAC,EAAE,iBAAiB;IA0FrC,KAAK,IAAI,IAAI;CAGb"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EAAU,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAGjC,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACtB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;CACpB;AACD,MAAM,MAAM,cAAc,GAAG,aAAa,EAAE,CAAC;AAG7C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAUpE;AAED,MAAM,WAAW,OAAO;IAEvB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGxB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAGtB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAGtB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAGzB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,GAAG,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAC1G,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAGtD,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAGpC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEjC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;CACnC;AAGD,cAAM,YAAa,YAAW,KAAK,CAAC,OAAO;IAE1C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAGrB,KAAK,8CAAkD;IAGvD,OAAO,8BAA8B;IAGrC,QAAQ,qCAAkC;IAG1C,SAAS,qCAAmD;gBAEhD,MAAM,EAAE,KAAK,CAAC,MAAM;CAGhC;AAGD,cAAM,YAAa,YAAW,KAAK,CAAC,OAAO;IAC1C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IAGrB,MAAM,6BAA2B;IAGjC,KAAK,8BAA8B;IAGnC,KAAK,8CAAkD;IAGvD,QAAQ,qCAAkC;gBAE9B,MAAM,EAAE,KAAK,CAAC,MAAM;CAGhC;AAKD,qBAAa,YAAa,YAAW,OAAO;;IAC3C,OAAO,uEAA2E;IAClF,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAExB,KAAK,EAAE,YAAY,CAAC;IAGpB,KAAK,EAAE,YAAY,CAAC;IAIpB,IAAI,EAAE,IAAI,CAAC;IAEX,OAAO,qBAAgB;gBAEX,KAAK,CAAC,EAAE,iBAAiB;IA0FrC,KAAK,IAAI,IAAI;CAGb"}