@node-webrtc-rust/bindings 0.1.5

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 (4) hide show
  1. package/README.md +69 -0
  2. package/index.d.ts +202 -0
  3. package/index.js +323 -0
  4. package/package.json +76 -0
package/README.md ADDED
@@ -0,0 +1,69 @@
1
+ # @node-webrtc-rust/bindings
2
+
3
+ Native NAPI-RS bindings for node-webrtc-rust. This package provides the compiled `.node` addon that bridges Rust and Node.js — including W3C WebRTC APIs and conference room mixing.
4
+
5
+ ## For end users
6
+
7
+ Just install the package — prebuilt binaries are resolved automatically via `optionalDependencies`:
8
+
9
+ ```bash
10
+ npm install @node-webrtc-rust/bindings
11
+ ```
12
+
13
+ No Rust toolchain required. The correct platform-specific binary is downloaded during install.
14
+
15
+ ### Supported platforms
16
+
17
+ | OS | Arch | Package |
18
+ | ------- | ----------------- | -------------------------------------------- |
19
+ | macOS | arm64 (M1+) | `@node-webrtc-rust/bindings-darwin-arm64` |
20
+ | macOS | x64 (Intel) | `@node-webrtc-rust/bindings-darwin-x64` |
21
+ | Linux | x64 (glibc) | `@node-webrtc-rust/bindings-linux-x64-gnu` |
22
+ | Linux | x64 (musl/Alpine) | `@node-webrtc-rust/bindings-linux-x64-musl` |
23
+ | Linux | arm64 (glibc) | `@node-webrtc-rust/bindings-linux-arm64-gnu` |
24
+ | Windows | x64 (MSVC) | `@node-webrtc-rust/bindings-win32-x64-msvc` |
25
+
26
+ ## For developers (building from source)
27
+
28
+ Prerequisites:
29
+
30
+ - Rust toolchain (stable, via [rustup](https://rustup.rs))
31
+ - Node.js >= 18
32
+ - `@napi-rs/cli` (installed as devDependency)
33
+
34
+ ```bash
35
+ cd packages/bindings
36
+ npm install
37
+ npm run build:local # release build for current platform (default)
38
+ npm run build:debug:local # debug build — fastest iteration loop
39
+ ```
40
+
41
+ For all platform targets (CI/publish only):
42
+
43
+ ```bash
44
+ npm run build:all
45
+ ```
46
+
47
+ This produces a `node-webrtc-rust.<platform>.node` file in the current directory, which the loader (`index.js`) picks up as a fallback when no platform package is installed.
48
+
49
+ ### Debug logging
50
+
51
+ Set `WEBRTC_DEBUG=1` (or pass `debug: true` in `JsRTCConfiguration`) to emit `[webrtc-debug]` lines from native bindings and the Rust core. See the root README for details.
52
+
53
+ ## How it works
54
+
55
+ The `index.js` loader resolves the native binding in this order:
56
+
57
+ 1. Try requiring the platform-specific npm package (e.g., `@node-webrtc-rust/bindings-darwin-arm64`)
58
+ 2. Try loading a local `.node` file matching the current platform (dev builds)
59
+ 3. Try loading `node-webrtc-rust.node` (generic local build)
60
+
61
+ If none succeed, an error is thrown with instructions.
62
+
63
+ ### TypeScript note
64
+
65
+ This package is the **only** Node-facing package that ships hand-written JavaScript (`index.js`) for the napi-rs prebuild loader. The loader re-exports the full native module (WebRTC peer APIs and conference room APIs). TypeScript consumers use the generated `index.d.ts`. Higher-level APIs live in `@node-webrtc-rust/sdk` (including `@node-webrtc-rust/sdk/conference`) and `@node-webrtc-rust/signaling`.
66
+
67
+ ## Cross-compilation
68
+
69
+ CI builds all platform targets using GitHub Actions. Linux builds and tests pull `ghcr.io/akirilyuk/node-webrtc-rust/ci-build:latest` (rebuild by pushing to the `ci` branch — see [`docker/ci/Dockerfile`](../../docker/ci/Dockerfile) and [`.github/workflows/ci-image.yml`](../../.github/workflows/ci-image.yml)). macOS and Windows jobs use native runners. See [`.github/workflows/build.yml`](../../.github/workflows/build.yml).
package/index.d.ts ADDED
@@ -0,0 +1,202 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ /* auto-generated by NAPI-RS */
5
+
6
+ /** ICE server configuration for conference rooms. */
7
+ export interface JsIceServer {
8
+ urls: Array<string>
9
+ username?: string
10
+ credential?: string
11
+ credentialType?: string
12
+ }
13
+ /** Room creation options exposed to JavaScript. */
14
+ export interface JsRoomOptions {
15
+ maxParticipants?: number
16
+ iceServers?: Array<JsIceServer>
17
+ }
18
+ /** Participant summary exposed to JavaScript. */
19
+ export interface JsParticipantInfo {
20
+ id: string
21
+ connectionState: string
22
+ }
23
+ /** Mute scope matching the TypeScript `MuteScope` type. */
24
+ export const enum JsMuteScope {
25
+ Global = 'global',
26
+ Listener = 'listener'
27
+ }
28
+ /** Mute options exposed to JavaScript. */
29
+ export interface JsMuteOptions {
30
+ scope: JsMuteScope
31
+ listenerId?: string
32
+ }
33
+ /** Event payload for participant lifecycle callbacks. */
34
+ export interface JsParticipantEvent {
35
+ roomId: string
36
+ participantId: string
37
+ }
38
+ /** Event payload for participant kick callbacks. */
39
+ export interface JsParticipantKickedEvent {
40
+ roomId: string
41
+ participantId: string
42
+ reason?: string
43
+ }
44
+ /** Event payload for participant mute callbacks. */
45
+ export interface JsParticipantMutedEvent {
46
+ roomId: string
47
+ targetId: string
48
+ scope: JsMuteScope
49
+ listenerId?: string
50
+ }
51
+ /** Event payload for mixing enabled changes. */
52
+ export interface JsMixingEnabledChangedEvent {
53
+ roomId: string
54
+ enabled: boolean
55
+ }
56
+ /** Event payload for room errors. */
57
+ export interface JsRoomErrorEvent {
58
+ roomId?: string
59
+ message: string
60
+ code?: string
61
+ }
62
+ /** ICE server configuration exposed to JavaScript. */
63
+ export interface JsRtcIceServer {
64
+ urls: Array<string>
65
+ username?: string
66
+ credential?: string
67
+ credentialType?: string
68
+ }
69
+ /** Peer connection configuration exposed to JavaScript. */
70
+ export interface JsRtcConfiguration {
71
+ iceServers?: Array<JsRtcIceServer>
72
+ iceTransportPolicy?: string
73
+ debug?: boolean
74
+ }
75
+ /** Session description exposed to JavaScript. */
76
+ export interface JsRtcSessionDescription {
77
+ type: string
78
+ sdp: string
79
+ }
80
+ /** ICE candidate exposed to JavaScript. */
81
+ export interface JsRtcIceCandidate {
82
+ candidate: string
83
+ sdpMid?: string
84
+ sdpMLineIndex?: number
85
+ usernameFragment?: string
86
+ }
87
+ /** Options for creating a data channel from JavaScript. */
88
+ export interface JsRtcDataChannelInit {
89
+ ordered?: boolean
90
+ maxPacketLifeTime?: number
91
+ maxRetransmits?: number
92
+ protocol?: string
93
+ negotiated?: number
94
+ }
95
+ export declare function version(): string
96
+ /** One conference room with participant and mixing controls. */
97
+ export declare class JsConferenceRoom {
98
+ /** Returns participant summaries for admin/list APIs. */
99
+ listParticipants(): Promise<Array<JsParticipantInfo>>
100
+ /** Mutes a participant globally or for one listener. */
101
+ muteParticipant(targetId: string, options: JsMuteOptions): Promise<void>
102
+ /** Unmutes a participant globally or for one listener. */
103
+ unmuteParticipant(targetId: string, options: JsMuteOptions): Promise<void>
104
+ /** Enables or disables room-wide mixing. */
105
+ setMixingEnabled(enabled: boolean): Promise<void>
106
+ /** Returns whether room-wide mixing is enabled. */
107
+ isMixingEnabled(): Promise<boolean>
108
+ /** Removes a participant with an optional kick reason. */
109
+ kickParticipant(participantId: string, reason?: string | undefined | null): Promise<void>
110
+ /** Routes a JSON signaling payload through the room. */
111
+ handleSignalingMessage(json: string): Promise<string>
112
+ /** Closes all participants and clears room state. */
113
+ close(): Promise<void>
114
+ /** Registers a callback for participant joined events. */
115
+ setOnParticipantJoined(callback: (...args: any[]) => any): void
116
+ /** Registers a callback for participant left events. */
117
+ setOnParticipantLeft(callback: (...args: any[]) => any): void
118
+ /** Registers a callback for participant kicked events. */
119
+ setOnParticipantKicked(callback: (...args: any[]) => any): void
120
+ /** Registers a callback for participant muted events. */
121
+ setOnParticipantMuted(callback: (...args: any[]) => any): void
122
+ /** Registers a callback for mixing enabled changes. */
123
+ setOnMixingEnabledChanged(callback: (...args: any[]) => any): void
124
+ /** Registers a callback for room error events. */
125
+ setOnError(callback: (...args: any[]) => any): void
126
+ }
127
+ /** Conference server managing multiple rooms. */
128
+ export declare class JsConferenceServer {
129
+ /** Creates an empty conference server. */
130
+ constructor()
131
+ /** Creates a room and returns a handle to it. */
132
+ createRoom(roomId: string, options?: JsRoomOptions | undefined | null): Promise<JsConferenceRoom>
133
+ /** Returns a handle to an existing room, if present. */
134
+ getRoom(roomId: string): Promise<JsConferenceRoom | null>
135
+ /** Lists active room identifiers. */
136
+ listRooms(): Promise<Array<string>>
137
+ /** Destroys a room and tears down all participants. */
138
+ destroyRoom(roomId: string): Promise<void>
139
+ }
140
+ export type JsRTCDataChannel = JsRtcDataChannel
141
+ /** WebRTC data channel exposed to JavaScript. */
142
+ export declare class JsRtcDataChannel {
143
+ get label(): string
144
+ get id(): number
145
+ get readyState(): string
146
+ bufferedAmount(): Promise<number>
147
+ send(data: string | Buffer): Promise<void>
148
+ close(): Promise<void>
149
+ setOnOpen(callback: (...args: any[]) => any): void
150
+ setOnMessage(callback: (...args: any[]) => any): void
151
+ setOnClose(callback: (...args: any[]) => any): void
152
+ setOnError(callback: (...args: any[]) => any): void
153
+ }
154
+ /** Media stream track exposed to JavaScript (stub). */
155
+ export declare class JsMediaStreamTrack {
156
+ get id(): string
157
+ get kind(): string
158
+ get streamId(): string
159
+ get enabled(): boolean
160
+ set enabled(enabled: boolean)
161
+ }
162
+ /** Media stream exposed to JavaScript (stub). */
163
+ export declare class JsMediaStream {
164
+ constructor(id: string)
165
+ get id(): string
166
+ }
167
+ /** Local audio track for sending media to a peer connection. */
168
+ export declare class JsLocalAudioTrack {
169
+ constructor(id: string, streamId: string)
170
+ get id(): string
171
+ get kind(): string
172
+ get streamId(): string
173
+ get enabled(): boolean
174
+ set enabled(enabled: boolean)
175
+ /** Writes a PCM audio frame to the track. */
176
+ writeSample(data: Buffer, durationMs: number): Promise<void>
177
+ }
178
+ /** WebRTC peer connection exposed to JavaScript. */
179
+ export declare class JsPeerConnection {
180
+ constructor(config?: JsRtcConfiguration | undefined | null)
181
+ get connectionState(): string
182
+ get iceConnectionState(): string
183
+ get iceGatheringState(): string
184
+ get signalingState(): string
185
+ createOffer(): Promise<JsRtcSessionDescription>
186
+ createAnswer(): Promise<JsRtcSessionDescription>
187
+ setLocalDescription(desc: JsRtcSessionDescription): Promise<void>
188
+ setRemoteDescription(desc: JsRtcSessionDescription): Promise<void>
189
+ addIceCandidate(candidate: JsRtcIceCandidate): Promise<void>
190
+ addTrack(track: JsLocalAudioTrack): Promise<void>
191
+ createDataChannel(label: string, options?: JsRtcDataChannelInit | undefined | null): Promise<JsRtcDataChannel>
192
+ close(): Promise<void>
193
+ gatheringComplete(): Promise<void>
194
+ localDescription(): Promise<JsRtcSessionDescription | null>
195
+ remoteDescription(): Promise<JsRtcSessionDescription | null>
196
+ setOnIceCandidate(callback: (...args: any[]) => any): void
197
+ setOnTrack(callback: (...args: any[]) => any): void
198
+ setOnDataChannel(callback: (...args: any[]) => any): void
199
+ setOnConnectionStateChange(callback: (...args: any[]) => any): void
200
+ setOnIceConnectionStateChange(callback: (...args: any[]) => any): void
201
+ setOnNegotiationNeeded(callback: (...args: any[]) => any): void
202
+ }
package/index.js ADDED
@@ -0,0 +1,323 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /* prettier-ignore */
4
+
5
+ /* auto-generated by NAPI-RS */
6
+
7
+ const { existsSync, readFileSync } = require('fs')
8
+ const { join } = require('path')
9
+
10
+ const { platform, arch } = process
11
+
12
+ let nativeBinding = null
13
+ let localFileExisted = false
14
+ let loadError = null
15
+
16
+ function isMusl() {
17
+ // For Node 10
18
+ if (!process.report || typeof process.report.getReport !== 'function') {
19
+ try {
20
+ const lddPath = require('child_process').execSync('which ldd').toString().trim()
21
+ return readFileSync(lddPath, 'utf8').includes('musl')
22
+ } catch (e) {
23
+ return true
24
+ }
25
+ } else {
26
+ const { glibcVersionRuntime } = process.report.getReport().header
27
+ return !glibcVersionRuntime
28
+ }
29
+ }
30
+
31
+ switch (platform) {
32
+ case 'android':
33
+ switch (arch) {
34
+ case 'arm64':
35
+ localFileExisted = existsSync(join(__dirname, 'node-webrtc-rust.android-arm64.node'))
36
+ try {
37
+ if (localFileExisted) {
38
+ nativeBinding = require('./node-webrtc-rust.android-arm64.node')
39
+ } else {
40
+ nativeBinding = require('@node-webrtc-rust/bindings-android-arm64')
41
+ }
42
+ } catch (e) {
43
+ loadError = e
44
+ }
45
+ break
46
+ case 'arm':
47
+ localFileExisted = existsSync(join(__dirname, 'node-webrtc-rust.android-arm-eabi.node'))
48
+ try {
49
+ if (localFileExisted) {
50
+ nativeBinding = require('./node-webrtc-rust.android-arm-eabi.node')
51
+ } else {
52
+ nativeBinding = require('@node-webrtc-rust/bindings-android-arm-eabi')
53
+ }
54
+ } catch (e) {
55
+ loadError = e
56
+ }
57
+ break
58
+ default:
59
+ throw new Error(`Unsupported architecture on Android ${arch}`)
60
+ }
61
+ break
62
+ case 'win32':
63
+ switch (arch) {
64
+ case 'x64':
65
+ localFileExisted = existsSync(
66
+ join(__dirname, 'node-webrtc-rust.win32-x64-msvc.node')
67
+ )
68
+ try {
69
+ if (localFileExisted) {
70
+ nativeBinding = require('./node-webrtc-rust.win32-x64-msvc.node')
71
+ } else {
72
+ nativeBinding = require('@node-webrtc-rust/bindings-win32-x64-msvc')
73
+ }
74
+ } catch (e) {
75
+ loadError = e
76
+ }
77
+ break
78
+ case 'ia32':
79
+ localFileExisted = existsSync(
80
+ join(__dirname, 'node-webrtc-rust.win32-ia32-msvc.node')
81
+ )
82
+ try {
83
+ if (localFileExisted) {
84
+ nativeBinding = require('./node-webrtc-rust.win32-ia32-msvc.node')
85
+ } else {
86
+ nativeBinding = require('@node-webrtc-rust/bindings-win32-ia32-msvc')
87
+ }
88
+ } catch (e) {
89
+ loadError = e
90
+ }
91
+ break
92
+ case 'arm64':
93
+ localFileExisted = existsSync(
94
+ join(__dirname, 'node-webrtc-rust.win32-arm64-msvc.node')
95
+ )
96
+ try {
97
+ if (localFileExisted) {
98
+ nativeBinding = require('./node-webrtc-rust.win32-arm64-msvc.node')
99
+ } else {
100
+ nativeBinding = require('@node-webrtc-rust/bindings-win32-arm64-msvc')
101
+ }
102
+ } catch (e) {
103
+ loadError = e
104
+ }
105
+ break
106
+ default:
107
+ throw new Error(`Unsupported architecture on Windows: ${arch}`)
108
+ }
109
+ break
110
+ case 'darwin':
111
+ localFileExisted = existsSync(join(__dirname, 'node-webrtc-rust.darwin-universal.node'))
112
+ try {
113
+ if (localFileExisted) {
114
+ nativeBinding = require('./node-webrtc-rust.darwin-universal.node')
115
+ } else {
116
+ nativeBinding = require('@node-webrtc-rust/bindings-darwin-universal')
117
+ }
118
+ break
119
+ } catch {}
120
+ switch (arch) {
121
+ case 'x64':
122
+ localFileExisted = existsSync(join(__dirname, 'node-webrtc-rust.darwin-x64.node'))
123
+ try {
124
+ if (localFileExisted) {
125
+ nativeBinding = require('./node-webrtc-rust.darwin-x64.node')
126
+ } else {
127
+ nativeBinding = require('@node-webrtc-rust/bindings-darwin-x64')
128
+ }
129
+ } catch (e) {
130
+ loadError = e
131
+ }
132
+ break
133
+ case 'arm64':
134
+ localFileExisted = existsSync(
135
+ join(__dirname, 'node-webrtc-rust.darwin-arm64.node')
136
+ )
137
+ try {
138
+ if (localFileExisted) {
139
+ nativeBinding = require('./node-webrtc-rust.darwin-arm64.node')
140
+ } else {
141
+ nativeBinding = require('@node-webrtc-rust/bindings-darwin-arm64')
142
+ }
143
+ } catch (e) {
144
+ loadError = e
145
+ }
146
+ break
147
+ default:
148
+ throw new Error(`Unsupported architecture on macOS: ${arch}`)
149
+ }
150
+ break
151
+ case 'freebsd':
152
+ if (arch !== 'x64') {
153
+ throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
154
+ }
155
+ localFileExisted = existsSync(join(__dirname, 'node-webrtc-rust.freebsd-x64.node'))
156
+ try {
157
+ if (localFileExisted) {
158
+ nativeBinding = require('./node-webrtc-rust.freebsd-x64.node')
159
+ } else {
160
+ nativeBinding = require('@node-webrtc-rust/bindings-freebsd-x64')
161
+ }
162
+ } catch (e) {
163
+ loadError = e
164
+ }
165
+ break
166
+ case 'linux':
167
+ switch (arch) {
168
+ case 'x64':
169
+ if (isMusl()) {
170
+ localFileExisted = existsSync(
171
+ join(__dirname, 'node-webrtc-rust.linux-x64-musl.node')
172
+ )
173
+ try {
174
+ if (localFileExisted) {
175
+ nativeBinding = require('./node-webrtc-rust.linux-x64-musl.node')
176
+ } else {
177
+ nativeBinding = require('@node-webrtc-rust/bindings-linux-x64-musl')
178
+ }
179
+ } catch (e) {
180
+ loadError = e
181
+ }
182
+ } else {
183
+ localFileExisted = existsSync(
184
+ join(__dirname, 'node-webrtc-rust.linux-x64-gnu.node')
185
+ )
186
+ try {
187
+ if (localFileExisted) {
188
+ nativeBinding = require('./node-webrtc-rust.linux-x64-gnu.node')
189
+ } else {
190
+ nativeBinding = require('@node-webrtc-rust/bindings-linux-x64-gnu')
191
+ }
192
+ } catch (e) {
193
+ loadError = e
194
+ }
195
+ }
196
+ break
197
+ case 'arm64':
198
+ if (isMusl()) {
199
+ localFileExisted = existsSync(
200
+ join(__dirname, 'node-webrtc-rust.linux-arm64-musl.node')
201
+ )
202
+ try {
203
+ if (localFileExisted) {
204
+ nativeBinding = require('./node-webrtc-rust.linux-arm64-musl.node')
205
+ } else {
206
+ nativeBinding = require('@node-webrtc-rust/bindings-linux-arm64-musl')
207
+ }
208
+ } catch (e) {
209
+ loadError = e
210
+ }
211
+ } else {
212
+ localFileExisted = existsSync(
213
+ join(__dirname, 'node-webrtc-rust.linux-arm64-gnu.node')
214
+ )
215
+ try {
216
+ if (localFileExisted) {
217
+ nativeBinding = require('./node-webrtc-rust.linux-arm64-gnu.node')
218
+ } else {
219
+ nativeBinding = require('@node-webrtc-rust/bindings-linux-arm64-gnu')
220
+ }
221
+ } catch (e) {
222
+ loadError = e
223
+ }
224
+ }
225
+ break
226
+ case 'arm':
227
+ if (isMusl()) {
228
+ localFileExisted = existsSync(
229
+ join(__dirname, 'node-webrtc-rust.linux-arm-musleabihf.node')
230
+ )
231
+ try {
232
+ if (localFileExisted) {
233
+ nativeBinding = require('./node-webrtc-rust.linux-arm-musleabihf.node')
234
+ } else {
235
+ nativeBinding = require('@node-webrtc-rust/bindings-linux-arm-musleabihf')
236
+ }
237
+ } catch (e) {
238
+ loadError = e
239
+ }
240
+ } else {
241
+ localFileExisted = existsSync(
242
+ join(__dirname, 'node-webrtc-rust.linux-arm-gnueabihf.node')
243
+ )
244
+ try {
245
+ if (localFileExisted) {
246
+ nativeBinding = require('./node-webrtc-rust.linux-arm-gnueabihf.node')
247
+ } else {
248
+ nativeBinding = require('@node-webrtc-rust/bindings-linux-arm-gnueabihf')
249
+ }
250
+ } catch (e) {
251
+ loadError = e
252
+ }
253
+ }
254
+ break
255
+ case 'riscv64':
256
+ if (isMusl()) {
257
+ localFileExisted = existsSync(
258
+ join(__dirname, 'node-webrtc-rust.linux-riscv64-musl.node')
259
+ )
260
+ try {
261
+ if (localFileExisted) {
262
+ nativeBinding = require('./node-webrtc-rust.linux-riscv64-musl.node')
263
+ } else {
264
+ nativeBinding = require('@node-webrtc-rust/bindings-linux-riscv64-musl')
265
+ }
266
+ } catch (e) {
267
+ loadError = e
268
+ }
269
+ } else {
270
+ localFileExisted = existsSync(
271
+ join(__dirname, 'node-webrtc-rust.linux-riscv64-gnu.node')
272
+ )
273
+ try {
274
+ if (localFileExisted) {
275
+ nativeBinding = require('./node-webrtc-rust.linux-riscv64-gnu.node')
276
+ } else {
277
+ nativeBinding = require('@node-webrtc-rust/bindings-linux-riscv64-gnu')
278
+ }
279
+ } catch (e) {
280
+ loadError = e
281
+ }
282
+ }
283
+ break
284
+ case 's390x':
285
+ localFileExisted = existsSync(
286
+ join(__dirname, 'node-webrtc-rust.linux-s390x-gnu.node')
287
+ )
288
+ try {
289
+ if (localFileExisted) {
290
+ nativeBinding = require('./node-webrtc-rust.linux-s390x-gnu.node')
291
+ } else {
292
+ nativeBinding = require('@node-webrtc-rust/bindings-linux-s390x-gnu')
293
+ }
294
+ } catch (e) {
295
+ loadError = e
296
+ }
297
+ break
298
+ default:
299
+ throw new Error(`Unsupported architecture on Linux: ${arch}`)
300
+ }
301
+ break
302
+ default:
303
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
304
+ }
305
+
306
+ if (!nativeBinding) {
307
+ if (loadError) {
308
+ throw loadError
309
+ }
310
+ throw new Error(`Failed to load native binding`)
311
+ }
312
+
313
+ const { JsConferenceRoom, JsConferenceServer, JsMuteScope, JsRtcDataChannel, JsMediaStreamTrack, JsMediaStream, JsLocalAudioTrack, JsPeerConnection, version } = nativeBinding
314
+
315
+ module.exports.JsConferenceRoom = JsConferenceRoom
316
+ module.exports.JsConferenceServer = JsConferenceServer
317
+ module.exports.JsMuteScope = JsMuteScope
318
+ module.exports.JsRtcDataChannel = JsRtcDataChannel
319
+ module.exports.JsMediaStreamTrack = JsMediaStreamTrack
320
+ module.exports.JsMediaStream = JsMediaStream
321
+ module.exports.JsLocalAudioTrack = JsLocalAudioTrack
322
+ module.exports.JsPeerConnection = JsPeerConnection
323
+ module.exports.version = version
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@node-webrtc-rust/bindings",
3
+ "version": "0.1.5",
4
+ "description": "NAPI-RS native bindings for node-webrtc-rust — WebRTC peer connections, data channels, and conference audio mixing",
5
+ "keywords": [
6
+ "webrtc",
7
+ "native",
8
+ "napi",
9
+ "napi-rs",
10
+ "rust",
11
+ "node-addon",
12
+ "node-native",
13
+ "prebuild",
14
+ "bindings",
15
+ "rtcpeerconnection",
16
+ "datachannel",
17
+ "conference",
18
+ "audio-mixing",
19
+ "mcu",
20
+ "nodejs"
21
+ ],
22
+ "homepage": "https://github.com/akirilyuk/node-webrtc-rust#readme",
23
+ "bugs": {
24
+ "url": "https://github.com/akirilyuk/node-webrtc-rust/issues"
25
+ },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/akirilyuk/node-webrtc-rust.git",
29
+ "directory": "packages/bindings"
30
+ },
31
+ "main": "index.js",
32
+ "types": "index.d.ts",
33
+ "napi": {
34
+ "name": "node-webrtc-rust",
35
+ "triples": {
36
+ "defaults": true,
37
+ "additional": [
38
+ "aarch64-apple-darwin",
39
+ "aarch64-unknown-linux-gnu",
40
+ "aarch64-unknown-linux-musl",
41
+ "x86_64-unknown-linux-musl"
42
+ ]
43
+ }
44
+ },
45
+ "scripts": {
46
+ "build": "npm run build:local",
47
+ "build:local": "napi build --release && npm run copy:local-node",
48
+ "build:debug:local": "napi build && npm run copy:local-node",
49
+ "copy:local-node": "node scripts/copy-local-node.mjs",
50
+ "build:all": "napi build --platform --release",
51
+ "build:debug": "napi build --platform",
52
+ "artifacts": "napi artifacts",
53
+ "prepublishOnly": "napi prepublish -t npm",
54
+ "version": "napi version"
55
+ },
56
+ "license": "MIT",
57
+ "devDependencies": {
58
+ "@napi-rs/cli": "^2.18.0"
59
+ },
60
+ "optionalDependencies": {
61
+ "@node-webrtc-rust/bindings-win32-x64-msvc": "0.1.5",
62
+ "@node-webrtc-rust/bindings-darwin-x64": "0.1.5",
63
+ "@node-webrtc-rust/bindings-linux-x64-gnu": "0.1.5",
64
+ "@node-webrtc-rust/bindings-darwin-arm64": "0.1.5",
65
+ "@node-webrtc-rust/bindings-linux-arm64-gnu": "0.1.5",
66
+ "@node-webrtc-rust/bindings-linux-arm64-musl": "0.1.4",
67
+ "@node-webrtc-rust/bindings-linux-x64-musl": "0.1.5"
68
+ },
69
+ "engines": {
70
+ "node": ">=18"
71
+ },
72
+ "files": [
73
+ "index.js",
74
+ "index.d.ts"
75
+ ]
76
+ }