@dittolive/ditto 4.4.4 → 4.5.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 (289) hide show
  1. package/DittoReactNative.podspec +27 -0
  2. package/README.md +68 -51
  3. package/node/ditto.cjs.js +1639 -851
  4. package/node/ditto.darwin-arm64.node +0 -0
  5. package/node/ditto.darwin-x64.node +0 -0
  6. package/node/ditto.linux-arm.node +0 -0
  7. package/node/ditto.linux-x64.node +0 -0
  8. package/node/ditto.win32-x64.node +0 -0
  9. package/node/transports.darwin-arm64.node +0 -0
  10. package/node/transports.darwin-x64.node +0 -0
  11. package/package.json +34 -38
  12. package/react-native/android/CMakeLists.txt +37 -0
  13. package/react-native/android/build.gradle +203 -0
  14. package/react-native/android/cpp-adapter.cpp +254 -0
  15. package/react-native/android/gradle.properties +5 -0
  16. package/react-native/android/src/main/AndroidManifest.xml +4 -0
  17. package/react-native/android/src/main/java/com/dittolive/rnsdk/DittoRNSDKModule.java +85 -0
  18. package/react-native/android/src/main/java/com/dittolive/rnsdk/DittoRNSDKPackage.java +28 -0
  19. package/react-native/boost/boost/assert.hpp +85 -0
  20. package/react-native/boost/boost/config/abi/borland_prefix.hpp +27 -0
  21. package/react-native/boost/boost/config/abi/borland_suffix.hpp +12 -0
  22. package/react-native/boost/boost/config/abi/msvc_prefix.hpp +22 -0
  23. package/react-native/boost/boost/config/abi/msvc_suffix.hpp +8 -0
  24. package/react-native/boost/boost/config/abi_prefix.hpp +25 -0
  25. package/react-native/boost/boost/config/abi_suffix.hpp +25 -0
  26. package/react-native/boost/boost/config/assert_cxx03.hpp +211 -0
  27. package/react-native/boost/boost/config/assert_cxx11.hpp +209 -0
  28. package/react-native/boost/boost/config/assert_cxx14.hpp +47 -0
  29. package/react-native/boost/boost/config/assert_cxx17.hpp +62 -0
  30. package/react-native/boost/boost/config/assert_cxx20.hpp +59 -0
  31. package/react-native/boost/boost/config/assert_cxx98.hpp +23 -0
  32. package/react-native/boost/boost/config/auto_link.hpp +525 -0
  33. package/react-native/boost/boost/config/compiler/borland.hpp +339 -0
  34. package/react-native/boost/boost/config/compiler/clang.hpp +366 -0
  35. package/react-native/boost/boost/config/compiler/clang_version.hpp +83 -0
  36. package/react-native/boost/boost/config/compiler/codegear.hpp +385 -0
  37. package/react-native/boost/boost/config/compiler/comeau.hpp +59 -0
  38. package/react-native/boost/boost/config/compiler/common_edg.hpp +183 -0
  39. package/react-native/boost/boost/config/compiler/compaq_cxx.hpp +19 -0
  40. package/react-native/boost/boost/config/compiler/cray.hpp +446 -0
  41. package/react-native/boost/boost/config/compiler/diab.hpp +26 -0
  42. package/react-native/boost/boost/config/compiler/digitalmars.hpp +143 -0
  43. package/react-native/boost/boost/config/compiler/gcc.hpp +383 -0
  44. package/react-native/boost/boost/config/compiler/gcc_xml.hpp +114 -0
  45. package/react-native/boost/boost/config/compiler/greenhills.hpp +28 -0
  46. package/react-native/boost/boost/config/compiler/hp_acc.hpp +149 -0
  47. package/react-native/boost/boost/config/compiler/intel.hpp +577 -0
  48. package/react-native/boost/boost/config/compiler/kai.hpp +33 -0
  49. package/react-native/boost/boost/config/compiler/metrowerks.hpp +198 -0
  50. package/react-native/boost/boost/config/compiler/mpw.hpp +140 -0
  51. package/react-native/boost/boost/config/compiler/nvcc.hpp +61 -0
  52. package/react-native/boost/boost/config/compiler/pathscale.hpp +138 -0
  53. package/react-native/boost/boost/config/compiler/pgi.hpp +23 -0
  54. package/react-native/boost/boost/config/compiler/sgi_mipspro.hpp +29 -0
  55. package/react-native/boost/boost/config/compiler/sunpro_cc.hpp +222 -0
  56. package/react-native/boost/boost/config/compiler/vacpp.hpp +186 -0
  57. package/react-native/boost/boost/config/compiler/visualc.hpp +391 -0
  58. package/react-native/boost/boost/config/compiler/xlcpp.hpp +299 -0
  59. package/react-native/boost/boost/config/compiler/xlcpp_zos.hpp +173 -0
  60. package/react-native/boost/boost/config/detail/cxx_composite.hpp +203 -0
  61. package/react-native/boost/boost/config/detail/posix_features.hpp +95 -0
  62. package/react-native/boost/boost/config/detail/select_compiler_config.hpp +157 -0
  63. package/react-native/boost/boost/config/detail/select_platform_config.hpp +147 -0
  64. package/react-native/boost/boost/config/detail/select_stdlib_config.hpp +121 -0
  65. package/react-native/boost/boost/config/detail/suffix.hpp +1294 -0
  66. package/react-native/boost/boost/config/header_deprecated.hpp +26 -0
  67. package/react-native/boost/boost/config/helper_macros.hpp +37 -0
  68. package/react-native/boost/boost/config/no_tr1/cmath.hpp +28 -0
  69. package/react-native/boost/boost/config/no_tr1/complex.hpp +28 -0
  70. package/react-native/boost/boost/config/no_tr1/functional.hpp +28 -0
  71. package/react-native/boost/boost/config/no_tr1/memory.hpp +28 -0
  72. package/react-native/boost/boost/config/no_tr1/utility.hpp +28 -0
  73. package/react-native/boost/boost/config/platform/aix.hpp +33 -0
  74. package/react-native/boost/boost/config/platform/amigaos.hpp +15 -0
  75. package/react-native/boost/boost/config/platform/beos.hpp +26 -0
  76. package/react-native/boost/boost/config/platform/bsd.hpp +83 -0
  77. package/react-native/boost/boost/config/platform/cloudabi.hpp +18 -0
  78. package/react-native/boost/boost/config/platform/cray.hpp +18 -0
  79. package/react-native/boost/boost/config/platform/cygwin.hpp +71 -0
  80. package/react-native/boost/boost/config/platform/haiku.hpp +31 -0
  81. package/react-native/boost/boost/config/platform/hpux.hpp +87 -0
  82. package/react-native/boost/boost/config/platform/irix.hpp +31 -0
  83. package/react-native/boost/boost/config/platform/linux.hpp +106 -0
  84. package/react-native/boost/boost/config/platform/macos.hpp +87 -0
  85. package/react-native/boost/boost/config/platform/qnxnto.hpp +31 -0
  86. package/react-native/boost/boost/config/platform/solaris.hpp +31 -0
  87. package/react-native/boost/boost/config/platform/symbian.hpp +97 -0
  88. package/react-native/boost/boost/config/platform/vms.hpp +25 -0
  89. package/react-native/boost/boost/config/platform/vxworks.hpp +422 -0
  90. package/react-native/boost/boost/config/platform/wasm.hpp +23 -0
  91. package/react-native/boost/boost/config/platform/win32.hpp +90 -0
  92. package/react-native/boost/boost/config/platform/zos.hpp +32 -0
  93. package/react-native/boost/boost/config/pragma_message.hpp +31 -0
  94. package/react-native/boost/boost/config/requires_threads.hpp +92 -0
  95. package/react-native/boost/boost/config/stdlib/dinkumware.hpp +324 -0
  96. package/react-native/boost/boost/config/stdlib/libcomo.hpp +93 -0
  97. package/react-native/boost/boost/config/stdlib/libcpp.hpp +180 -0
  98. package/react-native/boost/boost/config/stdlib/libstdcpp3.hpp +482 -0
  99. package/react-native/boost/boost/config/stdlib/modena.hpp +79 -0
  100. package/react-native/boost/boost/config/stdlib/msl.hpp +98 -0
  101. package/react-native/boost/boost/config/stdlib/roguewave.hpp +208 -0
  102. package/react-native/boost/boost/config/stdlib/sgi.hpp +168 -0
  103. package/react-native/boost/boost/config/stdlib/stlport.hpp +258 -0
  104. package/react-native/boost/boost/config/stdlib/vacpp.hpp +74 -0
  105. package/react-native/boost/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  106. package/react-native/boost/boost/config/user.hpp +133 -0
  107. package/react-native/boost/boost/config/warning_disable.hpp +47 -0
  108. package/react-native/boost/boost/config/workaround.hpp +305 -0
  109. package/react-native/boost/boost/config.hpp +67 -0
  110. package/react-native/boost/boost/cstdint.hpp +556 -0
  111. package/react-native/boost/boost/intrusive_ptr.hpp +18 -0
  112. package/react-native/boost/boost/smart_ptr/detail/atomic_count.hpp +103 -0
  113. package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc.hpp +79 -0
  114. package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +63 -0
  115. package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +88 -0
  116. package/react-native/boost/boost/smart_ptr/detail/atomic_count_nt.hpp +66 -0
  117. package/react-native/boost/boost/smart_ptr/detail/atomic_count_pt.hpp +104 -0
  118. package/react-native/boost/boost/smart_ptr/detail/atomic_count_spin.hpp +69 -0
  119. package/react-native/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp +67 -0
  120. package/react-native/boost/boost/smart_ptr/detail/atomic_count_sync.hpp +72 -0
  121. package/react-native/boost/boost/smart_ptr/detail/atomic_count_win32.hpp +70 -0
  122. package/react-native/boost/boost/smart_ptr/detail/local_counted_base.hpp +148 -0
  123. package/react-native/boost/boost/smart_ptr/detail/local_sp_deleter.hpp +91 -0
  124. package/react-native/boost/boost/smart_ptr/detail/operator_bool.hpp +64 -0
  125. package/react-native/boost/boost/smart_ptr/detail/requires_cxx11.hpp +23 -0
  126. package/react-native/boost/boost/smart_ptr/detail/shared_count.hpp +707 -0
  127. package/react-native/boost/boost/smart_ptr/detail/sp_convertible.hpp +92 -0
  128. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base.hpp +92 -0
  129. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +163 -0
  130. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_aix.hpp +152 -0
  131. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +185 -0
  132. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +148 -0
  133. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +170 -0
  134. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +200 -0
  135. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +194 -0
  136. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +179 -0
  137. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +186 -0
  138. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_nt.hpp +119 -0
  139. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp +147 -0
  140. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +174 -0
  141. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_spin.hpp +141 -0
  142. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +147 -0
  143. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_sync.hpp +165 -0
  144. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +163 -0
  145. package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp +140 -0
  146. package/react-native/boost/boost/smart_ptr/detail/sp_counted_impl.hpp +309 -0
  147. package/react-native/boost/boost/smart_ptr/detail/sp_disable_deprecated.hpp +40 -0
  148. package/react-native/boost/boost/smart_ptr/detail/sp_forward.hpp +52 -0
  149. package/react-native/boost/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +27 -0
  150. package/react-native/boost/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +69 -0
  151. package/react-native/boost/boost/smart_ptr/detail/sp_interlocked.hpp +173 -0
  152. package/react-native/boost/boost/smart_ptr/detail/sp_noexcept.hpp +48 -0
  153. package/react-native/boost/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
  154. package/react-native/boost/boost/smart_ptr/detail/sp_obsolete.hpp +32 -0
  155. package/react-native/boost/boost/smart_ptr/detail/sp_thread_pause.hpp +51 -0
  156. package/react-native/boost/boost/smart_ptr/detail/sp_thread_sleep.hpp +104 -0
  157. package/react-native/boost/boost/smart_ptr/detail/sp_thread_yield.hpp +100 -0
  158. package/react-native/boost/boost/smart_ptr/detail/sp_typeinfo_.hpp +58 -0
  159. package/react-native/boost/boost/smart_ptr/detail/sp_win32_sleep.hpp +49 -0
  160. package/react-native/boost/boost/smart_ptr/intrusive_ptr.hpp +409 -0
  161. package/react-native/boost/boost/smart_ptr/intrusive_ref_counter.hpp +188 -0
  162. package/react-native/cpp/include/Attachment.h +16 -0
  163. package/react-native/cpp/include/Authentication.h +23 -0
  164. package/react-native/cpp/include/Collection.h +13 -0
  165. package/react-native/cpp/include/DQL.h +21 -0
  166. package/react-native/cpp/include/Document.h +17 -0
  167. package/react-native/cpp/include/Identity.h +17 -0
  168. package/react-native/cpp/include/Lifecycle.h +16 -0
  169. package/react-native/cpp/include/LiveQuery.h +17 -0
  170. package/react-native/cpp/include/Logger.h +22 -0
  171. package/react-native/cpp/include/Misc.h +26 -0
  172. package/react-native/cpp/include/Presence.h +14 -0
  173. package/react-native/cpp/include/RetainableState.h +24 -0
  174. package/react-native/cpp/include/SmallPeerInfo.h +17 -0
  175. package/react-native/cpp/include/Transports.h +25 -0
  176. package/react-native/cpp/include/TypedArray.hpp +167 -0
  177. package/react-native/cpp/include/Utils.h +61 -0
  178. package/react-native/cpp/include/main.h +10 -0
  179. package/react-native/cpp/src/Attachment.cpp +86 -0
  180. package/react-native/cpp/src/Authentication.cpp +224 -0
  181. package/react-native/cpp/src/Collection.cpp +54 -0
  182. package/react-native/cpp/src/DQL.cpp +254 -0
  183. package/react-native/cpp/src/Document.cpp +146 -0
  184. package/react-native/cpp/src/Identity.cpp +123 -0
  185. package/react-native/cpp/src/Lifecycle.cpp +75 -0
  186. package/react-native/cpp/src/LiveQuery.cpp +64 -0
  187. package/react-native/cpp/src/Logger.cpp +200 -0
  188. package/react-native/cpp/src/Misc.cpp +271 -0
  189. package/react-native/cpp/src/Presence.cpp +77 -0
  190. package/react-native/cpp/src/RetainableState.cpp +15 -0
  191. package/react-native/cpp/src/SmallPeerInfo.cpp +108 -0
  192. package/react-native/cpp/src/Transports.cpp +270 -0
  193. package/react-native/cpp/src/TypedArray.cpp +303 -0
  194. package/react-native/cpp/src/Utils.cpp +138 -0
  195. package/react-native/cpp/src/main.cpp +149 -0
  196. package/react-native/dittoffi/dittoffi.h +4698 -0
  197. package/react-native/dittoffi/ifaddrs.cpp +385 -0
  198. package/react-native/dittoffi/ifaddrs.h +206 -0
  199. package/react-native/ios/DittoRNSDK.h +7 -0
  200. package/react-native/ios/DittoRNSDK.mm +107 -0
  201. package/react-native/ios/YeetJSIUtils.h +60 -0
  202. package/react-native/ios/YeetJSIUtils.mm +196 -0
  203. package/react-native/lib/commonjs/ditto.rn.js +93 -0
  204. package/react-native/lib/commonjs/ditto.rn.js.map +1 -0
  205. package/react-native/lib/commonjs/index.js +14 -0
  206. package/react-native/lib/commonjs/index.js.map +1 -0
  207. package/react-native/lib/module/ditto.rn.js +83 -0
  208. package/react-native/lib/module/ditto.rn.js.map +1 -0
  209. package/react-native/lib/module/index.js +13 -0
  210. package/react-native/lib/module/index.js.map +1 -0
  211. package/react-native/lib/typescript/ditto.rn.d.ts +15 -0
  212. package/react-native/lib/typescript/ditto.rn.d.ts.map +1 -0
  213. package/react-native/lib/typescript/index.d.ts +1 -0
  214. package/react-native/lib/typescript/index.d.ts.map +1 -0
  215. package/react-native/scripts/ruby/include_local_boost.rb +78 -0
  216. package/react-native/src/ditto.rn.ts +91 -0
  217. package/react-native/src/environment/environment.fallback.ts +4 -0
  218. package/react-native/src/index.ts +26 -0
  219. package/react-native/src/sources/@cbor-redux.ts +2 -0
  220. package/react-native/src/sources/@ditto.core.ts +1 -0
  221. package/react-native/src/sources/@environment.ts +2 -0
  222. package/react-native/src/sources/attachment-fetch-event.ts +54 -0
  223. package/react-native/src/sources/attachment-fetcher-manager.ts +129 -0
  224. package/react-native/src/sources/attachment-fetcher.ts +124 -0
  225. package/react-native/src/sources/attachment-token.ts +48 -0
  226. package/react-native/src/sources/attachment.ts +59 -0
  227. package/react-native/src/sources/augment.ts +89 -0
  228. package/react-native/src/sources/authenticator.ts +314 -0
  229. package/react-native/src/sources/base-pending-cursor-operation.ts +237 -0
  230. package/react-native/src/sources/base-pending-id-specific-operation.ts +109 -0
  231. package/react-native/src/sources/bridge.ts +549 -0
  232. package/react-native/src/sources/build-time-constants.ts +4 -0
  233. package/react-native/src/sources/cbor.ts +35 -0
  234. package/react-native/src/sources/collection-interface.ts +67 -0
  235. package/react-native/src/sources/collection.ts +212 -0
  236. package/react-native/src/sources/collections-event.ts +99 -0
  237. package/react-native/src/sources/counter.ts +77 -0
  238. package/react-native/src/sources/ditto.ts +945 -0
  239. package/react-native/src/sources/document-id.ts +159 -0
  240. package/react-native/src/sources/document-path.ts +303 -0
  241. package/react-native/src/sources/document.ts +192 -0
  242. package/react-native/src/sources/epilogue.ts +24 -0
  243. package/react-native/src/sources/error-codes.ts +52 -0
  244. package/react-native/src/sources/error.ts +203 -0
  245. package/react-native/src/sources/essentials.ts +53 -0
  246. package/react-native/src/sources/ffi-error.ts +117 -0
  247. package/react-native/src/sources/ffi.ts +1972 -0
  248. package/react-native/src/sources/identity.ts +163 -0
  249. package/react-native/src/sources/init.ts +70 -0
  250. package/react-native/src/sources/internal.ts +113 -0
  251. package/react-native/src/sources/keep-alive.ts +69 -0
  252. package/react-native/src/sources/key-path.ts +195 -0
  253. package/react-native/src/sources/live-query-event.ts +208 -0
  254. package/react-native/src/sources/live-query-manager.ts +101 -0
  255. package/react-native/src/sources/live-query.ts +164 -0
  256. package/react-native/src/sources/logger.ts +196 -0
  257. package/react-native/src/sources/observer-manager.ts +175 -0
  258. package/react-native/src/sources/observer.ts +77 -0
  259. package/react-native/src/sources/pending-collections-operation.ts +232 -0
  260. package/react-native/src/sources/pending-cursor-operation.ts +218 -0
  261. package/react-native/src/sources/pending-id-specific-operation.ts +216 -0
  262. package/react-native/src/sources/presence-manager.ts +160 -0
  263. package/react-native/src/sources/presence.ts +238 -0
  264. package/react-native/src/sources/query-result-item.ts +116 -0
  265. package/react-native/src/sources/query-result.ts +55 -0
  266. package/react-native/src/sources/register.ts +92 -0
  267. package/react-native/src/sources/small-peer-info.ts +176 -0
  268. package/react-native/src/sources/static-tcp-client.ts +6 -0
  269. package/react-native/src/sources/store-observer.ts +176 -0
  270. package/react-native/src/sources/store.ts +365 -0
  271. package/react-native/src/sources/subscription-manager.ts +98 -0
  272. package/react-native/src/sources/subscription.ts +88 -0
  273. package/react-native/src/sources/sync-subscription.ts +90 -0
  274. package/react-native/src/sources/sync.ts +495 -0
  275. package/react-native/src/sources/test-helpers.ts +24 -0
  276. package/react-native/src/sources/transport-conditions-manager.ts +104 -0
  277. package/react-native/src/sources/transport-config.ts +428 -0
  278. package/react-native/src/sources/update-result.ts +66 -0
  279. package/react-native/src/sources/update-results-map.ts +57 -0
  280. package/react-native/src/sources/websocket-client.ts +6 -0
  281. package/react-native/src/sources/write-transaction-collection.ts +122 -0
  282. package/react-native/src/sources/write-transaction-pending-cursor-operation.ts +101 -0
  283. package/react-native/src/sources/write-transaction-pending-id-specific-operation.ts +72 -0
  284. package/react-native/src/sources/write-transaction.ts +119 -0
  285. package/react-native.config.js +9 -0
  286. package/types/ditto.d.ts +1230 -798
  287. package/web/ditto.es6.js +1 -1
  288. package/web/ditto.umd.js +1 -1
  289. package/web/ditto.wasm +0 -0
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,17 +1,29 @@
1
1
  {
2
- "name": "@dittolive/ditto",
3
- "version": "4.4.4",
4
- "description": "Ditto is a cross-platform embeddable NoSQL database that can sync with or without an internet connection.",
5
- "homepage": "https://ditto.live",
6
- "license": "SEE LICENSE IN LICENSE.md",
7
-
8
- "author": {
9
- "name": "DittoLive Incorporated.",
10
- "email": "contact@ditto.live",
11
- "url": "https://ditto.live"
2
+ "author" : {
3
+ "email" : "contact@ditto.live",
4
+ "name" : "DittoLive Incorporated.",
5
+ "url" : "https://ditto.live"
12
6
  },
13
-
14
- "keywords": [
7
+ "browser" : "web/ditto.es6.js",
8
+ "browser/umd" : "web/ditto.umd.js",
9
+ "browserslist" : [
10
+ "defaults"
11
+ ],
12
+ "dependencies" : {
13
+ "@ungap/weakrefs" : "^0.2.0",
14
+ "cbor-js" : "^0.1.0",
15
+ "cbor-redux" : "^1.0.0",
16
+ "fastestsmallesttextencoderdecoder" : "^1.0.22"
17
+ },
18
+ "description" : "Ditto is a cross-platform embeddable NoSQL database that can sync with or without an internet connection.",
19
+ "devDependencies" : {
20
+ "serve" : "^14.2.0"
21
+ },
22
+ "engines" : {
23
+ "node" : ">=14"
24
+ },
25
+ "homepage" : "https://ditto.live",
26
+ "keywords" : [
15
27
  "ditto",
16
28
  "dittolive",
17
29
  "webassembly",
@@ -21,30 +33,14 @@
21
33
  "sync",
22
34
  "p2p"
23
35
  ],
24
-
25
- "engines": {
26
- "node": ">=14"
27
- },
28
-
29
- "browserslist": [
30
- "defaults"
31
- ],
32
-
33
- "main": "node/ditto.cjs.js",
34
- "browser": "web/ditto.es6.js",
35
- "browser/umd": "web/ditto.umd.js",
36
- "types": "types/ditto.d.ts",
37
-
38
- "scripts": {
39
- "play:web": "npx serve --listen 5285",
40
- "play:node": "node --experimental-repl-await --unhandled-rejections=strict playground.cjs"
41
- },
42
-
43
- "dependencies": {
44
- "cbor-redux": "^1.0.0"
36
+ "license" : "SEE LICENSE IN LICENSE.md",
37
+ "main" : "node/ditto.cjs.js",
38
+ "name" : "@dittolive/ditto",
39
+ "react-native" : "react-native/src/index.ts",
40
+ "scripts" : {
41
+ "play:node" : "node --experimental-repl-await --unhandled-rejections=strict playground.cjs",
42
+ "play:web" : "npx serve --listen 5285"
45
43
  },
46
-
47
- "devDependencies": {
48
- "serve": "^14.2.0"
49
- }
50
- }
44
+ "types" : "types/ditto.d.ts",
45
+ "version" : "4.5.0"
46
+ }
@@ -0,0 +1,37 @@
1
+ cmake_minimum_required(VERSION 3.9.0)
2
+
3
+ set (PACKAGE_NAME "cpp")
4
+ project(PACKAGE_NAME)
5
+ set (BUILD_DIR ../../../)
6
+ set(CMAKE_VERBOSE_MAKEFILE ON)
7
+ set(CMAKE_CXX_STANDARD 17)
8
+
9
+ include_directories(
10
+ ../cpp/include
11
+ ../dittoffi
12
+ ../boost
13
+ )
14
+
15
+ file(GLOB SOURCES "../cpp/src/*.cpp")
16
+ add_library(
17
+ ${PACKAGE_NAME}
18
+ SHARED
19
+ ${SOURCES}
20
+ ../dittoffi/ifaddrs.cpp
21
+ ./cpp-adapter.cpp
22
+
23
+ )
24
+
25
+ find_package(ReactAndroid REQUIRED CONFIG)
26
+ find_library(log-lib log)
27
+
28
+ add_library(ditto STATIC IMPORTED)
29
+ set_target_properties(ditto PROPERTIES IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/../dittoffi/android/${ANDROID_ABI}/libdittoffi.a")
30
+
31
+ target_link_libraries(
32
+ ${PACKAGE_NAME}
33
+ ditto
34
+ ${log-lib}
35
+ ReactAndroid::jsi
36
+ android
37
+ )
@@ -0,0 +1,203 @@
1
+ import java.nio.file.Paths
2
+
3
+ buildscript {
4
+ repositories {
5
+ google()
6
+ mavenCentral()
7
+ }
8
+ dependencies {
9
+ classpath 'com.android.tools.build:gradle:7.2.1'
10
+ }
11
+ }
12
+
13
+ def isNewArchitectureEnabled() {
14
+ return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
15
+ }
16
+
17
+ apply plugin: "com.android.library"
18
+
19
+
20
+ def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') }
21
+
22
+ if (isNewArchitectureEnabled()) {
23
+ apply plugin: 'com.facebook.react'
24
+ }
25
+
26
+ def getExtOrDefault(name) {
27
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["rnsdk_" + name]
28
+ }
29
+
30
+ def getExtOrIntegerDefault(name) {
31
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["rnsdk_" + name]).toInteger()
32
+ }
33
+
34
+ def found = false
35
+ def basePath = projectDir.toPath().normalize()
36
+
37
+ // Find node_modules inside the example project
38
+ def nodeModulesDir = Paths.get(basePath.getParent().toString(), "example/node_modules")
39
+ def reactNativeDir = Paths.get(nodeModulesDir.toString(), "react-native/android")
40
+ if (nodeModulesDir.toFile().exists() && reactNativeDir.toFile().exists()) {
41
+ found = true
42
+ }
43
+
44
+ if(!found){
45
+ // Node's module resolution algorithm searches up to the root directory,
46
+ // after which the base path will be null
47
+ while (basePath) {
48
+ nodeModulesDir = Paths.get(basePath.toString(), "node_modules")
49
+ reactNativeDir = Paths.get(nodeModulesDir.toString(), "react-native/android")
50
+ if (nodeModulesDir.toFile().exists() && reactNativeDir.toFile().exists()) {
51
+ found = true
52
+ break;
53
+ }
54
+ basePath = basePath.getParent()
55
+ }
56
+ }
57
+
58
+ if(!found) {
59
+ throw new GradleException(
60
+ "${project.name}: unable to locate React Native android sources. " +
61
+ "Ensure you have you installed React Native as a dependency in your project and try again.")
62
+ }
63
+
64
+ def nodeModulesPath = nodeModulesDir.toString().replace("\\", "/")
65
+ def reactNativePath = reactNativeDir.toString().replace("\\", "/")
66
+
67
+ def supportsNamespace() {
68
+ def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
69
+ def major = parsed[0].toInteger()
70
+ def minor = parsed[1].toInteger()
71
+
72
+ // Namespace support was added in 7.3.0
73
+ if (major == 7 && minor >= 3) {
74
+ return true
75
+ }
76
+
77
+ return major >= 8
78
+ }
79
+
80
+ android {
81
+ if (supportsNamespace()) {
82
+ namespace "com.dittolive.rnsdk"
83
+
84
+ sourceSets {
85
+ main {
86
+ manifest.srcFile "src/main/AndroidManifestNew.xml"
87
+ }
88
+ }
89
+ }
90
+
91
+ // ESSENTIAL for adding JSI
92
+ buildFeatures {
93
+ prefab true
94
+ }
95
+
96
+ ndkVersion getExtOrDefault("ndkVersion")
97
+ compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
98
+
99
+ defaultConfig {
100
+ minSdkVersion getExtOrIntegerDefault("minSdkVersion")
101
+ targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
102
+ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
103
+ externalNativeBuild {
104
+ cmake {
105
+ cppFlags "-O2 -frtti -fexceptions -Wall -fstack-protector-all"
106
+ // ESSENTIAL for adding JSI
107
+ arguments "-DANDROID_STL=c++_shared"
108
+ abiFilters "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
109
+ }
110
+ }
111
+ }
112
+
113
+ externalNativeBuild {
114
+ cmake {
115
+ path "CMakeLists.txt"
116
+ }
117
+ }
118
+
119
+ buildTypes {
120
+ release {
121
+ minifyEnabled false
122
+ }
123
+ }
124
+
125
+ lintOptions {
126
+ disable "GradleCompatible"
127
+ }
128
+
129
+ compileOptions {
130
+ sourceCompatibility JavaVersion.VERSION_1_8
131
+ targetCompatibility JavaVersion.VERSION_1_8
132
+ }
133
+
134
+ sourceSets {
135
+ main {
136
+ if (isNewArchitectureEnabled()) {
137
+ java.srcDirs += [
138
+ // This is needed to build Kotlin project with NewArch enabled
139
+ "${project.buildDir}/generated/source/codegen/java"
140
+ ]
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ repositories {
147
+ mavenCentral()
148
+ google()
149
+ }
150
+
151
+ dependencies {
152
+ // For < 0.71, this will be from the local maven repo
153
+ // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
154
+ //noinspection GradleDynamicVersion
155
+ implementation "com.facebook.react:react-native:+"
156
+ implementation files('libs/ditto.aar')
157
+ }
158
+
159
+ if (isNewArchitectureEnabled()) {
160
+ react {
161
+ jsRootDir = file("../src/")
162
+ libraryName = "DittoRNSDK"
163
+ codegenJavaPackageName = "com.dittolive.rnsdk"
164
+ }
165
+ }
166
+
167
+ task downloadBinaries {
168
+ doLast {
169
+ def defaultArchitectures = ['arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64']
170
+
171
+ defaultArchitectures.each { arch ->
172
+ def fileUrl = "https://software.ditto.live/react-native/ditto/4.5.0/android/${arch}/libdittoffi.a"
173
+
174
+ new File("${project.projectDir}/../dittoffi/android/${arch}").mkdirs()
175
+ def localFilePath = "${project.projectDir}/../dittoffi/android/${arch}/libdittoffi.a"
176
+
177
+ if (!new File(localFilePath).exists()) {
178
+ println "Downloading file for $arch: $fileUrl"
179
+ ant.get(src: fileUrl, dest: localFilePath, verbose: true)
180
+ } else {
181
+ println "File for $arch already exists, skipping download: $localFilePath"
182
+ }
183
+ }
184
+ }
185
+ }
186
+ preBuild.dependsOn downloadBinaries
187
+
188
+ task downloadAar {
189
+ def fileUrl = "https://software.ditto.live/react-native/ditto/4.5.0/android/ditto.aar"
190
+
191
+ doLast {
192
+ new File("${project.projectDir}/libs").mkdirs()
193
+
194
+ def localFilePath = "${project.projectDir}/libs/ditto.aar"
195
+ if (!new File(localFilePath).exists()) {
196
+ println "Downloading file: $fileUrl"
197
+ ant.get(src: fileUrl, dest: localFilePath, verbose: true)
198
+ } else {
199
+ println "File already exists, skipping download: $localFilePath"
200
+ }
201
+ }
202
+ }
203
+ preBuild.dependsOn downloadAar
@@ -0,0 +1,254 @@
1
+ #include <jni.h>
2
+ #include <sys/types.h>
3
+ #include <jsi/jsi.h>
4
+ #include <pthread.h>
5
+
6
+ #include "main.h"
7
+ #include "TypedArray.hpp"
8
+ #include "dittoffi.h"
9
+ #include <sstream>
10
+ #include <string>
11
+ #include <vector>
12
+ #include <android/log.h>
13
+
14
+ using namespace facebook::jsi;
15
+
16
+ JavaVM *java_vm;
17
+ jclass java_class;
18
+ jobject java_object;
19
+ jobject java_context;
20
+
21
+ /**
22
+ * A simple callback function that allows us to detach current JNI Environment
23
+ * when the thread
24
+ * See https://stackoverflow.com/a/30026231 for detailed explanation
25
+ */
26
+
27
+ void DeferThreadDetach(JNIEnv *env)
28
+ {
29
+ static pthread_key_t thread_key;
30
+
31
+ // Set up a Thread Specific Data key, and a callback that
32
+ // will be executed when a thread is destroyed.
33
+ // This is only done once, across all threads, and the value
34
+ // associated with the key for any given thread will initially
35
+ // be NULL.
36
+ static auto run_once = []
37
+ {
38
+ const auto err = pthread_key_create(&thread_key, [](void *ts_env)
39
+ {
40
+ if (ts_env) {
41
+ java_vm->DetachCurrentThread();
42
+ } });
43
+ if (err)
44
+ {
45
+ // Failed to create TSD key. Throw an exception if you want to.
46
+ }
47
+ return 0;
48
+ }();
49
+
50
+ // For the callback to actually be executed when a thread exits
51
+ // we need to associate a non-NULL value with the key on that thread.
52
+ // We can use the JNIEnv* as that value.
53
+ const auto ts_env = pthread_getspecific(thread_key);
54
+ if (!ts_env)
55
+ {
56
+ if (pthread_setspecific(thread_key, env))
57
+ {
58
+ // Failed to set thread-specific value for key. Throw an exception if you want to.
59
+ }
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Get a JNIEnv* valid for this thread, regardless of whether
65
+ * we're on a native thread or a Java thread.
66
+ * If the calling thread is not currently attached to the JVM
67
+ * it will be attached, and then automatically detached when the
68
+ * thread is destroyed.
69
+ *
70
+ * See https://stackoverflow.com/a/30026231 for detailed explanation
71
+ */
72
+ JNIEnv *GetJniEnv()
73
+ {
74
+ JNIEnv *env = nullptr;
75
+ // We still call GetEnv first to detect if the thread already
76
+ // is attached. This is done to avoid setting up a DetachCurrentThread
77
+ // call on a Java thread.
78
+
79
+ // g_vm is a global.
80
+ auto get_env_result = java_vm->GetEnv((void **)&env, JNI_VERSION_1_6);
81
+ if (get_env_result == JNI_EDETACHED)
82
+ {
83
+ if (java_vm->AttachCurrentThread(&env, NULL) == JNI_OK)
84
+ {
85
+ DeferThreadDetach(env);
86
+ }
87
+ else
88
+ {
89
+ // Failed to attach thread. Throw an exception if you want to.
90
+ }
91
+ }
92
+ else if (get_env_result == JNI_EVERSION)
93
+ {
94
+ // Unsupported JNI version. Throw an exception if you want to.
95
+ }
96
+ return env;
97
+ }
98
+
99
+ static jstring string2jstring(JNIEnv *env, const std::string &str)
100
+ {
101
+ return (*env).NewStringUTF(str.c_str());
102
+ }
103
+
104
+ void install(Runtime &jsiRuntime)
105
+ {
106
+ auto getDeviceName = Function::createFromHostFunction(jsiRuntime,
107
+ PropNameID::forAscii(jsiRuntime,
108
+ "getDeviceName"),
109
+ 0,
110
+ [](Runtime &runtime,
111
+ const Value &thisValue,
112
+ const Value *arguments,
113
+ size_t count) -> Value
114
+ {
115
+ JNIEnv *jniEnv = GetJniEnv();
116
+
117
+ java_class = jniEnv->GetObjectClass(
118
+ java_object);
119
+ jmethodID getDeviceName = jniEnv->GetMethodID(
120
+ java_class, "getDeviceName",
121
+ "()Ljava/lang/String;");
122
+ jobject result = jniEnv->CallObjectMethod(
123
+ java_object, getDeviceName);
124
+ const char *str = jniEnv->GetStringUTFChars(
125
+ (jstring)result, NULL);
126
+
127
+ return Value(runtime,
128
+ String::createFromUtf8(
129
+ runtime, str));
130
+ });
131
+
132
+ jsiRuntime.global().setProperty(jsiRuntime, "getDeviceName", std::move(getDeviceName));
133
+
134
+ auto createDirectory = Function::createFromHostFunction(jsiRuntime,
135
+ PropNameID::forAscii(jsiRuntime,
136
+ "createDirectory"),
137
+ 0,
138
+ [](Runtime &runtime,
139
+ const Value &thisValue,
140
+ const Value *arguments,
141
+ size_t count) -> Value
142
+ {
143
+ std::string path = arguments[0].getString(runtime).utf8(runtime);
144
+ JNIEnv *jniEnv = GetJniEnv();
145
+
146
+ jclass localJavaClass = jniEnv->GetObjectClass(java_object);
147
+ jmethodID createDirectory = jniEnv->GetMethodID(localJavaClass, "createDirectory", "(Ljava/lang/String;)Ljava/lang/String;");
148
+ jstring jPath = string2jstring(jniEnv, path);
149
+ jobject result = jniEnv->CallObjectMethod(java_object, createDirectory, jPath);
150
+
151
+ const char *str = jniEnv->GetStringUTFChars((jstring)result, NULL);
152
+
153
+ jniEnv->ReleaseStringUTFChars((jstring)result, str);
154
+ jniEnv->DeleteLocalRef(jPath);
155
+ jniEnv->DeleteLocalRef(localJavaClass);
156
+ jniEnv->DeleteLocalRef(result);
157
+
158
+ return Value(runtime, String::createFromUtf8(runtime, str));
159
+ });
160
+
161
+ jsiRuntime.global().setProperty(jsiRuntime, "createDirectory", std::move(createDirectory));
162
+
163
+ auto getRandomValues = Function::createFromHostFunction(jsiRuntime,
164
+ PropNameID::forUtf8(jsiRuntime, "getRandomValues"),
165
+ 1,
166
+ [](Runtime &runtime,
167
+ const Value &thisArg,
168
+ const Value *args,
169
+ size_t count) -> Value
170
+ {
171
+ TypedArrayBase typedArrayBase(runtime, args[0].asObject(runtime));
172
+ auto byteLength = typedArrayBase.byteLength(runtime);
173
+
174
+ JNIEnv *jniEnv = GetJniEnv();
175
+ jclass clazz = jniEnv->GetObjectClass(java_object);
176
+ jmethodID getRandomValues = jniEnv->GetMethodID(clazz, "getRandomValues", "(I)[B");
177
+ auto b = (jbyteArray)jniEnv->CallObjectMethod(java_object,
178
+ getRandomValues,
179
+ byteLength);
180
+ jboolean isCopy = true;
181
+ jbyte *values = jniEnv->GetByteArrayElements(b, &isCopy);
182
+ jniEnv->DeleteLocalRef(b);
183
+
184
+ auto randomValues = reinterpret_cast<std::byte *>(values);
185
+
186
+ auto typedArray = TypedArray<TypedArrayKind::Uint8Array>(runtime, byteLength);
187
+ auto arrayBuffer = typedArray.getBuffer(runtime);
188
+ memcpy(arrayBuffer.data(runtime), reinterpret_cast<std::byte *>(randomValues), byteLength);
189
+ return typedArray;
190
+ });
191
+
192
+ jsiRuntime.global().setProperty(jsiRuntime, "getRandomValues", std::move(getRandomValues));
193
+
194
+ auto ditto_sdk_transports_set_android_context = Function::createFromHostFunction(jsiRuntime,
195
+ PropNameID::forUtf8(
196
+ jsiRuntime,
197
+ "ditto_sdk_transports_set_android_context"),
198
+ 1,
199
+ [](Runtime &runtime,
200
+ const Value &thisArg,
201
+ const Value *args,
202
+ size_t count) -> Value {
203
+
204
+ return ::ditto_sdk_transports_set_android_context(
205
+ GetJniEnv(),
206
+ java_context);
207
+ });
208
+
209
+ jsiRuntime.global().setProperty(jsiRuntime, "ditto_sdk_transports_set_android_context",
210
+ std::move(ditto_sdk_transports_set_android_context));
211
+
212
+ auto ditto_sdk_transports_android_missing_permissions = Function::createFromHostFunction(
213
+ jsiRuntime,
214
+ PropNameID::forUtf8(jsiRuntime, "ditto_sdk_transports_android_missing_permissions"),
215
+ 1,
216
+ [](Runtime &runtime,
217
+ const Value &thisArg,
218
+ const Value *args,
219
+ size_t count) -> Value {
220
+ char *result = ::ditto_sdk_transports_android_missing_permissions();
221
+ std::vector<std::string> lines;
222
+ std::stringstream ss(result);
223
+ std::string line;
224
+ while (std::getline(ss, line, '\n')) {
225
+ lines.push_back(line);
226
+ }
227
+
228
+ Array jsiArray(runtime, lines.size());
229
+ for (size_t i = 0; i < lines.size(); ++i) {
230
+ jsiArray.setValueAtIndex(runtime, i, String::createFromUtf8(runtime, lines[i]));
231
+ }
232
+
233
+ return jsiArray;
234
+ });
235
+
236
+ jsiRuntime.global().setProperty(jsiRuntime, "ditto_sdk_transports_android_missing_permissions",
237
+ std::move(ditto_sdk_transports_android_missing_permissions));
238
+ }
239
+
240
+ extern "C" JNIEXPORT void JNICALL
241
+ Java_com_dittolive_rnsdk_DittoRNSDKModule_nativeInstall(JNIEnv *env, jobject thiz, jobject context,
242
+ jlong jsiPtr) {
243
+ // Save context, module, java_vm objects globally (thread-safe, as opposed to JNIEnv)
244
+ java_context = env->NewGlobalRef(context);
245
+ java_object = env->NewGlobalRef(thiz);
246
+ env->GetJavaVM(&java_vm);
247
+
248
+ // Install JSI
249
+ Runtime *runtime = reinterpret_cast<Runtime *>(jsiPtr);
250
+ if (runtime) {
251
+ sharedjsi::install(*runtime);
252
+ install(*runtime);
253
+ }
254
+ }
@@ -0,0 +1,5 @@
1
+ rnsdk_kotlinVersion=1.7.0
2
+ rnsdk_minSdkVersion=24
3
+ rnsdk_targetSdkVersion=31
4
+ rnsdk_compileSdkVersion=31
5
+ rnsdk_ndkversion=21.4.7075529
@@ -0,0 +1,4 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
+ package="com.dittolive.rnsdk">
3
+
4
+ </manifest>