{"_id":"@zepto-labs/react-native-delta","name":"@zepto-labs/react-native-delta","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@zepto-labs/react-native-delta","version":"1.0.0","description":"Delta sdk for react native apps","main":"lib/commonjs/index","module":"lib/module/index","types":"lib/typescript/src/index.d.ts","react-native":"src/index","source":"src/index","scripts":{"example":"yarn --cwd example","test":"jest","typecheck":"tsc --noEmit","clean":"del-cli android/build example/android/build example/android/app/build example/ios/build lib","release":"bob build && npm publish"},"lint-staged":{"*.{js,jsx,ts,tsx}":["prettier --write"]},"keywords":["react-native","ios","android"],"repository":{"type":"git","url":"git+https://github.com/zepto-labs/react-native-delta.git"},"author":{"name":"Zepto","email":"opensource@zepto.com","url":"https://github.com/zepto-labs"},"license":"MIT","bugs":{"url":"https://github.com/zepto-labs/react-native-delta/issues"},"homepage":"https://github.com/zepto-labs/react-native-delta#readme","publishConfig":{"registry":"https://registry.npmjs.org","access":"public"},"engines":{"node":">=20"},"devDependencies":{"@commitlint/config-conventional":"^17.0.2","@react-native/eslint-config":"^0.73.1","@types/jest":"^29.5.5","@types/react":"^18.2.44","commitlint":"^17.0.2","del-cli":"^5.1.0","eslint":"^8.51.0","jest":"^29.7.0","lint-staged":"^15.2.2","prettier":"^3.2.5","react":"18.2.0","react-native":"0.73.6","react-native-builder-bob":"^0.20.0","turbo":"^1.10.7","typescript":"^5.2.2"},"resolutions":{"@types/react":"^18.2.44"},"peerDependencies":{"react":"*","react-native":"*"},"react-native-builder-bob":{"source":"src","output":"lib","targets":["commonjs","module",["typescript",{"project":"tsconfig.build.json"}]]},"_id":"@zepto-labs/react-native-delta@1.0.0","gitHead":"d17e6bd249d21380cfd8aac999311bee8fa843fc","_nodeVersion":"22.0.0","_npmVersion":"10.5.1","dist":{"integrity":"sha512-wXr8GmGQpmIgN0UuhGxzdCXdqJscHKO3cIYhQWBA2spXAQ5gajv/zf/qnM/u2X9M4sPm2sxee0MULukYOGaxLA==","shasum":"b727c7da5afb0717b2e00ff2a9e6d5b7cb7127be","tarball":"https://registry.npmjs.org/@zepto-labs/react-native-delta/-/react-native-delta-1.0.0.tgz","fileCount":103,"unpackedSize":656148,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCdDBdF7idLutHK6ur+34qb+xHwlWAvJqz4pOI9oK6ApAIgW5jSTBlrTLDjQ4C1y07che6be7D5hMuLxdAqhYZOmYE="}]},"_npmUser":{"name":"zepto-labs","email":"opensource@zepto.com"},"directories":{},"maintainers":[{"name":"zepto-labs","email":"opensource@zepto.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-delta_1.0.0_1782913639738_0.6647705741692482"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-01T13:47:19.525Z","1.0.0":"2026-07-01T13:47:19.918Z","modified":"2026-07-01T13:47:20.217Z"},"maintainers":[{"name":"zepto-labs","email":"opensource@zepto.com"}],"description":"Delta sdk for react native apps","homepage":"https://github.com/zepto-labs/react-native-delta#readme","keywords":["react-native","ios","android"],"repository":{"type":"git","url":"git+https://github.com/zepto-labs/react-native-delta.git"},"author":{"name":"Zepto","email":"opensource@zepto.com","url":"https://github.com/zepto-labs"},"bugs":{"url":"https://github.com/zepto-labs/react-native-delta/issues"},"license":"MIT","readme":"<div align=\"center\">\n\n<p align=\"center\">\n  <picture>\n    <img\n      src=\"./assets/delta_logo.png\"\n      alt=\"Delta\"\n      width=\"450\"\n    />\n  </picture>\n</p>\n\n\n### **Ship the change. Not the bundle.**\n\n### The next generation of runtime updates for React Native.\n\n---\n\n**delta** is a production-ready **patch-based runtime update platform** for React Native that enables you to ship bug fixes, performance improvements, and new features instantly—without waiting for App Store or Play Store approvals.\n\nUnlike traditional OTA solutions that download and replace the entire JavaScript bundle, **delta generates and applies lightweight binary patches**, delivering **only what changed**. The result is dramatically smaller downloads, faster update adoption, lower bandwidth consumption, and a seamless update experience for your users.\n\n<br/>\n\n<img src=\"https://img.shields.io/badge/⚡_Smaller_Downloads-EAF2FF?style=for-the-badge&labelColor=EAF2FF&color=EAF2FF\" />\n<img src=\"https://img.shields.io/badge/🚀_Faster_Rollouts-E9F8EC?style=for-the-badge&labelColor=E9F8EC&color=E9F8EC\" />\n<img src=\"https://img.shields.io/badge/📦_Delta_Patching-EDE7FF?style=for-the-badge&labelColor=EDE7FF&color=EDE7FF\" />\n<img src=\"https://img.shields.io/badge/📈_Better_Adoption-FDEFE7?style=for-the-badge&labelColor=FDEFE7&color=FDEFE7\" />\n\n</div>\n\n---\n\n## Why delta?\n\nTraditional OTA platforms replace the **entire JavaScript bundle** every time you publish an update—even if you've changed only a few lines of code.\n\nDelta takes a fundamentally different approach.\n\nUsing intelligent **binary delta patching**, it computes the difference between releases and delivers only the bytes required to transform one version into another. This significantly reduces update sizes, accelerates deployments, and helps users stay on the latest version with minimal data usage.\n\n## What does the SDK do?\n\nThe **react-native-delta** SDK seamlessly integrates with your React Native application and manages the complete runtime update lifecycle.\n\n- ⚡ **Automatically checks** for available updates.\n- 📦 **Downloads lightweight delta patches** instead of full JavaScript bundles.\n- 🔐 **Verifies every update** before installation to ensure integrity and security.\n- 🚀 **Applies updates seamlessly** with minimal interruption to the user experience.\n- 🔄 **Safely rolls back** to the previous version if an update fails.\n- 🎯 **Targets compatible app versions**, ensuring only supported devices receive updates.\n- 📊 **Provides update metadata and lifecycle events** for monitoring and analytics.\n\nWhether you're shipping a critical hotfix or rolling out your next feature, Delta enables continuous delivery while keeping updates fast, reliable, and bandwidth-efficient.\n\n> **Ship only the difference. Deliver updates that users barely notice—but always appreciate.**\n\n## Related Repositories\n\nThis SDK is one part of the Delta platform. It works alongside:\n\n\n| Repository                                                 | Description                                                        |\n| ---------------------------------------------------------- | ------------------------------------------------------------------ |\n| [delta-cli](https://github.com/zepto-labs/delta-cli)       | CLI for registry management, bundle uploads, and release workflows |\n| [delta-server](https://github.com/zepto-labs/delta-server) | Backend server for patch delivery, releases, and the update API    |\n\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Integration](#integration)\n  - [Android](#android)\n  - [iOS](#ios)\n- [Build Process](#build-process)\n  - [JS Version](#js-version)\n  - [Android](#android-1)\n  - [iOS](#ios-1)\n- [Delta Config](#delta-config)\n- [API Reference](#api-reference)\n  - [React Native](#react-native)\n  - [Android Native](#android-native)\n  - [iOS Native](#ios-native)\n- [Events](#events)\n- [Contributing](#contributing)\n- [Third-Party Licenses](#third-party-licenses)\n\n---\n\n## Installation\n\n```sh\nyarn add @zepto-labs/react-native-delta\n```\n\nor\n\n```sh\nnpm install @zepto-labs/react-native-delta\n```\n\n## Prerequisites\n\n- Node.js >= 20\n- JDK 17 (for Android builds)\n- Xcode >= 14 (for iOS builds)\n- React Native >= 0.73\n\n---\n\n## Integration\n\n### Android\n\n#### 1. Apply the delta Gradle Plugin\n\nIn your app-level `build.gradle`, apply the Delta Gradle plugin at the bottom:\n\n```groovy\napply from: file(\"../../node_modules/@zepto-labs/react-native-delta/android/delta.gradle\");\n```\n\n#### 2. Configure delta ext properties\n\nAdd the following `ext` block at the top of your app-level `build.gradle` to configure Delta:\n\n```groovy\next {\n    DELTA_JS_VERSION = \"1\"          // Unique per native app version; increment for each new store release or breaking native change\n    ANDROID_DELTA_ID = \"YOUR_ANDROID_APP_ID\"\n    DELTA_SERVER_URL = \"YOUR_DELTA_SERVER_URL\"\n}\n```\n\nThen expose `ANDROID_DELTA_ID` and `DELTA_SERVER_URL` as `BuildConfig` fields inside your `android { defaultConfig { ... } }` block:\n\n```groovy\nandroid {\n    defaultConfig {\n        buildConfigField \"String\", \"ANDROID_DELTA_ID\", \"\\\"${ANDROID_DELTA_ID}\\\"\"\n        buildConfigField \"String\", \"DELTA_SERVER_URL\", \"\\\"${DELTA_SERVER_URL}\\\"\"\n    }\n}\n```\n\nEach platform requires its own **unique** App ID registered in the delta registry — the Android and iOS App IDs must be different values and must not be reused across platforms. Use [delta-cli](https://github.com/zepto-labs/delta-cli) to create one for Android:\n\n```sh\n# Install delta-cli (if not already installed)\nnpm install -D @zepto-labs/delta-cli\n\n# Create a registry entry for Android.\nyarn delta-cli createRegistry --appId YOUR_ANDROID_DELTA_ID --platform android --appName \"YourAppName\"\n```\n\n> **Important:** Choose a unique `--appId` for Android. This value must not be reused for iOS or any other app.\n\n#### 3. Configure MainApplication\n\nYour `MainApplication` must implement `IDeltaDelegate`:\n\n```kotlin\nimport com.delta.IDeltaDelegate\nimport com.delta.Delta\n\nclass MainApplication : Application(), ReactApplication, IDeltaDelegate {\n\n    override val reactNativeHost: ReactNativeHost =\n        object : DefaultReactNativeHost(this) {\n\n            override fun getJSBundleFile(): String {\n                return Delta.getJSBundlePath()\n            }\n\n            // ... other overrides\n        }\n\n    override fun onCreate() {\n        super.onCreate()\n        Delta.initialize(this)\n    }\n\n    override fun onEventOccurred(eventName: String, params: JSONObject) {\n        // Handle Delta lifecycle events — see Events section below\n    }\n}\n```\n\n#### 4. Configure BSPatch Maven Repo\n\ndelta ships a pre-built `bspatch` AAR inside the npm package. Add the following to your `android/gradle.properties` so Gradle can resolve it:\n\n```properties\ndeltaMavenRepo=../node_modules/@zepto-labs/react-native-delta/maven-repo\n```\n\n> **Note:** Adjust the relative path if your `android/` folder is nested deeper (e.g. use `../../node_modules/...` in a monorepo).\n\n#### 5. Manifest File\n\nA `manifest.json` is auto-generated in `src/main/assets/` during release builds:\n\n```json\n{\n  \"appId\": \"yourAppId\",\n  \"appVersion\": \"1.0.0\",\n  \"jsVersion\": 1,\n  \"bundleVersion\": 0,\n  \"hash\": \"md5-hash-of-bundle\"\n}\n```\n\n---\n\n### iOS\n\n#### 1. Podfile\n\n`bspatch-ios` is a C pod that doesn't define modules by default. Since `react-native-delta` is a Swift pod that depends on it, you need to enable modular headers for `bspatch-ios` so Swift can import it. Add the following inside your target block:\n\n```ruby\ntarget 'YourApp' do\n  pod 'bspatch-ios', :modular_headers => true\n\n  # ... rest of your pods\nend\n```\n\n#### 2. AppDelegate.h\n\nImport Delta and conform to `IDeltaDelegate`:\n\n```objc\n#import <RCTAppDelegate.h>\n#import <UIKit/UIKit.h>\n@import react_native_delta;\n\n@interface AppDelegate : RCTAppDelegate<IDeltaDelegate>\n@end\n```\n\n#### 3. AppDelegate.m\n\nInitialize Delta and configure the bundle URL:\n\n```objc\n@import react_native_code_delta;\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n  self.moduleName = @\"YourApp\";\n  self.initialProps = @{};\n\n  [Delta initialize:self];\n\n  BOOL success = [super application:application didFinishLaunchingWithOptions:launchOptions];\n  [Delta checkUpdate];\n\n  return success;\n}\n\n- (NSURL *)bundleURL\n{\n#if DEBUG\n  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@\"index\"];\n#else\n  return [Delta getJSBundlePath];\n#endif\n}\n\n- (void)onEventOccurredWithEventName:(NSString *)eventName params:(NSDictionary<NSString *,id> *)params {\n  // Handle delta lifecycle events — see Events section below\n}\n\n@end\n```\n\n#### 4. Info.plist Keys\n\niOS requires a **separate, unique** App ID from Android. Use [delta-cli](https://github.com/zepto-labs/delta-cli) to create one for iOS:\n\n```sh\n# Install delta-cli (if not already installed)\nnpm install -D @zepto-labs/delta-cli\n\n# Create a registry entry for iOS.\nyarn delta-cli createRegistry --appId YOUR_IOS_APP_ID --platform ios --appName \"YourAppName\"\n```\n\n> **Important:** Choose a unique `--appId` for iOS. This value must be different from the Android App ID and must not be reused across platforms.\n\nAdd the following keys to your `Info.plist`, using the above App ID for `DeltaAppId`:\n\n\n| Key              | Type   | Description                                                                                                                                          |\n| ---------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `DeltaAppId`     | String | Your Delta iOS App ID you used (from `createRegistry` above)                                                                                         |\n| `DeltaJsVersion` | String | Current JS version number (integer starting from 1). Must be unique per native app version — two different app versions cannot share the same value. |\n| `DeltaServerUrl` | String | Base URL of the Delta backend server                                                                                                                 |\n\n\n> **Note:** `DeltaBundleVersion` is not required — it is inserted automatically by the build scripts.\n\n---\n\n## Build Process\n\nDelta hooks into the native build process to generate manifests and upload bundles automatically.\n\n### JS Version\n\n`jsVersion` identifies the native binary a JavaScript bundle is compatible with. **Two different app versions cannot share the same `jsVersion`.** Each native app version (for example, `1.0.0` and `1.1.0`) must use its own unique `jsVersion` value.\n\nIncrement `jsVersion` when you ship a new native app version to the store, or when you make breaking native changes that require a fresh JS bundle baseline. OTA patches and bundle uploads within the same native app version reuse the same `jsVersion` and only increment `bundleVersion`.\n\nConfigure `jsVersion` via `DELTA_JS_VERSION` on Android and `DeltaJsVersion` in `Info.plist` on iOS.\n\n### Android\n\nThe `delta.gradle` plugin automatically:\n\n1. **Generates `manifest.json`** — After the JS bundle is created (during `createBundle<Variant>JsAndAssets`), it generates a manifest with `appId`, `appVersion`, `jsVersion`, `bundleVersion`, and `hash`.\n2. **Uploads the bundle** — After `assemble<Variant>` or `bundle<Variant>`, it runs `delta-cli createAndroidNativeBundle` to upload the bundle to staging.\n\n> **Important:** Delta build tasks only run when the `-PdeltaBuild=true` flag is passed. Without this flag, the gradle plugin is a no-op.\n\n**Command Line:**\n\n```sh\n./gradlew assembleRelease -PdeltaBuild=true\n```\n\nor with `bundle`:\n\n```sh\n./gradlew bundleRelease -PdeltaBuild=true\n```\n\n**Android Studio:**\n\nAdd the flag to your run configuration:\n\n1. Go to **Run** → **Edit Configurations**\n2. Select your build configuration\n3. In the **Gradle** section, add `-PdeltaBuild=true` to the **Command line options** field\n\nAlternatively, add it to your project's `gradle.properties` for always-on Delta builds:\n\n```properties\ndeltaBuild=true\n```\n\n### iOS\n\nTwo Ruby scripts run as part of the Xcode build phases:\n\n#### Xcode Scheme Setup\n\n1. Open your app scheme in Xcode (**Product** → **Scheme** → **Edit Scheme…**)\n2. Under **Build** → **Pre-actions**, add a **Run Script** action:\n\n```sh\ncat \"${SRCROOT}/../.env\" > \"${SRCROOT}/ProdConfig.xcconfig\"\nif [ \"${CONFIGURATION}\" = \"Release\" ]; then\n  ruby \"${SRCROOT}/../node_modules/@zepto-labs/react-native-delta/scripts/ios/update_info_plist.rb\"\nfi\n```\n\n1. Under **Archive** → **Post-actions**, add a **Run Script** action:\n\n```sh\nruby \"${SRCROOT}/../node_modules/@zepto-labs/react-native-delta/scripts/ios/upload_delta_bundle.rb\"\n```\n\n> **Note:** `update_info_plist.rb` runs only for **Release** builds. The bundle upload runs automatically after you **Archive** the app, not on regular Run builds.\n\n---\n\n## Delta Config\n\nFor CLI operations, create a `delta.config.json` at your project root:\n\n```json\n{\n  \"s3\": {\n    \"bucket\": \"your-delta-bucket\",\n    \"region\": \"your-region\"\n  },\n  \"lambda\": {\n    \"region\": \"your-region\",\n    \"getLatestPatch\": \"<Your Function Name from backend>\",\n    \"getReleaseList\": \"<Your Function Name from backend>\",\n    \"createRelease\": \"<Your Function Name from backend>\",\n    \"updateRelease\": \"<Your Function Name from backend>\",\n    \"getRegistryList\": \"<Your Function Name from backend>\",\n    \"createRegistry\": \"<Your Function Name from backend>\",\n    \"invalidateCache\": \"<Your Function Name from backend>\"\n  }\n}\n```\n\n---\n\n## API Reference\n\n### React Native\n\nImport from the package:\n\n```ts\nimport {\n  checkUpdate,\n  getManifestData,\n  updateUserType,\n  getUserType,\n} from '@zepto-labs/react-native-delta'\n```\n\n---\n\n#### `checkUpdate()`\n\nTriggers a background check for available OTA updates.\n\n```ts\ncheckUpdate()\n```\n\n\n| Parameter | Type | Description   |\n| --------- | ---- | ------------- |\n| —         | —    | No parameters |\n\n\n**Returns:** `void`\n\n---\n\n#### `getManifestData()`\n\nReturns the cached manifest data as a JSON string containing the current bundle information.\n\n```ts\nconst manifest = await getManifestData()\n```\n\n\n| Parameter | Type | Description   |\n| --------- | ---- | ------------- |\n| —         | —    | No parameters |\n\n\n**Returns:** `Promise<string>` — JSON string with manifest data\n\n**Response Shape:**\n\n```json\n{\n  \"jsVersion\": 1,\n  \"bundleVersion\": 0,\n  \"appVersion\": \"1.0.0\",\n  \"hash\": \"md5-hash\",\n  \"status\": \"ACTIVE\"\n}\n```\n\n---\n\n#### `updateUserType(value)`\n\nMarks the user as a Delta internal user. Internal users can receive staged/beta rollouts.\n\n```ts\nupdateUserType(true)\n```\n\n\n| Parameter | Type      | Default | Description                      |\n| --------- | --------- | ------- | -------------------------------- |\n| `value`   | `boolean` | `true`  | Whether to mark user as internal |\n\n\n**Returns:** `void`\n\n---\n\n#### `getUserType()`\n\nReturns whether the current user is marked as a Delta internal user.\n\n```ts\nconst isInternal = await getUserType()\n```\n\n\n| Parameter | Type | Description   |\n| --------- | ---- | ------------- |\n| —         | —    | No parameters |\n\n\n**Returns:** `Promise<boolean>`\n\n---\n\n### Android Native\n\nThese methods can be called directly from Kotlin/Java without going through React Native. All methods are accessible via `Delta.methodName()`.\n\n---\n\n#### `Delta.initialize(delegate)`\n\nInitializes the Delta SDK. Must be called before any other Delta method (typically in `Application.onCreate`). It reads `ANDROID_DELTA_ID` and `DELTA_SERVER_URL` from `BuildConfig` via reflection.\n\n```kotlin\nDelta.initialize(this)\n```\n\n\n| Parameter  | Type             | Description                                  |\n| ---------- | ---------------- | -------------------------------------------- |\n| `delegate` | `IDeltaDelegate` | Delegate implementing the required callbacks |\n\n\n---\n\n#### `Delta.getJSBundlePath()`\n\nReturns the path to the current JavaScript bundle. Use this in `getJSBundleFile()` to load Delta-managed bundles.\n\n```kotlin\nval bundlePath: String = Delta.getJSBundlePath()\n```\n\n**Returns:** `String` — file path to the JS bundle\n\n---\n\n#### `Delta.checkUpdate()`\n\nTriggers a background check for available OTA updates. Downloads and applies the update if one is available.\n\n```kotlin\nDelta.checkUpdate()\n```\n\n---\n\n#### `Delta.getManifestData()`\n\nReturns the cached manifest data as a JSON string. Returns an empty JSON object `{}` if no valid manifest exists or if the app version has changed.\n\n```kotlin\nval manifest: String = Delta.getManifestData()\n```\n\n**Returns:** `String` — JSON string with manifest data\n\n---\n\n### iOS Native\n\nThese methods can be called directly from Objective-C/Swift without going through React Native.\n\n---\n\n#### `Delta.initialize(_:)`\n\nInitializes the Delta SDK. Must be called before any other Delta method (typically in `didFinishLaunchingWithOptions`). It reads the server URL from Info.plist's `DeltaServerUrl` key.\n\n**Objective-C:**\n\n```objc\n[Delta initialize:self];\n```\n\n**Swift:**\n\n```swift\nDelta.initialize(self)\n```\n\n\n| Parameter  | Type             | Description                                 |\n| ---------- | ---------------- | ------------------------------------------- |\n| `delegate` | `IDeltaDelegate` | Delegate implementing the required callback |\n\n\n---\n\n#### `Delta.getJSBundlePath()`\n\nReturns the URL to the current JavaScript bundle. Use this in `bundleURL` to load Delta-managed bundles.\n\n**Objective-C:**\n\n```objc\nNSURL *bundlePath = [Delta getJSBundlePath];\n```\n\n**Swift:**\n\n```swift\nlet bundlePath: URL? = Delta.getJSBundlePath()\n```\n\n**Returns:** `URL?` — URL to the JS bundle file\n\n---\n\n#### `Delta.checkUpdate()`\n\nTriggers a background check for available OTA updates.\n\n**Objective-C:**\n\n```objc\n[Delta checkUpdate];\n```\n\n**Swift:**\n\n```swift\nDelta.checkUpdate()\n```\n\n---\n\n#### `Delta.getInternalUser()`\n\nReturns whether the current user is marked as a Delta internal user.\n\n**Swift:**\n\n```swift\nlet isInternal: Bool = Delta.getInternalUser()\n```\n\n**Returns:** `Bool`\n\n---\n\n## Events\n\nDelta fires lifecycle events through the `onEventOccurred` delegate callback. Use these events for analytics, debugging, or custom UI feedback.\n\n### Delegate Signature\n\n**Android (Kotlin):**\n\n```kotlin\noverride fun onEventOccurred(eventName: String, params: JSONObject) {\n    // eventName: one of the event names below\n    // params: JSON object with contextual data\n}\n```\n\n**iOS (Objective-C):**\n\n```objc\n- (void)onEventOccurredWithEventName:(NSString *)eventName params:(NSDictionary<NSString *,id> *)params {\n    // eventName: one of the event names below\n    // params: dictionary with contextual data\n}\n```\n\n### Event List\n\n\n| Event Name                           | Description                                                                                                              |\n| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |\n| `UPDATE_STATUS`                      | Fired when the update check completes. Params include whether an update is available.                                    |\n| `GET_UPDATE_REQUEST_SUCCESS`         | The check-update API call returned successfully.                                                                         |\n| `UPDATE_API_FAILED`                  | The check-update API call failed. Params include `exception` and `reason`.                                               |\n| `DOWNLOADING_START`                  | Bundle or patch download has started. Params include `status` (`download_patch`, `download_bundle`, or `url_not_found`). |\n| `DOWNLOAD_BUNDLE_REQUEST_SUCCESS`    | Bundle file downloaded successfully from the server.                                                                     |\n| `DOWNLOAD_BUNDLE_FROM_SERVER_FAILED` | Bundle download failed. Params include `reason`.                                                                         |\n| `DOWNLOAD_PATCH_REQUEST_SUCCESS`     | Patch file downloaded successfully from the server.                                                                      |\n| `DOWNLOAD_PATCH_FROM_SERVER_FAILED`  | Patch download failed. Params include `reason`.                                                                          |\n| `UNZIPPED_BUNDLE_STATUS`             | Bundle unzip completed. Params include `status` (`BUNDLE_UNZIPPED` or `BUNDLE_UNZIPPED_FAILED`).                         |\n| `UNZIPPED_PATCH_STATUS`              | Patch unzip completed. Params include `status` (`PATCH_UNZIPPED` or `PATCH_UNZIPPED_FAILED`).                            |\n| `BUNDLE_MD5_STATUS`                  | MD5 verification result for the downloaded bundle. Params include `status` (`md5_matched` or `md5_not_matched`).         |\n| `PATCH_MD5_STATUS`                   | MD5 verification result for the downloaded patch. Params include `status` (`md5_matched` or `md5_not_matched`).          |\n| `PATCH_APPLICATION_STATUS`           | Patch application result. Params include `status` (`PATCH_APPLIED` or `PATCH_FAILED`).                                   |\n| `UPDATE_INSTALLED`                   | A new bundle has been successfully installed and will be used on next app launch.                                        |\n| `UPDATE_CACHE_DATA`                  | Manifest cache has been updated with new bundle information.                                                             |\n| `ROLL_BACK_INITIATED`                | A rollback has been triggered (server instructed to revert to default bundle).                                           |\n| `ROLL_BACK_FROM_MANIFEST`            | Rollback detected from manifest state. Params include `from` (`same_app_version` or `different_app_version`).            |\n| `ALREADY_UPDATE_IN_PROGRESS_EXIST`   | An update is already being downloaded/applied; skipping this check.                                                      |\n| `MANIFEST_NOT_FOUND`                 | No valid manifest found during check update.                                                                             |\n| `SHARED_DEFAULT_BUNDLE`              | Falling back to the default bundled JS. Params include `reason`.                                                         |\n\n\n---\n\n## Contributing\n\nSee the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.\n\n## Third-Party Licenses\n\nThis project depends on the following third-party packages. Their respective licenses apply to those packages.\n\n\n| Package                                                                                          | Version | License                                                  | License Changed? |\n| ------------------------------------------------------------------------------------------------ | ------- | -------------------------------------------------------- | ---------------- |\n| [@commitlint/config-conventional](https://www.npmjs.com/package/@commitlint/config-conventional) | 17.0.2  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [@react-native/eslint-config](https://www.npmjs.com/package/@react-native/eslint-config)         | 0.73.1  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [@types/jest](https://www.npmjs.com/package/@types/jest)                                         | 29.5.5  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [@types/react](https://www.npmjs.com/package/@types/react)                                       | 18.2.44 | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [commitlint](https://www.npmjs.com/package/commitlint)                                           | 17.0.2  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [del-cli](https://www.npmjs.com/package/del-cli)                                                 | 5.1.0   | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [eslint](https://www.npmjs.com/package/eslint)                                                   | 8.51.0  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [jest](https://www.npmjs.com/package/jest)                                                       | 29.7.0  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [lint-staged](https://www.npmjs.com/package/lint-staged)                                         | 15.2.2  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [prettier](https://www.npmjs.com/package/prettier)                                               | 3.2.5   | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [react](https://www.npmjs.com/package/react)                                                     | 18.2.0  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [react-native](https://www.npmjs.com/package/react-native)                                       | 0.73.6  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [react-native-builder-bob](https://www.npmjs.com/package/react-native-builder-bob)               | 0.20.0  | [MIT](https://opensource.org/licenses/MIT)               | No               |\n| [turbo](https://www.npmjs.com/package/turbo)                                                     | 1.10.7  | [MPL-2.0](https://opensource.org/licenses/MPL-2.0)       | No               |\n| [typescript](https://www.npmjs.com/package/typescript)                                           | 5.2.2   | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | No               |\n\n\n## Credits\n\n- [Kushagra Gupta](https://www.linkedin.com/in/kushagra-gupta-67384ba7/)\n- [Amit Mundra](https://www.linkedin.com/in/amit-mundra-17201bba/)\n- [Zubin Paul](https://www.linkedin.com/in/zubin-paul)\n- [Saiyam Arora](https://www.linkedin.com/in/saiyam-arora-0b5107215/)\n\n### Special Thanks\n\n- [Nikhil Mittal](https://www.linkedin.com/in/nikhilkmittal/)\n","readmeFilename":"README.md","_rev":"1-746c83d89bd1b44780e8e58ecc6e469a"}