@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.
- package/DittoReactNative.podspec +27 -0
- package/README.md +68 -51
- package/node/ditto.cjs.js +1639 -851
- package/node/ditto.darwin-arm64.node +0 -0
- package/node/ditto.darwin-x64.node +0 -0
- package/node/ditto.linux-arm.node +0 -0
- package/node/ditto.linux-x64.node +0 -0
- package/node/ditto.win32-x64.node +0 -0
- package/node/transports.darwin-arm64.node +0 -0
- package/node/transports.darwin-x64.node +0 -0
- package/package.json +34 -38
- package/react-native/android/CMakeLists.txt +37 -0
- package/react-native/android/build.gradle +203 -0
- package/react-native/android/cpp-adapter.cpp +254 -0
- package/react-native/android/gradle.properties +5 -0
- package/react-native/android/src/main/AndroidManifest.xml +4 -0
- package/react-native/android/src/main/java/com/dittolive/rnsdk/DittoRNSDKModule.java +85 -0
- package/react-native/android/src/main/java/com/dittolive/rnsdk/DittoRNSDKPackage.java +28 -0
- package/react-native/boost/boost/assert.hpp +85 -0
- package/react-native/boost/boost/config/abi/borland_prefix.hpp +27 -0
- package/react-native/boost/boost/config/abi/borland_suffix.hpp +12 -0
- package/react-native/boost/boost/config/abi/msvc_prefix.hpp +22 -0
- package/react-native/boost/boost/config/abi/msvc_suffix.hpp +8 -0
- package/react-native/boost/boost/config/abi_prefix.hpp +25 -0
- package/react-native/boost/boost/config/abi_suffix.hpp +25 -0
- package/react-native/boost/boost/config/assert_cxx03.hpp +211 -0
- package/react-native/boost/boost/config/assert_cxx11.hpp +209 -0
- package/react-native/boost/boost/config/assert_cxx14.hpp +47 -0
- package/react-native/boost/boost/config/assert_cxx17.hpp +62 -0
- package/react-native/boost/boost/config/assert_cxx20.hpp +59 -0
- package/react-native/boost/boost/config/assert_cxx98.hpp +23 -0
- package/react-native/boost/boost/config/auto_link.hpp +525 -0
- package/react-native/boost/boost/config/compiler/borland.hpp +339 -0
- package/react-native/boost/boost/config/compiler/clang.hpp +366 -0
- package/react-native/boost/boost/config/compiler/clang_version.hpp +83 -0
- package/react-native/boost/boost/config/compiler/codegear.hpp +385 -0
- package/react-native/boost/boost/config/compiler/comeau.hpp +59 -0
- package/react-native/boost/boost/config/compiler/common_edg.hpp +183 -0
- package/react-native/boost/boost/config/compiler/compaq_cxx.hpp +19 -0
- package/react-native/boost/boost/config/compiler/cray.hpp +446 -0
- package/react-native/boost/boost/config/compiler/diab.hpp +26 -0
- package/react-native/boost/boost/config/compiler/digitalmars.hpp +143 -0
- package/react-native/boost/boost/config/compiler/gcc.hpp +383 -0
- package/react-native/boost/boost/config/compiler/gcc_xml.hpp +114 -0
- package/react-native/boost/boost/config/compiler/greenhills.hpp +28 -0
- package/react-native/boost/boost/config/compiler/hp_acc.hpp +149 -0
- package/react-native/boost/boost/config/compiler/intel.hpp +577 -0
- package/react-native/boost/boost/config/compiler/kai.hpp +33 -0
- package/react-native/boost/boost/config/compiler/metrowerks.hpp +198 -0
- package/react-native/boost/boost/config/compiler/mpw.hpp +140 -0
- package/react-native/boost/boost/config/compiler/nvcc.hpp +61 -0
- package/react-native/boost/boost/config/compiler/pathscale.hpp +138 -0
- package/react-native/boost/boost/config/compiler/pgi.hpp +23 -0
- package/react-native/boost/boost/config/compiler/sgi_mipspro.hpp +29 -0
- package/react-native/boost/boost/config/compiler/sunpro_cc.hpp +222 -0
- package/react-native/boost/boost/config/compiler/vacpp.hpp +186 -0
- package/react-native/boost/boost/config/compiler/visualc.hpp +391 -0
- package/react-native/boost/boost/config/compiler/xlcpp.hpp +299 -0
- package/react-native/boost/boost/config/compiler/xlcpp_zos.hpp +173 -0
- package/react-native/boost/boost/config/detail/cxx_composite.hpp +203 -0
- package/react-native/boost/boost/config/detail/posix_features.hpp +95 -0
- package/react-native/boost/boost/config/detail/select_compiler_config.hpp +157 -0
- package/react-native/boost/boost/config/detail/select_platform_config.hpp +147 -0
- package/react-native/boost/boost/config/detail/select_stdlib_config.hpp +121 -0
- package/react-native/boost/boost/config/detail/suffix.hpp +1294 -0
- package/react-native/boost/boost/config/header_deprecated.hpp +26 -0
- package/react-native/boost/boost/config/helper_macros.hpp +37 -0
- package/react-native/boost/boost/config/no_tr1/cmath.hpp +28 -0
- package/react-native/boost/boost/config/no_tr1/complex.hpp +28 -0
- package/react-native/boost/boost/config/no_tr1/functional.hpp +28 -0
- package/react-native/boost/boost/config/no_tr1/memory.hpp +28 -0
- package/react-native/boost/boost/config/no_tr1/utility.hpp +28 -0
- package/react-native/boost/boost/config/platform/aix.hpp +33 -0
- package/react-native/boost/boost/config/platform/amigaos.hpp +15 -0
- package/react-native/boost/boost/config/platform/beos.hpp +26 -0
- package/react-native/boost/boost/config/platform/bsd.hpp +83 -0
- package/react-native/boost/boost/config/platform/cloudabi.hpp +18 -0
- package/react-native/boost/boost/config/platform/cray.hpp +18 -0
- package/react-native/boost/boost/config/platform/cygwin.hpp +71 -0
- package/react-native/boost/boost/config/platform/haiku.hpp +31 -0
- package/react-native/boost/boost/config/platform/hpux.hpp +87 -0
- package/react-native/boost/boost/config/platform/irix.hpp +31 -0
- package/react-native/boost/boost/config/platform/linux.hpp +106 -0
- package/react-native/boost/boost/config/platform/macos.hpp +87 -0
- package/react-native/boost/boost/config/platform/qnxnto.hpp +31 -0
- package/react-native/boost/boost/config/platform/solaris.hpp +31 -0
- package/react-native/boost/boost/config/platform/symbian.hpp +97 -0
- package/react-native/boost/boost/config/platform/vms.hpp +25 -0
- package/react-native/boost/boost/config/platform/vxworks.hpp +422 -0
- package/react-native/boost/boost/config/platform/wasm.hpp +23 -0
- package/react-native/boost/boost/config/platform/win32.hpp +90 -0
- package/react-native/boost/boost/config/platform/zos.hpp +32 -0
- package/react-native/boost/boost/config/pragma_message.hpp +31 -0
- package/react-native/boost/boost/config/requires_threads.hpp +92 -0
- package/react-native/boost/boost/config/stdlib/dinkumware.hpp +324 -0
- package/react-native/boost/boost/config/stdlib/libcomo.hpp +93 -0
- package/react-native/boost/boost/config/stdlib/libcpp.hpp +180 -0
- package/react-native/boost/boost/config/stdlib/libstdcpp3.hpp +482 -0
- package/react-native/boost/boost/config/stdlib/modena.hpp +79 -0
- package/react-native/boost/boost/config/stdlib/msl.hpp +98 -0
- package/react-native/boost/boost/config/stdlib/roguewave.hpp +208 -0
- package/react-native/boost/boost/config/stdlib/sgi.hpp +168 -0
- package/react-native/boost/boost/config/stdlib/stlport.hpp +258 -0
- package/react-native/boost/boost/config/stdlib/vacpp.hpp +74 -0
- package/react-native/boost/boost/config/stdlib/xlcpp_zos.hpp +61 -0
- package/react-native/boost/boost/config/user.hpp +133 -0
- package/react-native/boost/boost/config/warning_disable.hpp +47 -0
- package/react-native/boost/boost/config/workaround.hpp +305 -0
- package/react-native/boost/boost/config.hpp +67 -0
- package/react-native/boost/boost/cstdint.hpp +556 -0
- package/react-native/boost/boost/intrusive_ptr.hpp +18 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count.hpp +103 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc.hpp +79 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +63 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +88 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_nt.hpp +66 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_pt.hpp +104 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_spin.hpp +69 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp +67 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_sync.hpp +72 -0
- package/react-native/boost/boost/smart_ptr/detail/atomic_count_win32.hpp +70 -0
- package/react-native/boost/boost/smart_ptr/detail/local_counted_base.hpp +148 -0
- package/react-native/boost/boost/smart_ptr/detail/local_sp_deleter.hpp +91 -0
- package/react-native/boost/boost/smart_ptr/detail/operator_bool.hpp +64 -0
- package/react-native/boost/boost/smart_ptr/detail/requires_cxx11.hpp +23 -0
- package/react-native/boost/boost/smart_ptr/detail/shared_count.hpp +707 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_convertible.hpp +92 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base.hpp +92 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +163 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_aix.hpp +152 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +185 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +148 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +170 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +200 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +194 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +179 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +186 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_nt.hpp +119 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_pt.hpp +147 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +174 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_spin.hpp +141 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +147 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_sync.hpp +165 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +163 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_base_w32.hpp +140 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_counted_impl.hpp +309 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_disable_deprecated.hpp +40 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_forward.hpp +52 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +27 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +69 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_interlocked.hpp +173 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_noexcept.hpp +48 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_obsolete.hpp +32 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_thread_pause.hpp +51 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_thread_sleep.hpp +104 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_thread_yield.hpp +100 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_typeinfo_.hpp +58 -0
- package/react-native/boost/boost/smart_ptr/detail/sp_win32_sleep.hpp +49 -0
- package/react-native/boost/boost/smart_ptr/intrusive_ptr.hpp +409 -0
- package/react-native/boost/boost/smart_ptr/intrusive_ref_counter.hpp +188 -0
- package/react-native/cpp/include/Attachment.h +16 -0
- package/react-native/cpp/include/Authentication.h +23 -0
- package/react-native/cpp/include/Collection.h +13 -0
- package/react-native/cpp/include/DQL.h +21 -0
- package/react-native/cpp/include/Document.h +17 -0
- package/react-native/cpp/include/Identity.h +17 -0
- package/react-native/cpp/include/Lifecycle.h +16 -0
- package/react-native/cpp/include/LiveQuery.h +17 -0
- package/react-native/cpp/include/Logger.h +22 -0
- package/react-native/cpp/include/Misc.h +26 -0
- package/react-native/cpp/include/Presence.h +14 -0
- package/react-native/cpp/include/RetainableState.h +24 -0
- package/react-native/cpp/include/SmallPeerInfo.h +17 -0
- package/react-native/cpp/include/Transports.h +25 -0
- package/react-native/cpp/include/TypedArray.hpp +167 -0
- package/react-native/cpp/include/Utils.h +61 -0
- package/react-native/cpp/include/main.h +10 -0
- package/react-native/cpp/src/Attachment.cpp +86 -0
- package/react-native/cpp/src/Authentication.cpp +224 -0
- package/react-native/cpp/src/Collection.cpp +54 -0
- package/react-native/cpp/src/DQL.cpp +254 -0
- package/react-native/cpp/src/Document.cpp +146 -0
- package/react-native/cpp/src/Identity.cpp +123 -0
- package/react-native/cpp/src/Lifecycle.cpp +75 -0
- package/react-native/cpp/src/LiveQuery.cpp +64 -0
- package/react-native/cpp/src/Logger.cpp +200 -0
- package/react-native/cpp/src/Misc.cpp +271 -0
- package/react-native/cpp/src/Presence.cpp +77 -0
- package/react-native/cpp/src/RetainableState.cpp +15 -0
- package/react-native/cpp/src/SmallPeerInfo.cpp +108 -0
- package/react-native/cpp/src/Transports.cpp +270 -0
- package/react-native/cpp/src/TypedArray.cpp +303 -0
- package/react-native/cpp/src/Utils.cpp +138 -0
- package/react-native/cpp/src/main.cpp +149 -0
- package/react-native/dittoffi/dittoffi.h +4698 -0
- package/react-native/dittoffi/ifaddrs.cpp +385 -0
- package/react-native/dittoffi/ifaddrs.h +206 -0
- package/react-native/ios/DittoRNSDK.h +7 -0
- package/react-native/ios/DittoRNSDK.mm +107 -0
- package/react-native/ios/YeetJSIUtils.h +60 -0
- package/react-native/ios/YeetJSIUtils.mm +196 -0
- package/react-native/lib/commonjs/ditto.rn.js +93 -0
- package/react-native/lib/commonjs/ditto.rn.js.map +1 -0
- package/react-native/lib/commonjs/index.js +14 -0
- package/react-native/lib/commonjs/index.js.map +1 -0
- package/react-native/lib/module/ditto.rn.js +83 -0
- package/react-native/lib/module/ditto.rn.js.map +1 -0
- package/react-native/lib/module/index.js +13 -0
- package/react-native/lib/module/index.js.map +1 -0
- package/react-native/lib/typescript/ditto.rn.d.ts +15 -0
- package/react-native/lib/typescript/ditto.rn.d.ts.map +1 -0
- package/react-native/lib/typescript/index.d.ts +1 -0
- package/react-native/lib/typescript/index.d.ts.map +1 -0
- package/react-native/scripts/ruby/include_local_boost.rb +78 -0
- package/react-native/src/ditto.rn.ts +91 -0
- package/react-native/src/environment/environment.fallback.ts +4 -0
- package/react-native/src/index.ts +26 -0
- package/react-native/src/sources/@cbor-redux.ts +2 -0
- package/react-native/src/sources/@ditto.core.ts +1 -0
- package/react-native/src/sources/@environment.ts +2 -0
- package/react-native/src/sources/attachment-fetch-event.ts +54 -0
- package/react-native/src/sources/attachment-fetcher-manager.ts +129 -0
- package/react-native/src/sources/attachment-fetcher.ts +124 -0
- package/react-native/src/sources/attachment-token.ts +48 -0
- package/react-native/src/sources/attachment.ts +59 -0
- package/react-native/src/sources/augment.ts +89 -0
- package/react-native/src/sources/authenticator.ts +314 -0
- package/react-native/src/sources/base-pending-cursor-operation.ts +237 -0
- package/react-native/src/sources/base-pending-id-specific-operation.ts +109 -0
- package/react-native/src/sources/bridge.ts +549 -0
- package/react-native/src/sources/build-time-constants.ts +4 -0
- package/react-native/src/sources/cbor.ts +35 -0
- package/react-native/src/sources/collection-interface.ts +67 -0
- package/react-native/src/sources/collection.ts +212 -0
- package/react-native/src/sources/collections-event.ts +99 -0
- package/react-native/src/sources/counter.ts +77 -0
- package/react-native/src/sources/ditto.ts +945 -0
- package/react-native/src/sources/document-id.ts +159 -0
- package/react-native/src/sources/document-path.ts +303 -0
- package/react-native/src/sources/document.ts +192 -0
- package/react-native/src/sources/epilogue.ts +24 -0
- package/react-native/src/sources/error-codes.ts +52 -0
- package/react-native/src/sources/error.ts +203 -0
- package/react-native/src/sources/essentials.ts +53 -0
- package/react-native/src/sources/ffi-error.ts +117 -0
- package/react-native/src/sources/ffi.ts +1972 -0
- package/react-native/src/sources/identity.ts +163 -0
- package/react-native/src/sources/init.ts +70 -0
- package/react-native/src/sources/internal.ts +113 -0
- package/react-native/src/sources/keep-alive.ts +69 -0
- package/react-native/src/sources/key-path.ts +195 -0
- package/react-native/src/sources/live-query-event.ts +208 -0
- package/react-native/src/sources/live-query-manager.ts +101 -0
- package/react-native/src/sources/live-query.ts +164 -0
- package/react-native/src/sources/logger.ts +196 -0
- package/react-native/src/sources/observer-manager.ts +175 -0
- package/react-native/src/sources/observer.ts +77 -0
- package/react-native/src/sources/pending-collections-operation.ts +232 -0
- package/react-native/src/sources/pending-cursor-operation.ts +218 -0
- package/react-native/src/sources/pending-id-specific-operation.ts +216 -0
- package/react-native/src/sources/presence-manager.ts +160 -0
- package/react-native/src/sources/presence.ts +238 -0
- package/react-native/src/sources/query-result-item.ts +116 -0
- package/react-native/src/sources/query-result.ts +55 -0
- package/react-native/src/sources/register.ts +92 -0
- package/react-native/src/sources/small-peer-info.ts +176 -0
- package/react-native/src/sources/static-tcp-client.ts +6 -0
- package/react-native/src/sources/store-observer.ts +176 -0
- package/react-native/src/sources/store.ts +365 -0
- package/react-native/src/sources/subscription-manager.ts +98 -0
- package/react-native/src/sources/subscription.ts +88 -0
- package/react-native/src/sources/sync-subscription.ts +90 -0
- package/react-native/src/sources/sync.ts +495 -0
- package/react-native/src/sources/test-helpers.ts +24 -0
- package/react-native/src/sources/transport-conditions-manager.ts +104 -0
- package/react-native/src/sources/transport-config.ts +428 -0
- package/react-native/src/sources/update-result.ts +66 -0
- package/react-native/src/sources/update-results-map.ts +57 -0
- package/react-native/src/sources/websocket-client.ts +6 -0
- package/react-native/src/sources/write-transaction-collection.ts +122 -0
- package/react-native/src/sources/write-transaction-pending-cursor-operation.ts +101 -0
- package/react-native/src/sources/write-transaction-pending-id-specific-operation.ts +72 -0
- package/react-native/src/sources/write-transaction.ts +119 -0
- package/react-native.config.js +9 -0
- package/types/ditto.d.ts +1230 -798
- package/web/ditto.es6.js +1 -1
- package/web/ditto.umd.js +1 -1
- 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
|
-
"
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
"
|
|
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
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
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
|
-
"
|
|
48
|
-
|
|
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
|
+
}
|