@voltkit-rtc/react-native 0.0.0-stage → 0.1.1

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 (225) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1608 -2
  4. package/android/build.gradle +70 -0
  5. package/android/consumer-rules.pro +21 -0
  6. package/android/src/main/AndroidManifest.xml +25 -0
  7. package/android/src/main/java/com/voltkit/rtc/reactnative/AppVisibility.kt +67 -0
  8. package/android/src/main/java/com/voltkit/rtc/reactnative/AudioDevices.kt +67 -0
  9. package/android/src/main/java/com/voltkit/rtc/reactnative/AudioRouter.kt +487 -0
  10. package/android/src/main/java/com/voltkit/rtc/reactnative/CallServiceTypes.kt +120 -0
  11. package/android/src/main/java/com/voltkit/rtc/reactnative/NativeTimers.kt +106 -0
  12. package/android/src/main/java/com/voltkit/rtc/reactnative/NetworkWatch.kt +120 -0
  13. package/android/src/main/java/com/voltkit/rtc/reactnative/OutputChoice.kt +65 -0
  14. package/android/src/main/java/com/voltkit/rtc/reactnative/RtcConfig.kt +83 -0
  15. package/android/src/main/java/com/voltkit/rtc/reactnative/ScoLink.kt +61 -0
  16. package/android/src/main/java/com/voltkit/rtc/reactnative/VoltkitCallService.kt +287 -0
  17. package/android/src/main/java/com/voltkit/rtc/reactnative/VoltkitRtcInitProvider.kt +215 -0
  18. package/android/src/main/java/com/voltkit/rtc/reactnative/VoltkitRtcModule.kt +313 -0
  19. package/android/src/main/java/com/voltkit/rtc/reactnative/VoltkitRtcPackage.kt +30 -0
  20. package/android/src/main/res/drawable/voltkit_rtc_default_call_icon.xml +15 -0
  21. package/android/src/main/res/raw/voltkit_rtc_keep.xml +7 -0
  22. package/app.plugin.js +17 -0
  23. package/lib/commonjs/audio.js +215 -0
  24. package/lib/commonjs/audio.js.map +1 -0
  25. package/lib/commonjs/components.js +207 -0
  26. package/lib/commonjs/components.js.map +1 -0
  27. package/lib/commonjs/create-client.js +47 -0
  28. package/lib/commonjs/create-client.js.map +1 -0
  29. package/lib/commonjs/errors.js +99 -0
  30. package/lib/commonjs/errors.js.map +1 -0
  31. package/lib/commonjs/globals.js +61 -0
  32. package/lib/commonjs/globals.js.map +1 -0
  33. package/lib/commonjs/index.js +234 -0
  34. package/lib/commonjs/index.js.map +1 -0
  35. package/lib/commonjs/local-media.js +392 -0
  36. package/lib/commonjs/local-media.js.map +1 -0
  37. package/lib/commonjs/native-session.js +365 -0
  38. package/lib/commonjs/native-session.js.map +1 -0
  39. package/lib/commonjs/native.js +99 -0
  40. package/lib/commonjs/native.js.map +1 -0
  41. package/lib/commonjs/package.json +1 -0
  42. package/lib/commonjs/permissions.js +166 -0
  43. package/lib/commonjs/permissions.js.map +1 -0
  44. package/lib/commonjs/platform/android.js +126 -0
  45. package/lib/commonjs/platform/android.js.map +1 -0
  46. package/lib/commonjs/platform/common.js +138 -0
  47. package/lib/commonjs/platform/common.js.map +1 -0
  48. package/lib/commonjs/platform/devices.js +151 -0
  49. package/lib/commonjs/platform/devices.js.map +1 -0
  50. package/lib/commonjs/platform/index.js +35 -0
  51. package/lib/commonjs/platform/index.js.map +1 -0
  52. package/lib/commonjs/platform/ios.js +54 -0
  53. package/lib/commonjs/platform/ios.js.map +1 -0
  54. package/lib/commonjs/platform/streams.js +273 -0
  55. package/lib/commonjs/platform/streams.js.map +1 -0
  56. package/lib/commonjs/platform/timers.js +71 -0
  57. package/lib/commonjs/platform/timers.js.map +1 -0
  58. package/lib/commonjs/platform/visibility.js +60 -0
  59. package/lib/commonjs/platform/visibility.js.map +1 -0
  60. package/lib/commonjs/preflight.js +77 -0
  61. package/lib/commonjs/preflight.js.map +1 -0
  62. package/lib/commonjs/provider.js +75 -0
  63. package/lib/commonjs/provider.js.map +1 -0
  64. package/lib/commonjs/specs/NativeVoltkitRtc.js +29 -0
  65. package/lib/commonjs/specs/NativeVoltkitRtc.js.map +1 -0
  66. package/lib/module/audio.js +207 -0
  67. package/lib/module/audio.js.map +1 -0
  68. package/lib/module/components.js +200 -0
  69. package/lib/module/components.js.map +1 -0
  70. package/lib/module/create-client.js +42 -0
  71. package/lib/module/create-client.js.map +1 -0
  72. package/lib/module/errors.js +87 -0
  73. package/lib/module/errors.js.map +1 -0
  74. package/lib/module/globals.js +53 -0
  75. package/lib/module/globals.js.map +1 -0
  76. package/lib/module/index.js +33 -0
  77. package/lib/module/index.js.map +1 -0
  78. package/lib/module/local-media.js +387 -0
  79. package/lib/module/local-media.js.map +1 -0
  80. package/lib/module/native-session.js +360 -0
  81. package/lib/module/native-session.js.map +1 -0
  82. package/lib/module/native.js +87 -0
  83. package/lib/module/native.js.map +1 -0
  84. package/lib/module/package.json +1 -0
  85. package/lib/module/permissions.js +160 -0
  86. package/lib/module/permissions.js.map +1 -0
  87. package/lib/module/platform/android.js +122 -0
  88. package/lib/module/platform/android.js.map +1 -0
  89. package/lib/module/platform/common.js +128 -0
  90. package/lib/module/platform/common.js.map +1 -0
  91. package/lib/module/platform/devices.js +142 -0
  92. package/lib/module/platform/devices.js.map +1 -0
  93. package/lib/module/platform/index.js +24 -0
  94. package/lib/module/platform/index.js.map +1 -0
  95. package/lib/module/platform/ios.js +49 -0
  96. package/lib/module/platform/ios.js.map +1 -0
  97. package/lib/module/platform/streams.js +268 -0
  98. package/lib/module/platform/streams.js.map +1 -0
  99. package/lib/module/platform/timers.js +67 -0
  100. package/lib/module/platform/timers.js.map +1 -0
  101. package/lib/module/platform/visibility.js +54 -0
  102. package/lib/module/platform/visibility.js.map +1 -0
  103. package/lib/module/preflight.js +72 -0
  104. package/lib/module/preflight.js.map +1 -0
  105. package/lib/module/provider.js +70 -0
  106. package/lib/module/provider.js.map +1 -0
  107. package/lib/module/specs/NativeVoltkitRtc.js +37 -0
  108. package/lib/module/specs/NativeVoltkitRtc.js.map +1 -0
  109. package/lib/typescript/commonjs/audio.d.ts +58 -0
  110. package/lib/typescript/commonjs/audio.d.ts.map +1 -0
  111. package/lib/typescript/commonjs/components.d.ts +58 -0
  112. package/lib/typescript/commonjs/components.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/create-client.d.ts +35 -0
  114. package/lib/typescript/commonjs/create-client.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/errors.d.ts +34 -0
  116. package/lib/typescript/commonjs/errors.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/globals.d.ts +16 -0
  118. package/lib/typescript/commonjs/globals.d.ts.map +1 -0
  119. package/lib/typescript/commonjs/index.d.ts +24 -0
  120. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  121. package/lib/typescript/commonjs/local-media.d.ts +86 -0
  122. package/lib/typescript/commonjs/local-media.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/native-session.d.ts +38 -0
  124. package/lib/typescript/commonjs/native-session.d.ts.map +1 -0
  125. package/lib/typescript/commonjs/native.d.ts +18 -0
  126. package/lib/typescript/commonjs/native.d.ts.map +1 -0
  127. package/lib/typescript/commonjs/package.json +1 -0
  128. package/lib/typescript/commonjs/permissions.d.ts +30 -0
  129. package/lib/typescript/commonjs/permissions.d.ts.map +1 -0
  130. package/lib/typescript/commonjs/platform/android.d.ts +4 -0
  131. package/lib/typescript/commonjs/platform/android.d.ts.map +1 -0
  132. package/lib/typescript/commonjs/platform/common.d.ts +101 -0
  133. package/lib/typescript/commonjs/platform/common.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/platform/devices.d.ts +42 -0
  135. package/lib/typescript/commonjs/platform/devices.d.ts.map +1 -0
  136. package/lib/typescript/commonjs/platform/index.d.ts +6 -0
  137. package/lib/typescript/commonjs/platform/index.d.ts.map +1 -0
  138. package/lib/typescript/commonjs/platform/ios.d.ts +4 -0
  139. package/lib/typescript/commonjs/platform/ios.d.ts.map +1 -0
  140. package/lib/typescript/commonjs/platform/streams.d.ts +82 -0
  141. package/lib/typescript/commonjs/platform/streams.d.ts.map +1 -0
  142. package/lib/typescript/commonjs/platform/timers.d.ts +19 -0
  143. package/lib/typescript/commonjs/platform/timers.d.ts.map +1 -0
  144. package/lib/typescript/commonjs/platform/visibility.d.ts +11 -0
  145. package/lib/typescript/commonjs/platform/visibility.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/preflight.d.ts +19 -0
  147. package/lib/typescript/commonjs/preflight.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/provider.d.ts +35 -0
  149. package/lib/typescript/commonjs/provider.d.ts.map +1 -0
  150. package/lib/typescript/commonjs/specs/NativeVoltkitRtc.d.ts +157 -0
  151. package/lib/typescript/commonjs/specs/NativeVoltkitRtc.d.ts.map +1 -0
  152. package/lib/typescript/module/audio.d.ts +58 -0
  153. package/lib/typescript/module/audio.d.ts.map +1 -0
  154. package/lib/typescript/module/components.d.ts +58 -0
  155. package/lib/typescript/module/components.d.ts.map +1 -0
  156. package/lib/typescript/module/create-client.d.ts +35 -0
  157. package/lib/typescript/module/create-client.d.ts.map +1 -0
  158. package/lib/typescript/module/errors.d.ts +34 -0
  159. package/lib/typescript/module/errors.d.ts.map +1 -0
  160. package/lib/typescript/module/globals.d.ts +16 -0
  161. package/lib/typescript/module/globals.d.ts.map +1 -0
  162. package/lib/typescript/module/index.d.ts +24 -0
  163. package/lib/typescript/module/index.d.ts.map +1 -0
  164. package/lib/typescript/module/local-media.d.ts +86 -0
  165. package/lib/typescript/module/local-media.d.ts.map +1 -0
  166. package/lib/typescript/module/native-session.d.ts +38 -0
  167. package/lib/typescript/module/native-session.d.ts.map +1 -0
  168. package/lib/typescript/module/native.d.ts +18 -0
  169. package/lib/typescript/module/native.d.ts.map +1 -0
  170. package/lib/typescript/module/package.json +1 -0
  171. package/lib/typescript/module/permissions.d.ts +30 -0
  172. package/lib/typescript/module/permissions.d.ts.map +1 -0
  173. package/lib/typescript/module/platform/android.d.ts +4 -0
  174. package/lib/typescript/module/platform/android.d.ts.map +1 -0
  175. package/lib/typescript/module/platform/common.d.ts +101 -0
  176. package/lib/typescript/module/platform/common.d.ts.map +1 -0
  177. package/lib/typescript/module/platform/devices.d.ts +42 -0
  178. package/lib/typescript/module/platform/devices.d.ts.map +1 -0
  179. package/lib/typescript/module/platform/index.d.ts +6 -0
  180. package/lib/typescript/module/platform/index.d.ts.map +1 -0
  181. package/lib/typescript/module/platform/ios.d.ts +4 -0
  182. package/lib/typescript/module/platform/ios.d.ts.map +1 -0
  183. package/lib/typescript/module/platform/streams.d.ts +82 -0
  184. package/lib/typescript/module/platform/streams.d.ts.map +1 -0
  185. package/lib/typescript/module/platform/timers.d.ts +19 -0
  186. package/lib/typescript/module/platform/timers.d.ts.map +1 -0
  187. package/lib/typescript/module/platform/visibility.d.ts +11 -0
  188. package/lib/typescript/module/platform/visibility.d.ts.map +1 -0
  189. package/lib/typescript/module/preflight.d.ts +19 -0
  190. package/lib/typescript/module/preflight.d.ts.map +1 -0
  191. package/lib/typescript/module/provider.d.ts +35 -0
  192. package/lib/typescript/module/provider.d.ts.map +1 -0
  193. package/lib/typescript/module/specs/NativeVoltkitRtc.d.ts +157 -0
  194. package/lib/typescript/module/specs/NativeVoltkitRtc.d.ts.map +1 -0
  195. package/package.json +140 -4
  196. package/plugin/build/android.d.ts +36 -0
  197. package/plugin/build/android.js +265 -0
  198. package/plugin/build/index.d.ts +9 -0
  199. package/plugin/build/index.js +54 -0
  200. package/plugin/build/ios.d.ts +4 -0
  201. package/plugin/build/ios.js +43 -0
  202. package/plugin/build/options.d.ts +93 -0
  203. package/plugin/build/options.js +140 -0
  204. package/react-native.config.js +11 -0
  205. package/src/audio.ts +221 -0
  206. package/src/components.tsx +233 -0
  207. package/src/create-client.ts +53 -0
  208. package/src/errors.ts +81 -0
  209. package/src/globals.ts +54 -0
  210. package/src/index.ts +95 -0
  211. package/src/local-media.ts +420 -0
  212. package/src/native-session.tsx +384 -0
  213. package/src/native.ts +84 -0
  214. package/src/permissions.ts +173 -0
  215. package/src/platform/android.ts +128 -0
  216. package/src/platform/common.ts +157 -0
  217. package/src/platform/devices.ts +148 -0
  218. package/src/platform/index.ts +22 -0
  219. package/src/platform/ios.ts +48 -0
  220. package/src/platform/streams.ts +285 -0
  221. package/src/platform/timers.ts +72 -0
  222. package/src/platform/visibility.ts +59 -0
  223. package/src/preflight.ts +60 -0
  224. package/src/provider.tsx +88 -0
  225. package/src/specs/NativeVoltkitRtc.ts +180 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,121 @@
1
+ # Changelog
2
+
3
+ ## 0.1.1
4
+
5
+ 2026-10-27. Two fixes from the testers' report on 0.1.0 (RN010-1, RN010-2). Peer dependency `@voltkit-rtc/client`
6
+ `>=0.9.13 <0.10.0` (0.9.13 fixes C0912-1 and C0912-2 in the client this package runs: a noise-suppressed microphone
7
+ back from the background, and a repeated switch in the same direction); the other peers are unchanged. The native code
8
+ is the same, but build the app again after upgrading: its version check reads this package's version.
9
+
10
+ - **The call service follows the client's own background camera setting** (RN010-1). A client the app made with
11
+ `createClient(wsUrl, token, { background: { pauseCamera: false } })` (a live streamer) and passed as the provider's
12
+ `client` prop was run with the provider's default, `pauseCamera: true`: the service never asked for the `camera`
13
+ foreground service type, and Android cut the camera in the background; the reverse mix asked for a camera type the
14
+ app did not need. The service reads `pauseCameraInBackground` from the client it runs for, since the client is what
15
+ pauses the camera; the provider's `background.pauseCamera` stands in only when the client's options cannot be read.
16
+ A client the provider makes is unchanged.
17
+ - **One `onError` per call-service failure** (RN010-2). A refused start or update was reported twice: the native side
18
+ tells a `failed` event and then rejects the call, and both reached `onError`. A `failed` event while a start or update
19
+ is in flight is its rejection's twin and is reported once; a failure Android reports on its own, with nothing in
20
+ flight, still reaches `onError`.
21
+ - **A client whose state cannot be read never stops the call service** (the verifier's F3 on this release). A client
22
+ wrapped so that reading its options throws (a logging or forbidding `Proxy`) is read like one without options: the
23
+ provider's `background.pauseCamera` stands in, and nothing is reported. A client whose state cannot be read at all
24
+ (a read of `local` that throws) is left out of the service, said once through `onError` as `media-unavailable`
25
+ `{ feature: 'callService' }`, and never keeps the other calls in the app from theirs; before, the throw escaped the
26
+ provider's effect and every later decision for every call failed the same way.
27
+
28
+ ## 0.1.0
29
+
30
+ 2026-10-27. The first release: VoltKit RTC calls, audio rooms and live video in React Native, on Android, with iOS in
31
+ preview. Peer dependencies: `@voltkit-rtc/client` `>=0.9.12 <0.10.0`, `@voltkit-rtc/react` `^0.1.1`,
32
+ `react-native-webrtc` `^155.0.1`, `react` `>=19.1.0` and `react-native` `>=0.82.0` (the New Architecture); `expo`
33
+ `>=58` is optional, for the config plugin. Tested on Android (emulator, API 37.1); iOS in preview; earpiece and
34
+ Bluetooth routing tested in unit tests, not on hardware.
35
+
36
+ ### What ships
37
+
38
+ - **The React SDK's hooks, unchanged**, re-exported from `@voltkit-rtc/react` 0.1.1: `useVoltkitClient`, `useRoom`,
39
+ `useConnectionState`, `useParticipants`, `useRemoteTracks`, `useNetworkQuality`, `useWalletLow`, `useVoltkitEvent`,
40
+ `useActiveSpeakers`, `useAudioLevels`, `useCpuConstrained`, `useDevices`, `useIsSpeaking`, `useMediaWarnings`,
41
+ `usePublishFallback` and `useStreamFallback`, with the same type re-exports, so a React call screen ports by changing
42
+ the import and its markup. They run on `@voltkit-rtc/client` 0.9.12's injected platform layer
43
+ (`ClientOptions.platform`, this package's `reactNativePlatform()`) with mediasoup-client's `ReactNative106` handler:
44
+ capture, devices and audio routing, streams and their release order, the app's visibility from the process
45
+ lifecycle, the network coming back, and native timers for the client's own timers (the reconnect backoff, socket
46
+ liveness, sampling), which React Native's JavaScript timers cannot run in the background or with the screen off.
47
+ - **`VoltkitProvider`**: the React provider's props (the token hand-over, `client`, `connect`, the callbacks and the
48
+ StrictMode behaviour included), plus `audio` (the call audio: `speakerphone`, `manage`), `background`
49
+ (`pauseCamera`, default true; `pauseMic`, default false) and `callService` (`true`, `false`, or the notification's
50
+ `title`, `text` and `leaveLabel`). It makes its client with `reactNativeClientOptions`. Where react-native-webrtc's
51
+ native module is missing (Expo Go, an app not built again) it makes no client and reports `media-unavailable`
52
+ `{ reason: 'webrtc-missing' }` through `onError`; on Android without this package's native module, `native-missing`.
53
+ Nothing throws.
54
+ - **`useLocalMedia`**: the React SDK's, plus `switchCamera()` (front and back on the same track and producer, so
55
+ viewers see no gap; resolves to whether the front camera is in use) and `facingMode`. `publish()` asks for the
56
+ camera and microphone permissions before any device opens (a refusal rejects with `media-unavailable`
57
+ `{ permission, status }`, and the camera light never comes on), then captures through react-native-webrtc at the
58
+ frame and frame rate it will send, never more than the project allows. `startScreenShare()` goes through
59
+ react-native-webrtc's screen-capture consent on Android.
60
+ - **`VideoTrack`** on react-native-webrtc's `RTCView`: one native stream per track, shared by its views and released
61
+ before the connection it came on closes (react-native-webrtc 155 kills the app when a stream is released after its
62
+ track's connection has gone); `producerId` drives adaptive stream from the view's size and `visible`; `mirror`,
63
+ `objectFit`, `zOrder` and `onDimensionsChange`; a view with no frame after 3 s mounts its native view again
64
+ (react-native-webrtc issue 1611). **`AudioTrack`** sets one remote track's `volume` or `muted` and renders nothing:
65
+ React Native plays remote audio by itself.
66
+ - **Audio routing on Android**: `useAudioOutput()`, `setSpeakerphoneOn(on)` and `selectAudioOutput(deviceId)`, on a
67
+ port of the Android SDK's audio router: the loudspeaker, the earpiece, wired and USB headsets and Bluetooth
68
+ (`setCommunicationDevice` on Android 12 and later, SCO before); the call audio (mode, focus, routing) held from the
69
+ join to the close and shared by two clients, and put back as it was found; the `media` audio mode for listen-only
70
+ apps; the phone's own echo canceller and noise suppressor by default.
71
+ - **Calls in the background on Android**: the foreground service `VoltkitCallService`, declared by the app (the Expo
72
+ plugin's `android.callService`, default on, or a manifest block), started by the provider when the call connects
73
+ while the app is visible, with the types `microphone` or `mediaPlayback`, and `camera` and `mediaProjection` when the
74
+ app declares them; one notification for every call, with a Leave action; the call ends when the app is swiped away.
75
+ The camera pauses in the background and comes back with the app (`background.pauseCamera`); the microphone keeps
76
+ going unless `pauseMic`. `useCallService()` says whether it is declared, running, and with which types.
77
+ - **The network coming back, on Android**: the SDK watches the system's default network, so a reconnect waiting out
78
+ its backoff tries again as soon as a network is back, with the screen off too while the call service runs. It
79
+ reports the network 500 ms after Android's callback, and only if that network is still the default then: Android
80
+ hands the callback out before it has switched the app's routes to the new network (40 to 80 ms later on the API 37
81
+ emulator), and a connect made at once failed.
82
+ - **Permissions**: `requestMediaPermissions`, `checkMediaPermissions` and `usePermissions` for `camera`, `microphone`
83
+ and `notifications` (Android 13 and later), with `granted`, `denied` and `blocked` (Android's "never ask again"; on
84
+ iOS every refusal). The SDK's own captures afterwards (a reconnect, a switch) only check and never ask.
85
+ - **`preflight(wsUrl, token, options?)`** with this platform: it publishes the microphone after the join when its
86
+ permission is already granted, never asks for one, and never rejects.
87
+ - **`createClient`, `reactNativeClientOptions`, `reactNativePlatform`, `registerVoltkitGlobals`** (run on import; safe
88
+ without the native module) and **`SDK_VERSION`** (what `getDiagnostics()` reports; a warning in the log when the
89
+ app's native code was built from another version of the package).
90
+ - **The Expo config plugin** (`app.plugin.js`): `cameraPermission`, `microphonePermission`, `android.camera`,
91
+ `android.callService`, `android.callServiceCamera`, `android.screenShare`, `android.audioMode`,
92
+ `android.hardwareEchoCancellation`, `ios.backgroundAudio` and `ios.voip`. It writes the permissions, the call
93
+ service, the `in.voltkit.rtc.*` meta-data and `uses-feature android:required="false"` for the camera and microphone
94
+ features into the Android manifest, and the usage strings and background modes into Info.plist; the app's
95
+ `blockedPermissions` win, with a prebuild warning for a service that could not run; an unknown option stops prebuild
96
+ by name.
97
+ - **R8 consumer rules**: `-dontwarn org.webrtc.Dav1dDecoder$Natives`, which every release build with
98
+ react-native-webrtc 155.0.1 needs, so apps add no rule of their own.
99
+ - **Every frame reaches viewers**: react-native-webrtc's libwebrtc encodes a camera's simulcast layers with three
100
+ temporal layers whatever it is asked, so the platform tells the client to signal them (client 0.9.12's
101
+ `simulcastTemporalLayers`); signalled as one layer, the media server forwarded a quarter of the frames.
102
+ - **Errors**: every error this package raises is an `RpcError` with a code from the shared registry, with what is
103
+ missing in `data`: `{ permission, status }`, `{ reason: 'webrtc-missing' | 'native-missing' | <a capture error> }`,
104
+ `{ feature: 'callService' }`, `{ platform: 'ios', feature }`.
105
+
106
+ ### Known gaps in 0.1.0 (the conformance list)
107
+
108
+ - **iOS is a preview**: JavaScript only, with no native module of this package. The code is written for
109
+ react-native-webrtc's iOS side, but VoltKit has not compiled or run it on an iPhone or a simulator. Audio routing
110
+ (`setSpeakerphoneOn`, `selectAudioOutput`, `switchDevice('audiooutput', ...)`) rejects with `media-unavailable`
111
+ `{ platform: 'ios' }`, there is no call service (`useCallService().declared` is false), and `startScreenShare()`
112
+ rejects with `screen-share-unsupported`.
113
+ - **Screen sharing is Android only**, and goes out without the screen's sound.
114
+ - **No in-app music**: `publishMusic()` rejects with `music-unavailable`.
115
+ - **No device recording**: `startRecording()` rejects with `media-unavailable`.
116
+ - **No noise-suppression or video-effects processors**: they are browser-only in `@voltkit-rtc/client`.
117
+ - **`play(element)` and `autoplayFailed` do not apply** (remote audio plays by itself), and
118
+ **`StreamClient.prepareConnection`** does nothing here.
119
+ - **Earpiece and Bluetooth routing are tested in unit tests, not on hardware**: the emulator has only the
120
+ loudspeaker, and its microphone records silence, so publishing sound was checked by the bytes sent, not by level.
121
+ - **Xiaomi, Redmi and POCO battery savers** were not tested: the docs give general advice only.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 VoltKit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.