@novastera-oss/nitro-metamask 0.6.2 → 0.6.3

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 (48) hide show
  1. package/android/cargo-ecies.gradle +26 -17
  2. package/lib/typescript/src/specs/nitro-metamask.nitro.d.ts +5 -5
  3. package/lib/typescript/src/specs/nitro-metamask.nitro.d.ts.map +1 -1
  4. package/nitro.json +8 -2
  5. package/nitrogen/generated/android/NitroMetamask+autolinking.cmake +1 -1
  6. package/nitrogen/generated/android/NitroMetamask+autolinking.gradle +1 -1
  7. package/nitrogen/generated/android/NitroMetamaskOnLoad.cpp +27 -17
  8. package/nitrogen/generated/android/NitroMetamaskOnLoad.hpp +14 -5
  9. package/nitrogen/generated/android/c++/JConnectResult.hpp +2 -2
  10. package/nitrogen/generated/android/c++/JConnectSignResult.hpp +2 -2
  11. package/nitrogen/generated/android/c++/JHybridNitroMetamaskSpec.cpp +26 -25
  12. package/nitrogen/generated/android/c++/JHybridNitroMetamaskSpec.hpp +20 -22
  13. package/nitrogen/generated/android/c++/JVariant_NullType_Long.cpp +1 -1
  14. package/nitrogen/generated/android/c++/JVariant_NullType_Long.hpp +4 -4
  15. package/nitrogen/generated/android/c++/JVariant_NullType_String.cpp +1 -1
  16. package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +4 -4
  17. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrometamask/ConnectResult.kt +16 -1
  18. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrometamask/ConnectSignResult.kt +18 -1
  19. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrometamask/HybridNitroMetamaskSpec.kt +16 -19
  20. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrometamask/NitroMetamaskOnLoad.kt +1 -1
  21. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrometamask/Variant_NullType_Long.kt +15 -12
  22. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrometamask/Variant_NullType_String.kt +15 -12
  23. package/nitrogen/generated/ios/NitroMetamask+autolinking.rb +3 -1
  24. package/nitrogen/generated/ios/NitroMetamask-Swift-Cxx-Bridge.cpp +1 -1
  25. package/nitrogen/generated/ios/NitroMetamask-Swift-Cxx-Bridge.hpp +2 -2
  26. package/nitrogen/generated/ios/NitroMetamask-Swift-Cxx-Umbrella.hpp +1 -1
  27. package/nitrogen/generated/ios/NitroMetamaskAutolinking.mm +1 -1
  28. package/nitrogen/generated/ios/NitroMetamaskAutolinking.swift +9 -8
  29. package/nitrogen/generated/ios/c++/HybridNitroMetamaskSpecSwift.cpp +1 -1
  30. package/nitrogen/generated/ios/c++/HybridNitroMetamaskSpecSwift.hpp +7 -1
  31. package/nitrogen/generated/ios/swift/ConnectResult.swift +1 -2
  32. package/nitrogen/generated/ios/swift/ConnectSignResult.swift +1 -2
  33. package/nitrogen/generated/ios/swift/Func_void_ConnectResult.swift +1 -2
  34. package/nitrogen/generated/ios/swift/Func_void_ConnectSignResult.swift +1 -2
  35. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -2
  36. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +1 -2
  37. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__int64_t_.swift +1 -2
  38. package/nitrogen/generated/ios/swift/Func_void_std__variant_nitro__NullType__std__string_.swift +1 -2
  39. package/nitrogen/generated/ios/swift/HybridNitroMetamaskSpec.swift +3 -4
  40. package/nitrogen/generated/ios/swift/HybridNitroMetamaskSpec_cxx.swift +9 -2
  41. package/nitrogen/generated/ios/swift/Variant_NullType_Int64.swift +14 -2
  42. package/nitrogen/generated/ios/swift/Variant_NullType_String.swift +13 -1
  43. package/nitrogen/generated/shared/c++/ConnectResult.hpp +1 -1
  44. package/nitrogen/generated/shared/c++/ConnectSignResult.hpp +1 -1
  45. package/nitrogen/generated/shared/c++/HybridNitroMetamaskSpec.cpp +1 -1
  46. package/nitrogen/generated/shared/c++/HybridNitroMetamaskSpec.hpp +1 -1
  47. package/package.json +3 -7
  48. package/src/specs/nitro-metamask.nitro.ts +5 -5
@@ -4,10 +4,8 @@ def eciesJniOut = file("${buildDir}/intermediates/rust-ecies-jni")
4
4
  def eciesPrebuiltDir = file("${projectDir}/src/main/jniLibs")
5
5
  def buildEciesFromSource = (project.findProperty("NitroMetamask_buildEciesFromSource") ?: "false").toString().toBoolean()
6
6
 
7
- def reactNativeArchitectures() {
8
- def value = rootProject.getProperties().get("reactNativeArchitectures")
9
- return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
10
- }
7
+ def configuredAbis = ((rootProject.getProperties().get("reactNativeArchitectures"))?.split(",")
8
+ ?: ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]) as List<String>
11
9
 
12
10
  def hasCargoExecutable = { ->
13
11
  def path = System.getenv("PATH") ?: ""
@@ -33,24 +31,30 @@ def hasCargoExecutable = { ->
33
31
  return false
34
32
  }
35
33
 
34
+ def hasPrebuiltEciesForConfiguredAbis = { ->
35
+ def missing = []
36
+ configuredAbis.each { abi ->
37
+ def soFile = new File(eciesPrebuiltDir, "${abi}/libecies.so")
38
+ if (!soFile.isFile()) {
39
+ missing.add("${abi}/libecies.so")
40
+ }
41
+ }
42
+ return [available: missing.isEmpty(), missing: missing]
43
+ }
44
+
36
45
  tasks.register("verifyPrebuiltEciesLibs") {
37
46
  group = "verification"
38
47
  description = "Verify prebuilt libecies.so exists for all configured ABIs"
39
48
 
40
49
  doLast {
41
- def missing = []
42
- reactNativeArchitectures().each { abi ->
43
- def soFile = file("${eciesPrebuiltDir}/${abi}/libecies.so")
44
- if (!soFile.isFile()) {
45
- missing.add("${abi}/libecies.so")
46
- }
47
- }
50
+ def result = hasPrebuiltEciesForConfiguredAbis()
51
+ def missing = result.missing
48
52
 
49
53
  if (!missing.isEmpty()) {
50
54
  throw new GradleException(
51
55
  "Missing prebuilt ECIES native libraries under android/src/main/jniLibs: ${missing.join(', ')}. " +
52
- "Consumers should use prebuilt libs (no Cargo required). " +
53
- "Maintainers can regenerate with -PNitroMetamask_buildEciesFromSource=true."
56
+ "If this is a source checkout, install Rust + cargo-ndk and build with " +
57
+ "-PNitroMetamask_buildEciesFromSource=true."
54
58
  )
55
59
  }
56
60
  }
@@ -59,9 +63,10 @@ tasks.register("verifyPrebuiltEciesLibs") {
59
63
  tasks.register("cargoNdkBuildEcies", Exec) {
60
64
  group = "build"
61
65
  description = "Build libecies.so via Rust (maintainer-only)"
62
- enabled = buildEciesFromSource
63
66
  onlyIf {
64
- buildEciesFromSource && eciesRustDir.isDirectory() && eciesCargoToml.isFile()
67
+ def prebuiltStatus = hasPrebuiltEciesForConfiguredAbis()
68
+ (buildEciesFromSource || !prebuiltStatus.available) &&
69
+ eciesRustDir.isDirectory() && eciesCargoToml.isFile()
65
70
  }
66
71
  workingDir eciesRustDir
67
72
  standardOutput System.out
@@ -76,7 +81,7 @@ afterEvaluate {
76
81
  def ndkDir = (ndkProp instanceof File) ? ndkProp : ndkProp.get().asFile
77
82
  def ndkPath = ndkDir.absolutePath
78
83
  def ndkVer = project.android.ndkVersion
79
- def abis = reactNativeArchitectures()
84
+ def abis = configuredAbis
80
85
  def outPath = eciesJniOut.absolutePath
81
86
  tasks.named("cargoNdkBuildEcies", Exec).configure {
82
87
  doFirst {
@@ -104,8 +109,12 @@ afterEvaluate {
104
109
  }
105
110
  }
106
111
 
112
+ def prebuiltStatus = hasPrebuiltEciesForConfiguredAbis()
113
+ def canBuildFromSource = hasCargoExecutable() && eciesRustDir.isDirectory() && eciesCargoToml.isFile()
114
+ def shouldBuildFromSource = buildEciesFromSource || (!prebuiltStatus.available && canBuildFromSource)
115
+
107
116
  tasks.matching { it.name.startsWith("preBuild") }.configureEach {
108
- if (buildEciesFromSource) {
117
+ if (shouldBuildFromSource) {
109
118
  dependsOn("cargoNdkBuildEcies")
110
119
  } else {
111
120
  dependsOn("verifyPrebuiltEciesLibs")
@@ -1,12 +1,12 @@
1
- import { type HybridObject } from 'react-native-nitro-modules';
1
+ import { type HybridObject, type Int64 } from 'react-native-nitro-modules';
2
2
  export interface ConnectResult {
3
3
  address: string;
4
- chainId: bigint;
4
+ chainId: Int64;
5
5
  }
6
6
  export interface ConnectSignResult {
7
7
  signature: string;
8
8
  address: string;
9
- chainId: bigint;
9
+ chainId: Int64;
10
10
  }
11
11
  export interface NitroMetamask extends HybridObject<{
12
12
  ios: 'swift';
@@ -33,7 +33,7 @@ export interface NitroMetamask extends HybridObject<{
33
33
  * @param exp - Expiration timestamp (as bigint)
34
34
  * @returns Promise resolving to ConnectSignResult containing signature, address, and chainId
35
35
  */
36
- connectSign(nonce: string, exp: bigint): Promise<ConnectSignResult>;
36
+ connectSign(nonce: string, exp: Int64): Promise<ConnectSignResult>;
37
37
  /**
38
38
  * Get the currently connected wallet address.
39
39
  * Returns null if not connected.
@@ -43,6 +43,6 @@ export interface NitroMetamask extends HybridObject<{
43
43
  * Get the current chain ID.
44
44
  * Returns null if not connected.
45
45
  */
46
- getChainId(): Promise<bigint | null>;
46
+ getChainId(): Promise<Int64 | null>;
47
47
  }
48
48
  //# sourceMappingURL=nitro-metamask.nitro.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nitro-metamask.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/nitro-metamask.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACtF;;;;;;;;;OASG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1D,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;IACjC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7C;;;;;;;OAOG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACnE;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACpC;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CACrC"}
1
+ {"version":3,"file":"nitro-metamask.nitro.d.ts","sourceRoot":"","sources":["../../../../src/specs/nitro-metamask.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAE1E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,KAAK,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,KAAK,CAAA;CACf;AAED,MAAM,WAAW,aAAc,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACtF;;;;;;;;;OASG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1D,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;IACjC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7C;;;;;;;OAOG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAClE;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACpC;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;CACpC"}
package/nitro.json CHANGED
@@ -14,8 +14,14 @@
14
14
  },
15
15
  "autolinking": {
16
16
  "NitroMetamask": {
17
- "swift": "HybridNitroMetamask",
18
- "kotlin": "HybridNitroMetamask"
17
+ "ios": {
18
+ "language": "swift",
19
+ "implementationClassName": "HybridNitroMetamask"
20
+ },
21
+ "android": {
22
+ "language": "kotlin",
23
+ "implementationClassName": "HybridNitroMetamask"
24
+ }
19
25
  }
20
26
  },
21
27
  "ignorePaths": [
@@ -2,7 +2,7 @@
2
2
  # NitroMetamask+autolinking.cmake
3
3
  # This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  # https://github.com/mrousavy/nitro
5
- # Copyright © 2026 Marc Rousavy @ Margelo
5
+ # Copyright © Marc Rousavy @ Margelo
6
6
  #
7
7
 
8
8
  # This is a CMake file that adds all files generated by Nitrogen
@@ -2,7 +2,7 @@
2
2
  /// NitroMetamask+autolinking.gradle
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  /// This is a Gradle file that adds all files generated by Nitrogen
@@ -2,7 +2,7 @@
2
2
  /// NitroMetamaskOnLoad.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #ifndef BUILDING_NITROMETAMASK_WITH_GENERATED_CMAKE_PROJECT
@@ -21,24 +21,34 @@
21
21
  namespace margelo::nitro::nitrometamask {
22
22
 
23
23
  int initialize(JavaVM* vm) {
24
+ return facebook::jni::initialize(vm, []() {
25
+ ::margelo::nitro::nitrometamask::registerAllNatives();
26
+ });
27
+ }
28
+
29
+ struct JHybridNitroMetamaskSpecImpl: public jni::JavaClass<JHybridNitroMetamaskSpecImpl, JHybridNitroMetamaskSpec::JavaPart> {
30
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/HybridNitroMetamask;";
31
+ static std::shared_ptr<JHybridNitroMetamaskSpec> create() {
32
+ static const auto constructorFn = javaClassStatic()->getConstructor<JHybridNitroMetamaskSpecImpl::javaobject()>();
33
+ jni::local_ref<JHybridNitroMetamaskSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
34
+ return javaPart->getJHybridNitroMetamaskSpec();
35
+ }
36
+ };
37
+
38
+ void registerAllNatives() {
24
39
  using namespace margelo::nitro;
25
40
  using namespace margelo::nitro::nitrometamask;
26
- using namespace facebook;
27
-
28
- return facebook::jni::initialize(vm, [] {
29
- // Register native JNI methods
30
- margelo::nitro::nitrometamask::JHybridNitroMetamaskSpec::registerNatives();
31
-
32
- // Register Nitro Hybrid Objects
33
- HybridObjectRegistry::registerHybridObjectConstructor(
34
- "NitroMetamask",
35
- []() -> std::shared_ptr<HybridObject> {
36
- static DefaultConstructableObject<JHybridNitroMetamaskSpec::javaobject> object("com/margelo/nitro/nitrometamask/HybridNitroMetamask");
37
- auto instance = object.create();
38
- return instance->cthis()->shared();
39
- }
40
- );
41
- });
41
+
42
+ // Register native JNI methods
43
+ margelo::nitro::nitrometamask::JHybridNitroMetamaskSpec::CxxPart::registerNatives();
44
+
45
+ // Register Nitro Hybrid Objects
46
+ HybridObjectRegistry::registerHybridObjectConstructor(
47
+ "NitroMetamask",
48
+ []() -> std::shared_ptr<HybridObject> {
49
+ return JHybridNitroMetamaskSpecImpl::create();
50
+ }
51
+ );
42
52
  }
43
53
 
44
54
  } // namespace margelo::nitro::nitrometamask
@@ -2,24 +2,33 @@
2
2
  /// NitroMetamaskOnLoad.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include <jni.h>
9
+ #include <functional>
9
10
  #include <NitroModules/NitroDefines.hpp>
10
11
 
11
12
  namespace margelo::nitro::nitrometamask {
12
13
 
14
+ [[deprecated("Use registerNatives() instead.")]]
15
+ int initialize(JavaVM* vm);
16
+
13
17
  /**
14
- * Initializes the native (C++) part of NitroMetamask, and autolinks all Hybrid Objects.
15
- * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`).
18
+ * Register the native (C++) part of NitroMetamask, and autolinks all Hybrid Objects.
19
+ * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`),
20
+ * inside a `facebook::jni::initialize(vm, ...)` call.
16
21
  * Example:
17
22
  * ```cpp (cpp-adapter.cpp)
18
23
  * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
19
- * return margelo::nitro::nitrometamask::initialize(vm);
24
+ * return facebook::jni::initialize(vm, []() {
25
+ * // register all NitroMetamask HybridObjects
26
+ * margelo::nitro::nitrometamask::registerNatives();
27
+ * // any other custom registrations go here.
28
+ * });
20
29
  * }
21
30
  * ```
22
31
  */
23
- int initialize(JavaVM* vm);
32
+ void registerAllNatives();
24
33
 
25
34
  } // namespace margelo::nitro::nitrometamask
@@ -2,7 +2,7 @@
2
2
  /// JConnectResult.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -21,7 +21,7 @@ namespace margelo::nitro::nitrometamask {
21
21
  */
22
22
  struct JConnectResult final: public jni::JavaClass<JConnectResult> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/ConnectResult;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/ConnectResult;";
25
25
 
26
26
  public:
27
27
  /**
@@ -2,7 +2,7 @@
2
2
  /// JConnectSignResult.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -21,7 +21,7 @@ namespace margelo::nitro::nitrometamask {
21
21
  */
22
22
  struct JConnectSignResult final: public jni::JavaClass<JConnectSignResult> {
23
23
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/ConnectSignResult;";
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/ConnectSignResult;";
25
25
 
26
26
  public:
27
27
  /**
@@ -2,7 +2,7 @@
2
2
  /// JHybridNitroMetamaskSpec.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "JHybridNitroMetamaskSpec.hpp"
@@ -28,30 +28,31 @@ namespace margelo::nitro::nitrometamask { struct ConnectSignResult; }
28
28
 
29
29
  namespace margelo::nitro::nitrometamask {
30
30
 
31
- jni::local_ref<JHybridNitroMetamaskSpec::jhybriddata> JHybridNitroMetamaskSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
32
- return makeCxxInstance(jThis);
33
- }
34
-
35
- void JHybridNitroMetamaskSpec::registerNatives() {
36
- registerHybrid({
37
- makeNativeMethod("initHybrid", JHybridNitroMetamaskSpec::initHybrid),
38
- });
31
+ std::shared_ptr<JHybridNitroMetamaskSpec> JHybridNitroMetamaskSpec::JavaPart::getJHybridNitroMetamaskSpec() {
32
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
33
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridNitroMetamaskSpec>(hybridObject);
34
+ if (castHybridObject == nullptr) [[unlikely]] {
35
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridNitroMetamaskSpec!");
36
+ }
37
+ return castHybridObject;
39
38
  }
40
39
 
41
- size_t JHybridNitroMetamaskSpec::getExternalMemorySize() noexcept {
42
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
43
- return method(_javaPart);
40
+ jni::local_ref<JHybridNitroMetamaskSpec::CxxPart::jhybriddata> JHybridNitroMetamaskSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
41
+ return makeCxxInstance(jThis);
44
42
  }
45
43
 
46
- void JHybridNitroMetamaskSpec::dispose() noexcept {
47
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
48
- method(_javaPart);
44
+ std::shared_ptr<JHybridObject> JHybridNitroMetamaskSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
45
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridNitroMetamaskSpec::JavaPart>(javaPart);
46
+ if (castJavaPart == nullptr) [[unlikely]] {
47
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridNitroMetamaskSpec::JavaPart!");
48
+ }
49
+ return std::make_shared<JHybridNitroMetamaskSpec>(castJavaPart);
49
50
  }
50
51
 
51
- std::string JHybridNitroMetamaskSpec::toString() {
52
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
53
- auto javaString = method(_javaPart);
54
- return javaString->toStdString();
52
+ void JHybridNitroMetamaskSpec::CxxPart::registerNatives() {
53
+ registerHybrid({
54
+ makeNativeMethod("initHybrid", JHybridNitroMetamaskSpec::CxxPart::initHybrid),
55
+ });
55
56
  }
56
57
 
57
58
  // Properties
@@ -59,11 +60,11 @@ namespace margelo::nitro::nitrometamask {
59
60
 
60
61
  // Methods
61
62
  void JHybridNitroMetamaskSpec::configure(const std::optional<std::string>& dappUrl, const std::optional<std::string>& deepLinkScheme) {
62
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* dappUrl */, jni::alias_ref<jni::JString> /* deepLinkScheme */)>("configure");
63
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* dappUrl */, jni::alias_ref<jni::JString> /* deepLinkScheme */)>("configure");
63
64
  method(_javaPart, dappUrl.has_value() ? jni::make_jstring(dappUrl.value()) : nullptr, deepLinkScheme.has_value() ? jni::make_jstring(deepLinkScheme.value()) : nullptr);
64
65
  }
65
66
  std::shared_ptr<Promise<ConnectResult>> JHybridNitroMetamaskSpec::connect() {
66
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("connect");
67
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("connect");
67
68
  auto __result = method(_javaPart);
68
69
  return [&]() {
69
70
  auto __promise = Promise<ConnectResult>::create();
@@ -79,7 +80,7 @@ namespace margelo::nitro::nitrometamask {
79
80
  }();
80
81
  }
81
82
  std::shared_ptr<Promise<std::string>> JHybridNitroMetamaskSpec::signMessage(const std::string& message) {
82
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* message */)>("signMessage");
83
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* message */)>("signMessage");
83
84
  auto __result = method(_javaPart, jni::make_jstring(message));
84
85
  return [&]() {
85
86
  auto __promise = Promise<std::string>::create();
@@ -95,7 +96,7 @@ namespace margelo::nitro::nitrometamask {
95
96
  }();
96
97
  }
97
98
  std::shared_ptr<Promise<ConnectSignResult>> JHybridNitroMetamaskSpec::connectSign(const std::string& nonce, int64_t exp) {
98
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* nonce */, int64_t /* exp */)>("connectSign");
99
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JString> /* nonce */, int64_t /* exp */)>("connectSign");
99
100
  auto __result = method(_javaPart, jni::make_jstring(nonce), exp);
100
101
  return [&]() {
101
102
  auto __promise = Promise<ConnectSignResult>::create();
@@ -111,7 +112,7 @@ namespace margelo::nitro::nitrometamask {
111
112
  }();
112
113
  }
113
114
  std::shared_ptr<Promise<std::variant<nitro::NullType, std::string>>> JHybridNitroMetamaskSpec::getAddress() {
114
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getAddress");
115
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getAddress");
115
116
  auto __result = method(_javaPart);
116
117
  return [&]() {
117
118
  auto __promise = Promise<std::variant<nitro::NullType, std::string>>::create();
@@ -127,7 +128,7 @@ namespace margelo::nitro::nitrometamask {
127
128
  }();
128
129
  }
129
130
  std::shared_ptr<Promise<std::variant<nitro::NullType, int64_t>>> JHybridNitroMetamaskSpec::getChainId() {
130
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getChainId");
131
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("getChainId");
131
132
  auto __result = method(_javaPart);
132
133
  return [&]() {
133
134
  auto __promise = Promise<std::variant<nitro::NullType, int64_t>>::create();
@@ -2,7 +2,7 @@
2
2
  /// HybridNitroMetamaskSpec.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -18,33 +18,33 @@ namespace margelo::nitro::nitrometamask {
18
18
 
19
19
  using namespace facebook;
20
20
 
21
- class JHybridNitroMetamaskSpec: public jni::HybridClass<JHybridNitroMetamaskSpec, JHybridObject>,
22
- public virtual HybridNitroMetamaskSpec {
21
+ class JHybridNitroMetamaskSpec: public virtual HybridNitroMetamaskSpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/HybridNitroMetamaskSpec;";
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 JHybridNitroMetamaskSpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridNitroMetamaskSpec::TAG),
32
- HybridBase(jThis),
33
- _javaPart(jni::make_global(jThis)) {}
23
+ struct JavaPart: public jni::JavaClass<JavaPart, JHybridObject::JavaPart> {
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/HybridNitroMetamaskSpec;";
25
+ std::shared_ptr<JHybridNitroMetamaskSpec> getJHybridNitroMetamaskSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/HybridNitroMetamaskSpec$CxxPart;";
29
+ static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
30
+ static void registerNatives();
31
+ using HybridBase::HybridBase;
32
+ protected:
33
+ std::shared_ptr<JHybridObject> createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) override;
34
+ };
34
35
 
35
36
  public:
37
+ explicit JHybridNitroMetamaskSpec(const jni::local_ref<JHybridNitroMetamaskSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridNitroMetamaskSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
36
41
  ~JHybridNitroMetamaskSpec() override {
37
42
  // Hermes GC can destroy JS objects on a non-JNI Thread.
38
43
  jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
39
44
  }
40
45
 
41
46
  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<JHybridNitroMetamaskSpec::javaobject>& getJavaPart() const noexcept {
47
+ inline const jni::global_ref<JHybridNitroMetamaskSpec::JavaPart>& getJavaPart() const noexcept {
48
48
  return _javaPart;
49
49
  }
50
50
 
@@ -62,9 +62,7 @@ namespace margelo::nitro::nitrometamask {
62
62
  std::shared_ptr<Promise<std::variant<nitro::NullType, int64_t>>> getChainId() override;
63
63
 
64
64
  private:
65
- friend HybridBase;
66
- using HybridBase::HybridBase;
67
- jni::global_ref<JHybridNitroMetamaskSpec::javaobject> _javaPart;
65
+ jni::global_ref<JHybridNitroMetamaskSpec::JavaPart> _javaPart;
68
66
  };
69
67
 
70
68
  } // namespace margelo::nitro::nitrometamask
@@ -2,7 +2,7 @@
2
2
  /// JVariant_NullType_Long.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "JVariant_NullType_Long.hpp"
@@ -2,7 +2,7 @@
2
2
  /// JVariant_NullType_Long.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -23,7 +23,7 @@ namespace margelo::nitro::nitrometamask {
23
23
  */
24
24
  class JVariant_NullType_Long: public jni::JavaClass<JVariant_NullType_Long> {
25
25
  public:
26
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_Long;";
26
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_Long;";
27
27
 
28
28
  static jni::local_ref<JVariant_NullType_Long> create_0(jni::alias_ref<JNull> value) {
29
29
  static const auto method = javaClassStatic()->getStaticMethod<JVariant_NullType_Long(jni::alias_ref<JNull>)>("create");
@@ -48,7 +48,7 @@ namespace margelo::nitro::nitrometamask {
48
48
  namespace JVariant_NullType_Long_impl {
49
49
  class First final: public jni::JavaClass<First, JVariant_NullType_Long> {
50
50
  public:
51
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_Long$First;";
51
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_Long$First;";
52
52
 
53
53
  [[nodiscard]] jni::local_ref<JNull> getValue() const {
54
54
  static const auto field = javaClassStatic()->getField<JNull>("value");
@@ -58,7 +58,7 @@ namespace margelo::nitro::nitrometamask {
58
58
 
59
59
  class Second final: public jni::JavaClass<Second, JVariant_NullType_Long> {
60
60
  public:
61
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_Long$Second;";
61
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_Long$Second;";
62
62
 
63
63
  [[nodiscard]] int64_t getValue() const {
64
64
  static const auto field = javaClassStatic()->getField<int64_t>("value");
@@ -2,7 +2,7 @@
2
2
  /// JVariant_NullType_String.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "JVariant_NullType_String.hpp"
@@ -2,7 +2,7 @@
2
2
  /// JVariant_NullType_String.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -24,7 +24,7 @@ namespace margelo::nitro::nitrometamask {
24
24
  */
25
25
  class JVariant_NullType_String: public jni::JavaClass<JVariant_NullType_String> {
26
26
  public:
27
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_String;";
27
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_String;";
28
28
 
29
29
  static jni::local_ref<JVariant_NullType_String> create_0(jni::alias_ref<JNull> value) {
30
30
  static const auto method = javaClassStatic()->getStaticMethod<JVariant_NullType_String(jni::alias_ref<JNull>)>("create");
@@ -49,7 +49,7 @@ namespace margelo::nitro::nitrometamask {
49
49
  namespace JVariant_NullType_String_impl {
50
50
  class First final: public jni::JavaClass<First, JVariant_NullType_String> {
51
51
  public:
52
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_String$First;";
52
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_String$First;";
53
53
 
54
54
  [[nodiscard]] jni::local_ref<JNull> getValue() const {
55
55
  static const auto field = javaClassStatic()->getField<JNull>("value");
@@ -59,7 +59,7 @@ namespace margelo::nitro::nitrometamask {
59
59
 
60
60
  class Second final: public jni::JavaClass<Second, JVariant_NullType_String> {
61
61
  public:
62
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_String$Second;";
62
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrometamask/Variant_NullType_String$Second;";
63
63
 
64
64
  [[nodiscard]] jni::local_ref<jni::JString> getValue() const {
65
65
  static const auto field = javaClassStatic()->getField<jni::JString>("value");
@@ -2,13 +2,14 @@
2
2
  /// ConnectResult.kt
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2026 Marc Rousavy @ Margelo
5
+ /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  package com.margelo.nitro.nitrometamask
9
9
 
10
10
  import androidx.annotation.Keep
11
11
  import com.facebook.proguard.annotations.DoNotStrip
12
+ import java.util.Objects
12
13
 
13
14
 
14
15
  /**
@@ -26,6 +27,20 @@ data class ConnectResult(
26
27
  ) {
27
28
  /* primary constructor */
28
29
 
30
+ override fun equals(other: Any?): Boolean {
31
+ if (this === other) return true
32
+ if (other !is ConnectResult) return false
33
+ return Objects.deepEquals(this.address, other.address)
34
+ && Objects.deepEquals(this.chainId, other.chainId)
35
+ }
36
+
37
+ override fun hashCode(): Int {
38
+ return arrayOf(
39
+ address,
40
+ chainId
41
+ ).contentDeepHashCode()
42
+ }
43
+
29
44
  companion object {
30
45
  /**
31
46
  * Constructor called from C++