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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1606 -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 +314 -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 +73 -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 +309 -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 +68 -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 +338 -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 +86 -0
  225. package/src/specs/NativeVoltkitRtc.ts +180 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_globals","require","_createClient","_preflight","_index","_provider","_nativeSession","_localMedia","_components","_audio","_permissions","_native","_react","registerVoltkitGlobals"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAAA,QAAA,GAAAC,OAAA;AAKA,IAAAC,aAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAEA,IAAAI,SAAA,GAAAJ,OAAA;AAEA,IAAAK,cAAA,GAAAL,OAAA;AAEA,IAAAM,WAAA,GAAAN,OAAA;AAEA,IAAAO,WAAA,GAAAP,OAAA;AAEA,IAAAQ,MAAA,GAAAR,OAAA;AAEA,IAAAS,YAAA,GAAAT,OAAA;AAEA,IAAAU,OAAA,GAAAV,OAAA;AAGA,IAAAW,MAAA,GAAAX,OAAA;AAtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,IAAAY,+BAAsB,EAAC,CAAC;;AAuBxB;;AAqBA","ignoreList":[]}
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.localSessionOf = localSessionOf;
7
+ exports.useLocalMedia = useLocalMedia;
8
+ var _react = require("react");
9
+ var _client = require("@voltkit-rtc/client");
10
+ var _react2 = require("@voltkit-rtc/react");
11
+ var _errors = require("./errors.js");
12
+ var _permissions = require("./permissions.js");
13
+ var _globals = require("./globals.js");
14
+ var _index = require("./platform/index.js");
15
+ var _streams = require("./platform/streams.js");
16
+ var _devices = require("./platform/devices.js");
17
+ var _common = require("./platform/common.js");
18
+ /**
19
+ * Your camera, microphone and screen on React Native: @voltkit-rtc/react's useLocalMedia, plus switchCamera() and
20
+ * facingMode. publish() asks for the permissions it needs before any device opens -- a refusal rejects with
21
+ * `media-unavailable` `{ permission, status }`, the camera light never comes on and getUserMedia is never called --
22
+ * then opens the devices through react-native-webrtc at the size and frame rate it will send.
23
+ *
24
+ * What is captured here is released in the right order when the client stops it (platform/streams.ts): the app never
25
+ * releases a stream or track it got from publish().
26
+ */
27
+
28
+ /** A camera's or microphone's constraints, as the client declares them (this package compiles without the DOM library). */
29
+
30
+ // --------------------------------------------------------------------------------------- what only events tell
31
+
32
+ /**
33
+ * Per client: the screen being shared (only events tell it) and a signal for what changes without an event (publish,
34
+ * a camera switch). Recorded while held: the provider holds its client's for as long as it has the client.
35
+ */
36
+ class LocalSession {
37
+ screen = null;
38
+ listeners = new Set();
39
+ holders = 0;
40
+ stopListening = null;
41
+ constructor(client) {
42
+ this.client = client;
43
+ }
44
+ hold() {
45
+ if (this.holders++ === 0) this.stopListening = this.listen();
46
+ let held = true;
47
+ return () => {
48
+ if (!held) return;
49
+ held = false;
50
+ if (--this.holders === 0) {
51
+ this.stopListening?.();
52
+ this.stopListening = null;
53
+ }
54
+ };
55
+ }
56
+ subscribe(listener) {
57
+ this.listeners.add(listener);
58
+ return () => {
59
+ this.listeners.delete(listener);
60
+ };
61
+ }
62
+ changed() {
63
+ for (const listener of [...this.listeners]) listener();
64
+ }
65
+ listen() {
66
+ const client = this.client;
67
+ const offs = [client.on('screenShareStarted', ({
68
+ stream
69
+ }) => {
70
+ // The client's stream type is the web's; on React Native it is react-native-webrtc's stream.
71
+ this.screen = stream;
72
+ this.changed();
73
+ }), client.on('screenShareEnded', () => this.endScreen()), client.on('connectionStateChanged', ({
74
+ state
75
+ }) => {
76
+ if (state === 'closed') this.endScreen();
77
+ })];
78
+ return () => {
79
+ for (const off of offs) off();
80
+ };
81
+ }
82
+ endScreen() {
83
+ if (!this.screen) return;
84
+ this.screen = null;
85
+ this.changed();
86
+ }
87
+ }
88
+ const sessions = new WeakMap();
89
+ function localSessionOf(client) {
90
+ let session = sessions.get(client);
91
+ if (!session) {
92
+ session = new LocalSession(client);
93
+ sessions.set(client, session);
94
+ }
95
+ return session;
96
+ }
97
+
98
+ // ------------------------------------------------------------------------------------------------- the state
99
+
100
+ const EVENTS = ['localMediaChanged', 'localStreamChanged', 'screenShareStarted', 'screenShareEnded', 'joined', 'connectionStateChanged', 'error'];
101
+ const FALLBACK = Object.freeze({
102
+ stream: null,
103
+ publishing: false,
104
+ micEnabled: false,
105
+ camEnabled: false,
106
+ audioQuality: 'std',
107
+ videoQuality: _client.DEFAULT_MEDIA_PERMISSIONS.maxVideoQuality,
108
+ videoFrameRate: 30,
109
+ screenSharing: false,
110
+ screenStream: null,
111
+ permissions: _client.DEFAULT_MEDIA_PERMISSIONS,
112
+ facingMode: null
113
+ });
114
+ function facingOf(client) {
115
+ const settings = (0, _common.localStream)(client)?.getVideoTracks()[0]?.getSettings();
116
+ const facing = settings?.facingMode;
117
+ return facing === 'user' || facing === 'environment' ? facing : null;
118
+ }
119
+ function read(client, session) {
120
+ return {
121
+ stream: (0, _common.localStream)(client),
122
+ publishing: client.publishing,
123
+ micEnabled: client.micEnabled,
124
+ camEnabled: client.camEnabled,
125
+ audioQuality: client.audioQuality,
126
+ videoQuality: client.videoQuality,
127
+ videoFrameRate: client.videoFrameRate,
128
+ screenSharing: session.screen !== null,
129
+ screenStream: session.screen,
130
+ permissions: client.mediaPermissions,
131
+ facingMode: facingOf(client)
132
+ };
133
+ }
134
+ function sameFields(a, b) {
135
+ const keys = Object.keys(a);
136
+ return keys.length === Object.keys(b).length && keys.every(key => Object.is(a[key], b[key]));
137
+ }
138
+
139
+ /** The local state of `client`, read again after the events that change it and the calls that emit none. */
140
+ function localSource(client) {
141
+ const session = localSessionOf(client);
142
+ let version = 0;
143
+ let cache = null;
144
+ return {
145
+ subscribe(onChange) {
146
+ const changed = () => {
147
+ version += 1;
148
+ onChange();
149
+ };
150
+ const offs = EVENTS.map(event => client.on(event, changed));
151
+ offs.push(session.hold(), session.subscribe(changed));
152
+ version += 1;
153
+ return () => {
154
+ for (const off of offs) off();
155
+ };
156
+ },
157
+ getSnapshot() {
158
+ if (cache?.version === version) return cache.value;
159
+ const next = read(client, session);
160
+ if (cache) {
161
+ // `mediaPermissions` is a new object on every read.
162
+ const permissions = sameFields(cache.value.permissions, next.permissions) ? cache.value.permissions : next.permissions;
163
+ const settled = {
164
+ ...next,
165
+ permissions
166
+ };
167
+ const value = sameFields(cache.value, settled) ? cache.value : settled;
168
+ cache = {
169
+ version,
170
+ value
171
+ };
172
+ return value;
173
+ }
174
+ cache = {
175
+ version,
176
+ value: next
177
+ };
178
+ return next;
179
+ }
180
+ };
181
+ }
182
+ const noSubscription = () => () => undefined;
183
+ const fallback = () => FALLBACK;
184
+
185
+ /** Your camera, microphone and screen: what is published, and the calls that change it. */
186
+ function useLocalMedia() {
187
+ const client = (0, _react2.useVoltkitClient)();
188
+ const source = (0, _react.useMemo)(() => client ? localSource(client) : null, [client]);
189
+ const state = (0, _react.useSyncExternalStore)(source ? source.subscribe : noSubscription, source ? source.getSnapshot : fallback, fallback);
190
+ const actions = (0, _react.useMemo)(() => localActions(client), [client]);
191
+ return (0, _react.useMemo)(() => ({
192
+ ...state,
193
+ ...actions
194
+ }), [state, actions]);
195
+ }
196
+ function localActions(client) {
197
+ async function call(task) {
198
+ if (!client) throw new _client.RpcError('not-connected', 'no client yet: call this inside a VoltkitProvider that has one');
199
+ try {
200
+ return await task(client);
201
+ } finally {
202
+ // publish(), a camera switch and the quality changes emit no event: read again.
203
+ localSessionOf(client).changed();
204
+ }
205
+ }
206
+ return {
207
+ publish: (options = {}) => call(c => publishDevices(c, options)),
208
+ unpublish: () => call(c => c.unpublish()),
209
+ setMicEnabled: on => call(c => c.setMicEnabled(on)),
210
+ setCamEnabled: on => call(c => c.setCamEnabled(on)),
211
+ setAudioQuality: quality => call(c => c.setAudioQuality(quality)),
212
+ setVideoQuality: quality => call(async c => {
213
+ await raiseCapture(c, quality);
214
+ return c.setVideoQuality(quality);
215
+ }),
216
+ setVideoFrameRate: frameRate => call(c => c.setVideoFrameRate(frameRate)),
217
+ switchCamera: () => call(c => switchCamera(c)),
218
+ startScreenShare: options => call(async c => await c.publishScreen(options)),
219
+ stopScreenShare: () => call(c => c.unpublishScreen())
220
+ };
221
+ }
222
+
223
+ // ----------------------------------------------------------------------------------------------------- publish
224
+
225
+ /** Clients with a publish() between asking for permissions and publishing. */
226
+ const publishing = new WeakSet();
227
+ async function publishDevices(client, options) {
228
+ // facingMode is a capture choice, not a publish option.
229
+ const {
230
+ audio = true,
231
+ video = true,
232
+ facingMode: _facingMode,
233
+ ...publishOptions
234
+ } = options;
235
+ if (audio === false && video === false) throw new TypeError('publish: ask for audio, video or both');
236
+ // Everything that would refuse the publish is checked before a permission is asked for or a device opens.
237
+ if (client.connectionState !== 'connected') throw new _client.RpcError('not-connected', 'connect before publishing');
238
+ const role = client.info?.role;
239
+ if (role !== 'host' && role !== 'cohost') throw new _client.RpcError('forbidden', 'only hosts and cohosts can publish');
240
+ if (publishing.has(client) || (0, _common.localStream)(client)?.getTracks().some(track => track.readyState === 'live')) {
241
+ throw new _client.RpcError('source-already-published', 'already publishing: unpublish() first');
242
+ }
243
+ const permissions = client.mediaPermissions;
244
+ if (audio !== false && !permissions.audio) throw new _client.RpcError('media-disabled', 'audio is switched off for this project');
245
+ if (video !== false && !permissions.video) throw new _client.RpcError('media-disabled', 'video is switched off for this project');
246
+ if (!(0, _globals.registerVoltkitGlobals)()) throw (0, _errors.webrtcMissing)();
247
+ publishing.add(client);
248
+ try {
249
+ const kinds = [];
250
+ if (video !== false) kinds.push('camera');
251
+ if (audio !== false) kinds.push('microphone');
252
+ const statuses = await (0, _permissions.requestMediaPermissions)(kinds);
253
+ for (const kind of kinds) {
254
+ const status = statuses[kind];
255
+ if (status !== 'granted') throw (0, _errors.permissionRefused)(kind, status);
256
+ }
257
+ // The dialog stays up as long as the user thinks: the call may be over by now (the screen unmounted, a kick, the
258
+ // room closed). Nothing opens a device for a session that is gone.
259
+ if (client.connectionState !== 'connected') throw new _client.RpcError('not-connected', 'the session ended while the permissions were being asked for');
260
+ const constraints = captureConstraints(options, permissions);
261
+ const platform = (0, _index.reactNativePlatform)();
262
+ const stream = await platform.getUserMedia(constraints);
263
+ try {
264
+ // With the constraints, a reconnect that finds the devices gone opens them again.
265
+ await client.publish(stream, constraints, publishOptions);
266
+ } catch (error) {
267
+ // Released here, the stream before its tracks (platform/streams.ts): the client kept none of it.
268
+ const book = (0, _streams.streamBook)();
269
+ const tracks = stream.getTracks();
270
+ book.release(stream);
271
+ for (const track of tracks) book.stop(track);
272
+ throw error;
273
+ }
274
+ } finally {
275
+ publishing.delete(client);
276
+ }
277
+ }
278
+
279
+ /** Each quality's 16:9 frame, as the SDK sends it. */
280
+ const FRAMES = {
281
+ '1080p': {
282
+ width: 1920,
283
+ height: 1080
284
+ },
285
+ '720p': {
286
+ width: 1280,
287
+ height: 720
288
+ },
289
+ '480p': {
290
+ width: 854,
291
+ height: 480
292
+ }
293
+ };
294
+
295
+ /** What publish() captures: never more than the project allows, which the SDK would only scale down. */
296
+ function captureConstraints(options, permissions) {
297
+ const {
298
+ audio = true,
299
+ video = true
300
+ } = options;
301
+ return {
302
+ audio: audio === true ? microphone(options.audioQuality === 'hd' && permissions.audioQualityMax === 'hd') : audio,
303
+ video: video === true ? camera(options, permissions) : video
304
+ };
305
+ }
306
+ function microphone(hd) {
307
+ const constraints = {
308
+ echoCancellation: true,
309
+ noiseSuppression: true,
310
+ autoGainControl: true
311
+ };
312
+ // HD is stereo, which needs a capture with two channels to send.
313
+ if (hd) constraints.channelCount = {
314
+ ideal: 2
315
+ };
316
+ return constraints;
317
+ }
318
+ function camera(options, permissions) {
319
+ const fps = options.frameRate === 60 && permissions.maxFrameRate === 60 ? 60 : 30;
320
+ const {
321
+ width,
322
+ height
323
+ } = FRAMES[(0, _client.allowedQuality)(options.quality, {
324
+ maxQuality: permissions.maxVideoQuality
325
+ })];
326
+ return {
327
+ width: {
328
+ ideal: width
329
+ },
330
+ height: {
331
+ ideal: height
332
+ },
333
+ frameRate: {
334
+ ideal: fps,
335
+ max: fps
336
+ },
337
+ facingMode: options.facingMode ?? 'user'
338
+ };
339
+ }
340
+
341
+ /** The SDK sends no bigger than the camera's picture: a switch to a higher quality raises the capture first. Best effort. */
342
+ async function raiseCapture(client, quality) {
343
+ const track = (0, _common.localStream)(client)?.getVideoTracks()[0];
344
+ if (!track || track.readyState !== 'live') return;
345
+ const frame = FRAMES[(0, _client.allowedQuality)(quality, {
346
+ maxQuality: client.mediaPermissions.maxVideoQuality
347
+ })];
348
+ const {
349
+ width = 0,
350
+ height = 0
351
+ } = track.getSettings();
352
+ if (Math.max(width, height) >= frame.width && Math.min(width, height) >= frame.height) return;
353
+ try {
354
+ await track.applyConstraints({
355
+ ...track.getConstraints(),
356
+ width: {
357
+ ideal: frame.width
358
+ },
359
+ height: {
360
+ ideal: frame.height
361
+ }
362
+ });
363
+ } catch {
364
+ // The camera keeps its size; the SDK sends what it has.
365
+ }
366
+ }
367
+
368
+ // ------------------------------------------------------------------------------------------------ switchCamera
369
+
370
+ /** Camera switches in turn per client: each one reads where the last one left the camera. */
371
+ const switching = new WeakMap();
372
+ function switchCamera(client) {
373
+ const previous = switching.get(client) ?? Promise.resolve();
374
+ const next = previous.catch(() => undefined).then(() => flipCamera(client));
375
+ switching.set(client, next);
376
+ return next;
377
+ }
378
+ async function flipCamera(client) {
379
+ const track = (0, _common.localStream)(client)?.getVideoTracks()[0];
380
+ if (!track || track.readyState !== 'live') {
381
+ throw new _client.RpcError('media-unavailable', 'switchCamera: no camera is being published');
382
+ }
383
+ const settings = track.getSettings();
384
+ const cameras = await (0, _devices.listCameras)();
385
+ const current = cameras.find(c => c.deviceId === settings.deviceId);
386
+ const front = current ? current.facing === 'front' : settings.facingMode !== 'environment';
387
+ const target = cameras.find(c => c.deviceId !== settings.deviceId && c.facing === 'front' !== front);
388
+ if (!target) return front;
389
+ await client.switchDevice('videoinput', target.deviceId);
390
+ return target.facing === 'front';
391
+ }
392
+ //# sourceMappingURL=local-media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_client","_react2","_errors","_permissions","_globals","_index","_streams","_devices","_common","LocalSession","screen","listeners","Set","holders","stopListening","constructor","client","hold","listen","held","subscribe","listener","add","delete","changed","offs","on","stream","endScreen","state","off","sessions","WeakMap","localSessionOf","session","get","set","EVENTS","FALLBACK","Object","freeze","publishing","micEnabled","camEnabled","audioQuality","videoQuality","DEFAULT_MEDIA_PERMISSIONS","maxVideoQuality","videoFrameRate","screenSharing","screenStream","permissions","facingMode","facingOf","settings","localStream","getVideoTracks","getSettings","facing","read","mediaPermissions","sameFields","a","b","keys","length","every","key","is","localSource","version","cache","onChange","map","event","push","getSnapshot","value","next","settled","noSubscription","undefined","fallback","useLocalMedia","useVoltkitClient","source","useMemo","useSyncExternalStore","actions","localActions","call","task","RpcError","publish","options","c","publishDevices","unpublish","setMicEnabled","setCamEnabled","setAudioQuality","quality","setVideoQuality","raiseCapture","setVideoFrameRate","frameRate","switchCamera","startScreenShare","publishScreen","stopScreenShare","unpublishScreen","WeakSet","audio","video","_facingMode","publishOptions","TypeError","connectionState","role","info","has","getTracks","some","track","readyState","registerVoltkitGlobals","webrtcMissing","kinds","statuses","requestMediaPermissions","kind","status","permissionRefused","constraints","captureConstraints","platform","reactNativePlatform","getUserMedia","error","book","streamBook","tracks","release","stop","FRAMES","width","height","microphone","audioQualityMax","camera","hd","echoCancellation","noiseSuppression","autoGainControl","channelCount","ideal","fps","maxFrameRate","allowedQuality","maxQuality","max","frame","Math","min","applyConstraints","getConstraints","switching","previous","Promise","resolve","catch","then","flipCamera","cameras","listCameras","current","find","deviceId","front","target","switchDevice"],"sourceRoot":"../../src","sources":["local-media.ts"],"mappings":"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","ignoreList":[]}