@vanikya/ota-react-native 0.1.8 → 0.1.9

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.
@@ -5,6 +5,10 @@ import android.content.SharedPreferences
5
5
  import android.util.Base64
6
6
  import com.facebook.react.bridge.*
7
7
  import java.io.File
8
+ import java.io.FileOutputStream
9
+ import java.io.InputStream
10
+ import java.net.HttpURLConnection
11
+ import java.net.URL
8
12
  import java.security.MessageDigest
9
13
 
10
14
  class OTAUpdateModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
@@ -92,6 +96,65 @@ class OTAUpdateModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
92
96
  }
93
97
  }
94
98
 
99
+ // Download file directly to disk - bypasses JS memory entirely
100
+ // This is critical for large bundles (5MB+)
101
+ @ReactMethod
102
+ fun downloadFile(urlString: String, destPath: String, promise: Promise) {
103
+ Thread {
104
+ var connection: HttpURLConnection? = null
105
+ var inputStream: InputStream? = null
106
+ var outputStream: FileOutputStream? = null
107
+
108
+ try {
109
+ val url = URL(urlString)
110
+ connection = url.openConnection() as HttpURLConnection
111
+ connection.connectTimeout = 30000
112
+ connection.readTimeout = 60000
113
+ connection.requestMethod = "GET"
114
+ connection.connect()
115
+
116
+ val responseCode = connection.responseCode
117
+ if (responseCode != HttpURLConnection.HTTP_OK) {
118
+ promise.reject("DOWNLOAD_ERROR", "Download failed with status $responseCode")
119
+ return@Thread
120
+ }
121
+
122
+ // Ensure parent directory exists
123
+ val destFile = File(destPath)
124
+ destFile.parentFile?.mkdirs()
125
+
126
+ inputStream = connection.inputStream
127
+ outputStream = FileOutputStream(destFile)
128
+
129
+ val buffer = ByteArray(8192) // 8KB buffer for efficient streaming
130
+ var bytesRead: Int
131
+ var totalBytesRead: Long = 0
132
+
133
+ while (inputStream.read(buffer).also { bytesRead = it } != -1) {
134
+ outputStream.write(buffer, 0, bytesRead)
135
+ totalBytesRead += bytesRead
136
+ }
137
+
138
+ outputStream.flush()
139
+
140
+ val result = Arguments.createMap()
141
+ result.putDouble("fileSize", totalBytesRead.toDouble())
142
+ promise.resolve(result)
143
+
144
+ } catch (e: Exception) {
145
+ promise.reject("DOWNLOAD_ERROR", "Failed to download file: ${e.message}", e)
146
+ } finally {
147
+ try {
148
+ inputStream?.close()
149
+ outputStream?.close()
150
+ connection?.disconnect()
151
+ } catch (e: Exception) {
152
+ // Ignore cleanup errors
153
+ }
154
+ }
155
+ }.start()
156
+ }
157
+
95
158
  // Cryptography
96
159
 
97
160
  @ReactMethod
@@ -107,6 +170,37 @@ class OTAUpdateModule(reactContext: ReactApplicationContext) : ReactContextBaseJ
107
170
  }
108
171
  }
109
172
 
173
+ // Calculate SHA256 from file path - streams file to avoid memory issues
174
+ // Critical for large bundles (5MB+)
175
+ @ReactMethod
176
+ fun calculateSHA256FromFile(filePath: String, promise: Promise) {
177
+ Thread {
178
+ try {
179
+ val file = File(filePath)
180
+ if (!file.exists()) {
181
+ promise.reject("FILE_ERROR", "File not found: $filePath")
182
+ return@Thread
183
+ }
184
+
185
+ val digest = MessageDigest.getInstance("SHA-256")
186
+ val buffer = ByteArray(8192) // 8KB buffer
187
+ var bytesRead: Int
188
+
189
+ file.inputStream().use { inputStream ->
190
+ while (inputStream.read(buffer).also { bytesRead = it } != -1) {
191
+ digest.update(buffer, 0, bytesRead)
192
+ }
193
+ }
194
+
195
+ val hash = digest.digest()
196
+ val hexString = hash.joinToString("") { "%02x".format(it) }
197
+ promise.resolve(hexString)
198
+ } catch (e: Exception) {
199
+ promise.reject("HASH_ERROR", "Failed to calculate hash: ${e.message}", e)
200
+ }
201
+ }.start()
202
+ }
203
+
110
204
  @ReactMethod
111
205
  fun verifySignature(base64Content: String, signatureHex: String, publicKeyHex: String, promise: Promise) {
112
206
  // Ed25519 signature verification
package/ios/OTAUpdate.m CHANGED
@@ -35,11 +35,20 @@ RCT_EXTERN_METHOD(makeDirectory:(NSString *)path
35
35
  resolver:(RCTPromiseResolveBlock)resolver
36
36
  rejecter:(RCTPromiseRejectBlock)rejecter)
37
37
 
38
+ RCT_EXTERN_METHOD(downloadFile:(NSString *)urlString
39
+ destPath:(NSString *)destPath
40
+ resolver:(RCTPromiseResolveBlock)resolver
41
+ rejecter:(RCTPromiseRejectBlock)rejecter)
42
+
38
43
  // Cryptography
39
44
  RCT_EXTERN_METHOD(calculateSHA256:(NSString *)base64Content
40
45
  resolver:(RCTPromiseResolveBlock)resolver
41
46
  rejecter:(RCTPromiseRejectBlock)rejecter)
42
47
 
48
+ RCT_EXTERN_METHOD(calculateSHA256FromFile:(NSString *)filePath
49
+ resolver:(RCTPromiseResolveBlock)resolver
50
+ rejecter:(RCTPromiseRejectBlock)rejecter)
51
+
43
52
  RCT_EXTERN_METHOD(verifySignature:(NSString *)base64Content
44
53
  signatureHex:(NSString *)signatureHex
45
54
  publicKeyHex:(NSString *)publicKeyHex
@@ -85,6 +85,70 @@ class OTAUpdate: NSObject {
85
85
  }
86
86
  }
87
87
 
88
+ // Download file directly to disk - bypasses JS memory entirely
89
+ // This is critical for large bundles (5MB+)
90
+ @objc
91
+ func downloadFile(_ urlString: String, destPath: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
92
+ guard let url = URL(string: urlString) else {
93
+ rejecter("DOWNLOAD_ERROR", "Invalid URL: \(urlString)", nil)
94
+ return
95
+ }
96
+
97
+ let destURL = URL(fileURLWithPath: destPath)
98
+
99
+ // Ensure parent directory exists
100
+ let parentDir = destURL.deletingLastPathComponent()
101
+ do {
102
+ try FileManager.default.createDirectory(at: parentDir, withIntermediateDirectories: true, attributes: nil)
103
+ } catch {
104
+ rejecter("DOWNLOAD_ERROR", "Failed to create directory: \(error.localizedDescription)", error)
105
+ return
106
+ }
107
+
108
+ let task = URLSession.shared.downloadTask(with: url) { tempURL, response, error in
109
+ if let error = error {
110
+ rejecter("DOWNLOAD_ERROR", "Download failed: \(error.localizedDescription)", error)
111
+ return
112
+ }
113
+
114
+ guard let httpResponse = response as? HTTPURLResponse else {
115
+ rejecter("DOWNLOAD_ERROR", "Invalid response", nil)
116
+ return
117
+ }
118
+
119
+ guard httpResponse.statusCode == 200 else {
120
+ rejecter("DOWNLOAD_ERROR", "Download failed with status \(httpResponse.statusCode)", nil)
121
+ return
122
+ }
123
+
124
+ guard let tempURL = tempURL else {
125
+ rejecter("DOWNLOAD_ERROR", "No temporary file created", nil)
126
+ return
127
+ }
128
+
129
+ do {
130
+ // Remove existing file if it exists
131
+ if FileManager.default.fileExists(atPath: destPath) {
132
+ try FileManager.default.removeItem(atPath: destPath)
133
+ }
134
+
135
+ // Move downloaded file to destination
136
+ try FileManager.default.moveItem(at: tempURL, to: destURL)
137
+
138
+ // Get file size
139
+ let attributes = try FileManager.default.attributesOfItem(atPath: destPath)
140
+ let fileSize = attributes[.size] as? Int64 ?? 0
141
+
142
+ let result: [String: Any] = ["fileSize": fileSize]
143
+ resolver(result)
144
+ } catch {
145
+ rejecter("DOWNLOAD_ERROR", "Failed to save file: \(error.localizedDescription)", error)
146
+ }
147
+ }
148
+
149
+ task.resume()
150
+ }
151
+
88
152
  // MARK: - Cryptography
89
153
 
90
154
  @objc
@@ -103,6 +167,48 @@ class OTAUpdate: NSObject {
103
167
  resolver(hexString)
104
168
  }
105
169
 
170
+ // Calculate SHA256 from file path - streams file to avoid memory issues
171
+ // Critical for large bundles (5MB+)
172
+ @objc
173
+ func calculateSHA256FromFile(_ filePath: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
174
+ DispatchQueue.global(qos: .userInitiated).async {
175
+ guard FileManager.default.fileExists(atPath: filePath) else {
176
+ rejecter("FILE_ERROR", "File not found: \(filePath)", nil)
177
+ return
178
+ }
179
+
180
+ guard let inputStream = InputStream(fileAtPath: filePath) else {
181
+ rejecter("FILE_ERROR", "Could not open file: \(filePath)", nil)
182
+ return
183
+ }
184
+
185
+ inputStream.open()
186
+ defer { inputStream.close() }
187
+
188
+ var context = CC_SHA256_CTX()
189
+ CC_SHA256_Init(&context)
190
+
191
+ let bufferSize = 8192 // 8KB buffer
192
+ var buffer = [UInt8](repeating: 0, count: bufferSize)
193
+
194
+ while inputStream.hasBytesAvailable {
195
+ let bytesRead = inputStream.read(&buffer, maxLength: bufferSize)
196
+ if bytesRead > 0 {
197
+ CC_SHA256_Update(&context, buffer, CC_LONG(bytesRead))
198
+ } else if bytesRead < 0 {
199
+ rejecter("READ_ERROR", "Error reading file", inputStream.streamError)
200
+ return
201
+ }
202
+ }
203
+
204
+ var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
205
+ CC_SHA256_Final(&hash, &context)
206
+
207
+ let hexString = hash.map { String(format: "%02x", $0) }.joined()
208
+ resolver(hexString)
209
+ }
210
+ }
211
+
106
212
  @objc
107
213
  func verifySignature(_ base64Content: String, signatureHex: String, publicKeyHex: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
108
214
  // Ed25519 signature verification
@@ -8,7 +8,6 @@ var _react = require("react");
8
8
  var _reactNative = require("react-native");
9
9
  var _api = require("../utils/api");
10
10
  var _storage = require("../utils/storage");
11
- var _verification = require("../utils/verification");
12
11
  // Generate or get device ID
13
12
  async function getDeviceId() {
14
13
  // Try to get from native module or AsyncStorage
@@ -125,23 +124,36 @@ function useOTAUpdate(config) {
125
124
  deviceInfo: (0, _api.getDeviceInfo)()
126
125
  });
127
126
 
128
- // Download bundle
129
- const bundleData = await apiClient.current.downloadBundle(release.bundleUrl);
127
+ // Download bundle directly to file (bypasses JS memory - critical for large bundles)
128
+ const downloadResult = await storage.current.downloadBundleToFile(release.bundleUrl, release.id);
130
129
  setDownloadProgress({
131
- downloadedBytes: bundleData.byteLength,
130
+ downloadedBytes: downloadResult.fileSize,
132
131
  totalBytes: release.bundleSize,
133
132
  percentage: 100
134
133
  });
135
134
 
136
- // Verify bundle
135
+ // Verify bundle hash
137
136
  setStatus('verifying');
138
- const verification = await (0, _verification.verifyBundle)(bundleData, release.bundleHash, release.bundleSignature, publicKey || null);
139
- if (!verification.valid) {
140
- throw new Error(verification.error || 'Bundle verification failed');
137
+
138
+ // Calculate hash from file (streaming to avoid memory issues)
139
+ const actualHash = await storage.current.calculateBundleHash(release.id);
140
+ const expectedHashWithoutPrefix = release.bundleHash.replace(/^sha256:/, '');
141
+ if (actualHash !== expectedHashWithoutPrefix) {
142
+ // Delete corrupted bundle
143
+ await storage.current.deleteBundle(release.id);
144
+ throw new Error(`Bundle hash mismatch: expected ${expectedHashWithoutPrefix}, got ${actualHash}`);
141
145
  }
142
146
 
143
- // Save bundle
144
- const bundlePath = await storage.current.saveBundle(release.id, bundleData);
147
+ // Validate bundle content (check it's actually JavaScript, not an error page)
148
+ const isValid = await storage.current.validateBundle(release.id);
149
+ if (!isValid) {
150
+ await storage.current.deleteBundle(release.id);
151
+ throw new Error('Downloaded content is not a valid JavaScript bundle');
152
+ }
153
+ if (__DEV__) {
154
+ console.log('[OTAUpdate] Bundle verified successfully');
155
+ }
156
+ const bundlePath = downloadResult.path;
145
157
 
146
158
  // Save metadata
147
159
  await storage.current.saveMetadata({
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_api","_storage","_verification","getDeviceId","id","Math","random","toString","substring","useOTAUpdate","config","serverUrl","appSlug","channel","appVersion","publicKey","checkOnMount","checkOnForeground","status","setStatus","useState","updateInfo","setUpdateInfo","downloadProgress","setDownloadProgress","error","setError","currentVersion","setCurrentVersion","isDismissed","setIsDismissed","apiClient","useRef","OTAApiClient","storage","UpdateStorage","deviceIdRef","releaseRef","useEffect","loadCurrentVersion","metadata","current","getMetadata","version","getDeviceIdCached","useCallback","checkForUpdate","deviceId","currentMetadata","response","checkUpdate","platform","Platform","OS","updateAvailable","release","info","releaseId","bundleSize","isMandatory","releaseNotes","err","Error","String","downloadUpdate","downloadedBytes","totalBytes","percentage","reportEvent","eventType","deviceInfo","getDeviceInfo","bundleData","downloadBundle","bundleUrl","byteLength","verification","verifyBundle","bundleHash","bundleSignature","valid","bundlePath","saveBundle","saveMetadata","downloadedAt","Date","now","registered","registerBundleWithNative","__DEV__","console","log","errorMessage","message","applyUpdate","restartApp","clearPendingUpdate","deleteBundle","clearMetadata","clearNativePendingBundle","dismissUpdate","resetDismiss","handleAppStateChange","nextAppState","subscription","AppState","addEventListener","remove"],"sourceRoot":"../../../src","sources":["hooks/useOTAUpdate.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_api","_storage","getDeviceId","id","Math","random","toString","substring","useOTAUpdate","config","serverUrl","appSlug","channel","appVersion","publicKey","checkOnMount","checkOnForeground","status","setStatus","useState","updateInfo","setUpdateInfo","downloadProgress","setDownloadProgress","error","setError","currentVersion","setCurrentVersion","isDismissed","setIsDismissed","apiClient","useRef","OTAApiClient","storage","UpdateStorage","deviceIdRef","releaseRef","useEffect","loadCurrentVersion","metadata","current","getMetadata","version","getDeviceIdCached","useCallback","checkForUpdate","deviceId","currentMetadata","response","checkUpdate","platform","Platform","OS","updateAvailable","release","info","releaseId","bundleSize","isMandatory","releaseNotes","err","Error","String","downloadUpdate","downloadedBytes","totalBytes","percentage","reportEvent","eventType","deviceInfo","getDeviceInfo","downloadResult","downloadBundleToFile","bundleUrl","fileSize","actualHash","calculateBundleHash","expectedHashWithoutPrefix","bundleHash","replace","deleteBundle","isValid","validateBundle","__DEV__","console","log","bundlePath","path","saveMetadata","downloadedAt","Date","now","registered","registerBundleWithNative","errorMessage","message","applyUpdate","restartApp","clearPendingUpdate","clearMetadata","clearNativePendingBundle","dismissUpdate","resetDismiss","handleAppStateChange","nextAppState","subscription","AppState","addEventListener","remove"],"sourceRoot":"../../../src","sources":["hooks/useOTAUpdate.ts"],"mappings":"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","ignoreList":[]}
@@ -107,6 +107,61 @@ class ExpoStorageAdapter {
107
107
  intermediates: true
108
108
  });
109
109
  }
110
+ async downloadToFile(url, destPath) {
111
+ // Use Expo's downloadAsync which downloads directly to file
112
+ // This bypasses JS memory entirely - critical for large bundles
113
+ const result = await ExpoFileSystem.downloadAsync(url, destPath);
114
+ if (result.status !== 200) {
115
+ throw new Error(`Download failed with status ${result.status}`);
116
+ }
117
+
118
+ // Get file size
119
+ const info = await ExpoFileSystem.getInfoAsync(destPath);
120
+ return {
121
+ fileSize: info.size || 0
122
+ };
123
+ }
124
+ async calculateHashFromFile(path) {
125
+ // For Expo, we need to read the file and use expo-crypto
126
+ // Try to use expo-crypto if available
127
+ let ExpoCrypto = null;
128
+ try {
129
+ ExpoCrypto = require('expo-crypto');
130
+ } catch {
131
+ // expo-crypto not available
132
+ }
133
+ if (ExpoCrypto?.digest) {
134
+ // Read file as base64 and convert to Uint8Array
135
+ const base64 = await ExpoFileSystem.readAsStringAsync(path, {
136
+ encoding: ExpoFileSystem.EncodingType.Base64
137
+ });
138
+ const binary = atob(base64);
139
+ const bytes = new Uint8Array(binary.length);
140
+ for (let i = 0; i < binary.length; i++) {
141
+ bytes[i] = binary.charCodeAt(i);
142
+ }
143
+ const hashBuffer = await ExpoCrypto.digest(ExpoCrypto.CryptoDigestAlgorithm.SHA256, bytes);
144
+ // Convert ArrayBuffer to hex
145
+ const hashBytes = new Uint8Array(hashBuffer);
146
+ return Array.from(hashBytes).map(b => b.toString(16).padStart(2, '0')).join('');
147
+ }
148
+
149
+ // Fallback to SubtleCrypto if available
150
+ if (typeof crypto !== 'undefined' && crypto.subtle) {
151
+ const base64 = await ExpoFileSystem.readAsStringAsync(path, {
152
+ encoding: ExpoFileSystem.EncodingType.Base64
153
+ });
154
+ const binary = atob(base64);
155
+ const bytes = new Uint8Array(binary.length);
156
+ for (let i = 0; i < binary.length; i++) {
157
+ bytes[i] = binary.charCodeAt(i);
158
+ }
159
+ const hashBuffer = await crypto.subtle.digest('SHA-256', bytes.buffer);
160
+ const hashBytes = new Uint8Array(hashBuffer);
161
+ return Array.from(hashBytes).map(b => b.toString(16).padStart(2, '0')).join('');
162
+ }
163
+ throw new Error('No crypto implementation available for hash calculation');
164
+ }
110
165
  }
111
166
 
112
167
  // Native implementation for bare React Native
@@ -165,6 +220,50 @@ class NativeStorageAdapter {
165
220
  }
166
221
  await OTAUpdateNative.makeDirectory(path);
167
222
  }
223
+ async downloadToFile(url, destPath) {
224
+ if (!OTAUpdateNative) {
225
+ throw new Error('OTAUpdate native module not found');
226
+ }
227
+
228
+ // Use native module's downloadFile method if available (preferred)
229
+ if (OTAUpdateNative.downloadFile) {
230
+ const result = await OTAUpdateNative.downloadFile(url, destPath);
231
+ return {
232
+ fileSize: result.fileSize || 0
233
+ };
234
+ }
235
+
236
+ // Fallback: download via fetch and write in chunks
237
+ // This is less efficient but works without native download support
238
+ const response = await fetch(url);
239
+ if (!response.ok) {
240
+ throw new Error(`Download failed with status ${response.status}`);
241
+ }
242
+ const data = await response.arrayBuffer();
243
+ const base64 = arrayBufferToBase64(data);
244
+ await OTAUpdateNative.writeFileBase64(destPath, base64);
245
+ return {
246
+ fileSize: data.byteLength
247
+ };
248
+ }
249
+ async calculateHashFromFile(path) {
250
+ if (!OTAUpdateNative) {
251
+ throw new Error('OTAUpdate native module not found');
252
+ }
253
+
254
+ // Use native module's calculateSHA256FromFile if available (preferred - streams file)
255
+ if (OTAUpdateNative.calculateSHA256FromFile) {
256
+ return OTAUpdateNative.calculateSHA256FromFile(path);
257
+ }
258
+
259
+ // Fallback: read file as base64 and use the base64 hash method
260
+ // This loads the file into memory, but is better than nothing
261
+ if (OTAUpdateNative.calculateSHA256 && OTAUpdateNative.readFileBase64) {
262
+ const base64 = await OTAUpdateNative.readFileBase64(path);
263
+ return OTAUpdateNative.calculateSHA256(base64);
264
+ }
265
+ throw new Error('No hash calculation method available');
266
+ }
168
267
  }
169
268
 
170
269
  // Factory function to get the appropriate storage adapter
@@ -259,6 +358,56 @@ class UpdateStorage {
259
358
  // In a more advanced implementation, we might keep a few for rollback
260
359
  }
261
360
 
361
+ /**
362
+ * Download bundle directly to file, bypassing JS memory.
363
+ * Critical for large bundles (5MB+).
364
+ *
365
+ * @param url The URL to download from
366
+ * @param releaseId The release ID (used for filename)
367
+ * @returns The normalized file path where bundle was saved
368
+ */
369
+ async downloadBundleToFile(url, releaseId) {
370
+ await this.ensureDirectory();
371
+ const bundlePath = `${this.baseDir}${releaseId}.bundle`;
372
+ const result = await this.storage.downloadToFile(url, bundlePath);
373
+
374
+ // Return normalized path for native module compatibility
375
+ return {
376
+ path: normalizePath(bundlePath),
377
+ fileSize: result.fileSize
378
+ };
379
+ }
380
+
381
+ /**
382
+ * Calculate SHA256 hash of a stored bundle file.
383
+ * Uses streaming to avoid loading entire file into memory.
384
+ *
385
+ * @param releaseId The release ID of the bundle
386
+ * @returns The hash string (without 'sha256:' prefix)
387
+ */
388
+ async calculateBundleHash(releaseId) {
389
+ const bundlePath = this.getRawBundlePath(releaseId);
390
+ if (!(await this.storage.exists(bundlePath))) {
391
+ throw new Error('Bundle file not found');
392
+ }
393
+ if (this.storage.calculateHashFromFile) {
394
+ return this.storage.calculateHashFromFile(bundlePath);
395
+ }
396
+
397
+ // Fallback: read file into memory and calculate hash
398
+ // This is not ideal for large files but works as a fallback
399
+ const data = await this.storage.readFileAsBuffer(bundlePath);
400
+ const bytes = new Uint8Array(data);
401
+
402
+ // Use SubtleCrypto if available
403
+ if (typeof crypto !== 'undefined' && crypto.subtle) {
404
+ const hashBuffer = await crypto.subtle.digest('SHA-256', bytes.buffer);
405
+ const hashBytes = new Uint8Array(hashBuffer);
406
+ return Array.from(hashBytes).map(b => b.toString(16).padStart(2, '0')).join('');
407
+ }
408
+ throw new Error('No hash calculation method available');
409
+ }
410
+
262
411
  /**
263
412
  * Validate that a stored bundle is a valid JavaScript file.
264
413
  * This helps detect corrupted downloads (e.g., HTML error pages saved as bundles).
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","normalizePath","path","startsWith","slice","arrayBufferToBase64","buffer","bytes","Uint8Array","chunkSize","chunks","i","length","chunk","subarray","Math","min","binary","j","String","fromCharCode","push","btoa","join","base64ToArrayBuffer","base64","atob","charCodeAt","ExpoFileSystem","OTAUpdateNative","NativeModules","OTAUpdate","ExpoStorageAdapter","getDocumentDirectory","documentDirectory","writeFile","data","ArrayBuffer","writeAsStringAsync","encoding","EncodingType","Base64","readFile","readAsStringAsync","readFileAsBuffer","deleteFile","deleteAsync","idempotent","exists","info","getInfoAsync","makeDirectory","makeDirectoryAsync","intermediates","NativeStorageAdapter","Error","writeFileBase64","readFileBase64","getStorageAdapter","UpdateStorage","constructor","storage","isExpo","baseDir","baseDirNormalized","ensureDirectory","getNormalizedPath","saveBundle","releaseId","bundlePath","getRawBundlePath","getBundlePath","readBundle","deleteBundle","saveMetadata","update","metadataPath","JSON","stringify","getMetadata","content","parse","clearMetadata","cleanOldBundles","keepReleaseId","validateBundle","bundleData","byteLength","preview","trimmed","trim","includes","jsIndicators","pattern","test","clearCorruptedBundle","metadata","isValid","__DEV__","console","warn","clearNativePendingBundle","error","registerBundleWithNative","restart","applyBundle","normalizedPath","log","clearPendingBundle","exports"],"sourceRoot":"../../../src","sources":["utils/storage.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","normalizePath","path","startsWith","slice","arrayBufferToBase64","buffer","bytes","Uint8Array","chunkSize","chunks","i","length","chunk","subarray","Math","min","binary","j","String","fromCharCode","push","btoa","join","base64ToArrayBuffer","base64","atob","charCodeAt","ExpoFileSystem","OTAUpdateNative","NativeModules","OTAUpdate","ExpoStorageAdapter","getDocumentDirectory","documentDirectory","writeFile","data","ArrayBuffer","writeAsStringAsync","encoding","EncodingType","Base64","readFile","readAsStringAsync","readFileAsBuffer","deleteFile","deleteAsync","idempotent","exists","info","getInfoAsync","makeDirectory","makeDirectoryAsync","intermediates","downloadToFile","url","destPath","result","downloadAsync","status","Error","fileSize","size","calculateHashFromFile","ExpoCrypto","digest","hashBuffer","CryptoDigestAlgorithm","SHA256","hashBytes","Array","from","map","b","toString","padStart","crypto","subtle","NativeStorageAdapter","writeFileBase64","readFileBase64","downloadFile","response","fetch","ok","arrayBuffer","byteLength","calculateSHA256FromFile","calculateSHA256","getStorageAdapter","UpdateStorage","constructor","storage","isExpo","baseDir","baseDirNormalized","ensureDirectory","getNormalizedPath","saveBundle","releaseId","bundlePath","getRawBundlePath","getBundlePath","readBundle","deleteBundle","saveMetadata","update","metadataPath","JSON","stringify","getMetadata","content","parse","clearMetadata","cleanOldBundles","keepReleaseId","downloadBundleToFile","calculateBundleHash","validateBundle","bundleData","preview","trimmed","trim","includes","jsIndicators","pattern","test","clearCorruptedBundle","metadata","isValid","__DEV__","console","warn","clearNativePendingBundle","error","registerBundleWithNative","restart","applyBundle","normalizedPath","log","clearPendingBundle","exports"],"sourceRoot":"../../../src","sources":["utils/storage.ts"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,6 @@ import { useState, useCallback, useEffect, useRef } from 'react';
2
2
  import { AppState, Platform } from 'react-native';
3
3
  import { OTAApiClient, getDeviceInfo } from '../utils/api';
4
4
  import { UpdateStorage } from '../utils/storage';
5
- import { verifyBundle } from '../utils/verification';
6
5
  // Generate or get device ID
7
6
  async function getDeviceId() {
8
7
  // Try to get from native module or AsyncStorage
@@ -119,23 +118,36 @@ export function useOTAUpdate(config) {
119
118
  deviceInfo: getDeviceInfo()
120
119
  });
121
120
 
122
- // Download bundle
123
- const bundleData = await apiClient.current.downloadBundle(release.bundleUrl);
121
+ // Download bundle directly to file (bypasses JS memory - critical for large bundles)
122
+ const downloadResult = await storage.current.downloadBundleToFile(release.bundleUrl, release.id);
124
123
  setDownloadProgress({
125
- downloadedBytes: bundleData.byteLength,
124
+ downloadedBytes: downloadResult.fileSize,
126
125
  totalBytes: release.bundleSize,
127
126
  percentage: 100
128
127
  });
129
128
 
130
- // Verify bundle
129
+ // Verify bundle hash
131
130
  setStatus('verifying');
132
- const verification = await verifyBundle(bundleData, release.bundleHash, release.bundleSignature, publicKey || null);
133
- if (!verification.valid) {
134
- throw new Error(verification.error || 'Bundle verification failed');
131
+
132
+ // Calculate hash from file (streaming to avoid memory issues)
133
+ const actualHash = await storage.current.calculateBundleHash(release.id);
134
+ const expectedHashWithoutPrefix = release.bundleHash.replace(/^sha256:/, '');
135
+ if (actualHash !== expectedHashWithoutPrefix) {
136
+ // Delete corrupted bundle
137
+ await storage.current.deleteBundle(release.id);
138
+ throw new Error(`Bundle hash mismatch: expected ${expectedHashWithoutPrefix}, got ${actualHash}`);
135
139
  }
136
140
 
137
- // Save bundle
138
- const bundlePath = await storage.current.saveBundle(release.id, bundleData);
141
+ // Validate bundle content (check it's actually JavaScript, not an error page)
142
+ const isValid = await storage.current.validateBundle(release.id);
143
+ if (!isValid) {
144
+ await storage.current.deleteBundle(release.id);
145
+ throw new Error('Downloaded content is not a valid JavaScript bundle');
146
+ }
147
+ if (__DEV__) {
148
+ console.log('[OTAUpdate] Bundle verified successfully');
149
+ }
150
+ const bundlePath = downloadResult.path;
139
151
 
140
152
  // Save metadata
141
153
  await storage.current.saveMetadata({
@@ -1 +1 @@
1
- {"version":3,"names":["useState","useCallback","useEffect","useRef","AppState","Platform","OTAApiClient","getDeviceInfo","UpdateStorage","verifyBundle","getDeviceId","id","Math","random","toString","substring","useOTAUpdate","config","serverUrl","appSlug","channel","appVersion","publicKey","checkOnMount","checkOnForeground","status","setStatus","updateInfo","setUpdateInfo","downloadProgress","setDownloadProgress","error","setError","currentVersion","setCurrentVersion","isDismissed","setIsDismissed","apiClient","storage","deviceIdRef","releaseRef","loadCurrentVersion","metadata","current","getMetadata","version","getDeviceIdCached","checkForUpdate","deviceId","currentMetadata","response","checkUpdate","platform","OS","updateAvailable","release","info","releaseId","bundleSize","isMandatory","releaseNotes","err","Error","String","downloadUpdate","downloadedBytes","totalBytes","percentage","reportEvent","eventType","deviceInfo","bundleData","downloadBundle","bundleUrl","byteLength","verification","bundleHash","bundleSignature","valid","bundlePath","saveBundle","saveMetadata","downloadedAt","Date","now","registered","registerBundleWithNative","__DEV__","console","log","errorMessage","message","applyUpdate","restartApp","clearPendingUpdate","deleteBundle","clearMetadata","clearNativePendingBundle","dismissUpdate","resetDismiss","handleAppStateChange","nextAppState","subscription","addEventListener","remove"],"sourceRoot":"../../../src","sources":["hooks/useOTAUpdate.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useState","useCallback","useEffect","useRef","AppState","Platform","OTAApiClient","getDeviceInfo","UpdateStorage","getDeviceId","id","Math","random","toString","substring","useOTAUpdate","config","serverUrl","appSlug","channel","appVersion","publicKey","checkOnMount","checkOnForeground","status","setStatus","updateInfo","setUpdateInfo","downloadProgress","setDownloadProgress","error","setError","currentVersion","setCurrentVersion","isDismissed","setIsDismissed","apiClient","storage","deviceIdRef","releaseRef","loadCurrentVersion","metadata","current","getMetadata","version","getDeviceIdCached","checkForUpdate","deviceId","currentMetadata","response","checkUpdate","platform","OS","updateAvailable","release","info","releaseId","bundleSize","isMandatory","releaseNotes","err","Error","String","downloadUpdate","downloadedBytes","totalBytes","percentage","reportEvent","eventType","deviceInfo","downloadResult","downloadBundleToFile","bundleUrl","fileSize","actualHash","calculateBundleHash","expectedHashWithoutPrefix","bundleHash","replace","deleteBundle","isValid","validateBundle","__DEV__","console","log","bundlePath","path","saveMetadata","downloadedAt","Date","now","registered","registerBundleWithNative","errorMessage","message","applyUpdate","restartApp","clearPendingUpdate","clearMetadata","clearNativePendingBundle","dismissUpdate","resetDismiss","handleAppStateChange","nextAppState","subscription","addEventListener","remove"],"sourceRoot":"../../../src","sources":["hooks/useOTAUpdate.ts"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChE,SAASC,QAAQ,EAAkBC,QAAQ,QAAQ,cAAc;AACjE,SAASC,YAAY,EAAeC,aAAa,QAAQ,cAAc;AACvE,SAASC,aAAa,QAAQ,kBAAkB;AAoDhD;AACA,eAAeC,WAAWA,CAAA,EAAoB;EAC5C;EACA;EACA;EACA,MAAMC,EAAE,GAAG,UAAUC,IAAI,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;EAClE,OAAOJ,EAAE;AACX;AAEA,OAAO,SAASK,YAAYA,CAACC,MAAuB,EAAsB;EACxE,MAAM;IACJC,SAAS;IACTC,OAAO;IACPC,OAAO,GAAG,YAAY;IACtBC,UAAU;IACVC,SAAS;IACTC,YAAY,GAAG,IAAI;IACnBC,iBAAiB,GAAG;EACtB,CAAC,GAAGP,MAAM;EAEV,MAAM,CAACQ,MAAM,EAAEC,SAAS,CAAC,GAAGzB,QAAQ,CAAe,MAAM,CAAC;EAC1D,MAAM,CAAC0B,UAAU,EAAEC,aAAa,CAAC,GAAG3B,QAAQ,CAAoB,IAAI,CAAC;EACrE,MAAM,CAAC4B,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG7B,QAAQ,CAA0B,IAAI,CAAC;EACvF,MAAM,CAAC8B,KAAK,EAAEC,QAAQ,CAAC,GAAG/B,QAAQ,CAAe,IAAI,CAAC;EACtD,MAAM,CAACgC,cAAc,EAAEC,iBAAiB,CAAC,GAAGjC,QAAQ,CAAgB,IAAI,CAAC;EACzE,MAAM,CAACkC,WAAW,EAAEC,cAAc,CAAC,GAAGnC,QAAQ,CAAU,KAAK,CAAC;EAE9D,MAAMoC,SAAS,GAAGjC,MAAM,CAAC,IAAIG,YAAY,CAACW,SAAS,CAAC,CAAC;EACrD,MAAMoB,OAAO,GAAGlC,MAAM,CAAC,IAAIK,aAAa,CAAC,CAAC,CAAC;EAC3C,MAAM8B,WAAW,GAAGnC,MAAM,CAAgB,IAAI,CAAC;EAC/C,MAAMoC,UAAU,GAAGpC,MAAM,CAAqB,IAAI,CAAC;;EAEnD;EACAD,SAAS,CAAC,MAAM;IACd,MAAMsC,kBAAkB,GAAG,MAAAA,CAAA,KAAY;MACrC,MAAMC,QAAQ,GAAG,MAAMJ,OAAO,CAACK,OAAO,CAACC,WAAW,CAAC,CAAC;MACpD,IAAIF,QAAQ,EAAE;QACZR,iBAAiB,CAACQ,QAAQ,CAACG,OAAO,CAAC;MACrC;IACF,CAAC;IACDJ,kBAAkB,CAAC,CAAC;EACtB,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,MAAMK,iBAAiB,GAAG5C,WAAW,CAAC,YAAY;IAChD,IAAI,CAACqC,WAAW,CAACI,OAAO,EAAE;MACxBJ,WAAW,CAACI,OAAO,GAAG,MAAMjC,WAAW,CAAC,CAAC;IAC3C;IACA,OAAO6B,WAAW,CAACI,OAAO;EAC5B,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,MAAMI,cAAc,GAAG7C,WAAW,CAAC,YAAwC;IACzE,IAAI;MACFwB,SAAS,CAAC,UAAU,CAAC;MACrBM,QAAQ,CAAC,IAAI,CAAC;MAEd,MAAMgB,QAAQ,GAAG,MAAMF,iBAAiB,CAAC,CAAC;MAC1C,MAAMG,eAAe,GAAG,MAAMX,OAAO,CAACK,OAAO,CAACC,WAAW,CAAC,CAAC;MAE3D,MAAMM,QAAQ,GAAG,MAAMb,SAAS,CAACM,OAAO,CAACQ,WAAW,CAAC;QACnDhC,OAAO;QACPC,OAAO;QACPgC,QAAQ,EAAE9C,QAAQ,CAAC+C,EAAuB;QAC1CpB,cAAc,EAAEgB,eAAe,EAAEJ,OAAO,IAAI,IAAI;QAChDxB,UAAU;QACV2B;MACF,CAAC,CAAC;MAEF,IAAI,CAACE,QAAQ,CAACI,eAAe,IAAI,CAACJ,QAAQ,CAACK,OAAO,EAAE;QAClD7B,SAAS,CAAC,YAAY,CAAC;QACvB,OAAO,IAAI;MACb;MAEAc,UAAU,CAACG,OAAO,GAAGO,QAAQ,CAACK,OAAO;MAErC,MAAMC,IAAgB,GAAG;QACvBX,OAAO,EAAEK,QAAQ,CAACK,OAAO,CAACV,OAAO;QACjCY,SAAS,EAAEP,QAAQ,CAACK,OAAO,CAAC5C,EAAE;QAC9B+C,UAAU,EAAER,QAAQ,CAACK,OAAO,CAACG,UAAU;QACvCC,WAAW,EAAET,QAAQ,CAACK,OAAO,CAACI,WAAW;QACzCC,YAAY,EAAEV,QAAQ,CAACK,OAAO,CAACK;MACjC,CAAC;;MAED;MACA,IAAI,CAACjC,UAAU,IAAIA,UAAU,CAACkB,OAAO,KAAKW,IAAI,CAACX,OAAO,EAAE;QACtDT,cAAc,CAAC,KAAK,CAAC;MACvB;MAEAR,aAAa,CAAC4B,IAAI,CAAC;MACnB9B,SAAS,CAAC,WAAW,CAAC;MAEtB,OAAO8B,IAAI;IACb,CAAC,CAAC,OAAOK,GAAG,EAAE;MACZ,MAAM9B,KAAK,GAAG8B,GAAG,YAAYC,KAAK,GAAGD,GAAG,GAAG,IAAIC,KAAK,CAACC,MAAM,CAACF,GAAG,CAAC,CAAC;MACjE7B,QAAQ,CAACD,KAAK,CAAC;MACfL,SAAS,CAAC,OAAO,CAAC;MAClB,OAAO,IAAI;IACb;EACF,CAAC,EAAE,CAACP,OAAO,EAAEC,OAAO,EAAEC,UAAU,EAAEyB,iBAAiB,CAAC,CAAC;;EAErD;EACA,MAAMkB,cAAc,GAAG9D,WAAW,CAAC,YAA2B;IAC5D,IAAI,CAACsC,UAAU,CAACG,OAAO,EAAE;MACvB,MAAM,IAAImB,KAAK,CAAC,iCAAiC,CAAC;IACpD;IAEA,MAAMP,OAAO,GAAGf,UAAU,CAACG,OAAO;IAClC,MAAMK,QAAQ,GAAG,MAAMF,iBAAiB,CAAC,CAAC;IAE1C,IAAI;MACFpB,SAAS,CAAC,aAAa,CAAC;MACxBI,mBAAmB,CAAC;QAAEmC,eAAe,EAAE,CAAC;QAAEC,UAAU,EAAEX,OAAO,CAACG,UAAU;QAAES,UAAU,EAAE;MAAE,CAAC,CAAC;;MAE1F;MACA9B,SAAS,CAACM,OAAO,CAACyB,WAAW,CAAC;QAC5BjD,OAAO;QACPsC,SAAS,EAAEF,OAAO,CAAC5C,EAAE;QACrBqC,QAAQ;QACRqB,SAAS,EAAE,UAAU;QACrBhD,UAAU;QACViD,UAAU,EAAE9D,aAAa,CAAC;MAC5B,CAAC,CAAC;;MAEF;MACA,MAAM+D,cAAc,GAAG,MAAMjC,OAAO,CAACK,OAAO,CAAC6B,oBAAoB,CAACjB,OAAO,CAACkB,SAAS,EAAElB,OAAO,CAAC5C,EAAE,CAAC;MAEhGmB,mBAAmB,CAAC;QAClBmC,eAAe,EAAEM,cAAc,CAACG,QAAQ;QACxCR,UAAU,EAAEX,OAAO,CAACG,UAAU;QAC9BS,UAAU,EAAE;MACd,CAAC,CAAC;;MAEF;MACAzC,SAAS,CAAC,WAAW,CAAC;;MAEtB;MACA,MAAMiD,UAAU,GAAG,MAAMrC,OAAO,CAACK,OAAO,CAACiC,mBAAmB,CAACrB,OAAO,CAAC5C,EAAE,CAAC;MACxE,MAAMkE,yBAAyB,GAAGtB,OAAO,CAACuB,UAAU,CAACC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;MAE5E,IAAIJ,UAAU,KAAKE,yBAAyB,EAAE;QAC5C;QACA,MAAMvC,OAAO,CAACK,OAAO,CAACqC,YAAY,CAACzB,OAAO,CAAC5C,EAAE,CAAC;QAC9C,MAAM,IAAImD,KAAK,CAAC,kCAAkCe,yBAAyB,SAASF,UAAU,EAAE,CAAC;MACnG;;MAEA;MACA,MAAMM,OAAO,GAAG,MAAM3C,OAAO,CAACK,OAAO,CAACuC,cAAc,CAAC3B,OAAO,CAAC5C,EAAE,CAAC;MAChE,IAAI,CAACsE,OAAO,EAAE;QACZ,MAAM3C,OAAO,CAACK,OAAO,CAACqC,YAAY,CAACzB,OAAO,CAAC5C,EAAE,CAAC;QAC9C,MAAM,IAAImD,KAAK,CAAC,qDAAqD,CAAC;MACxE;MAEA,IAAIqB,OAAO,EAAE;QACXC,OAAO,CAACC,GAAG,CAAC,0CAA0C,CAAC;MACzD;MAEA,MAAMC,UAAU,GAAGf,cAAc,CAACgB,IAAI;;MAEtC;MACA,MAAMjD,OAAO,CAACK,OAAO,CAAC6C,YAAY,CAAC;QACjC/B,SAAS,EAAEF,OAAO,CAAC5C,EAAE;QACrBkC,OAAO,EAAEU,OAAO,CAACV,OAAO;QACxByC,UAAU;QACVR,UAAU,EAAEvB,OAAO,CAACuB,UAAU;QAC9BW,YAAY,EAAEC,IAAI,CAACC,GAAG,CAAC;MACzB,CAAC,CAAC;;MAEF;MACA;MACA,MAAMC,UAAU,GAAG,MAAMtD,OAAO,CAACK,OAAO,CAACkD,wBAAwB,CAACP,UAAU,EAAE,KAAK,CAAC;MAEpF,IAAIH,OAAO,EAAE;QACX,IAAIS,UAAU,EAAE;UACdR,OAAO,CAACC,GAAG,CAAC,8EAA8E,CAAC;QAC7F,CAAC,MAAM;UACLD,OAAO,CAACC,GAAG,CAAC,wFAAwF,CAAC;QACvG;MACF;MAEA3D,SAAS,CAAC,OAAO,CAAC;IACpB,CAAC,CAAC,OAAOmC,GAAG,EAAE;MACZ,MAAM9B,KAAK,GAAG8B,GAAG,YAAYC,KAAK,GAAGD,GAAG,GAAG,IAAIC,KAAK,CAACC,MAAM,CAACF,GAAG,CAAC,CAAC;;MAEjE;MACAxB,SAAS,CAACM,OAAO,CAACyB,WAAW,CAAC;QAC5BjD,OAAO;QACPsC,SAAS,EAAEF,OAAO,CAAC5C,EAAE;QACrBqC,QAAQ;QACRqB,SAAS,EAAE,SAAS;QACpByB,YAAY,EAAE/D,KAAK,CAACgE,OAAO;QAC3B1E,UAAU;QACViD,UAAU,EAAE9D,aAAa,CAAC;MAC5B,CAAC,CAAC;MAEFwB,QAAQ,CAACD,KAAK,CAAC;MACfL,SAAS,CAAC,OAAO,CAAC;MAClB,MAAMK,KAAK;IACb;EACF,CAAC,EAAE,CAACZ,OAAO,EAAEE,UAAU,EAAEC,SAAS,EAAEwB,iBAAiB,CAAC,CAAC;;EAEvD;EACA,MAAMkD,WAAW,GAAG9F,WAAW,CAAC,OAAO+F,UAAmB,GAAG,IAAI,KAAoB;IACnF,MAAMvD,QAAQ,GAAG,MAAMJ,OAAO,CAACK,OAAO,CAACC,WAAW,CAAC,CAAC;IAEpD,IAAI,CAACF,QAAQ,EAAE;MACb,MAAM,IAAIoB,KAAK,CAAC,8BAA8B,CAAC;IACjD;IAEA,MAAMd,QAAQ,GAAG,MAAMF,iBAAiB,CAAC,CAAC;IAE1C,IAAI;MACFpB,SAAS,CAAC,UAAU,CAAC;;MAErB;MACAW,SAAS,CAACM,OAAO,CAACyB,WAAW,CAAC;QAC5BjD,OAAO;QACPsC,SAAS,EAAEf,QAAQ,CAACe,SAAS;QAC7BT,QAAQ;QACRqB,SAAS,EAAE,OAAO;QAClBhD,UAAU;QACViD,UAAU,EAAE9D,aAAa,CAAC;MAC5B,CAAC,CAAC;;MAEF;MACA;MACA,MAAMoF,UAAU,GAAG,MAAMtD,OAAO,CAACK,OAAO,CAACkD,wBAAwB,CAACnD,QAAQ,CAAC4C,UAAU,EAAEW,UAAU,CAAC;MAElG,IAAI,CAACL,UAAU,IAAIK,UAAU,EAAE;QAC7B;QACA,IAAId,OAAO,EAAE;UACXC,OAAO,CAACC,GAAG,CAAC,yEAAyE,CAAC;UACtFD,OAAO,CAACC,GAAG,CAAC,gFAAgF,CAAC;QAC/F;MACF,CAAC,MAAM,IAAIO,UAAU,IAAI,CAACK,UAAU,EAAE;QACpC,IAAId,OAAO,EAAE;UACXC,OAAO,CAACC,GAAG,CAAC,gEAAgE,CAAC;QAC/E;MACF;;MAEA;MACAhD,SAAS,CAACM,OAAO,CAACyB,WAAW,CAAC;QAC5BjD,OAAO;QACPsC,SAAS,EAAEf,QAAQ,CAACe,SAAS;QAC7BT,QAAQ;QACRqB,SAAS,EAAE,SAAS;QACpBhD,UAAU;QACViD,UAAU,EAAE9D,aAAa,CAAC;MAC5B,CAAC,CAAC;MAEF0B,iBAAiB,CAACQ,QAAQ,CAACG,OAAO,CAAC;MACnCnB,SAAS,CAAC,MAAM,CAAC;IACnB,CAAC,CAAC,OAAOmC,GAAG,EAAE;MACZ,MAAM9B,KAAK,GAAG8B,GAAG,YAAYC,KAAK,GAAGD,GAAG,GAAG,IAAIC,KAAK,CAACC,MAAM,CAACF,GAAG,CAAC,CAAC;MAEjExB,SAAS,CAACM,OAAO,CAACyB,WAAW,CAAC;QAC5BjD,OAAO;QACPsC,SAAS,EAAEf,QAAQ,CAACe,SAAS;QAC7BT,QAAQ;QACRqB,SAAS,EAAE,SAAS;QACpByB,YAAY,EAAE/D,KAAK,CAACgE,OAAO;QAC3B1E,UAAU;QACViD,UAAU,EAAE9D,aAAa,CAAC;MAC5B,CAAC,CAAC;MAEFwB,QAAQ,CAACD,KAAK,CAAC;MACfL,SAAS,CAAC,OAAO,CAAC;MAClB,MAAMK,KAAK;IACb;EACF,CAAC,EAAE,CAACZ,OAAO,EAAEE,UAAU,EAAEyB,iBAAiB,CAAC,CAAC;;EAE5C;EACA,MAAMoD,kBAAkB,GAAGhG,WAAW,CAAC,YAA2B;IAChE,MAAMwC,QAAQ,GAAG,MAAMJ,OAAO,CAACK,OAAO,CAACC,WAAW,CAAC,CAAC;IAEpD,IAAIF,QAAQ,EAAE;MACZ,MAAMJ,OAAO,CAACK,OAAO,CAACqC,YAAY,CAACtC,QAAQ,CAACe,SAAS,CAAC;MACtD,MAAMnB,OAAO,CAACK,OAAO,CAACwD,aAAa,CAAC,CAAC;IACvC;;IAEA;IACA,MAAM7D,OAAO,CAACK,OAAO,CAACyD,wBAAwB,CAAC,CAAC;IAEhDxE,aAAa,CAAC,IAAI,CAAC;IACnBY,UAAU,CAACG,OAAO,GAAG,IAAI;IACzBjB,SAAS,CAAC,MAAM,CAAC;EACnB,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,MAAM2E,aAAa,GAAGnG,WAAW,CAAC,MAAM;IACtCkC,cAAc,CAAC,IAAI,CAAC;EACtB,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,MAAMkE,YAAY,GAAGpG,WAAW,CAAC,MAAM;IACrCkC,cAAc,CAAC,KAAK,CAAC;EACvB,CAAC,EAAE,EAAE,CAAC;;EAEN;EACAjC,SAAS,CAAC,MAAM;IACd,IAAIoB,YAAY,EAAE;MAChBwB,cAAc,CAAC,CAAC;IAClB;EACF,CAAC,EAAE,CAACxB,YAAY,EAAEwB,cAAc,CAAC,CAAC;;EAElC;EACA5C,SAAS,CAAC,MAAM;IACd,IAAI,CAACqB,iBAAiB,EAAE;IAExB,MAAM+E,oBAAoB,GAAIC,YAA4B,IAAK;MAC7D,IAAIA,YAAY,KAAK,QAAQ,IAAI/E,MAAM,KAAK,MAAM,EAAE;QAClDsB,cAAc,CAAC,CAAC;MAClB;IACF,CAAC;IAED,MAAM0D,YAAY,GAAGpG,QAAQ,CAACqG,gBAAgB,CAAC,QAAQ,EAAEH,oBAAoB,CAAC;IAE9E,OAAO,MAAM;MACXE,YAAY,CAACE,MAAM,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACnF,iBAAiB,EAAEuB,cAAc,EAAEtB,MAAM,CAAC,CAAC;EAE/C,OAAO;IACLA,MAAM;IACNE,UAAU;IACVE,gBAAgB;IAChBE,KAAK;IACLE,cAAc;IACdE,WAAW;IACXY,cAAc;IACdiB,cAAc;IACdgC,WAAW;IACXE,kBAAkB;IAClBG,aAAa;IACbC;EACF,CAAC;AACH","ignoreList":[]}
@@ -101,6 +101,61 @@ class ExpoStorageAdapter {
101
101
  intermediates: true
102
102
  });
103
103
  }
104
+ async downloadToFile(url, destPath) {
105
+ // Use Expo's downloadAsync which downloads directly to file
106
+ // This bypasses JS memory entirely - critical for large bundles
107
+ const result = await ExpoFileSystem.downloadAsync(url, destPath);
108
+ if (result.status !== 200) {
109
+ throw new Error(`Download failed with status ${result.status}`);
110
+ }
111
+
112
+ // Get file size
113
+ const info = await ExpoFileSystem.getInfoAsync(destPath);
114
+ return {
115
+ fileSize: info.size || 0
116
+ };
117
+ }
118
+ async calculateHashFromFile(path) {
119
+ // For Expo, we need to read the file and use expo-crypto
120
+ // Try to use expo-crypto if available
121
+ let ExpoCrypto = null;
122
+ try {
123
+ ExpoCrypto = require('expo-crypto');
124
+ } catch {
125
+ // expo-crypto not available
126
+ }
127
+ if (ExpoCrypto?.digest) {
128
+ // Read file as base64 and convert to Uint8Array
129
+ const base64 = await ExpoFileSystem.readAsStringAsync(path, {
130
+ encoding: ExpoFileSystem.EncodingType.Base64
131
+ });
132
+ const binary = atob(base64);
133
+ const bytes = new Uint8Array(binary.length);
134
+ for (let i = 0; i < binary.length; i++) {
135
+ bytes[i] = binary.charCodeAt(i);
136
+ }
137
+ const hashBuffer = await ExpoCrypto.digest(ExpoCrypto.CryptoDigestAlgorithm.SHA256, bytes);
138
+ // Convert ArrayBuffer to hex
139
+ const hashBytes = new Uint8Array(hashBuffer);
140
+ return Array.from(hashBytes).map(b => b.toString(16).padStart(2, '0')).join('');
141
+ }
142
+
143
+ // Fallback to SubtleCrypto if available
144
+ if (typeof crypto !== 'undefined' && crypto.subtle) {
145
+ const base64 = await ExpoFileSystem.readAsStringAsync(path, {
146
+ encoding: ExpoFileSystem.EncodingType.Base64
147
+ });
148
+ const binary = atob(base64);
149
+ const bytes = new Uint8Array(binary.length);
150
+ for (let i = 0; i < binary.length; i++) {
151
+ bytes[i] = binary.charCodeAt(i);
152
+ }
153
+ const hashBuffer = await crypto.subtle.digest('SHA-256', bytes.buffer);
154
+ const hashBytes = new Uint8Array(hashBuffer);
155
+ return Array.from(hashBytes).map(b => b.toString(16).padStart(2, '0')).join('');
156
+ }
157
+ throw new Error('No crypto implementation available for hash calculation');
158
+ }
104
159
  }
105
160
 
106
161
  // Native implementation for bare React Native
@@ -159,6 +214,50 @@ class NativeStorageAdapter {
159
214
  }
160
215
  await OTAUpdateNative.makeDirectory(path);
161
216
  }
217
+ async downloadToFile(url, destPath) {
218
+ if (!OTAUpdateNative) {
219
+ throw new Error('OTAUpdate native module not found');
220
+ }
221
+
222
+ // Use native module's downloadFile method if available (preferred)
223
+ if (OTAUpdateNative.downloadFile) {
224
+ const result = await OTAUpdateNative.downloadFile(url, destPath);
225
+ return {
226
+ fileSize: result.fileSize || 0
227
+ };
228
+ }
229
+
230
+ // Fallback: download via fetch and write in chunks
231
+ // This is less efficient but works without native download support
232
+ const response = await fetch(url);
233
+ if (!response.ok) {
234
+ throw new Error(`Download failed with status ${response.status}`);
235
+ }
236
+ const data = await response.arrayBuffer();
237
+ const base64 = arrayBufferToBase64(data);
238
+ await OTAUpdateNative.writeFileBase64(destPath, base64);
239
+ return {
240
+ fileSize: data.byteLength
241
+ };
242
+ }
243
+ async calculateHashFromFile(path) {
244
+ if (!OTAUpdateNative) {
245
+ throw new Error('OTAUpdate native module not found');
246
+ }
247
+
248
+ // Use native module's calculateSHA256FromFile if available (preferred - streams file)
249
+ if (OTAUpdateNative.calculateSHA256FromFile) {
250
+ return OTAUpdateNative.calculateSHA256FromFile(path);
251
+ }
252
+
253
+ // Fallback: read file as base64 and use the base64 hash method
254
+ // This loads the file into memory, but is better than nothing
255
+ if (OTAUpdateNative.calculateSHA256 && OTAUpdateNative.readFileBase64) {
256
+ const base64 = await OTAUpdateNative.readFileBase64(path);
257
+ return OTAUpdateNative.calculateSHA256(base64);
258
+ }
259
+ throw new Error('No hash calculation method available');
260
+ }
162
261
  }
163
262
 
164
263
  // Factory function to get the appropriate storage adapter
@@ -253,6 +352,56 @@ export class UpdateStorage {
253
352
  // In a more advanced implementation, we might keep a few for rollback
254
353
  }
255
354
 
355
+ /**
356
+ * Download bundle directly to file, bypassing JS memory.
357
+ * Critical for large bundles (5MB+).
358
+ *
359
+ * @param url The URL to download from
360
+ * @param releaseId The release ID (used for filename)
361
+ * @returns The normalized file path where bundle was saved
362
+ */
363
+ async downloadBundleToFile(url, releaseId) {
364
+ await this.ensureDirectory();
365
+ const bundlePath = `${this.baseDir}${releaseId}.bundle`;
366
+ const result = await this.storage.downloadToFile(url, bundlePath);
367
+
368
+ // Return normalized path for native module compatibility
369
+ return {
370
+ path: normalizePath(bundlePath),
371
+ fileSize: result.fileSize
372
+ };
373
+ }
374
+
375
+ /**
376
+ * Calculate SHA256 hash of a stored bundle file.
377
+ * Uses streaming to avoid loading entire file into memory.
378
+ *
379
+ * @param releaseId The release ID of the bundle
380
+ * @returns The hash string (without 'sha256:' prefix)
381
+ */
382
+ async calculateBundleHash(releaseId) {
383
+ const bundlePath = this.getRawBundlePath(releaseId);
384
+ if (!(await this.storage.exists(bundlePath))) {
385
+ throw new Error('Bundle file not found');
386
+ }
387
+ if (this.storage.calculateHashFromFile) {
388
+ return this.storage.calculateHashFromFile(bundlePath);
389
+ }
390
+
391
+ // Fallback: read file into memory and calculate hash
392
+ // This is not ideal for large files but works as a fallback
393
+ const data = await this.storage.readFileAsBuffer(bundlePath);
394
+ const bytes = new Uint8Array(data);
395
+
396
+ // Use SubtleCrypto if available
397
+ if (typeof crypto !== 'undefined' && crypto.subtle) {
398
+ const hashBuffer = await crypto.subtle.digest('SHA-256', bytes.buffer);
399
+ const hashBytes = new Uint8Array(hashBuffer);
400
+ return Array.from(hashBytes).map(b => b.toString(16).padStart(2, '0')).join('');
401
+ }
402
+ throw new Error('No hash calculation method available');
403
+ }
404
+
256
405
  /**
257
406
  * Validate that a stored bundle is a valid JavaScript file.
258
407
  * This helps detect corrupted downloads (e.g., HTML error pages saved as bundles).
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","normalizePath","path","startsWith","slice","arrayBufferToBase64","buffer","bytes","Uint8Array","chunkSize","chunks","i","length","chunk","subarray","Math","min","binary","j","String","fromCharCode","push","btoa","join","base64ToArrayBuffer","base64","atob","charCodeAt","ExpoFileSystem","require","OTAUpdateNative","OTAUpdate","ExpoStorageAdapter","getDocumentDirectory","documentDirectory","writeFile","data","ArrayBuffer","writeAsStringAsync","encoding","EncodingType","Base64","readFile","readAsStringAsync","readFileAsBuffer","deleteFile","deleteAsync","idempotent","exists","info","getInfoAsync","makeDirectory","makeDirectoryAsync","intermediates","NativeStorageAdapter","Error","writeFileBase64","readFileBase64","getStorageAdapter","UpdateStorage","constructor","storage","isExpo","baseDir","baseDirNormalized","ensureDirectory","getNormalizedPath","saveBundle","releaseId","bundlePath","getRawBundlePath","getBundlePath","readBundle","deleteBundle","saveMetadata","update","metadataPath","JSON","stringify","getMetadata","content","parse","clearMetadata","cleanOldBundles","keepReleaseId","validateBundle","bundleData","byteLength","preview","trimmed","trim","includes","jsIndicators","pattern","test","clearCorruptedBundle","metadata","isValid","__DEV__","console","warn","clearNativePendingBundle","error","registerBundleWithNative","restart","applyBundle","normalizedPath","log","clearPendingBundle"],"sourceRoot":"../../../src","sources":["utils/storage.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","normalizePath","path","startsWith","slice","arrayBufferToBase64","buffer","bytes","Uint8Array","chunkSize","chunks","i","length","chunk","subarray","Math","min","binary","j","String","fromCharCode","push","btoa","join","base64ToArrayBuffer","base64","atob","charCodeAt","ExpoFileSystem","require","OTAUpdateNative","OTAUpdate","ExpoStorageAdapter","getDocumentDirectory","documentDirectory","writeFile","data","ArrayBuffer","writeAsStringAsync","encoding","EncodingType","Base64","readFile","readAsStringAsync","readFileAsBuffer","deleteFile","deleteAsync","idempotent","exists","info","getInfoAsync","makeDirectory","makeDirectoryAsync","intermediates","downloadToFile","url","destPath","result","downloadAsync","status","Error","fileSize","size","calculateHashFromFile","ExpoCrypto","digest","hashBuffer","CryptoDigestAlgorithm","SHA256","hashBytes","Array","from","map","b","toString","padStart","crypto","subtle","NativeStorageAdapter","writeFileBase64","readFileBase64","downloadFile","response","fetch","ok","arrayBuffer","byteLength","calculateSHA256FromFile","calculateSHA256","getStorageAdapter","UpdateStorage","constructor","storage","isExpo","baseDir","baseDirNormalized","ensureDirectory","getNormalizedPath","saveBundle","releaseId","bundlePath","getRawBundlePath","getBundlePath","readBundle","deleteBundle","saveMetadata","update","metadataPath","JSON","stringify","getMetadata","content","parse","clearMetadata","cleanOldBundles","keepReleaseId","downloadBundleToFile","calculateBundleHash","validateBundle","bundleData","preview","trimmed","trim","includes","jsIndicators","pattern","test","clearCorruptedBundle","metadata","isValid","__DEV__","console","warn","clearNativePendingBundle","error","registerBundleWithNative","restart","applyBundle","normalizedPath","log","clearPendingBundle"],"sourceRoot":"../../../src","sources":["utils/storage.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useOTAUpdate.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOTAUpdate.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,UAAU,GACV,WAAW,GACX,aAAa,GACb,WAAW,GACX,OAAO,GACP,UAAU,GACV,OAAO,GACP,YAAY,CAAC;AAEjB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACjD,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAWD,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,kBAAkB,CA8TxE"}
1
+ {"version":3,"file":"useOTAUpdate.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOTAUpdate.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,UAAU,GACV,WAAW,GACX,aAAa,GACb,WAAW,GACX,OAAO,GACP,UAAU,GACV,OAAO,GACP,YAAY,CAAC;AAEjB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACjD,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAWD,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,kBAAkB,CAuUxE"}
@@ -13,6 +13,10 @@ export interface StorageAdapter {
13
13
  deleteFile(path: string): Promise<void>;
14
14
  exists(path: string): Promise<boolean>;
15
15
  makeDirectory(path: string): Promise<void>;
16
+ downloadToFile(url: string, destPath: string): Promise<{
17
+ fileSize: number;
18
+ }>;
19
+ calculateHashFromFile?(path: string): Promise<string>;
16
20
  }
17
21
  export declare function getStorageAdapter(): StorageAdapter;
18
22
  export declare class UpdateStorage {
@@ -32,6 +36,26 @@ export declare class UpdateStorage {
32
36
  getMetadata(): Promise<StoredUpdate | null>;
33
37
  clearMetadata(): Promise<void>;
34
38
  cleanOldBundles(keepReleaseId: string): Promise<void>;
39
+ /**
40
+ * Download bundle directly to file, bypassing JS memory.
41
+ * Critical for large bundles (5MB+).
42
+ *
43
+ * @param url The URL to download from
44
+ * @param releaseId The release ID (used for filename)
45
+ * @returns The normalized file path where bundle was saved
46
+ */
47
+ downloadBundleToFile(url: string, releaseId: string): Promise<{
48
+ path: string;
49
+ fileSize: number;
50
+ }>;
51
+ /**
52
+ * Calculate SHA256 hash of a stored bundle file.
53
+ * Uses streaming to avoid loading entire file into memory.
54
+ *
55
+ * @param releaseId The release ID of the bundle
56
+ * @returns The hash string (without 'sha256:' prefix)
57
+ */
58
+ calculateBundleHash(releaseId: string): Promise<string>;
35
59
  /**
36
60
  * Validate that a stored bundle is a valid JavaScript file.
37
61
  * This helps detect corrupted downloads (e.g., HTML error pages saved as bundles).
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/utils/storage.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,oBAAoB,IAAI,MAAM,CAAC;IAC/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACrD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AA6KD,wBAAgB,iBAAiB,IAAI,cAAc,CAYlD;AAGD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,MAAM,CAAU;;YAUV,eAAe;IAQ7B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIjC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAWvE,OAAO,CAAC,gBAAgB;IAIlB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOxD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAS1D,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,WAAW,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAe3C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;;;;;OAMG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqEzD;;;;;OAKG;IACG,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IA8B9C;;;;;;;;OAQG;IACG,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB9F;;;OAGG;IACG,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;CAWhD"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/utils/storage.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,oBAAoB,IAAI,MAAM,CAAC;IAC/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACrD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE7E,qBAAqB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvD;AA2RD,wBAAgB,iBAAiB,IAAI,cAAc,CAYlD;AAGD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,MAAM,CAAU;;YAUV,eAAe;IAQ7B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIjC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAWvE,OAAO,CAAC,gBAAgB;IAIlB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOxD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAS1D,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,WAAW,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAe3C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;;;;;;OAOG;IACG,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAavG;;;;;;OAMG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4B7D;;;;;;OAMG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqEzD;;;;;OAKG;IACG,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IA8B9C;;;;;;;;OAQG;IACG,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB9F;;;OAGG;IACG,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;CAWhD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vanikya/ota-react-native",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "OTA Update SDK for React Native apps - self-hosted CodePush/EAS Updates alternative",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -1,8 +1,7 @@
1
1
  import { useState, useCallback, useEffect, useRef } from 'react';
2
2
  import { AppState, AppStateStatus, Platform } from 'react-native';
3
3
  import { OTAApiClient, ReleaseInfo, getDeviceInfo } from '../utils/api';
4
- import { UpdateStorage, StoredUpdate } from '../utils/storage';
5
- import { verifyBundle, VerificationResult } from '../utils/verification';
4
+ import { UpdateStorage } from '../utils/storage';
6
5
 
7
6
  export interface OTAUpdateConfig {
8
7
  serverUrl: string;
@@ -178,31 +177,40 @@ export function useOTAUpdate(config: OTAUpdateConfig): UseOTAUpdateResult {
178
177
  deviceInfo: getDeviceInfo(),
179
178
  });
180
179
 
181
- // Download bundle
182
- const bundleData = await apiClient.current.downloadBundle(release.bundleUrl);
180
+ // Download bundle directly to file (bypasses JS memory - critical for large bundles)
181
+ const downloadResult = await storage.current.downloadBundleToFile(release.bundleUrl, release.id);
183
182
 
184
183
  setDownloadProgress({
185
- downloadedBytes: bundleData.byteLength,
184
+ downloadedBytes: downloadResult.fileSize,
186
185
  totalBytes: release.bundleSize,
187
186
  percentage: 100,
188
187
  });
189
188
 
190
- // Verify bundle
189
+ // Verify bundle hash
191
190
  setStatus('verifying');
192
191
 
193
- const verification = await verifyBundle(
194
- bundleData,
195
- release.bundleHash,
196
- release.bundleSignature,
197
- publicKey || null
198
- );
192
+ // Calculate hash from file (streaming to avoid memory issues)
193
+ const actualHash = await storage.current.calculateBundleHash(release.id);
194
+ const expectedHashWithoutPrefix = release.bundleHash.replace(/^sha256:/, '');
199
195
 
200
- if (!verification.valid) {
201
- throw new Error(verification.error || 'Bundle verification failed');
196
+ if (actualHash !== expectedHashWithoutPrefix) {
197
+ // Delete corrupted bundle
198
+ await storage.current.deleteBundle(release.id);
199
+ throw new Error(`Bundle hash mismatch: expected ${expectedHashWithoutPrefix}, got ${actualHash}`);
202
200
  }
203
201
 
204
- // Save bundle
205
- const bundlePath = await storage.current.saveBundle(release.id, bundleData);
202
+ // Validate bundle content (check it's actually JavaScript, not an error page)
203
+ const isValid = await storage.current.validateBundle(release.id);
204
+ if (!isValid) {
205
+ await storage.current.deleteBundle(release.id);
206
+ throw new Error('Downloaded content is not a valid JavaScript bundle');
207
+ }
208
+
209
+ if (__DEV__) {
210
+ console.log('[OTAUpdate] Bundle verified successfully');
211
+ }
212
+
213
+ const bundlePath = downloadResult.path;
206
214
 
207
215
  // Save metadata
208
216
  await storage.current.saveMetadata({
@@ -17,6 +17,10 @@ export interface StorageAdapter {
17
17
  deleteFile(path: string): Promise<void>;
18
18
  exists(path: string): Promise<boolean>;
19
19
  makeDirectory(path: string): Promise<void>;
20
+ // Download file directly to disk without going through JS memory
21
+ downloadToFile(url: string, destPath: string): Promise<{ fileSize: number }>;
22
+ // Calculate SHA256 hash from file path (without loading into memory)
23
+ calculateHashFromFile?(path: string): Promise<string>;
20
24
  }
21
25
 
22
26
  // Helper to normalize file paths (remove file:// prefix)
@@ -122,6 +126,71 @@ class ExpoStorageAdapter implements StorageAdapter {
122
126
  async makeDirectory(path: string): Promise<void> {
123
127
  await ExpoFileSystem.makeDirectoryAsync(path, { intermediates: true });
124
128
  }
129
+
130
+ async downloadToFile(url: string, destPath: string): Promise<{ fileSize: number }> {
131
+ // Use Expo's downloadAsync which downloads directly to file
132
+ // This bypasses JS memory entirely - critical for large bundles
133
+ const result = await ExpoFileSystem.downloadAsync(url, destPath);
134
+
135
+ if (result.status !== 200) {
136
+ throw new Error(`Download failed with status ${result.status}`);
137
+ }
138
+
139
+ // Get file size
140
+ const info = await ExpoFileSystem.getInfoAsync(destPath);
141
+ return { fileSize: info.size || 0 };
142
+ }
143
+
144
+ async calculateHashFromFile(path: string): Promise<string> {
145
+ // For Expo, we need to read the file and use expo-crypto
146
+ // Try to use expo-crypto if available
147
+ let ExpoCrypto: any = null;
148
+ try {
149
+ ExpoCrypto = require('expo-crypto');
150
+ } catch {
151
+ // expo-crypto not available
152
+ }
153
+
154
+ if (ExpoCrypto?.digest) {
155
+ // Read file as base64 and convert to Uint8Array
156
+ const base64 = await ExpoFileSystem.readAsStringAsync(path, {
157
+ encoding: ExpoFileSystem.EncodingType.Base64,
158
+ });
159
+ const binary = atob(base64);
160
+ const bytes = new Uint8Array(binary.length);
161
+ for (let i = 0; i < binary.length; i++) {
162
+ bytes[i] = binary.charCodeAt(i);
163
+ }
164
+ const hashBuffer = await ExpoCrypto.digest(
165
+ ExpoCrypto.CryptoDigestAlgorithm.SHA256,
166
+ bytes
167
+ );
168
+ // Convert ArrayBuffer to hex
169
+ const hashBytes = new Uint8Array(hashBuffer);
170
+ return Array.from(hashBytes)
171
+ .map(b => b.toString(16).padStart(2, '0'))
172
+ .join('');
173
+ }
174
+
175
+ // Fallback to SubtleCrypto if available
176
+ if (typeof crypto !== 'undefined' && crypto.subtle) {
177
+ const base64 = await ExpoFileSystem.readAsStringAsync(path, {
178
+ encoding: ExpoFileSystem.EncodingType.Base64,
179
+ });
180
+ const binary = atob(base64);
181
+ const bytes = new Uint8Array(binary.length);
182
+ for (let i = 0; i < binary.length; i++) {
183
+ bytes[i] = binary.charCodeAt(i);
184
+ }
185
+ const hashBuffer = await crypto.subtle.digest('SHA-256', bytes.buffer);
186
+ const hashBytes = new Uint8Array(hashBuffer);
187
+ return Array.from(hashBytes)
188
+ .map(b => b.toString(16).padStart(2, '0'))
189
+ .join('');
190
+ }
191
+
192
+ throw new Error('No crypto implementation available for hash calculation');
193
+ }
125
194
  }
126
195
 
127
196
  // Native implementation for bare React Native
@@ -187,6 +256,51 @@ class NativeStorageAdapter implements StorageAdapter {
187
256
  }
188
257
  await OTAUpdateNative.makeDirectory(path);
189
258
  }
259
+
260
+ async downloadToFile(url: string, destPath: string): Promise<{ fileSize: number }> {
261
+ if (!OTAUpdateNative) {
262
+ throw new Error('OTAUpdate native module not found');
263
+ }
264
+
265
+ // Use native module's downloadFile method if available (preferred)
266
+ if (OTAUpdateNative.downloadFile) {
267
+ const result = await OTAUpdateNative.downloadFile(url, destPath);
268
+ return { fileSize: result.fileSize || 0 };
269
+ }
270
+
271
+ // Fallback: download via fetch and write in chunks
272
+ // This is less efficient but works without native download support
273
+ const response = await fetch(url);
274
+ if (!response.ok) {
275
+ throw new Error(`Download failed with status ${response.status}`);
276
+ }
277
+
278
+ const data = await response.arrayBuffer();
279
+ const base64 = arrayBufferToBase64(data);
280
+ await OTAUpdateNative.writeFileBase64(destPath, base64);
281
+
282
+ return { fileSize: data.byteLength };
283
+ }
284
+
285
+ async calculateHashFromFile(path: string): Promise<string> {
286
+ if (!OTAUpdateNative) {
287
+ throw new Error('OTAUpdate native module not found');
288
+ }
289
+
290
+ // Use native module's calculateSHA256FromFile if available (preferred - streams file)
291
+ if (OTAUpdateNative.calculateSHA256FromFile) {
292
+ return OTAUpdateNative.calculateSHA256FromFile(path);
293
+ }
294
+
295
+ // Fallback: read file as base64 and use the base64 hash method
296
+ // This loads the file into memory, but is better than nothing
297
+ if (OTAUpdateNative.calculateSHA256 && OTAUpdateNative.readFileBase64) {
298
+ const base64 = await OTAUpdateNative.readFileBase64(path);
299
+ return OTAUpdateNative.calculateSHA256(base64);
300
+ }
301
+
302
+ throw new Error('No hash calculation method available');
303
+ }
190
304
  }
191
305
 
192
306
  // Factory function to get the appropriate storage adapter
@@ -303,6 +417,62 @@ export class UpdateStorage {
303
417
  // In a more advanced implementation, we might keep a few for rollback
304
418
  }
305
419
 
420
+ /**
421
+ * Download bundle directly to file, bypassing JS memory.
422
+ * Critical for large bundles (5MB+).
423
+ *
424
+ * @param url The URL to download from
425
+ * @param releaseId The release ID (used for filename)
426
+ * @returns The normalized file path where bundle was saved
427
+ */
428
+ async downloadBundleToFile(url: string, releaseId: string): Promise<{ path: string; fileSize: number }> {
429
+ await this.ensureDirectory();
430
+
431
+ const bundlePath = `${this.baseDir}${releaseId}.bundle`;
432
+ const result = await this.storage.downloadToFile(url, bundlePath);
433
+
434
+ // Return normalized path for native module compatibility
435
+ return {
436
+ path: normalizePath(bundlePath),
437
+ fileSize: result.fileSize,
438
+ };
439
+ }
440
+
441
+ /**
442
+ * Calculate SHA256 hash of a stored bundle file.
443
+ * Uses streaming to avoid loading entire file into memory.
444
+ *
445
+ * @param releaseId The release ID of the bundle
446
+ * @returns The hash string (without 'sha256:' prefix)
447
+ */
448
+ async calculateBundleHash(releaseId: string): Promise<string> {
449
+ const bundlePath = this.getRawBundlePath(releaseId);
450
+
451
+ if (!await this.storage.exists(bundlePath)) {
452
+ throw new Error('Bundle file not found');
453
+ }
454
+
455
+ if (this.storage.calculateHashFromFile) {
456
+ return this.storage.calculateHashFromFile(bundlePath);
457
+ }
458
+
459
+ // Fallback: read file into memory and calculate hash
460
+ // This is not ideal for large files but works as a fallback
461
+ const data = await this.storage.readFileAsBuffer(bundlePath);
462
+ const bytes = new Uint8Array(data);
463
+
464
+ // Use SubtleCrypto if available
465
+ if (typeof crypto !== 'undefined' && crypto.subtle) {
466
+ const hashBuffer = await crypto.subtle.digest('SHA-256', bytes.buffer);
467
+ const hashBytes = new Uint8Array(hashBuffer);
468
+ return Array.from(hashBytes)
469
+ .map(b => b.toString(16).padStart(2, '0'))
470
+ .join('');
471
+ }
472
+
473
+ throw new Error('No hash calculation method available');
474
+ }
475
+
306
476
  /**
307
477
  * Validate that a stored bundle is a valid JavaScript file.
308
478
  * This helps detect corrupted downloads (e.g., HTML error pages saved as bundles).