@succinctlabs/react-native-zcam1 0.3.0 → 0.4.0-alpha.2

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 (127) hide show
  1. package/Zcam1Sdk.podspec +2 -2
  2. package/android/CMakeLists.txt +114 -0
  3. package/android/build.gradle +213 -0
  4. package/android/cpp-adapter-proving.cpp +35 -0
  5. package/android/cpp-adapter.cpp +35 -0
  6. package/android/src/main/AndroidManifest.xml +5 -0
  7. package/android/src/main/java/com/succinctlabs/zcam1sdk/Zcam1CaptureModule.kt +156 -0
  8. package/android/src/main/java/com/succinctlabs/zcam1sdk/Zcam1CapturePackage.kt +38 -0
  9. package/android/src/main/java/com/succinctlabs/zcam1sdk/Zcam1ProvingModule.kt +43 -0
  10. package/android/src/main/java/com/succinctlabs/zcam1sdk/Zcam1ProvingPackage.kt +34 -0
  11. package/android/src/main/java/com/succinctlabs/zcam1sdk/Zcam1SdkModule.kt +43 -0
  12. package/android/src/main/java/com/succinctlabs/zcam1sdk/Zcam1SdkPackage.kt +34 -0
  13. package/android/src/main/java/com/succinctlabs/zcam1sdk/camera/CameraUtils.kt +80 -0
  14. package/android/src/main/java/com/succinctlabs/zcam1sdk/camera/Zcam1CameraService.kt +588 -0
  15. package/android/src/main/java/com/succinctlabs/zcam1sdk/camera/Zcam1CameraView.kt +107 -0
  16. package/android/src/main/java/com/succinctlabs/zcam1sdk/camera/Zcam1CameraViewManager.kt +33 -0
  17. package/android/src/main/java/com/succinctlabs/zcam1sdk/camera/Zcam1OrientationManager.kt +73 -0
  18. package/cpp/generated/zcam1_c2pa_utils.cpp +170 -365
  19. package/cpp/generated/zcam1_c2pa_utils.hpp +0 -4
  20. package/cpp/generated/zcam1_certs_utils.cpp +121 -250
  21. package/cpp/generated/zcam1_common.cpp +1871 -0
  22. package/cpp/generated/zcam1_common.hpp +52 -0
  23. package/cpp/generated/zcam1_verify_utils.cpp +138 -265
  24. package/cpp/generated/zcam1_verify_utils.hpp +2 -2
  25. package/cpp/proving/generated/zcam1_common.cpp +1871 -0
  26. package/cpp/proving/generated/zcam1_common.hpp +52 -0
  27. package/cpp/proving/generated/zcam1_proving_utils.cpp +355 -417
  28. package/cpp/proving/generated/zcam1_proving_utils.hpp +13 -17
  29. package/cpp/proving/zcam1-proving.cpp +2 -0
  30. package/cpp/zcam1-sdk.cpp +2 -0
  31. package/lib/module/bindings.js +4 -0
  32. package/lib/module/bindings.js.map +1 -1
  33. package/lib/module/camera.js +71 -13
  34. package/lib/module/camera.js.map +1 -1
  35. package/lib/module/capture.js +115 -38
  36. package/lib/module/capture.js.map +1 -1
  37. package/lib/module/common.js +18 -2
  38. package/lib/module/common.js.map +1 -1
  39. package/lib/module/generated/zcam1_c2pa_utils-ffi.js +4 -0
  40. package/lib/module/generated/zcam1_c2pa_utils-ffi.js.map +1 -1
  41. package/lib/module/generated/zcam1_c2pa_utils.js +117 -9
  42. package/lib/module/generated/zcam1_c2pa_utils.js.map +1 -1
  43. package/lib/module/generated/zcam1_certs_utils-ffi.js +4 -0
  44. package/lib/module/generated/zcam1_certs_utils-ffi.js.map +1 -1
  45. package/lib/module/generated/zcam1_certs_utils.js +6 -2
  46. package/lib/module/generated/zcam1_certs_utils.js.map +1 -1
  47. package/lib/module/generated/zcam1_common-ffi.js +47 -0
  48. package/lib/module/generated/zcam1_common-ffi.js.map +1 -0
  49. package/lib/module/generated/zcam1_common.js +60 -0
  50. package/lib/module/generated/zcam1_common.js.map +1 -0
  51. package/lib/module/generated/zcam1_proving_utils-ffi.js +4 -0
  52. package/lib/module/generated/zcam1_proving_utils-ffi.js.map +1 -1
  53. package/lib/module/generated/zcam1_proving_utils.js +53 -46
  54. package/lib/module/generated/zcam1_proving_utils.js.map +1 -1
  55. package/lib/module/generated/zcam1_verify_utils-ffi.js +4 -0
  56. package/lib/module/generated/zcam1_verify_utils-ffi.js.map +1 -1
  57. package/lib/module/generated/zcam1_verify_utils.js +70 -22
  58. package/lib/module/generated/zcam1_verify_utils.js.map +1 -1
  59. package/lib/module/index.js +1 -1
  60. package/lib/module/index.js.map +1 -1
  61. package/lib/module/proving/NativeZcam1Proving.js +1 -1
  62. package/lib/module/proving/index.js +1 -1
  63. package/lib/module/proving/index.js.map +1 -1
  64. package/lib/module/proving/prove.js +14 -8
  65. package/lib/module/proving/prove.js.map +1 -1
  66. package/lib/module/utils.js +19 -14
  67. package/lib/module/utils.js.map +1 -1
  68. package/lib/module/verify.js +14 -22
  69. package/lib/module/verify.js.map +1 -1
  70. package/lib/typescript/src/bindings.d.ts +3 -0
  71. package/lib/typescript/src/bindings.d.ts.map +1 -1
  72. package/lib/typescript/src/camera.d.ts +15 -0
  73. package/lib/typescript/src/camera.d.ts.map +1 -1
  74. package/lib/typescript/src/capture.d.ts +40 -1
  75. package/lib/typescript/src/capture.d.ts.map +1 -1
  76. package/lib/typescript/src/common.d.ts.map +1 -1
  77. package/lib/typescript/src/generated/zcam1_c2pa_utils-ffi.d.ts +37 -46
  78. package/lib/typescript/src/generated/zcam1_c2pa_utils-ffi.d.ts.map +1 -1
  79. package/lib/typescript/src/generated/zcam1_c2pa_utils.d.ts +110 -8
  80. package/lib/typescript/src/generated/zcam1_c2pa_utils.d.ts.map +1 -1
  81. package/lib/typescript/src/generated/zcam1_certs_utils-ffi.d.ts +27 -32
  82. package/lib/typescript/src/generated/zcam1_certs_utils-ffi.d.ts.map +1 -1
  83. package/lib/typescript/src/generated/zcam1_certs_utils.d.ts.map +1 -1
  84. package/lib/typescript/src/generated/zcam1_common-ffi.d.ts +77 -0
  85. package/lib/typescript/src/generated/zcam1_common-ffi.d.ts.map +1 -0
  86. package/lib/typescript/src/generated/zcam1_common.d.ts +17 -0
  87. package/lib/typescript/src/generated/zcam1_common.d.ts.map +1 -0
  88. package/lib/typescript/src/generated/zcam1_proving_utils-ffi.d.ts +44 -51
  89. package/lib/typescript/src/generated/zcam1_proving_utils-ffi.d.ts.map +1 -1
  90. package/lib/typescript/src/generated/zcam1_proving_utils.d.ts +26 -26
  91. package/lib/typescript/src/generated/zcam1_proving_utils.d.ts.map +1 -1
  92. package/lib/typescript/src/generated/zcam1_verify_utils-ffi.d.ts +29 -34
  93. package/lib/typescript/src/generated/zcam1_verify_utils-ffi.d.ts.map +1 -1
  94. package/lib/typescript/src/generated/zcam1_verify_utils.d.ts +94 -14
  95. package/lib/typescript/src/generated/zcam1_verify_utils.d.ts.map +1 -1
  96. package/lib/typescript/src/index.d.ts +1 -1
  97. package/lib/typescript/src/index.d.ts.map +1 -1
  98. package/lib/typescript/src/proving/NativeZcam1Proving.d.ts +1 -1
  99. package/lib/typescript/src/proving/index.d.ts +1 -1
  100. package/lib/typescript/src/proving/index.d.ts.map +1 -1
  101. package/lib/typescript/src/proving/prove.d.ts +3 -3
  102. package/lib/typescript/src/proving/prove.d.ts.map +1 -1
  103. package/lib/typescript/src/utils.d.ts.map +1 -1
  104. package/lib/typescript/src/verify.d.ts +4 -3
  105. package/lib/typescript/src/verify.d.ts.map +1 -1
  106. package/package.json +13 -6
  107. package/react-native.config.js +11 -0
  108. package/src/bindings.tsx +4 -0
  109. package/src/camera.tsx +116 -11
  110. package/src/capture.tsx +150 -53
  111. package/src/common.tsx +22 -2
  112. package/src/generated/zcam1_c2pa_utils-ffi.ts +42 -56
  113. package/src/generated/zcam1_c2pa_utils.ts +224 -67
  114. package/src/generated/zcam1_certs_utils-ffi.ts +33 -36
  115. package/src/generated/zcam1_certs_utils.ts +27 -24
  116. package/src/generated/zcam1_common-ffi.ts +183 -0
  117. package/src/generated/zcam1_common.ts +116 -0
  118. package/src/generated/zcam1_proving_utils-ffi.ts +54 -67
  119. package/src/generated/zcam1_proving_utils.ts +133 -138
  120. package/src/generated/zcam1_verify_utils-ffi.ts +39 -40
  121. package/src/generated/zcam1_verify_utils.ts +109 -47
  122. package/src/index.ts +1 -1
  123. package/src/proving/NativeZcam1Proving.ts +2 -2
  124. package/src/proving/index.ts +1 -1
  125. package/src/proving/prove.tsx +22 -11
  126. package/src/utils.ts +26 -20
  127. package/src/verify.tsx +25 -42
@@ -0,0 +1,43 @@
1
+ // Generated by uniffi-bindgen-react-native
2
+ package com.succinctlabs.zcam1sdk
3
+
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.module.annotations.ReactModule
6
+ import com.facebook.react.turbomodule.core.interfaces.CallInvokerHolder
7
+
8
+ @ReactModule(name = Zcam1SdkModule.NAME)
9
+ class Zcam1SdkModule(reactContext: ReactApplicationContext) :
10
+ NativeZcam1SdkSpec(reactContext) {
11
+
12
+ override fun getName(): String {
13
+ return NAME
14
+ }
15
+
16
+ // Two native methods implemented in cpp-adapter.cpp, and ultimately
17
+ // zcam1-sdk.cpp
18
+
19
+ external fun nativeInstallRustCrate(runtimePointer: Long, callInvoker: CallInvokerHolder): Boolean
20
+ external fun nativeCleanupRustCrate(runtimePointer: Long): Boolean
21
+
22
+ override fun installRustCrate(): Boolean {
23
+ val context = this.reactApplicationContext
24
+ return nativeInstallRustCrate(
25
+ context.javaScriptContextHolder!!.get(),
26
+ context.jsCallInvokerHolder!!
27
+ )
28
+ }
29
+
30
+ override fun cleanupRustCrate(): Boolean {
31
+ return nativeCleanupRustCrate(
32
+ this.reactApplicationContext.javaScriptContextHolder!!.get()
33
+ )
34
+ }
35
+
36
+ companion object {
37
+ const val NAME = "Zcam1Sdk"
38
+
39
+ init {
40
+ System.loadLibrary("zcam1-sdk")
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,34 @@
1
+ // Generated by uniffi-bindgen-react-native
2
+ package com.succinctlabs.zcam1sdk
3
+
4
+ import com.facebook.react.TurboReactPackage
5
+ import com.facebook.react.bridge.NativeModule
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.module.model.ReactModuleInfo
8
+ import com.facebook.react.module.model.ReactModuleInfoProvider
9
+ import java.util.HashMap
10
+
11
+ class Zcam1SdkPackage : TurboReactPackage() {
12
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
13
+ return if (name == Zcam1SdkModule.NAME) {
14
+ Zcam1SdkModule(reactContext)
15
+ } else {
16
+ null
17
+ }
18
+ }
19
+
20
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
21
+ return ReactModuleInfoProvider {
22
+ val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
23
+ moduleInfos[Zcam1SdkModule.NAME] = ReactModuleInfo(
24
+ Zcam1SdkModule.NAME,
25
+ Zcam1SdkModule.NAME,
26
+ false, // canOverrideExistingModule
27
+ false, // needsEagerInit
28
+ false, // isCxxModule
29
+ true // isTurboModule
30
+ )
31
+ moduleInfos
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,80 @@
1
+ package com.succinctlabs.zcam1sdk.camera
2
+
3
+ /**
4
+ * Pure utility functions for camera operations.
5
+ * No Android framework dependencies — testable with plain JUnit.
6
+ *
7
+ * Flash and lens facing constants mirror CameraX values so they can be
8
+ * passed directly to ImageCapture.flashMode and CameraSelector.requireLensFacing.
9
+ */
10
+ object CameraUtils {
11
+
12
+ // 0.75g threshold in m/s² (matching iOS CoreMotion ±0.75g)
13
+ // 0.75 * 9.80665 = 7.354987...
14
+ private const val GRAVITY_THRESHOLD = 7.355f
15
+
16
+ // ImageCapture flash mode constants
17
+ const val FLASH_AUTO = 0 // ImageCapture.FLASH_MODE_AUTO
18
+ const val FLASH_ON = 1 // ImageCapture.FLASH_MODE_ON
19
+ const val FLASH_OFF = 2 // ImageCapture.FLASH_MODE_OFF
20
+
21
+ // CameraSelector lens facing constants
22
+ const val LENS_FACING_FRONT = 0 // CameraSelector.LENS_FACING_FRONT
23
+ const val LENS_FACING_BACK = 1 // CameraSelector.LENS_FACING_BACK
24
+
25
+ /**
26
+ * Compute device orientation from accelerometer readings.
27
+ *
28
+ * Android accelerometer returns m/s² including gravity reaction force.
29
+ * Portrait upright: y ≈ +9.81, Upside down: y ≈ -9.81
30
+ * Landscape left (CCW): x ≈ +9.81, Landscape right (CW): x ≈ -9.81
31
+ *
32
+ * When no axis exceeds the threshold (device at ~45°), the current
33
+ * orientation is preserved (deadzone behavior matching iOS).
34
+ *
35
+ * @param x Accelerometer x-axis value in m/s²
36
+ * @param y Accelerometer y-axis value in m/s²
37
+ * @param current Current orientation to preserve in deadzone
38
+ * @return Orientation in degrees: 0, 90, 180, or 270
39
+ */
40
+ fun computeOrientation(x: Float, y: Float, current: Int): Int {
41
+ return when {
42
+ x > GRAVITY_THRESHOLD -> 90 // landscape left
43
+ x < -GRAVITY_THRESHOLD -> 270 // landscape right
44
+ y > GRAVITY_THRESHOLD -> 0 // portrait
45
+ y < -GRAVITY_THRESHOLD -> 180 // upside down
46
+ else -> current // deadzone: keep current
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Map flash mode string to CameraX integer constant.
52
+ * @param mode "on", "off", or "auto" (case-insensitive)
53
+ * @return Flash mode constant (FLASH_ON, FLASH_OFF, or FLASH_AUTO)
54
+ */
55
+ fun mapFlashMode(mode: String): Int = when (mode.lowercase()) {
56
+ "on" -> FLASH_ON
57
+ "auto" -> FLASH_AUTO
58
+ else -> FLASH_OFF
59
+ }
60
+
61
+ /**
62
+ * Clamp zoom ratio to valid range [1.0, maxZoom].
63
+ * @param requested Desired zoom ratio
64
+ * @param maxZoom Maximum zoom ratio from camera info
65
+ * @return Clamped zoom ratio
66
+ */
67
+ fun clampZoom(requested: Float, maxZoom: Float): Float {
68
+ return requested.coerceIn(1.0f, maxZoom)
69
+ }
70
+
71
+ /**
72
+ * Map lens facing string to CameraX integer constant.
73
+ * @param facing "front" or "back" (case-insensitive)
74
+ * @return Lens facing constant (LENS_FACING_FRONT or LENS_FACING_BACK)
75
+ */
76
+ fun mapLensFacing(facing: String): Int = when (facing.lowercase()) {
77
+ "front" -> LENS_FACING_FRONT
78
+ else -> LENS_FACING_BACK
79
+ }
80
+ }