@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.
- package/README.md +69 -0
- package/index.d.ts +202 -0
- package/index.js +323 -0
- 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
|
+
}
|