react-native-webrtc-nitro 1.0.0 → 1.2.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 (67) hide show
  1. package/android/src/main/java/com/webrtc/HybridCamera.kt +0 -1
  2. package/android/src/main/java/com/webrtc/HybridMicrophone.kt +0 -1
  3. package/android/src/main/java/com/webrtc/HybridPermissions.kt +95 -0
  4. package/cpp/FFmpeg/Muxer.cpp +1 -1
  5. package/cpp/Hybrid/HybridMediaDevices.cpp +23 -19
  6. package/cpp/Hybrid/HybridMediaRecorder.cpp +118 -0
  7. package/cpp/Hybrid/HybridMediaRecorder.hpp +36 -0
  8. package/cpp/__tests__/FFmpeg/testMuxer.cpp +18 -32
  9. package/ios/HybridCamera.swift +1 -3
  10. package/ios/HybridMicrophone.swift +1 -3
  11. package/ios/HybridPermissions.swift +63 -0
  12. package/lib/commonjs/index.js +22 -0
  13. package/lib/commonjs/index.js.map +1 -1
  14. package/lib/commonjs/specs/MediaRecorder.nitro.js +16 -0
  15. package/lib/commonjs/specs/MediaRecorder.nitro.js.map +1 -0
  16. package/lib/commonjs/specs/Permissions.nitro.js +9 -0
  17. package/lib/commonjs/specs/Permissions.nitro.js.map +1 -0
  18. package/lib/module/index.js +2 -0
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/module/specs/MediaRecorder.nitro.js +13 -0
  21. package/lib/module/specs/MediaRecorder.nitro.js.map +1 -0
  22. package/lib/module/specs/Permissions.nitro.js +6 -0
  23. package/lib/module/specs/Permissions.nitro.js.map +1 -0
  24. package/lib/typescript/src/index.d.ts +2 -0
  25. package/lib/typescript/src/index.d.ts.map +1 -1
  26. package/lib/typescript/src/specs/MediaRecorder.nitro.d.ts +17 -0
  27. package/lib/typescript/src/specs/MediaRecorder.nitro.d.ts.map +1 -0
  28. package/lib/typescript/src/specs/Permissions.nitro.d.ts +17 -0
  29. package/lib/typescript/src/specs/Permissions.nitro.d.ts.map +1 -0
  30. package/nitro.json +7 -0
  31. package/nitrogen/generated/android/Webrtc+autolinking.cmake +3 -0
  32. package/nitrogen/generated/android/WebrtcOnLoad.cpp +20 -0
  33. package/nitrogen/generated/android/c++/JHybridPermissionsSpec.cpp +91 -0
  34. package/nitrogen/generated/android/c++/JHybridPermissionsSpec.hpp +66 -0
  35. package/nitrogen/generated/android/c++/JPermissionDescriptor.hpp +58 -0
  36. package/nitrogen/generated/android/c++/JPermissionName.hpp +59 -0
  37. package/nitrogen/generated/android/c++/JPermissionState.hpp +62 -0
  38. package/nitrogen/generated/android/kotlin/com/margelo/nitro/webrtc/HybridPermissionsSpec.kt +62 -0
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/webrtc/PermissionDescriptor.kt +38 -0
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/webrtc/PermissionName.kt +21 -0
  41. package/nitrogen/generated/android/kotlin/com/margelo/nitro/webrtc/PermissionState.kt +22 -0
  42. package/nitrogen/generated/ios/Webrtc-Swift-Cxx-Bridge.cpp +25 -0
  43. package/nitrogen/generated/ios/Webrtc-Swift-Cxx-Bridge.hpp +63 -0
  44. package/nitrogen/generated/ios/Webrtc-Swift-Cxx-Umbrella.hpp +14 -0
  45. package/nitrogen/generated/ios/WebrtcAutolinking.mm +18 -0
  46. package/nitrogen/generated/ios/WebrtcAutolinking.swift +15 -0
  47. package/nitrogen/generated/ios/c++/HybridPermissionsSpecSwift.cpp +11 -0
  48. package/nitrogen/generated/ios/c++/HybridPermissionsSpecSwift.hpp +92 -0
  49. package/nitrogen/generated/ios/swift/Func_void_PermissionState.swift +47 -0
  50. package/nitrogen/generated/ios/swift/HybridPermissionsSpec.swift +57 -0
  51. package/nitrogen/generated/ios/swift/HybridPermissionsSpec_cxx.swift +157 -0
  52. package/nitrogen/generated/ios/swift/PermissionDescriptor.swift +36 -0
  53. package/nitrogen/generated/ios/swift/PermissionName.swift +40 -0
  54. package/nitrogen/generated/ios/swift/PermissionState.swift +44 -0
  55. package/nitrogen/generated/shared/c++/HybridMediaRecorderSpec.cpp +25 -0
  56. package/nitrogen/generated/shared/c++/HybridMediaRecorderSpec.hpp +69 -0
  57. package/nitrogen/generated/shared/c++/HybridPermissionsSpec.cpp +22 -0
  58. package/nitrogen/generated/shared/c++/HybridPermissionsSpec.hpp +68 -0
  59. package/nitrogen/generated/shared/c++/PermissionDescriptor.hpp +76 -0
  60. package/nitrogen/generated/shared/c++/PermissionName.hpp +76 -0
  61. package/nitrogen/generated/shared/c++/PermissionState.hpp +80 -0
  62. package/package.json +4 -5
  63. package/src/index.ts +2 -0
  64. package/src/specs/MediaRecorder.nitro.ts +24 -0
  65. package/src/specs/Permissions.nitro.ts +22 -0
  66. package/android/src/main/java/com/webrtc/Permission.kt +0 -58
  67. package/ios/Permission.swift +0 -26
@@ -0,0 +1,17 @@
1
+ import { type HybridObject } from 'react-native-nitro-modules';
2
+ import { MediaStream } from './MediaStream.nitro';
3
+ interface MediaRecorder extends HybridObject<{
4
+ ios: 'c++';
5
+ android: 'c++';
6
+ }> {
7
+ stream: MediaStream;
8
+ takePhoto(file: string): Promise<void>;
9
+ startRecording(file: string): void;
10
+ stopRecording(): void;
11
+ }
12
+ declare const MediaRecorderExport: {
13
+ new (stream: MediaStream): MediaRecorder;
14
+ };
15
+ type MediaRecorderExport = MediaRecorder;
16
+ export { MediaRecorderExport as MediaRecorder };
17
+ //# sourceMappingURL=MediaRecorder.nitro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaRecorder.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/MediaRecorder.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,UAAU,aAAc,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;IAC1E,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,aAAa,IAAI,IAAI,CAAA;CACtB;AAKD,QAAA,MAAM,mBAAmB,EAMnB;IAAE,KAAK,MAAM,EAAE,WAAW,GAAG,aAAa,CAAA;CAAE,CAAA;AAElD,KAAK,mBAAmB,GAAG,aAAa,CAAA;AACxC,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { type HybridObject } from 'react-native-nitro-modules';
2
+ export type PermissionState = 'denied' | 'granted' | 'prompt';
3
+ type PermissionName = 'camera' | 'microphone';
4
+ export interface PermissionDescriptor {
5
+ name: PermissionName;
6
+ }
7
+ interface Permissions extends HybridObject<{
8
+ ios: 'swift';
9
+ android: 'kotlin';
10
+ }> {
11
+ query(permissionDesc: PermissionDescriptor): Promise<PermissionState>;
12
+ request(permissionDesc: PermissionDescriptor): Promise<PermissionState>;
13
+ }
14
+ declare const PermissionsExport: Permissions;
15
+ type PermissionsExport = Permissions;
16
+ export { PermissionsExport as Permissions };
17
+ //# sourceMappingURL=Permissions.nitro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Permissions.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/Permissions.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAG9D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;AAC7D,KAAK,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAA;AAE7C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,UAAU,WAAY,SAAQ,YAAY,CAAC;IACzC,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,QAAQ,CAAA;CAClB,CAAC;IACA,KAAK,CAAC,cAAc,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IACrE,OAAO,CAAC,cAAc,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACxE;AAED,QAAA,MAAM,iBAAiB,aACsC,CAAA;AAC7D,KAAK,iBAAiB,GAAG,WAAW,CAAA;AACpC,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,CAAA"}
package/nitro.json CHANGED
@@ -13,6 +13,10 @@
13
13
  "androidCxxLibName": "Webrtc"
14
14
  },
15
15
  "autolinking": {
16
+ "Permissions": {
17
+ "swift": "HybridPermissions",
18
+ "kotlin": "HybridPermissions"
19
+ },
16
20
  "Microphone": {
17
21
  "swift": "HybridMicrophone",
18
22
  "kotlin": "HybridMicrophone"
@@ -34,6 +38,9 @@
34
38
  "MediaDevices": {
35
39
  "cpp": "HybridMediaDevices"
36
40
  },
41
+ "MediaRecorder": {
42
+ "cpp": "HybridMediaRecorder"
43
+ },
37
44
  "RTCRtpSender": {
38
45
  "cpp": "HybridRTCRtpSender"
39
46
  },
@@ -35,9 +35,11 @@ target_sources(
35
35
  # Shared Nitrogen C++ sources
36
36
  ../nitrogen/generated/shared/c++/HybridCameraSpec.cpp
37
37
  ../nitrogen/generated/shared/c++/HybridMediaDevicesSpec.cpp
38
+ ../nitrogen/generated/shared/c++/HybridMediaRecorderSpec.cpp
38
39
  ../nitrogen/generated/shared/c++/HybridMediaStreamSpec.cpp
39
40
  ../nitrogen/generated/shared/c++/HybridMediaStreamTrackSpec.cpp
40
41
  ../nitrogen/generated/shared/c++/HybridMicrophoneSpec.cpp
42
+ ../nitrogen/generated/shared/c++/HybridPermissionsSpec.cpp
41
43
  ../nitrogen/generated/shared/c++/HybridRTCPeerConnectionSpec.cpp
42
44
  ../nitrogen/generated/shared/c++/HybridRTCRtpReceiverSpec.cpp
43
45
  ../nitrogen/generated/shared/c++/HybridRTCRtpSenderSpec.cpp
@@ -47,6 +49,7 @@ target_sources(
47
49
  # Android-specific Nitrogen C++ sources
48
50
  ../nitrogen/generated/android/c++/JHybridCameraSpec.cpp
49
51
  ../nitrogen/generated/android/c++/JHybridMicrophoneSpec.cpp
52
+ ../nitrogen/generated/android/c++/JHybridPermissionsSpec.cpp
50
53
  ../nitrogen/generated/android/c++/JHybridWebrtcViewSpec.cpp
51
54
  ../nitrogen/generated/android/c++/views/JHybridWebrtcViewStateUpdater.cpp
52
55
  )
@@ -17,12 +17,14 @@
17
17
 
18
18
  #include "JHybridCameraSpec.hpp"
19
19
  #include "JHybridMicrophoneSpec.hpp"
20
+ #include "JHybridPermissionsSpec.hpp"
20
21
  #include "JHybridWebrtcViewSpec.hpp"
21
22
  #include "views/JHybridWebrtcViewStateUpdater.hpp"
22
23
  #include <NitroModules/DefaultConstructableObject.hpp>
23
24
  #include "HybridMediaStreamTrack.hpp"
24
25
  #include "HybridMediaStream.hpp"
25
26
  #include "HybridMediaDevices.hpp"
27
+ #include "HybridMediaRecorder.hpp"
26
28
  #include "HybridRTCRtpSender.hpp"
27
29
  #include "HybridRTCRtpReceiver.hpp"
28
30
  #include "HybridRTCRtpTransceiver.hpp"
@@ -39,10 +41,19 @@ int initialize(JavaVM* vm) {
39
41
  // Register native JNI methods
40
42
  margelo::nitro::webrtc::JHybridCameraSpec::registerNatives();
41
43
  margelo::nitro::webrtc::JHybridMicrophoneSpec::registerNatives();
44
+ margelo::nitro::webrtc::JHybridPermissionsSpec::registerNatives();
42
45
  margelo::nitro::webrtc::JHybridWebrtcViewSpec::registerNatives();
43
46
  margelo::nitro::webrtc::views::JHybridWebrtcViewStateUpdater::registerNatives();
44
47
 
45
48
  // Register Nitro Hybrid Objects
49
+ HybridObjectRegistry::registerHybridObjectConstructor(
50
+ "Permissions",
51
+ []() -> std::shared_ptr<HybridObject> {
52
+ static DefaultConstructableObject<JHybridPermissionsSpec::javaobject> object("com/webrtc/HybridPermissions");
53
+ auto instance = object.create();
54
+ return instance->cthis()->shared();
55
+ }
56
+ );
46
57
  HybridObjectRegistry::registerHybridObjectConstructor(
47
58
  "Microphone",
48
59
  []() -> std::shared_ptr<HybridObject> {
@@ -94,6 +105,15 @@ int initialize(JavaVM* vm) {
94
105
  return std::make_shared<HybridMediaDevices>();
95
106
  }
96
107
  );
108
+ HybridObjectRegistry::registerHybridObjectConstructor(
109
+ "MediaRecorder",
110
+ []() -> std::shared_ptr<HybridObject> {
111
+ static_assert(std::is_default_constructible_v<HybridMediaRecorder>,
112
+ "The HybridObject \"HybridMediaRecorder\" is not default-constructible! "
113
+ "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
114
+ return std::make_shared<HybridMediaRecorder>();
115
+ }
116
+ );
97
117
  HybridObjectRegistry::registerHybridObjectConstructor(
98
118
  "RTCRtpSender",
99
119
  []() -> std::shared_ptr<HybridObject> {
@@ -0,0 +1,91 @@
1
+ ///
2
+ /// JHybridPermissionsSpec.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "JHybridPermissionsSpec.hpp"
9
+
10
+ // Forward declaration of `PermissionState` to properly resolve imports.
11
+ namespace margelo::nitro::webrtc { enum class PermissionState; }
12
+ // Forward declaration of `PermissionDescriptor` to properly resolve imports.
13
+ namespace margelo::nitro::webrtc { struct PermissionDescriptor; }
14
+ // Forward declaration of `PermissionName` to properly resolve imports.
15
+ namespace margelo::nitro::webrtc { enum class PermissionName; }
16
+
17
+ #include "PermissionState.hpp"
18
+ #include <NitroModules/Promise.hpp>
19
+ #include <NitroModules/JPromise.hpp>
20
+ #include "JPermissionState.hpp"
21
+ #include "PermissionDescriptor.hpp"
22
+ #include "JPermissionDescriptor.hpp"
23
+ #include "PermissionName.hpp"
24
+ #include "JPermissionName.hpp"
25
+
26
+ namespace margelo::nitro::webrtc {
27
+
28
+ jni::local_ref<JHybridPermissionsSpec::jhybriddata> JHybridPermissionsSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
29
+ return makeCxxInstance(jThis);
30
+ }
31
+
32
+ void JHybridPermissionsSpec::registerNatives() {
33
+ registerHybrid({
34
+ makeNativeMethod("initHybrid", JHybridPermissionsSpec::initHybrid),
35
+ });
36
+ }
37
+
38
+ size_t JHybridPermissionsSpec::getExternalMemorySize() noexcept {
39
+ static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
40
+ return method(_javaPart);
41
+ }
42
+
43
+ void JHybridPermissionsSpec::dispose() noexcept {
44
+ static const auto method = javaClassStatic()->getMethod<void()>("dispose");
45
+ method(_javaPart);
46
+ }
47
+
48
+ std::string JHybridPermissionsSpec::toString() {
49
+ static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
50
+ auto javaString = method(_javaPart);
51
+ return javaString->toStdString();
52
+ }
53
+
54
+ // Properties
55
+
56
+
57
+ // Methods
58
+ std::shared_ptr<Promise<PermissionState>> JHybridPermissionsSpec::query(const PermissionDescriptor& permissionDesc) {
59
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JPermissionDescriptor> /* permissionDesc */)>("query");
60
+ auto __result = method(_javaPart, JPermissionDescriptor::fromCpp(permissionDesc));
61
+ return [&]() {
62
+ auto __promise = Promise<PermissionState>::create();
63
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
64
+ auto __result = jni::static_ref_cast<JPermissionState>(__boxedResult);
65
+ __promise->resolve(__result->toCpp());
66
+ });
67
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
68
+ jni::JniException __jniError(__throwable);
69
+ __promise->reject(std::make_exception_ptr(__jniError));
70
+ });
71
+ return __promise;
72
+ }();
73
+ }
74
+ std::shared_ptr<Promise<PermissionState>> JHybridPermissionsSpec::request(const PermissionDescriptor& permissionDesc) {
75
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<JPermissionDescriptor> /* permissionDesc */)>("request");
76
+ auto __result = method(_javaPart, JPermissionDescriptor::fromCpp(permissionDesc));
77
+ return [&]() {
78
+ auto __promise = Promise<PermissionState>::create();
79
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
80
+ auto __result = jni::static_ref_cast<JPermissionState>(__boxedResult);
81
+ __promise->resolve(__result->toCpp());
82
+ });
83
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
84
+ jni::JniException __jniError(__throwable);
85
+ __promise->reject(std::make_exception_ptr(__jniError));
86
+ });
87
+ return __promise;
88
+ }();
89
+ }
90
+
91
+ } // namespace margelo::nitro::webrtc
@@ -0,0 +1,66 @@
1
+ ///
2
+ /// HybridPermissionsSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <NitroModules/JHybridObject.hpp>
11
+ #include <fbjni/fbjni.h>
12
+ #include "HybridPermissionsSpec.hpp"
13
+
14
+
15
+
16
+
17
+ namespace margelo::nitro::webrtc {
18
+
19
+ using namespace facebook;
20
+
21
+ class JHybridPermissionsSpec: public jni::HybridClass<JHybridPermissionsSpec, JHybridObject>,
22
+ public virtual HybridPermissionsSpec {
23
+ public:
24
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/webrtc/HybridPermissionsSpec;";
25
+ static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
26
+ static void registerNatives();
27
+
28
+ protected:
29
+ // C++ constructor (called from Java via `initHybrid()`)
30
+ explicit JHybridPermissionsSpec(jni::alias_ref<jhybridobject> jThis) :
31
+ HybridObject(HybridPermissionsSpec::TAG),
32
+ HybridBase(jThis),
33
+ _javaPart(jni::make_global(jThis)) {}
34
+
35
+ public:
36
+ ~JHybridPermissionsSpec() override {
37
+ // Hermes GC can destroy JS objects on a non-JNI Thread.
38
+ jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
39
+ }
40
+
41
+ public:
42
+ size_t getExternalMemorySize() noexcept override;
43
+ void dispose() noexcept override;
44
+ std::string toString() override;
45
+
46
+ public:
47
+ inline const jni::global_ref<JHybridPermissionsSpec::javaobject>& getJavaPart() const noexcept {
48
+ return _javaPart;
49
+ }
50
+
51
+ public:
52
+ // Properties
53
+
54
+
55
+ public:
56
+ // Methods
57
+ std::shared_ptr<Promise<PermissionState>> query(const PermissionDescriptor& permissionDesc) override;
58
+ std::shared_ptr<Promise<PermissionState>> request(const PermissionDescriptor& permissionDesc) override;
59
+
60
+ private:
61
+ friend HybridBase;
62
+ using HybridBase::HybridBase;
63
+ jni::global_ref<JHybridPermissionsSpec::javaobject> _javaPart;
64
+ };
65
+
66
+ } // namespace margelo::nitro::webrtc
@@ -0,0 +1,58 @@
1
+ ///
2
+ /// JPermissionDescriptor.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "PermissionDescriptor.hpp"
12
+
13
+ #include "JPermissionName.hpp"
14
+ #include "PermissionName.hpp"
15
+
16
+ namespace margelo::nitro::webrtc {
17
+
18
+ using namespace facebook;
19
+
20
+ /**
21
+ * The C++ JNI bridge between the C++ struct "PermissionDescriptor" and the the Kotlin data class "PermissionDescriptor".
22
+ */
23
+ struct JPermissionDescriptor final: public jni::JavaClass<JPermissionDescriptor> {
24
+ public:
25
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/webrtc/PermissionDescriptor;";
26
+
27
+ public:
28
+ /**
29
+ * Convert this Java/Kotlin-based struct to the C++ struct PermissionDescriptor by copying all values to C++.
30
+ */
31
+ [[maybe_unused]]
32
+ [[nodiscard]]
33
+ PermissionDescriptor toCpp() const {
34
+ static const auto clazz = javaClassStatic();
35
+ static const auto fieldName = clazz->getField<JPermissionName>("name");
36
+ jni::local_ref<JPermissionName> name = this->getFieldValue(fieldName);
37
+ return PermissionDescriptor(
38
+ name->toCpp()
39
+ );
40
+ }
41
+
42
+ public:
43
+ /**
44
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
45
+ */
46
+ [[maybe_unused]]
47
+ static jni::local_ref<JPermissionDescriptor::javaobject> fromCpp(const PermissionDescriptor& value) {
48
+ using JSignature = JPermissionDescriptor(jni::alias_ref<JPermissionName>);
49
+ static const auto clazz = javaClassStatic();
50
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
51
+ return create(
52
+ clazz,
53
+ JPermissionName::fromCpp(value.name)
54
+ );
55
+ }
56
+ };
57
+
58
+ } // namespace margelo::nitro::webrtc
@@ -0,0 +1,59 @@
1
+ ///
2
+ /// JPermissionName.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "PermissionName.hpp"
12
+
13
+ namespace margelo::nitro::webrtc {
14
+
15
+ using namespace facebook;
16
+
17
+ /**
18
+ * The C++ JNI bridge between the C++ enum "PermissionName" and the the Kotlin enum "PermissionName".
19
+ */
20
+ struct JPermissionName final: public jni::JavaClass<JPermissionName> {
21
+ public:
22
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/webrtc/PermissionName;";
23
+
24
+ public:
25
+ /**
26
+ * Convert this Java/Kotlin-based enum to the C++ enum PermissionName.
27
+ */
28
+ [[maybe_unused]]
29
+ [[nodiscard]]
30
+ PermissionName toCpp() const {
31
+ static const auto clazz = javaClassStatic();
32
+ static const auto fieldOrdinal = clazz->getField<int>("value");
33
+ int ordinal = this->getFieldValue(fieldOrdinal);
34
+ return static_cast<PermissionName>(ordinal);
35
+ }
36
+
37
+ public:
38
+ /**
39
+ * Create a Java/Kotlin-based enum with the given C++ enum's value.
40
+ */
41
+ [[maybe_unused]]
42
+ static jni::alias_ref<JPermissionName> fromCpp(PermissionName value) {
43
+ static const auto clazz = javaClassStatic();
44
+ static const auto fieldCAMERA = clazz->getStaticField<JPermissionName>("CAMERA");
45
+ static const auto fieldMICROPHONE = clazz->getStaticField<JPermissionName>("MICROPHONE");
46
+
47
+ switch (value) {
48
+ case PermissionName::CAMERA:
49
+ return clazz->getStaticFieldValue(fieldCAMERA);
50
+ case PermissionName::MICROPHONE:
51
+ return clazz->getStaticFieldValue(fieldMICROPHONE);
52
+ default:
53
+ std::string stringValue = std::to_string(static_cast<int>(value));
54
+ throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
55
+ }
56
+ }
57
+ };
58
+
59
+ } // namespace margelo::nitro::webrtc
@@ -0,0 +1,62 @@
1
+ ///
2
+ /// JPermissionState.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "PermissionState.hpp"
12
+
13
+ namespace margelo::nitro::webrtc {
14
+
15
+ using namespace facebook;
16
+
17
+ /**
18
+ * The C++ JNI bridge between the C++ enum "PermissionState" and the the Kotlin enum "PermissionState".
19
+ */
20
+ struct JPermissionState final: public jni::JavaClass<JPermissionState> {
21
+ public:
22
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/webrtc/PermissionState;";
23
+
24
+ public:
25
+ /**
26
+ * Convert this Java/Kotlin-based enum to the C++ enum PermissionState.
27
+ */
28
+ [[maybe_unused]]
29
+ [[nodiscard]]
30
+ PermissionState toCpp() const {
31
+ static const auto clazz = javaClassStatic();
32
+ static const auto fieldOrdinal = clazz->getField<int>("value");
33
+ int ordinal = this->getFieldValue(fieldOrdinal);
34
+ return static_cast<PermissionState>(ordinal);
35
+ }
36
+
37
+ public:
38
+ /**
39
+ * Create a Java/Kotlin-based enum with the given C++ enum's value.
40
+ */
41
+ [[maybe_unused]]
42
+ static jni::alias_ref<JPermissionState> fromCpp(PermissionState value) {
43
+ static const auto clazz = javaClassStatic();
44
+ static const auto fieldDENIED = clazz->getStaticField<JPermissionState>("DENIED");
45
+ static const auto fieldGRANTED = clazz->getStaticField<JPermissionState>("GRANTED");
46
+ static const auto fieldPROMPT = clazz->getStaticField<JPermissionState>("PROMPT");
47
+
48
+ switch (value) {
49
+ case PermissionState::DENIED:
50
+ return clazz->getStaticFieldValue(fieldDENIED);
51
+ case PermissionState::GRANTED:
52
+ return clazz->getStaticFieldValue(fieldGRANTED);
53
+ case PermissionState::PROMPT:
54
+ return clazz->getStaticFieldValue(fieldPROMPT);
55
+ default:
56
+ std::string stringValue = std::to_string(static_cast<int>(value));
57
+ throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
58
+ }
59
+ }
60
+ };
61
+
62
+ } // namespace margelo::nitro::webrtc
@@ -0,0 +1,62 @@
1
+ ///
2
+ /// HybridPermissionsSpec.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.webrtc
9
+
10
+ import androidx.annotation.Keep
11
+ import com.facebook.jni.HybridData
12
+ import com.facebook.proguard.annotations.DoNotStrip
13
+ import com.margelo.nitro.core.Promise
14
+ import com.margelo.nitro.core.HybridObject
15
+
16
+ /**
17
+ * A Kotlin class representing the Permissions HybridObject.
18
+ * Implement this abstract class to create Kotlin-based instances of Permissions.
19
+ */
20
+ @DoNotStrip
21
+ @Keep
22
+ @Suppress(
23
+ "KotlinJniMissingFunction", "unused",
24
+ "RedundantSuppression", "RedundantUnitReturnType", "SimpleRedundantLet",
25
+ "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName"
26
+ )
27
+ abstract class HybridPermissionsSpec: HybridObject() {
28
+ @DoNotStrip
29
+ private var mHybridData: HybridData = initHybrid()
30
+
31
+ init {
32
+ super.updateNative(mHybridData)
33
+ }
34
+
35
+ override fun updateNative(hybridData: HybridData) {
36
+ mHybridData = hybridData
37
+ super.updateNative(hybridData)
38
+ }
39
+
40
+ // Default implementation of `HybridObject.toString()`
41
+ override fun toString(): String {
42
+ return "[HybridObject Permissions]"
43
+ }
44
+
45
+ // Properties
46
+
47
+
48
+ // Methods
49
+ @DoNotStrip
50
+ @Keep
51
+ abstract fun query(permissionDesc: PermissionDescriptor): Promise<PermissionState>
52
+
53
+ @DoNotStrip
54
+ @Keep
55
+ abstract fun request(permissionDesc: PermissionDescriptor): Promise<PermissionState>
56
+
57
+ private external fun initHybrid(): HybridData
58
+
59
+ companion object {
60
+ protected const val TAG = "HybridPermissionsSpec"
61
+ }
62
+ }
@@ -0,0 +1,38 @@
1
+ ///
2
+ /// PermissionDescriptor.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.webrtc
9
+
10
+ import androidx.annotation.Keep
11
+ import com.facebook.proguard.annotations.DoNotStrip
12
+
13
+
14
+ /**
15
+ * Represents the JavaScript object/struct "PermissionDescriptor".
16
+ */
17
+ @DoNotStrip
18
+ @Keep
19
+ data class PermissionDescriptor(
20
+ @DoNotStrip
21
+ @Keep
22
+ val name: PermissionName
23
+ ) {
24
+ /* primary constructor */
25
+
26
+ private companion object {
27
+ /**
28
+ * Constructor called from C++
29
+ */
30
+ @DoNotStrip
31
+ @Keep
32
+ @Suppress("unused")
33
+ @JvmStatic
34
+ private fun fromCpp(name: PermissionName): PermissionDescriptor {
35
+ return PermissionDescriptor(name)
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,21 @@
1
+ ///
2
+ /// PermissionName.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.webrtc
9
+
10
+ import androidx.annotation.Keep
11
+ import com.facebook.proguard.annotations.DoNotStrip
12
+
13
+ /**
14
+ * Represents the JavaScript enum/union "PermissionName".
15
+ */
16
+ @DoNotStrip
17
+ @Keep
18
+ enum class PermissionName(@DoNotStrip @Keep val value: Int) {
19
+ CAMERA(0),
20
+ MICROPHONE(1);
21
+ }
@@ -0,0 +1,22 @@
1
+ ///
2
+ /// PermissionState.kt
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ package com.margelo.nitro.webrtc
9
+
10
+ import androidx.annotation.Keep
11
+ import com.facebook.proguard.annotations.DoNotStrip
12
+
13
+ /**
14
+ * Represents the JavaScript enum/union "PermissionState".
15
+ */
16
+ @DoNotStrip
17
+ @Keep
18
+ enum class PermissionState(@DoNotStrip @Keep val value: Int) {
19
+ DENIED(0),
20
+ GRANTED(1),
21
+ PROMPT(2);
22
+ }
@@ -10,6 +10,7 @@
10
10
  // Include C++ implementation defined types
11
11
  #include "HybridCameraSpecSwift.hpp"
12
12
  #include "HybridMicrophoneSpecSwift.hpp"
13
+ #include "HybridPermissionsSpecSwift.hpp"
13
14
  #include "HybridWebrtcViewSpecSwift.hpp"
14
15
  #include "Webrtc-Swift-Cxx-Umbrella.hpp"
15
16
  #include <NitroModules/NitroDefines.hpp>
@@ -64,6 +65,30 @@ namespace margelo::nitro::webrtc::bridge::swift {
64
65
  return swiftPart.toUnsafe();
65
66
  }
66
67
 
68
+ // pragma MARK: std::function<void(PermissionState /* result */)>
69
+ Func_void_PermissionState create_Func_void_PermissionState(void* NON_NULL swiftClosureWrapper) noexcept {
70
+ auto swiftClosure = Webrtc::Func_void_PermissionState::fromUnsafe(swiftClosureWrapper);
71
+ return [swiftClosure = std::move(swiftClosure)](PermissionState result) mutable -> void {
72
+ swiftClosure.call(static_cast<int>(result));
73
+ };
74
+ }
75
+
76
+ // pragma MARK: std::shared_ptr<HybridPermissionsSpec>
77
+ std::shared_ptr<HybridPermissionsSpec> create_std__shared_ptr_HybridPermissionsSpec_(void* NON_NULL swiftUnsafePointer) noexcept {
78
+ Webrtc::HybridPermissionsSpec_cxx swiftPart = Webrtc::HybridPermissionsSpec_cxx::fromUnsafe(swiftUnsafePointer);
79
+ return std::make_shared<margelo::nitro::webrtc::HybridPermissionsSpecSwift>(swiftPart);
80
+ }
81
+ void* NON_NULL get_std__shared_ptr_HybridPermissionsSpec_(std__shared_ptr_HybridPermissionsSpec_ cppType) {
82
+ std::shared_ptr<margelo::nitro::webrtc::HybridPermissionsSpecSwift> swiftWrapper = std::dynamic_pointer_cast<margelo::nitro::webrtc::HybridPermissionsSpecSwift>(cppType);
83
+ #ifdef NITRO_DEBUG
84
+ if (swiftWrapper == nullptr) [[unlikely]] {
85
+ throw std::runtime_error("Class \"HybridPermissionsSpec\" is not implemented in Swift!");
86
+ }
87
+ #endif
88
+ Webrtc::HybridPermissionsSpec_cxx& swiftPart = swiftWrapper->getSwiftPart();
89
+ return swiftPart.toUnsafe();
90
+ }
91
+
67
92
  // pragma MARK: std::shared_ptr<HybridWebrtcViewSpec>
68
93
  std::shared_ptr<HybridWebrtcViewSpec> create_std__shared_ptr_HybridWebrtcViewSpec_(void* NON_NULL swiftUnsafePointer) noexcept {
69
94
  Webrtc::HybridWebrtcViewSpec_cxx swiftPart = Webrtc::HybridWebrtcViewSpec_cxx::fromUnsafe(swiftUnsafePointer);