reactor-effect-browser 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +26 -21
  2. package/dist/BrowserMedia.d.ts +28 -0
  3. package/dist/BrowserMedia.d.ts.map +1 -0
  4. package/dist/BrowserMedia.js +56 -0
  5. package/dist/BrowserMedia.js.map +1 -0
  6. package/dist/BrowserPeer.d.ts +23 -0
  7. package/dist/BrowserPeer.d.ts.map +1 -0
  8. package/dist/BrowserPeer.js +298 -0
  9. package/dist/BrowserPeer.js.map +1 -0
  10. package/dist/index.d.ts +2 -22
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +2 -21
  13. package/dist/index.js.map +1 -1
  14. package/package.json +12 -11
  15. package/dist/_internal/audio-packet.d.ts +0 -13
  16. package/dist/_internal/audio-packet.d.ts.map +0 -1
  17. package/dist/_internal/audio-packet.js +0 -43
  18. package/dist/_internal/audio-packet.js.map +0 -1
  19. package/dist/_internal/audio.d.ts +0 -48
  20. package/dist/_internal/audio.d.ts.map +0 -1
  21. package/dist/_internal/audio.js +0 -242
  22. package/dist/_internal/audio.js.map +0 -1
  23. package/dist/_internal/media.d.ts +0 -78
  24. package/dist/_internal/media.d.ts.map +0 -1
  25. package/dist/_internal/media.js +0 -414
  26. package/dist/_internal/media.js.map +0 -1
  27. package/dist/_internal/pcm-worklet.d.ts +0 -2
  28. package/dist/_internal/pcm-worklet.d.ts.map +0 -1
  29. package/dist/_internal/pcm-worklet.js +0 -51
  30. package/dist/_internal/pcm-worklet.js.map +0 -1
  31. package/dist/_internal/peer.d.ts +0 -30
  32. package/dist/_internal/peer.d.ts.map +0 -1
  33. package/dist/_internal/peer.js +0 -294
  34. package/dist/_internal/peer.js.map +0 -1
  35. package/dist/_internal/recording.d.ts +0 -15
  36. package/dist/_internal/recording.d.ts.map +0 -1
  37. package/dist/_internal/recording.js +0 -9
  38. package/dist/_internal/recording.js.map +0 -1
@@ -1,414 +0,0 @@
1
- export { audioContext, webAudioSamples } from "./audio.js";
2
- import * as Duration from "effect/Duration";
3
- import * as Effect from "effect/Effect";
4
- import * as Stream from "effect/Stream";
5
- import { ReactorError } from "reactor-effect-client";
6
- import { duration, errorOf, finite, fromOwnedReadableStream, parsed, positiveLimit, record, } from "reactor-effect-client/host";
7
- /** Presence is only a hint. Acquiring a processor and copying a sample tests the capability. */
8
- export const mediaFacilities = () => Object.freeze({
9
- peer: typeof RTCPeerConnection === "function",
10
- videoFrame: typeof VideoFrame === "function",
11
- trackProcessor: typeof record(globalThis).MediaStreamTrackProcessor === "function",
12
- audioData: "AudioData" in globalThis && typeof globalThis.AudioData === "function",
13
- playback: typeof HTMLMediaElement === "function",
14
- audioContext: typeof AudioContext === "function",
15
- audioWorklet: typeof AudioWorkletNode === "function",
16
- });
17
- const unsupported = (message) => {
18
- throw ReactorError.fromCode("UnsupportedCapability", message);
19
- };
20
- const timestamp = (input) => {
21
- const value = finite(input, "media timestamp");
22
- if (!Number.isSafeInteger(value))
23
- throw ReactorError.fromCode("Protocol", "media timestamp cannot be represented exactly in this host");
24
- return value;
25
- };
26
- const deadline = async (promise, ms, signal) => {
27
- let handle;
28
- let aborted;
29
- try {
30
- return await Promise.race([
31
- promise,
32
- new Promise((_, reject) => {
33
- handle = setTimeout(() => reject(ReactorError.fromCode("Timeout", "media read/copy/play deadline")), ms);
34
- aborted = () => reject(ReactorError.fromCode("Aborted", "media operation cancelled"));
35
- if (signal?.aborted)
36
- aborted();
37
- else
38
- signal?.addEventListener("abort", aborted, { once: true });
39
- }),
40
- ]);
41
- }
42
- finally {
43
- if (handle !== undefined)
44
- clearTimeout(handle);
45
- if (aborted !== undefined)
46
- signal?.removeEventListener("abort", aborted);
47
- }
48
- };
49
- const processor = (track) => {
50
- const constructor = record(globalThis).MediaStreamTrackProcessor;
51
- if (typeof constructor !== "function")
52
- return unsupported("MediaStreamTrackProcessor is unavailable in this realm");
53
- return Reflect.construct(constructor, [{ track, maxBufferSize: 1 }]);
54
- };
55
- const nativeAudio = (input) => {
56
- if (!("AudioData" in globalThis) ||
57
- typeof globalThis.AudioData !== "function" ||
58
- !(input instanceof globalThis.AudioData)) {
59
- return unsupported("the track processor did not yield native AudioData in this realm");
60
- }
61
- const raw = record(input, "AudioData"), copy = raw.copyTo;
62
- if (typeof copy !== "function" || typeof raw.close !== "function")
63
- return unsupported("AudioData copyTo/close are missing");
64
- return {
65
- timestamp: timestamp(raw.timestamp),
66
- frames: positiveLimit(finite(raw.numberOfFrames, "audio frames"), "audio frames", 1_048_576),
67
- channels: positiveLimit(finite(raw.numberOfChannels, "audio channels"), "audio channels", 32),
68
- sampleRate: positiveLimit(finite(raw.sampleRate, "audio sample rate"), "sample rate", 384_000),
69
- copy: (plane, index) => {
70
- Reflect.apply(copy, input, [plane, { planeIndex: index, format: "f32-planar" }]);
71
- },
72
- };
73
- };
74
- const closable = (raw) => {
75
- if (typeof raw !== "object" ||
76
- raw === null ||
77
- !("close" in raw) ||
78
- typeof raw.close !== "function")
79
- return undefined;
80
- const close = raw.close;
81
- return {
82
- close: () => {
83
- Reflect.apply(close, raw, []);
84
- },
85
- };
86
- };
87
- function copiedSamples(source, kind, options, copy) {
88
- const maxBytes = positiveLimit(options.maxSampleBytes ?? (kind === "video" ? 8_294_400 : 1_048_576), "media sample bytes", 64 * 1024 * 1024);
89
- // The deadline races host promises inside the stream's callbacks, in milliseconds.
90
- const timeoutMs = Duration.toMillis(duration(options.readTimeout ?? "10 seconds", "media read timeout", { maximum: "10 minutes" }));
91
- if (source.kind !== kind || source.readyState !== "live")
92
- throw ReactorError.fromCode("InvalidState", `expected a live ${kind} track`);
93
- const operation = kind === "audio" ? "audioSamples" : "videoFrames";
94
- const track = source.clone();
95
- let constructed = false, acquired = false, readCount = 0, copiedCount = 0;
96
- const cleanupFailures = [];
97
- const annotate = (cause, phase) => {
98
- const name = cause instanceof Error && !ReactorError.is(cause) ? cause.name : undefined;
99
- const error = errorOf(cause, name === "NotSupportedError" || (name === "TypeError" && phase === "processor")
100
- ? "UnsupportedCapability"
101
- : name === "InvalidStateError" || (name === "TypeError" && phase === "reader")
102
- ? "InvalidState"
103
- : "Protocol");
104
- const detail = {
105
- phase,
106
- realm: typeof document === "object" ? "Window" : "other",
107
- processorConstructed: constructed,
108
- readerAcquired: acquired,
109
- nativeSamplesRead: readCount,
110
- copiedSamples: copiedCount,
111
- source: {
112
- kind: source.kind,
113
- readyState: source.readyState,
114
- enabled: source.enabled,
115
- muted: source.muted,
116
- },
117
- ownedTrack: { readyState: track.readyState },
118
- ...(name === undefined ? {} : { nativeErrorName: name }),
119
- cleanupFailures,
120
- };
121
- return new ReactorError({
122
- reason: error.reason,
123
- context: { ...error.context, operation: `${operation}.${phase}`, detail },
124
- });
125
- };
126
- const noteCleanup = (phase, cause) => {
127
- if (cleanupFailures.length < 4)
128
- cleanupFailures.push({
129
- phase,
130
- message: cause instanceof Error ? cause.message : String(cause),
131
- });
132
- };
133
- let reader;
134
- let acquisitionPhase = "sample-type";
135
- try {
136
- if (kind === "audio" &&
137
- (!("AudioData" in globalThis) || typeof globalThis.AudioData !== "function")) {
138
- throw ReactorError.fromCode("UnsupportedCapability", "AudioData is not exposed in this realm");
139
- }
140
- acquisitionPhase = "processor";
141
- const native = processor(track);
142
- constructed = true;
143
- acquisitionPhase = "readable";
144
- const readable = record(native, "track processor").readable;
145
- if (!(readable instanceof ReadableStream))
146
- throw ReactorError.fromCode("UnsupportedCapability", "track processor did not supply a ReadableStream");
147
- acquisitionPhase = "reader";
148
- reader = readable.getReader();
149
- acquired = true;
150
- }
151
- catch (cause) {
152
- const error = annotate(cause, acquisitionPhase);
153
- try {
154
- track.stop();
155
- }
156
- catch (stopError) {
157
- noteCleanup("stop-clone", stopError);
158
- }
159
- throw error;
160
- }
161
- let closed = false;
162
- let cleanupTask, pullTask;
163
- let controller;
164
- let watch;
165
- const lifetime = new AbortController();
166
- const cleanup = () => {
167
- if (cleanupTask !== undefined)
168
- return cleanupTask;
169
- closed = true;
170
- lifetime.abort();
171
- if (watch !== undefined) {
172
- clearInterval(watch);
173
- watch = undefined;
174
- }
175
- source.removeEventListener("ended", ended);
176
- track.removeEventListener("ended", ended);
177
- // Install one shared promise before invoking native code; every exit joins it.
178
- cleanupTask = Promise.resolve().then(async () => {
179
- try {
180
- track.stop();
181
- }
182
- catch (cause) {
183
- noteCleanup("stop-clone", cause);
184
- }
185
- try {
186
- await deadline(reader.cancel(), timeoutMs);
187
- }
188
- catch (cause) {
189
- noteCleanup("cancel-reader", cause);
190
- }
191
- finally {
192
- try {
193
- reader.releaseLock();
194
- }
195
- catch (cause) {
196
- noteCleanup("release-reader", cause);
197
- }
198
- }
199
- });
200
- return cleanupTask;
201
- };
202
- const fail = (error) => {
203
- if (closed)
204
- return;
205
- controller.error(error);
206
- void cleanup();
207
- };
208
- const ended = () => fail(annotate(ReactorError.fromCode("Disconnected", "media source lease ended; reacquire after reconnect"), "track"));
209
- const live = () => {
210
- if (!closed && (source.readyState !== "live" || track.readyState !== "live"))
211
- ended();
212
- return !closed;
213
- };
214
- const closeLate = (raw) => {
215
- try {
216
- closable(raw)?.close();
217
- }
218
- catch (cause) {
219
- noteCleanup("close-late-sample", cause);
220
- }
221
- };
222
- const pull = async () => {
223
- let block;
224
- let phase = "read";
225
- let failure;
226
- const releaseSample = () => {
227
- const owned = block;
228
- block = undefined;
229
- owned?.close();
230
- };
231
- try {
232
- if (!live())
233
- return;
234
- const received = await deadline(reader.read().then((result) => {
235
- const disposed = closed && !result.done;
236
- if (disposed)
237
- closeLate(result.value);
238
- return { result, disposed };
239
- }), timeoutMs, lifetime.signal);
240
- const next = received.result;
241
- if (!next.done && !received.disposed)
242
- block = closable(next.value);
243
- if (!live())
244
- return;
245
- if (next.done) {
246
- controller.close();
247
- await cleanup();
248
- return;
249
- }
250
- readCount++;
251
- phase = "copy";
252
- const sample = await deadline(copy(next.value, maxBytes, timeoutMs), timeoutMs, lifetime.signal);
253
- phase = "close-sample";
254
- releaseSample();
255
- if (live()) {
256
- copiedCount++;
257
- controller.enqueue(sample);
258
- }
259
- }
260
- catch (cause) {
261
- if (phase === "read" && !live())
262
- return;
263
- failure = annotate(cause, phase);
264
- }
265
- finally {
266
- try {
267
- releaseSample();
268
- }
269
- catch (cause) {
270
- if (failure === undefined)
271
- failure = annotate(cause, "close-sample");
272
- else
273
- noteCleanup("close-sample", cause);
274
- }
275
- if (failure !== undefined)
276
- fail(failure);
277
- }
278
- };
279
- const close = async () => {
280
- await cleanup();
281
- await pullTask;
282
- };
283
- const readable = new ReadableStream({
284
- start(c) {
285
- controller = c;
286
- source.addEventListener("ended", ended);
287
- track.addEventListener("ended", ended);
288
- // stop() does not emit ended or stop a clone. Check while consumers pause too.
289
- watch = setInterval(live, 100);
290
- },
291
- pull() {
292
- pullTask = pull();
293
- return pullTask;
294
- },
295
- cancel: close,
296
- }, { highWaterMark: 0 });
297
- return { readable, close };
298
- }
299
- const nativeSamples = (source, kind, options, copy) => Stream.unwrap(Effect.gen(function* () {
300
- const owned = yield* Effect.acquireRelease(parsed(() => copiedSamples(source, kind, options, copy)), (owned) => Effect.promise(() => owned.close()));
301
- return fromOwnedReadableStream({
302
- evaluate: () => owned.readable,
303
- onError: (cause) => errorOf(cause, "Protocol", `${kind} samples`),
304
- });
305
- }));
306
- /** One native queue slot and one demand-driven copy. No borrowed frame escapes. */
307
- export const videoFrames = (track, options = {}) => nativeSamples(track, "video", options, async (raw, maxBytes) => {
308
- if (typeof VideoFrame !== "function" || !(raw instanceof VideoFrame))
309
- return unsupported("processor did not yield a native VideoFrame");
310
- const width = positiveLimit(raw.displayWidth, "video width", 16_384);
311
- const height = positiveLimit(raw.displayHeight, "video height", 16_384);
312
- if (raw.codedWidth !== width ||
313
- raw.codedHeight !== height ||
314
- raw.visibleRect?.x !== 0 ||
315
- raw.visibleRect.y !== 0) {
316
- return unsupported("cropped or non-square-pixel frame is outside the compact RGBA contract");
317
- }
318
- const size = raw.allocationSize({ format: "RGBA" });
319
- if (!Number.isSafeInteger(size) || size !== width * height * 4 || size > maxBytes)
320
- throw ReactorError.fromCode("Overflow", "RGBA sample byte bound/layout mismatch");
321
- const data = new Uint8Array(size);
322
- await raw.copyTo(data, { format: "RGBA" });
323
- return Object.freeze({
324
- format: "RGBA",
325
- width,
326
- height,
327
- data,
328
- timestampUs: timestamp(raw.timestamp),
329
- clock: "video-track-processor",
330
- });
331
- });
332
- /** Optional native AudioData in the current realm. No worker or Web Audio fallback. */
333
- export const audioSamples = (track, options = {}) =>
334
- // The copy contract returns a promise. Audio copies synchronously, and async
335
- // turns its throws into that promise's rejection.
336
- // oxlint-disable-next-line typescript/require-await
337
- nativeSamples(track, "audio", options, async (raw, maxBytes) => {
338
- const audio = nativeAudio(raw);
339
- if (audio.frames * audio.channels * 4 > maxBytes)
340
- throw ReactorError.fromCode("Overflow", "PCM sample byte bound");
341
- const planes = [];
342
- for (let channel = 0; channel < audio.channels; channel++) {
343
- const plane = new Float32Array(audio.frames);
344
- audio.copy(plane, channel);
345
- planes.push(plane);
346
- }
347
- return Object.freeze({
348
- format: "f32-planar",
349
- planes: Object.freeze(planes),
350
- sampleRate: audio.sampleRate,
351
- frames: audio.frames,
352
- timestampUs: audio.timestamp,
353
- clock: "audio-track-processor",
354
- });
355
- });
356
- export const play = (track, element, options = {}) => Effect.gen(function* () {
357
- const timeout = yield* parsed(() => duration(options.playTimeout ?? "10 seconds", "playback timeout", { maximum: "10 minutes" }));
358
- const owned = yield* Effect.acquireRelease(Effect.try({
359
- try: () => {
360
- if (track.readyState !== "live")
361
- throw ReactorError.fromCode("InvalidState", "playback requires a live track");
362
- if (element.srcObject !== null || element.getAttribute("src"))
363
- throw ReactorError.fromCode("InvalidState", "playback element already has a source");
364
- const clone = track.clone();
365
- try {
366
- const stream = new MediaStream([clone]);
367
- element.srcObject = stream;
368
- return { clone, stream };
369
- }
370
- catch (error) {
371
- clone.stop();
372
- throw error;
373
- }
374
- },
375
- // MediaStream and srcObject are platform calls: their exceptions are expected.
376
- catch: (cause) => errorOf(cause, "UnsupportedCapability", "HTMLMediaElement source"),
377
- }), ({ clone, stream }) => Effect.sync(() => {
378
- clone.stop();
379
- if (element.srcObject === stream) {
380
- element.pause();
381
- element.srcObject = null;
382
- }
383
- }));
384
- yield* Effect.tryPromise({
385
- try: () => element.play(),
386
- catch: (e) => errorOf(e, "UnsupportedCapability", "HTMLMediaElement.play"),
387
- }).pipe(Effect.timeoutOrElse({
388
- duration: timeout,
389
- orElse: () => Effect.fail(ReactorError.fromCode("Timeout", "media play deadline")),
390
- }));
391
- if (owned.clone.readyState !== "live")
392
- return yield* ReactorError.fromCode("Disconnected", "playback track ended during start");
393
- });
394
- export const nextPresentation = (element, timeoutMs = 10_000) => Effect.suspend(() => Effect.gen(function* () {
395
- const timeout = yield* parsed(() => positiveLimit(timeoutMs, "presentation timeout", 600_000));
396
- return yield* Effect.callback((resume) => {
397
- if (typeof element.requestVideoFrameCallback !== "function") {
398
- resume(Effect.fail(ReactorError.fromCode("UnsupportedCapability", "requestVideoFrameCallback unavailable")));
399
- return;
400
- }
401
- const id = element.requestVideoFrameCallback((at, m) => resume(Effect.succeed({
402
- callbackTimeMs: at,
403
- mediaTimeSeconds: m.mediaTime,
404
- presentedFrames: m.presentedFrames,
405
- width: m.width,
406
- height: m.height,
407
- })));
408
- return Effect.sync(() => element.cancelVideoFrameCallback(id));
409
- }).pipe(Effect.timeoutOrElse({
410
- duration: timeout,
411
- orElse: () => Effect.fail(ReactorError.fromCode("Timeout", "no local video presentation callback")),
412
- }));
413
- }));
414
- //# sourceMappingURL=media.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/_internal/media.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=pcm-worklet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pcm-worklet.d.ts","sourceRoot":"","sources":["../../src/_internal/pcm-worklet.ts"],"names":[],"mappings":"AAyDA,OAAO,EAAE,CAAC"}
@@ -1,51 +0,0 @@
1
- class ReactorPcmTap extends AudioWorkletProcessor {
2
- credit = false;
3
- stopped = false;
4
- skipped = 0;
5
- constructor() {
6
- super();
7
- this.port.onmessage = (event) => {
8
- if (event.data === "pull")
9
- this.credit = true;
10
- if (event.data === "stop") {
11
- this.stopped = true;
12
- this.port.onmessage = null;
13
- this.port.close();
14
- }
15
- };
16
- }
17
- process(inputs, outputs) {
18
- // A connected silent output keeps the graph rendering without monitoring the received audio.
19
- for (const output of outputs)
20
- for (const plane of output)
21
- plane.fill(0);
22
- if (this.stopped)
23
- return false;
24
- const input = inputs[0], first = input?.[0];
25
- if (input === undefined || first === undefined || first.length === 0)
26
- return true;
27
- if (!this.credit) {
28
- this.skipped = Math.min(Number.MAX_SAFE_INTEGER, this.skipped + first.length);
29
- return true;
30
- }
31
- this.credit = false;
32
- if (input.length > 32 || first.length > 16384) {
33
- this.port.postMessage({ type: "error", message: "render quantum exceeds PCM bounds" });
34
- return true;
35
- }
36
- const planes = input.map((plane) => new Float32Array(plane).buffer);
37
- this.port.postMessage({
38
- type: "pcm",
39
- planes,
40
- frames: first.length,
41
- sampleRate,
42
- frame: currentFrame,
43
- skipped: this.skipped,
44
- }, planes);
45
- this.skipped = 0;
46
- return true;
47
- }
48
- }
49
- registerProcessor("reactor-pcm-tap-v1", ReactorPcmTap);
50
- export {};
51
- //# sourceMappingURL=pcm-worklet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pcm-worklet.js","sourceRoot":"","sources":["../../src/_internal/pcm-worklet.ts"],"names":[],"mappings":"AASA,MAAM,aAAc,SAAQ,qBAAqB;IACvC,MAAM,GAAG,KAAK,CAAC;IACf,OAAO,GAAG,KAAK,CAAC;IAChB,OAAO,GAAG,CAAC,CAAC;IACpB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,KAA4B,EAAE,EAAE;YACrD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,MAAwB,EAAE,OAAyB;QACzD,6FAA6F;QAC7F,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,KAAK,MAAM,KAAK,IAAI,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EACrB,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9E,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,WAAW,CACnB;YACE,IAAI,EAAE,KAAK;YACX,MAAM;YACN,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU;YACV,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,EACD,MAAM,CACP,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AACD,iBAAiB,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;AACvD,OAAO,EAAE,CAAC"}
@@ -1,30 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { ReactorError } from "reactor-effect-client";
3
- import type { Track } from "reactor-effect-client";
4
- import type { Peer, PeerEvent, Prepared, Channel } from "reactor-effect-client/host";
5
- export type { Peer, PeerEvent, Prepared, Channel } from "reactor-effect-client/host";
6
- export declare const requireBrowserPeer: () => void;
7
- export declare class BrowserPeer implements Peer {
8
- private readonly bufferedLimit;
9
- readonly nativeTracks = true;
10
- private pc;
11
- private channels;
12
- private readonly transceivers;
13
- private readonly received;
14
- private readonly leases;
15
- private messageLimit;
16
- constructor(bufferedLimit?: number);
17
- prepare(servers: readonly RTCIceServer[], tracks: readonly Track[], emit: (event: PeerEvent) => void): Effect.Effect<Prepared, ReactorError>;
18
- answer(sdp: string): Effect.Effect<void, ReactorError>;
19
- private require;
20
- private named;
21
- send(kind: Channel, bytes: Uint8Array<ArrayBuffer>): Effect.Effect<void, ReactorError>;
22
- lease(name: string): MediaStreamTrack;
23
- release(track: MediaStreamTrack): void;
24
- direction(name: string, active: boolean): Effect.Effect<void, ReactorError>;
25
- replace(name: string, track: MediaStreamTrack | null): Effect.Effect<void, ReactorError>;
26
- maxBitrate(name: string, bitsPerSecond: number): Effect.Effect<void, ReactorError>;
27
- get stats(): Effect.Effect<readonly unknown[], ReactorError>;
28
- close(): void;
29
- }
30
- //# sourceMappingURL=peer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/_internal/peer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrF,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGrF,eAAO,MAAM,kBAAkB,QAAO,IAOrC,CAAC;AACF,qBAAa,WAAY,YAAW,IAAI;IAW1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAV1C,QAAQ,CAAC,YAAY,QAAQ;IAC7B,OAAO,CAAC,EAAE,CAAgC;IAC1C,OAAO,CAAC,QAAQ,CAAgE;IAChF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAGzB;IACJ,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,YAAY,CAAW;IAC/B,YAA6B,aAAa,SAAY,EAAI;IAC1D,OAAO,CACL,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAC/B,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAmIvC;IACD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAerD;IACD,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAMb,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAoBrF;IACD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAQpC;IACD,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAGrC;IACD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAK1E;IACD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAevF;IACD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAyBjF;IACD,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,OAAO,EAAE,EAAE,YAAY,CAAC,CAc3D;IACD,KAAK,IAAI,IAAI,CAyBZ;CACF"}