diff --git a/native-modules/native-logger/package.json b/native-modules/native-logger/package.json index 8e279866..e933e36e 100644 --- a/native-modules/native-logger/package.json +++ b/native-modules/native-logger/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-native-logger", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-native-logger", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-aes-crypto/package.json b/native-modules/react-native-aes-crypto/package.json index 4931854e..5a2edba0 100644 --- a/native-modules/react-native-aes-crypto/package.json +++ b/native-modules/react-native-aes-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-aes-crypto", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-aes-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-app-update/package.json b/native-modules/react-native-app-update/package.json index 57ee5189..4f89fad3 100644 --- a/native-modules/react-native-app-update/package.json +++ b/native-modules/react-native-app-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-app-update", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-app-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-async-storage/package.json b/native-modules/react-native-async-storage/package.json index 9c2632cb..2826e7a4 100644 --- a/native-modules/react-native-async-storage/package.json +++ b/native-modules/react-native-async-storage/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-async-storage", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-async-storage", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-background-thread/android/src/main/cpp/cpp-adapter.cpp b/native-modules/react-native-background-thread/android/src/main/cpp/cpp-adapter.cpp index 6a647494..f19e02f1 100644 --- a/native-modules/react-native-background-thread/android/src/main/cpp/cpp-adapter.cpp +++ b/native-modules/react-native-background-thread/android/src/main/cpp/cpp-adapter.cpp @@ -80,6 +80,11 @@ static constexpr size_t kRuntimeQueueWarnInterval = 128; struct RuntimeWorkQueue { std::deque> items; bool drainScheduled = false; + // workId of the drain currently posted to gPendingWork (valid only while + // drainScheduled == true). Tracked so a teardown path (nativeInvalidate + // SharedRpc) can erase the orphaned gPendingWork entry if its posted drain + // is dropped during reload. -1 means "none outstanding". + int64_t scheduledDrainWorkId = -1; }; static RuntimeWorkQueue gMainRuntimeWorkQueue; @@ -100,6 +105,7 @@ static void leakAndClearRuntimeQueue(RuntimeWorkQueue &queue) { } queue.items.clear(); queue.drainScheduled = false; + queue.scheduledDrainWorkId = -1; } static bool callScheduleOnJSThread(const JavaObjectRef &ref, bool isMain, int64_t workId) { @@ -186,6 +192,9 @@ static void drainRuntimeWorkQueue(jsi::Runtime &rt, JavaObjectRef ref, bool isMa remaining = queue.items.size(); if (remaining == 0) { queue.drainScheduled = false; + // This drain's gPendingWork entry was already erased by + // nativeExecuteWork before it ran; its workId is now stale. + queue.scheduledDrainWorkId = -1; } else { shouldReschedule = true; } @@ -206,8 +215,24 @@ static void scheduleRuntimeDrain(const JavaObjectRef &ref, bool isMain) { size_t queued = 0; { std::lock_guard lock(gWorkMutex); + auto &queue = getRuntimeWorkQueue(isMain); + // Stale-id guard: drainRuntimeWorkQueue observes remaining>0, drops the + // lock, then calls us — but a concurrent nativeInvalidateSharedRpc can + // clear the queue + latch in between. If the queue is now empty there is + // nothing to drain: do NOT post a gPendingWork entry / scheduleOnJSThread + // for an already-drained/invalidated queue. Just disarm the latch and + // return. The normal enqueue→schedule path always has items.size()>=1, so + // this never short-circuits it. + if (queue.items.empty()) { + queue.drainScheduled = false; + queue.scheduledDrainWorkId = -1; + return; + } workId = gNextWorkId++; - queued = getRuntimeWorkQueue(isMain).items.size(); + queued = queue.items.size(); + // Track the outstanding drain's workId so a teardown path can erase its + // orphaned gPendingWork entry if the post is dropped during reload. + queue.scheduledDrainWorkId = workId; gPendingWork[workId] = [ref, isMain](jsi::Runtime &rt) { drainRuntimeWorkQueue(rt, ref, isMain); }; @@ -892,10 +917,19 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeEvaluateSegmentInBackgro executor([globalCallback, settled, bgEvalId, source = std::move(source), url = std::move(url)](jsi::Runtime &rt) { // We are running now → claim ownership and remove our registry entry so - // a concurrent nativeDestroy drain can't also touch this eval. + // a concurrent nativeDestroy drain can't also touch this eval. If the + // entry is ALREADY gone, a drop/destroy drain (drainPendingBgEvals) + // already settled this eval as retryable NO_RUNTIME and JS will retry — + // so we must NOT evaluate the segment again. This is reachable because a + // ptr==0 reload keeps this lambda in the coalesced queue (it only + // disarms the drain latch, preserving queue.items) and the recovered + // runtime's install-recover replays it; without this guard the segment + // would be evaluated twice on the recovered runtime. { std::lock_guard lock(gBgEvalMutex); - gPendingBgEvals.erase(bgEvalId); + if (gPendingBgEvals.erase(bgEvalId) == 0) { + return; + } } std::string error; try { @@ -936,13 +970,17 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeEvaluateSegmentInBackgro // 1. gPendingWork[workId] — the stored work lambda (holding the segment // SOURCE BUFFER). nativeExecuteWork is the only other eraser and it will // never run for this id, so without this it leaks until nativeDestroy. -// 2. The coalesced RuntimeWorkQueue for this runtime — under the coalesced -// model a successful post (scheduled==true) that never reaches the JS -// thread leaves the queue stranded with drainScheduled==true, so a -// recovered runtime would never re-arm a drain. Leak+clear the queued -// functors (their ~jsi::Function must not run on a dead runtime) and reset -// the drain latch so the next enqueue re-arms a fresh drain. Applies to -// BOTH runtimes (isMain selects which queue). +// 2. The coalesced RuntimeWorkQueue's drain latch for this runtime — under +// the coalesced model a successful post (scheduled==true) that never +// reaches the JS thread leaves the queue stranded with drainScheduled== +// true, so a recovered runtime would never re-arm a drain. This is a +// TRANSIENT condition: ptr==0 happens during reload, and the SAME runtime +// recovers with a fresh ptr. We therefore must NOT leak+clear queue.items +// — the main runtime has no JS-side retry net, so abandoning its queued +// SharedRPC deliveries (notifyOtherRuntime) loses them forever. Instead we +// only reset the drain latch (drainScheduled / scheduledDrainWorkId) so the +// next enqueue re-arms a fresh drain, leaving queue.items intact for the +// recovered runtime to drain. Applies to BOTH runtimes (isMain selects). // 3. (bg only) The in-flight bg eval(s) — settle as retryable NO_RUNTIME so // the JNI global ref is released and the JS promise resolves now instead of // hanging on the 30s watchdog. drain-all is sound: an unreachable bg JS @@ -955,7 +993,12 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeDropScheduledWork( { std::lock_guard lock(gWorkMutex); gPendingWork.erase(static_cast(workId)); - leakAndClearRuntimeQueue(getRuntimeWorkQueue(static_cast(isMain))); + // TRANSIENT ptr==0 (reload in flight): do NOT abandon queue.items — the + // recovered runtime still needs them (main has no JS retry net). Only + // disarm the drain latch so the next enqueue re-arms a fresh drain. + auto &queue = getRuntimeWorkQueue(static_cast(isMain)); + queue.drainScheduled = false; + queue.scheduledDrainWorkId = -1; } if (!isMain) { drainPendingBgEvals("Background runtime unreachable when scheduling segment eval"); @@ -998,6 +1041,12 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeInstallSharedBridge( // back to the bg JS queue. We must do this BEFORE moving `executor` into // SharedRPC::install (which will std::move it out). if (!capturedIsMain) { + // gBgTimerExecutor is read/cleared under gTimerMutex (timer worker + // snapshot ~L857, nativeDestroy ~L1133); this write must take the same + // lock or it races those readers (UB on std::function). nativeInstall + // SharedBridge holds no other lock here, so a narrow guard scoped to + // just the assignment is correct and cannot double-lock. + std::lock_guard lock(gTimerMutex); gBgTimerExecutor = executor; } SharedRPC::install(*rt, std::move(executor), runtimeId); @@ -1010,6 +1059,37 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeInstallSharedBridge( installTimersOnRuntime(*rt); invokeOptionalGlobalFunction(*rt, "__setupBackgroundRPCHandler"); } + + // Recover items stranded by a ptr==0 drop during reload. nativeDropScheduled + // Work deliberately KEEPS queue.items (main has no JS retry net) and only + // disarms the drain latch, relying on a LATER enqueue to re-arm a drain. But + // if no further enqueue arrives after this runtime recovers, those carried- + // over items (e.g. main-runtime notifyOtherRuntime deliveries) would sit + // until nativeDestroy and be lost. Make recovery structural. + // + // Force a fresh drain on the freshly installed runtime whenever the queue is + // non-empty, REGARDLESS of the drainScheduled latch: a drain posted before + // reload may have been queued on the now-dead pre-reload JS thread and + // silently discarded (its runnable never runs, so its nativeDropScheduledWork + // never fires and the latch is stuck drainScheduled==true). Gating recovery on + // !drainScheduled would then skip it and strand the items forever. Re-arming + // here on this runtime's executor (`ref`) guarantees they drain; if a stale + // drain is in fact still live, it self-cancels via the empty-queue guard in + // scheduleRuntimeDrain (at worst one benign extra drain hop). Mirror + // enqueueRuntimeWork's lock discipline: set the latch under gWorkMutex, call + // scheduleRuntimeDrain OUTSIDE the lock. Applies to BOTH runtimes. + bool shouldRecoverDrain = false; + { + std::lock_guard lock(gWorkMutex); + auto &queue = getRuntimeWorkQueue(capturedIsMain); + if (!queue.items.empty()) { + queue.drainScheduled = true; + shouldRecoverDrain = true; + } + } + if (shouldRecoverDrain) { + scheduleRuntimeDrain(ref, capturedIsMain); + } } // ── nativeSetupErrorHandler ───────────────────────────────────────────── @@ -1094,6 +1174,26 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeInvalidateSharedRpc( env->ReleaseStringUTFChars(runtimeId, idChars); bool found = SharedRPC::invalidate(id); + + // The runtime named by `id` is being torn down (restart → host.reload). + // Its coalesced work queue must be fully quiesced: if a drain was posted + // (drainScheduled==true) but is dropped during reload, the latch would + // survive the reinstall and every future enqueue would see a stale + // drainScheduled==true → shouldSchedule stays false and new work enqueues + // but never schedules a drain again (work stranded forever). Leak+clear the + // queue (it's being destroyed anyway — the queued ~jsi::Function must not + // run on the dying runtime), reset the drain latch, and erase the orphaned + // gPendingWork entry for the outstanding drain. runtimeId "main" → isMain. + { + std::lock_guard lock(gWorkMutex); + bool isMain = (id == "main"); + auto &queue = getRuntimeWorkQueue(isMain); + if (queue.scheduledDrainWorkId >= 0) { + gPendingWork.erase(queue.scheduledDrainWorkId); + } + leakAndClearRuntimeQueue(queue); + } + LOGI("nativeInvalidateSharedRpc: id=%s found=%d", id.c_str(), found ? 1 : 0); return found ? JNI_TRUE : JNI_FALSE; } @@ -1153,6 +1253,7 @@ Java_com_backgroundthread_BackgroundThreadManager_nativeDestroy( } queue->items.clear(); queue->drainScheduled = false; + queue->scheduledDrainWorkId = -1; } } diff --git a/native-modules/react-native-background-thread/android/src/main/java/com/backgroundthread/BackgroundThreadManager.kt b/native-modules/react-native-background-thread/android/src/main/java/com/backgroundthread/BackgroundThreadManager.kt index ac7448dd..63c295be 100644 --- a/native-modules/react-native-background-thread/android/src/main/java/com/backgroundthread/BackgroundThreadManager.kt +++ b/native-modules/react-native-background-thread/android/src/main/java/com/backgroundthread/BackgroundThreadManager.kt @@ -129,9 +129,12 @@ class BackgroundThreadManager private constructor() { * already on the stale/torn-down JS thread, so C++ saw scheduled == true and * will not clean up on its own). For the given runtime ([isMain]) the native * side erases gPendingWork[workId] (frees the captured segment source - * buffer), leak+clears the coalesced RuntimeWorkQueue, and resets - * drainScheduled so a recovered runtime re-arms a fresh drain on the next - * enqueue. For the bg runtime only, it also settles every in-flight bg + * buffer) and resets drainScheduled so a recovered runtime re-arms a fresh + * drain on the next enqueue. This is a TRANSIENT reload condition, so the + * native side deliberately leaves the coalesced RuntimeWorkQueue's items + * INTACT — the same runtime recovers and the main runtime has no JS-side + * retry net, so abandoning its queued SharedRPC deliveries would lose them. + * For the bg runtime only, it also settles every in-flight bg * segment eval as a retryable NO_RUNTIME failure so each JNI global ref is * released and the JS promise resolves immediately instead of leaking until * teardown or the bg watchdog. Exactly-once on the native side. @@ -492,9 +495,11 @@ class BackgroundThreadManager private constructor() { // SUCCESSFUL post (C++ saw scheduled==true), so the work won't // run and C++ won't clean up on its own. Drop it for THIS // runtime (main or bg): erase gPendingWork[workId] (frees the - // source buffer), leak+clear the coalesced RuntimeWorkQueue, - // and reset drainScheduled so a recovered runtime re-arms a - // fresh drain. drainPendingBgEvals inside the native fn is + // source buffer) and reset drainScheduled so a recovered + // runtime re-arms a fresh drain. The coalesced RuntimeWork + // Queue items are left intact (transient reload; the same + // runtime recovers and main has no JS retry net). + // drainPendingBgEvals inside the native fn is // gated to !isMain, so settling bg evals only happens for bg. nativeDropScheduledWork(isMain, workId) } diff --git a/native-modules/react-native-background-thread/package.json b/native-modules/react-native-background-thread/package.json index aae9b597..c0ca476f 100644 --- a/native-modules/react-native-background-thread/package.json +++ b/native-modules/react-native-background-thread/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-background-thread", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-background-thread", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-bundle-crypto/package.json b/native-modules/react-native-bundle-crypto/package.json index fd49e3e5..563f81f5 100644 --- a/native-modules/react-native-bundle-crypto/package.json +++ b/native-modules/react-native-bundle-crypto/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-crypto", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-bundle-crypto", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-bundle-update/package.json b/native-modules/react-native-bundle-update/package.json index 088a10fb..6abde5dc 100644 --- a/native-modules/react-native-bundle-update/package.json +++ b/native-modules/react-native-bundle-update/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-bundle-update", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-bundle-update", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-check-biometric-auth-changed/package.json b/native-modules/react-native-check-biometric-auth-changed/package.json index 7023f671..58d01eb4 100644 --- a/native-modules/react-native-check-biometric-auth-changed/package.json +++ b/native-modules/react-native-check-biometric-auth-changed/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-check-biometric-auth-changed", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-check-biometric-auth-changed", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-cloud-fs/package.json b/native-modules/react-native-cloud-fs/package.json index 899ee890..7563e06d 100644 --- a/native-modules/react-native-cloud-fs/package.json +++ b/native-modules/react-native-cloud-fs/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-fs", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-cloud-fs TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-cloud-kit-module/package.json b/native-modules/react-native-cloud-kit-module/package.json index f5139738..c4b77eea 100644 --- a/native-modules/react-native-cloud-kit-module/package.json +++ b/native-modules/react-native-cloud-kit-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-cloud-kit-module", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-cloud-kit-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-device-utils/package.json b/native-modules/react-native-device-utils/package.json index 1062b98f..ce2f1657 100644 --- a/native-modules/react-native-device-utils/package.json +++ b/native-modules/react-native-device-utils/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-device-utils", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-device-utils", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-dns-lookup/package.json b/native-modules/react-native-dns-lookup/package.json index ac757a09..66aaa59c 100644 --- a/native-modules/react-native-dns-lookup/package.json +++ b/native-modules/react-native-dns-lookup/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-dns-lookup", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-dns-lookup", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-get-random-values/package.json b/native-modules/react-native-get-random-values/package.json index 62ade93d..e12f8f5c 100644 --- a/native-modules/react-native-get-random-values/package.json +++ b/native-modules/react-native-get-random-values/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-get-random-values", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-get-random-values", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-keychain-module/package.json b/native-modules/react-native-keychain-module/package.json index 6d9c5d27..dc4b7a37 100644 --- a/native-modules/react-native-keychain-module/package.json +++ b/native-modules/react-native-keychain-module/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-keychain-module", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-keychain-module", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-lite-card/package.json b/native-modules/react-native-lite-card/package.json index 4e1373bf..f8434a5a 100644 --- a/native-modules/react-native-lite-card/package.json +++ b/native-modules/react-native-lite-card/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-lite-card", - "version": "3.0.63", + "version": "3.0.64", "description": "lite card", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-network-info/package.json b/native-modules/react-native-network-info/package.json index b8de2ee8..0da99833 100644 --- a/native-modules/react-native-network-info/package.json +++ b/native-modules/react-native-network-info/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-network-info", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-network-info", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-pbkdf2/package.json b/native-modules/react-native-pbkdf2/package.json index 5c3b3e8a..45052487 100644 --- a/native-modules/react-native-pbkdf2/package.json +++ b/native-modules/react-native-pbkdf2/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pbkdf2", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-pbkdf2", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-perf-memory/package.json b/native-modules/react-native-perf-memory/package.json index 97a7d252..e778a733 100644 --- a/native-modules/react-native-perf-memory/package.json +++ b/native-modules/react-native-perf-memory/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-memory", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-perf-memory", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-perf-stats/package.json b/native-modules/react-native-perf-stats/package.json index 00c67c51..3e310c7d 100644 --- a/native-modules/react-native-perf-stats/package.json +++ b/native-modules/react-native-perf-stats/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perf-stats", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-perf-stats", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-ping/package.json b/native-modules/react-native-ping/package.json index 59830ca3..69017dca 100644 --- a/native-modules/react-native-ping/package.json +++ b/native-modules/react-native-ping/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-ping", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-ping TurboModule for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-range-downloader/package.json b/native-modules/react-native-range-downloader/package.json index 72e7e6a7..56f4e2aa 100644 --- a/native-modules/react-native-range-downloader/package.json +++ b/native-modules/react-native-range-downloader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-range-downloader", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-range-downloader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-splash-screen/package.json b/native-modules/react-native-splash-screen/package.json index 4b42d414..7401211c 100644 --- a/native-modules/react-native-splash-screen/package.json +++ b/native-modules/react-native-splash-screen/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-splash-screen", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-splash-screen", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-split-bundle-loader/package.json b/native-modules/react-native-split-bundle-loader/package.json index 7182f893..f0dd9aa6 100644 --- a/native-modules/react-native-split-bundle-loader/package.json +++ b/native-modules/react-native-split-bundle-loader/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-split-bundle-loader", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-split-bundle-loader", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-tcp-socket/package.json b/native-modules/react-native-tcp-socket/package.json index 4d337584..1ba862e0 100644 --- a/native-modules/react-native-tcp-socket/package.json +++ b/native-modules/react-native-tcp-socket/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tcp-socket", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-tcp-socket", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-modules/react-native-zip-archive/package.json b/native-modules/react-native-zip-archive/package.json index 08256f78..bcc9e5e7 100644 --- a/native-modules/react-native-zip-archive/package.json +++ b/native-modules/react-native-zip-archive/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-zip-archive", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-zip-archive Nitro HybridObject for OneKey", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-auto-size-input/package.json b/native-views/react-native-auto-size-input/package.json index 6743e36e..1b23a376 100644 --- a/native-views/react-native-auto-size-input/package.json +++ b/native-views/react-native-auto-size-input/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-auto-size-input", - "version": "3.0.63", + "version": "3.0.64", "description": "Auto-sizing text input with font scaling, prefix and suffix support", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-chart-webview/package.json b/native-views/react-native-chart-webview/package.json index 3b8a8af2..fbfa2c93 100644 --- a/native-views/react-native-chart-webview/package.json +++ b/native-views/react-native-chart-webview/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-chart-webview", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-chart-webview", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-pager-view/package.json b/native-views/react-native-pager-view/package.json index 61b5a341..bbb3cede 100644 --- a/native-views/react-native-pager-view/package.json +++ b/native-views/react-native-pager-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-pager-view", - "version": "3.0.63", + "version": "3.0.64", "description": "React Native wrapper for Android and iOS ViewPager", "source": "./src/index.tsx", "main": "./lib/module/index.js", diff --git a/native-views/react-native-perp-depth-bar/package.json b/native-views/react-native-perp-depth-bar/package.json index 1dba85e5..b73a1c9d 100644 --- a/native-views/react-native-perp-depth-bar/package.json +++ b/native-views/react-native-perp-depth-bar/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-perp-depth-bar", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-perp-depth-bar", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-scroll-guard/package.json b/native-views/react-native-scroll-guard/package.json index 13c7a6c0..613842f4 100644 --- a/native-views/react-native-scroll-guard/package.json +++ b/native-views/react-native-scroll-guard/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-scroll-guard", - "version": "3.0.63", + "version": "3.0.64", "description": "A native view wrapper that prevents parent scrollable containers (PagerView/ViewPager2) from intercepting child scroll gestures", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-segment-slider/package.json b/native-views/react-native-segment-slider/package.json index 0b378347..67f32742 100644 --- a/native-views/react-native-segment-slider/package.json +++ b/native-views/react-native-segment-slider/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-segment-slider", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-segment-slider", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-skeleton/package.json b/native-views/react-native-skeleton/package.json index e7f03b31..579c2e46 100644 --- a/native-views/react-native-skeleton/package.json +++ b/native-views/react-native-skeleton/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-skeleton", - "version": "3.0.63", + "version": "3.0.64", "description": "react-native-skeleton", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", diff --git a/native-views/react-native-tab-view/package.json b/native-views/react-native-tab-view/package.json index b55e78e6..4bdf8731 100644 --- a/native-views/react-native-tab-view/package.json +++ b/native-views/react-native-tab-view/package.json @@ -1,6 +1,6 @@ { "name": "@onekeyfe/react-native-tab-view", - "version": "3.0.63", + "version": "3.0.64", "description": "Native Bottom Tabs for React Native (UIKit implementation)", "source": "./src/index.tsx", "main": "./lib/module/index.js",