reactor-effect-native 0.2.0 → 0.3.0-rc.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.
- package/Dockerfile +4 -2
- package/README.md +90 -15
- package/dist/_internal/bridge.d.ts +70 -14
- package/dist/_internal/bridge.d.ts.map +1 -1
- package/dist/_internal/bridge.js +290 -145
- package/dist/_internal/bridge.js.map +1 -1
- package/dist/_internal/isolated/child.d.ts +2 -0
- package/dist/_internal/isolated/child.d.ts.map +1 -0
- package/dist/_internal/isolated/child.js +176 -0
- package/dist/_internal/isolated/child.js.map +1 -0
- package/dist/_internal/isolated/host.d.ts +147 -0
- package/dist/_internal/isolated/host.d.ts.map +1 -0
- package/dist/_internal/isolated/host.js +645 -0
- package/dist/_internal/isolated/host.js.map +1 -0
- package/dist/_internal/isolated/protocol.d.ts +399 -0
- package/dist/_internal/isolated/protocol.d.ts.map +1 -0
- package/dist/_internal/isolated/protocol.js +250 -0
- package/dist/_internal/isolated/protocol.js.map +1 -0
- package/dist/_internal/peer.d.ts +68 -13
- package/dist/_internal/peer.d.ts.map +1 -1
- package/dist/_internal/peer.js +233 -157
- package/dist/_internal/peer.js.map +1 -1
- package/dist/index.d.ts +19 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -33
- package/dist/index.js.map +1 -1
- package/dist/isolated.d.ts +25 -0
- package/dist/isolated.d.ts.map +1 -0
- package/dist/isolated.js +39 -0
- package/dist/isolated.js.map +1 -0
- package/lib/darwin-arm64/libreactor_effect_native.dylib +0 -0
- package/lib/darwin-arm64/native-identity.json +4 -3
- package/lib/linux-x64/libreactor_effect_native.so +0 -0
- package/lib/linux-x64/native-identity.json +4 -3
- package/package.json +7 -3
- package/rust/Cargo.toml +108 -2
- package/rust/build.rs +253 -114
- package/rust/clippy.toml +7 -0
- package/rust/include/reactor_effect_native.h +101 -42
- package/rust/src/abi.rs +258 -0
- package/rust/src/error.rs +149 -0
- package/rust/src/ffi/memory.rs +256 -0
- package/rust/src/ffi/tests.rs +719 -0
- package/rust/src/ffi.rs +474 -0
- package/rust/src/lib.rs +36 -2341
- package/rust/src/peer/callbacks.rs +145 -0
- package/rust/src/peer/media.rs +221 -0
- package/rust/src/peer/owner/tests.rs +188 -0
- package/rust/src/peer/owner.rs +353 -0
- package/rust/src/peer/shared.rs +323 -0
- package/rust/src/peer/tests.rs +513 -0
- package/rust/src/peer.rs +189 -0
- package/rust/src/protocol/event.rs +238 -0
- package/rust/src/protocol/request.rs +347 -0
- package/rust/src/protocol/stats.rs +356 -0
- package/rust/src/protocol.rs +71 -0
- package/rust/src/sync/gate.rs +159 -0
- package/rust/src/sync/notifier.rs +136 -0
- package/rust/src/sync/queue.rs +384 -0
- package/rust/src/sync.rs +20 -0
- package/rust/src/test_support.rs +99 -0
- package/rust-toolchain.toml +7 -0
- package/scripts/stage.mjs +41 -1
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The private contract between an isolated native peer and its child process:
|
|
3
|
+
* one Effect RPC group mirroring the `Peer` contract, over the child's IPC
|
|
4
|
+
* channel. The worker protocols encode every message with Schema's JSON codec,
|
|
5
|
+
* so the byte-carrying fields are declarations that structured clone passes on
|
|
6
|
+
* as they are, where `Schema.Uint8Array` would become Base64 text.
|
|
7
|
+
*
|
|
8
|
+
* Failures cross as a plain record and are rebuilt as `ReactorError` in the
|
|
9
|
+
* parent: the Native reason's backend text is Redacted, which refuses JSON
|
|
10
|
+
* encoding, and it stays Redacted on each side of the channel.
|
|
11
|
+
*/
|
|
12
|
+
import * as Predicate from "effect/Predicate";
|
|
13
|
+
import * as Redacted from "effect/Redacted";
|
|
14
|
+
import * as Schema from "effect/Schema";
|
|
15
|
+
import * as Rpc from "effect/unstable/rpc/Rpc";
|
|
16
|
+
import * as RpcGroup from "effect/unstable/rpc/RpcGroup";
|
|
17
|
+
import { ErrorCode, IceFailed, Mapping, Native, ReactorError, Track, TransportFailed, } from "reactor-effect-client";
|
|
18
|
+
/** A value structured clone carries unchanged, checked by its guard on each side. */
|
|
19
|
+
const cloned = (is, expected) => Schema.declare(is, { expected, toCodecJson: () => undefined });
|
|
20
|
+
const Bytes = cloned((u) => u instanceof Uint8Array, "Uint8Array");
|
|
21
|
+
const Samples = cloned((u) => u instanceof Int16Array, "Int16Array");
|
|
22
|
+
/** Statistics records hold bigint counters, which structured clone keeps. */
|
|
23
|
+
const Records = cloned((u) => Array.isArray(u), "statistics array");
|
|
24
|
+
const Outcome = Schema.Literals(["not-submitted", "unknown", "replied"]);
|
|
25
|
+
/** A `ReactorError` as it crosses the channel: its reason fields and dispatch evidence. */
|
|
26
|
+
export const WireFailure = Schema.Struct({
|
|
27
|
+
code: ErrorCode,
|
|
28
|
+
message: Schema.String,
|
|
29
|
+
operation: Schema.optionalKey(Schema.String),
|
|
30
|
+
outcome: Schema.optionalKey(Outcome),
|
|
31
|
+
status: Schema.optionalKey(Schema.Int),
|
|
32
|
+
backendMessage: Schema.optionalKey(Schema.String),
|
|
33
|
+
channel: Schema.optionalKey(Schema.String),
|
|
34
|
+
pairs: Schema.optionalKey(Schema.Int),
|
|
35
|
+
candidateTypes: Schema.optionalKey(Schema.Array(Schema.String)),
|
|
36
|
+
});
|
|
37
|
+
const Channel = Schema.Literals(["control", "data"]);
|
|
38
|
+
const WireEvent = Schema.Union([
|
|
39
|
+
Schema.Struct({
|
|
40
|
+
type: Schema.Literal("state"),
|
|
41
|
+
state: Schema.Literals(["new", "connecting", "connected", "disconnected", "failed", "closed"]),
|
|
42
|
+
}),
|
|
43
|
+
Schema.Struct({ type: Schema.Literal("channel"), channel: Channel, open: Schema.Boolean }),
|
|
44
|
+
Schema.Struct({ type: Schema.Literal("message"), channel: Channel, bytes: Bytes }),
|
|
45
|
+
Schema.Struct({
|
|
46
|
+
type: Schema.Literal("ice"),
|
|
47
|
+
candidate: Schema.optionalKey(Schema.Struct({
|
|
48
|
+
candidate: Schema.String,
|
|
49
|
+
sdp_mid: Schema.optionalKey(Schema.String),
|
|
50
|
+
sdp_mline_index: Schema.optionalKey(Schema.Int),
|
|
51
|
+
})),
|
|
52
|
+
}),
|
|
53
|
+
Schema.Struct({ type: Schema.Literal("track"), name: Schema.String, mid: Schema.String }),
|
|
54
|
+
Schema.Struct({
|
|
55
|
+
type: Schema.Literal("decoded"),
|
|
56
|
+
kind: Schema.Literals(["video", "audio"]),
|
|
57
|
+
name: Schema.String,
|
|
58
|
+
mid: Schema.String,
|
|
59
|
+
}),
|
|
60
|
+
Schema.Struct({ type: Schema.Literal("error"), error: WireFailure }),
|
|
61
|
+
]);
|
|
62
|
+
/** The prepare stream: the offer first, then the child's peer events in order. */
|
|
63
|
+
export const PrepareItem = Schema.Union([
|
|
64
|
+
Schema.TaggedStruct("Prepared", { sdp: Schema.String, mapping: Schema.Array(Mapping) }),
|
|
65
|
+
Schema.TaggedStruct("Event", { event: WireEvent }),
|
|
66
|
+
]);
|
|
67
|
+
/** A frame's admission sequence, stamped natively before any queue could drop it. */
|
|
68
|
+
const Sequence = Schema.BigInt.check(Schema.isGreaterThanOrEqualToBigInt(0n));
|
|
69
|
+
export const WireVideo = Schema.Struct({
|
|
70
|
+
width: Schema.Int,
|
|
71
|
+
height: Schema.Int,
|
|
72
|
+
frameId: Schema.BigInt,
|
|
73
|
+
timestampMicros: Schema.BigInt,
|
|
74
|
+
sequence: Sequence,
|
|
75
|
+
data: Bytes,
|
|
76
|
+
metadata: Bytes,
|
|
77
|
+
});
|
|
78
|
+
export const WireAudio = Schema.Struct({
|
|
79
|
+
sampleRate: Schema.Int,
|
|
80
|
+
channels: Schema.Int,
|
|
81
|
+
sequence: Sequence,
|
|
82
|
+
samples: Samples,
|
|
83
|
+
});
|
|
84
|
+
const Count = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));
|
|
85
|
+
const Total = Schema.BigInt.check(Schema.isGreaterThanOrEqualToBigInt(0n));
|
|
86
|
+
/** The child's transport pressure, with its own readers' overflows. */
|
|
87
|
+
export const WirePressure = Schema.Struct({
|
|
88
|
+
closed: Schema.Boolean,
|
|
89
|
+
queuedControl: Count,
|
|
90
|
+
queuedVideo: Count,
|
|
91
|
+
queuedAudio: Count,
|
|
92
|
+
queuedBytes: Count,
|
|
93
|
+
droppedVideo: Total,
|
|
94
|
+
droppedAudio: Total,
|
|
95
|
+
pendingRequests: Count,
|
|
96
|
+
deliveredVideo: Total,
|
|
97
|
+
deliveredAudio: Total,
|
|
98
|
+
readerOverflows: Total,
|
|
99
|
+
});
|
|
100
|
+
const IceServer = Schema.Struct({
|
|
101
|
+
urls: Schema.Array(Schema.String),
|
|
102
|
+
username: Schema.String,
|
|
103
|
+
credential: Schema.String,
|
|
104
|
+
});
|
|
105
|
+
/**
|
|
106
|
+
* One child per peer. `Open` loads and verifies the library and creates the
|
|
107
|
+
* child's native peer; `Shutdown` closes and joins it. Every other RPC is one
|
|
108
|
+
* `Peer` operation, and `Video`/`Audio` open a track's frame stream.
|
|
109
|
+
*/
|
|
110
|
+
export class IsolatedRpcs extends RpcGroup.make(Rpc.make("Open", {
|
|
111
|
+
payload: { libraryPath: Schema.optionalKey(Schema.String) },
|
|
112
|
+
error: WireFailure,
|
|
113
|
+
}), Rpc.make("Prepare", {
|
|
114
|
+
payload: { servers: Schema.Array(IceServer), tracks: Schema.Array(Track) },
|
|
115
|
+
success: PrepareItem,
|
|
116
|
+
error: WireFailure,
|
|
117
|
+
stream: true,
|
|
118
|
+
}), Rpc.make("Answer", { payload: { sdp: Schema.String }, error: WireFailure }), Rpc.make("Send", { payload: { channel: Channel, bytes: Bytes }, error: WireFailure }), Rpc.make("Direction", {
|
|
119
|
+
payload: { name: Schema.String, active: Schema.Boolean },
|
|
120
|
+
error: WireFailure,
|
|
121
|
+
}), Rpc.make("Replace", { payload: { name: Schema.String }, error: WireFailure }), Rpc.make("MaxBitrate", {
|
|
122
|
+
// The child's peer rejects a value out of range, a non-finite one
|
|
123
|
+
// included, as the in-process host does, so it must reach the child.
|
|
124
|
+
// @effect-diagnostics-next-line schemaNumber:off
|
|
125
|
+
payload: { name: Schema.String, bitsPerSecond: Schema.Number },
|
|
126
|
+
error: WireFailure,
|
|
127
|
+
}), Rpc.make("Stats", { success: Records, error: WireFailure }), Rpc.make("Snapshot", { success: WirePressure, error: WireFailure }), Rpc.make("Video", {
|
|
128
|
+
payload: { name: Schema.String },
|
|
129
|
+
success: WireVideo,
|
|
130
|
+
error: WireFailure,
|
|
131
|
+
stream: true,
|
|
132
|
+
}), Rpc.make("Audio", {
|
|
133
|
+
payload: { name: Schema.String },
|
|
134
|
+
success: WireAudio,
|
|
135
|
+
error: WireFailure,
|
|
136
|
+
stream: true,
|
|
137
|
+
}), Rpc.make("Shutdown", { error: WireFailure })) {
|
|
138
|
+
}
|
|
139
|
+
const nativeDetail = (detail) => {
|
|
140
|
+
if (!Predicate.isObject(detail))
|
|
141
|
+
return {};
|
|
142
|
+
return {
|
|
143
|
+
...(typeof detail.status === "number" && Number.isSafeInteger(detail.status)
|
|
144
|
+
? { status: detail.status }
|
|
145
|
+
: {}),
|
|
146
|
+
...(Redacted.isRedacted(detail.backendMessage) &&
|
|
147
|
+
typeof Redacted.value(detail.backendMessage) === "string"
|
|
148
|
+
? { backendMessage: Redacted.value(detail.backendMessage) }
|
|
149
|
+
: {}),
|
|
150
|
+
...(typeof detail.channel === "string" ? { channel: detail.channel } : {}),
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* A failure as the child sends it. Only the evidence the native host itself
|
|
155
|
+
* attaches crosses: its failure class and backend text; any other `detail` is
|
|
156
|
+
* the child's own diagnostic and stays there.
|
|
157
|
+
*/
|
|
158
|
+
export const toWire = (error) => {
|
|
159
|
+
const { reason, context } = error;
|
|
160
|
+
const base = {
|
|
161
|
+
code: reason._tag,
|
|
162
|
+
message: reason.message,
|
|
163
|
+
...(context.operation === undefined ? {} : { operation: context.operation }),
|
|
164
|
+
...(context.outcome === undefined ? {} : { outcome: context.outcome }),
|
|
165
|
+
};
|
|
166
|
+
switch (reason._tag) {
|
|
167
|
+
case "Native":
|
|
168
|
+
return {
|
|
169
|
+
...base,
|
|
170
|
+
...nativeDetail(context.detail),
|
|
171
|
+
...(reason.status === undefined ? {} : { status: reason.status }),
|
|
172
|
+
...(reason.backendMessage === undefined
|
|
173
|
+
? {}
|
|
174
|
+
: { backendMessage: Redacted.value(reason.backendMessage) }),
|
|
175
|
+
};
|
|
176
|
+
case "IceFailed":
|
|
177
|
+
return { ...base, pairs: reason.pairs, candidateTypes: reason.candidateTypes };
|
|
178
|
+
case "TransportFailed":
|
|
179
|
+
return { ...base, pairs: reason.pairs };
|
|
180
|
+
default:
|
|
181
|
+
return { ...base, ...nativeDetail(context.detail) };
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
/** The parent's `ReactorError` for a failure the child sent, as the in-process host raises it. */
|
|
185
|
+
export const fromWire = (wire) => {
|
|
186
|
+
const context = {
|
|
187
|
+
...(wire.operation === undefined ? {} : { operation: wire.operation }),
|
|
188
|
+
...(wire.outcome === undefined ? {} : { outcome: wire.outcome }),
|
|
189
|
+
};
|
|
190
|
+
const backendMessage = wire.backendMessage === undefined ? undefined : Redacted.make(wire.backendMessage);
|
|
191
|
+
const channel = wire.channel === undefined ? {} : { channel: wire.channel };
|
|
192
|
+
switch (wire.code) {
|
|
193
|
+
case "Native":
|
|
194
|
+
return new ReactorError({
|
|
195
|
+
reason: new Native({
|
|
196
|
+
message: wire.message,
|
|
197
|
+
...(wire.status === undefined ? {} : { status: wire.status }),
|
|
198
|
+
...(backendMessage === undefined ? {} : { backendMessage }),
|
|
199
|
+
}),
|
|
200
|
+
context: wire.channel === undefined ? context : { ...context, detail: channel },
|
|
201
|
+
});
|
|
202
|
+
case "IceFailed":
|
|
203
|
+
return new ReactorError({
|
|
204
|
+
reason: new IceFailed({
|
|
205
|
+
message: wire.message,
|
|
206
|
+
pairs: wire.pairs ?? 0,
|
|
207
|
+
candidateTypes: wire.candidateTypes ?? [],
|
|
208
|
+
}),
|
|
209
|
+
context,
|
|
210
|
+
});
|
|
211
|
+
case "TransportFailed":
|
|
212
|
+
return new ReactorError({
|
|
213
|
+
reason: new TransportFailed({ message: wire.message, pairs: wire.pairs ?? 0 }),
|
|
214
|
+
context,
|
|
215
|
+
});
|
|
216
|
+
case "ClipEnded":
|
|
217
|
+
// Only an H3 provider raises it, from clip evidence no native peer has.
|
|
218
|
+
return ReactorError.fromCode("Protocol", "isolated native child sent a clip failure", context);
|
|
219
|
+
default:
|
|
220
|
+
return ReactorError.fromCode(wire.code, wire.message, wire.status === undefined
|
|
221
|
+
? context
|
|
222
|
+
: { ...context, detail: { status: wire.status, backendMessage, ...channel } });
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
/** A peer event as the child sends it. */
|
|
226
|
+
export const eventToWire = (event) => {
|
|
227
|
+
switch (event.type) {
|
|
228
|
+
case "error":
|
|
229
|
+
return { type: "error", error: toWire(event.error) };
|
|
230
|
+
case "message":
|
|
231
|
+
return { ...event, bytes: event.bytes };
|
|
232
|
+
default:
|
|
233
|
+
return event;
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
/** A peer event as the parent delivers it. */
|
|
237
|
+
export const eventFromWire = (event) => {
|
|
238
|
+
switch (event.type) {
|
|
239
|
+
case "message":
|
|
240
|
+
return { type: "message", channel: event.channel, bytes: exact(event.bytes) };
|
|
241
|
+
case "error":
|
|
242
|
+
return { type: "error", error: fromWire(event.error) };
|
|
243
|
+
default:
|
|
244
|
+
return event;
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
export function exact(view) {
|
|
248
|
+
return view.byteOffset === 0 && view.byteLength === view.buffer.byteLength ? view : view.slice();
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/_internal/isolated/protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/_internal/peer.d.ts
CHANGED
|
@@ -1,57 +1,112 @@
|
|
|
1
|
+
import * as Duration from "effect/Duration";
|
|
1
2
|
import * as Effect from "effect/Effect";
|
|
2
3
|
import type * as Scope from "effect/Scope";
|
|
3
4
|
import { ReactorError } from "reactor-effect-client";
|
|
4
5
|
import type { Track } from "reactor-effect-client";
|
|
5
6
|
import type { AudioFrame, Channel, IceServer, MediaPressure, MediaTrack, Peer, PeerEvent, Prepared, RawMedia, VideoFrame } from "reactor-effect-client/host";
|
|
6
|
-
import { type NativePacket } from "./bridge.js";
|
|
7
|
-
|
|
7
|
+
import { type NativeAudio, type NativePacket, type NativeVideo } from "./bridge.js";
|
|
8
|
+
/**
|
|
9
|
+
* How long closing a peer waits for its native owner join. A healthy join under
|
|
10
|
+
* real libwebrtc took 13-62 ms in the media load tests on Node and Bun, which
|
|
11
|
+
* require it under 2 s; the default leaves five times that bound.
|
|
12
|
+
*/
|
|
13
|
+
export declare const defaultShutdownTimeout: Duration.Duration;
|
|
14
|
+
export declare const validateNativeTracks: (tracks: readonly Track[]) => void;
|
|
8
15
|
declare const parsePrepared: (value: unknown) => Prepared;
|
|
16
|
+
export declare const iceServers: (servers: readonly IceServer[]) => readonly {
|
|
17
|
+
readonly urls: readonly string[];
|
|
18
|
+
readonly username: string;
|
|
19
|
+
readonly credential: string;
|
|
20
|
+
}[];
|
|
9
21
|
declare const parseEvent: (packet: NativePacket) => PeerEvent;
|
|
10
|
-
declare const
|
|
11
|
-
declare const
|
|
12
|
-
|
|
22
|
+
declare const videoFrame: (tracks: readonly Track[], taken: NativeVideo) => VideoFrame;
|
|
23
|
+
declare const audioFrame: (tracks: readonly Track[], taken: NativeAudio) => AudioFrame;
|
|
24
|
+
/** The native snapshot's transport counters; the host adds its own reader overflows. */
|
|
25
|
+
declare const parseSnapshot: (value: unknown) => Omit<MediaPressure, "readerOverflows">;
|
|
13
26
|
declare const statsValue: (value: unknown) => unknown;
|
|
27
|
+
/**
|
|
28
|
+
* Classify a failed connection from its candidate pairs. reactor-webrtc does
|
|
29
|
+
* not report ICE connection state, but a pair that succeeded or was nominated
|
|
30
|
+
* shows ICE worked and the DTLS/SCTP transport above it failed.
|
|
31
|
+
*/
|
|
32
|
+
declare const connectionFailure: (stats: readonly unknown[]) => ReactorError;
|
|
14
33
|
export declare class NativePeer implements Peer {
|
|
34
|
+
private readonly shutdownTimeout;
|
|
15
35
|
readonly nativeTracks = false;
|
|
16
36
|
readonly rawMedia: RawMedia;
|
|
17
37
|
private readonly bridge;
|
|
18
38
|
private readonly video;
|
|
19
39
|
private readonly audio;
|
|
20
40
|
private readonly incoming;
|
|
41
|
+
private tracks;
|
|
42
|
+
private readonly wakeEvents;
|
|
43
|
+
private readonly wakeVideo;
|
|
44
|
+
private readonly wakeAudio;
|
|
21
45
|
private emit;
|
|
22
46
|
private closed;
|
|
23
47
|
private failureEmitted;
|
|
24
48
|
private failure;
|
|
25
|
-
constructor(libraryPath: string);
|
|
49
|
+
constructor(libraryPath: string, shutdownTimeout?: Duration.Input);
|
|
26
50
|
private requireIncoming;
|
|
51
|
+
/** Readers failed for falling behind, across this peer's video and audio tracks. */
|
|
52
|
+
private readerOverflows;
|
|
27
53
|
private videoFeed;
|
|
28
54
|
private audioFeed;
|
|
29
55
|
private fail;
|
|
30
|
-
|
|
31
|
-
private
|
|
32
|
-
|
|
56
|
+
/** The native readiness callback, on the JavaScript thread: it only wakes pumps. */
|
|
57
|
+
private wake;
|
|
58
|
+
/**
|
|
59
|
+
* Drain one native queue with synchronous takes whenever readiness wakes
|
|
60
|
+
* it. Yielding after every item lets observers run between emits, so a
|
|
61
|
+
* backlog released by a stalled event loop reaches bounded observation
|
|
62
|
+
* queues at their readers' pace rather than all at once. Yielding once per
|
|
63
|
+
* batch of half a subscriber's capacity overflowed an observation queue on
|
|
64
|
+
* Bun under CPU contention, so each item costs one event-loop turn.
|
|
65
|
+
*/
|
|
66
|
+
private pump;
|
|
67
|
+
/**
|
|
68
|
+
* Deliver one event; false once the queue is empty or closed. A failed
|
|
69
|
+
* connection is classified here before the pump takes another event, so its
|
|
70
|
+
* classification decides the error; later events describe the same teardown.
|
|
71
|
+
*/
|
|
72
|
+
private get stepEvent();
|
|
73
|
+
private get stepVideo();
|
|
74
|
+
private get stepAudio();
|
|
75
|
+
/**
|
|
76
|
+
* Report a failed connection as IceFailed or TransportFailed rather than a
|
|
77
|
+
* bare state. The statistics read runs in the events pump, so the connection
|
|
78
|
+
* scope owns it and its deadline runs on the fiber's Clock.
|
|
79
|
+
*/
|
|
80
|
+
private get classify();
|
|
33
81
|
prepare(servers: readonly IceServer[], tracks: readonly Track[], emit: (event: PeerEvent) => void): Effect.Effect<Prepared, ReactorError, Scope.Scope>;
|
|
34
82
|
answer(sdp: string): Effect.Effect<void, ReactorError>;
|
|
35
83
|
send(channel: Channel, bytes: Uint8Array<ArrayBuffer>): Effect.Effect<void, ReactorError>;
|
|
36
84
|
direction(name: string, active: boolean): Effect.Effect<void, ReactorError>;
|
|
37
85
|
maxBitrate(name: string, bitsPerSecond: number): Effect.Effect<void, ReactorError>;
|
|
38
|
-
stats(): Effect.Effect<readonly unknown[], ReactorError>;
|
|
86
|
+
get stats(): Effect.Effect<readonly unknown[], ReactorError>;
|
|
39
87
|
private mediaSnapshot;
|
|
40
88
|
lease(): MediaTrack;
|
|
41
89
|
release(): void;
|
|
42
90
|
replace(): Effect.Effect<void, ReactorError>;
|
|
43
91
|
close(): void;
|
|
44
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Close, then wait for the native owner join. Only the wait is bounded: the
|
|
94
|
+
* deadline races the interruptible wait inside the uninterruptible region, so
|
|
95
|
+
* expiry stops waiting while the join keeps the handle and callback, and the
|
|
96
|
+
* bridge is retained until the join completes.
|
|
97
|
+
*/
|
|
98
|
+
get shutdown(): Effect.Effect<void, ReactorError>;
|
|
45
99
|
}
|
|
46
100
|
/** Internal test surface. This module is not a package export. */
|
|
47
101
|
export declare const nativePeerTesting: Readonly<{
|
|
48
102
|
parsePrepared: typeof parsePrepared;
|
|
49
103
|
parseEvent: typeof parseEvent;
|
|
50
|
-
|
|
51
|
-
|
|
104
|
+
videoFrame: typeof videoFrame;
|
|
105
|
+
audioFrame: typeof audioFrame;
|
|
52
106
|
parseSnapshot: typeof parseSnapshot;
|
|
53
107
|
statsValue: typeof statsValue;
|
|
54
108
|
validateNativeTracks: typeof validateNativeTracks;
|
|
109
|
+
connectionFailure: typeof connectionFailure;
|
|
55
110
|
}>;
|
|
56
111
|
export {};
|
|
57
112
|
//# sourceMappingURL=peer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/_internal/peer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/_internal/peer.ts"],"names":[],"mappings":"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"}
|