@vanikya/ota-react-native 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  > **Beta Notice**: This package is currently in beta. Testing is in progress and APIs may change. Use in production at your own discretion. We welcome feedback and bug reports via [GitHub Issues](https://github.com/vanikya/ota-update/issues).
4
4
 
5
+ **[Documentation](https://vanikya.github.io/ota-update/)** | **[GitHub](https://github.com/vanikya/ota-update)** | **[npm](https://www.npmjs.com/package/@vanikya/ota-react-native)**
6
+
5
7
  React Native SDK for OTA (Over-The-Air) updates. A self-hosted alternative to CodePush and EAS Updates.
6
8
 
7
9
  Works with both **Expo** and **bare React Native** apps.
@@ -134,18 +136,22 @@ function UpdateChecker() {
134
136
  ```tsx
135
137
  const {
136
138
  // State
139
+ status, // UpdateStatus - current status
137
140
  isChecking, // boolean - checking for updates
138
141
  isDownloading, // boolean - downloading update
139
142
  isApplying, // boolean - applying update
140
- downloadProgress, // number (0-100) - download progress
141
- availableUpdate, // UpdateInfo | null - available update info
143
+ downloadProgress, // DownloadProgress | null - download progress
144
+ updateInfo, // UpdateInfo | null - available update info
142
145
  error, // Error | null - last error
146
+ isDismissed, // boolean - whether user dismissed the update
143
147
 
144
148
  // Actions
145
149
  checkForUpdate, // () => Promise<UpdateInfo | null>
146
150
  downloadUpdate, // () => Promise<void>
147
- applyUpdate, // () => Promise<void>
148
- downloadAndApply, // () => Promise<void>
151
+ applyUpdate, // (restartApp?: boolean) => Promise<void>
152
+ clearPendingUpdate, // () => Promise<void>
153
+ dismissUpdate, // () => void - dismiss update notification
154
+ resetDismiss, // () => void - reset dismiss state
149
155
  } = useOTAUpdate();
150
156
  ```
151
157
 
@@ -198,19 +204,52 @@ Handle mandatory updates that can't be skipped:
198
204
 
199
205
  ```tsx
200
206
  function App() {
201
- const { availableUpdate, downloadAndApply } = useOTAUpdate();
207
+ const { updateInfo, downloadAndApply } = useOTAUpdate();
202
208
 
203
209
  useEffect(() => {
204
- if (availableUpdate?.isMandatory) {
210
+ if (updateInfo?.isMandatory) {
205
211
  // Force update for mandatory releases
206
212
  downloadAndApply();
207
213
  }
208
- }, [availableUpdate]);
214
+ }, [updateInfo]);
209
215
 
210
216
  return <YourApp />;
211
217
  }
212
218
  ```
213
219
 
220
+ ## Dismissable Update Banner
221
+
222
+ Allow users to dismiss optional updates:
223
+
224
+ ```tsx
225
+ function UpdateBanner() {
226
+ const { updateInfo, isDismissed, dismissUpdate, downloadAndApply, isDownloading } = useOTAUpdate();
227
+
228
+ // Don't show if no update or user dismissed
229
+ if (!updateInfo || isDismissed) {
230
+ return null;
231
+ }
232
+
233
+ // Force mandatory updates (can't dismiss)
234
+ if (updateInfo.isMandatory) {
235
+ return (
236
+ <View>
237
+ <Text>Required update: v{updateInfo.version}</Text>
238
+ <Button title="Update Now" onPress={downloadAndApply} />
239
+ </View>
240
+ );
241
+ }
242
+
243
+ return (
244
+ <View>
245
+ <Text>Update available: v{updateInfo.version}</Text>
246
+ <Button title="Update" onPress={downloadAndApply} disabled={isDownloading} />
247
+ <Button title="Later" onPress={dismissUpdate} />
248
+ </View>
249
+ );
250
+ }
251
+ ```
252
+
214
253
  ## Error Handling
215
254
 
216
255
  ```tsx
@@ -264,6 +303,42 @@ When you call `applyUpdate()` or the download completes:
264
303
 
265
304
  > **Note**: OTA updates only work on EAS Build apps, not Expo Go, because Expo Go doesn't include the native module.
266
305
 
306
+ ## Version Targeting
307
+
308
+ Target specific native app versions when publishing updates using the CLI:
309
+
310
+ ```bash
311
+ # Only send updates to app versions >= 2.0.0
312
+ ota release --app my-app --min-app-version 2.0.0
313
+
314
+ # Only send updates to app versions between 2.0.0 and 2.5.0
315
+ ota release --app my-app --min-app-version 2.0.0 --max-app-version 2.5.0
316
+ ```
317
+
318
+ This is useful when:
319
+ - You have breaking changes that only work with newer native builds
320
+ - You want to phase out support for older app versions
321
+ - Different native versions have different API requirements
322
+
323
+ ## Recovering from Corrupted Updates
324
+
325
+ If an OTA update becomes corrupted (causing app crashes), you can clear it:
326
+
327
+ ```tsx
328
+ import { UpdateStorage } from '@vanikya/ota-react-native';
329
+
330
+ // On app startup, check for and clear corrupted bundles
331
+ async function recoverFromCorruptedUpdate() {
332
+ const storage = new UpdateStorage();
333
+ const wasCorrupted = await storage.clearCorruptedBundle();
334
+ if (wasCorrupted) {
335
+ console.log('Cleared corrupted OTA bundle, app will use built-in bundle');
336
+ }
337
+ }
338
+ ```
339
+
340
+ The SDK now validates downloaded bundles to prevent HTML error pages or corrupted files from being saved as bundles.
341
+
267
342
  ## License
268
343
 
269
344
  MIT
@@ -32,6 +32,7 @@ function useOTAUpdate(config) {
32
32
  const [downloadProgress, setDownloadProgress] = (0, _react.useState)(null);
33
33
  const [error, setError] = (0, _react.useState)(null);
34
34
  const [currentVersion, setCurrentVersion] = (0, _react.useState)(null);
35
+ const [isDismissed, setIsDismissed] = (0, _react.useState)(false);
35
36
  const apiClient = (0, _react.useRef)(new _api.OTAApiClient(serverUrl));
36
37
  const storage = (0, _react.useRef)(new _storage.UpdateStorage());
37
38
  const deviceIdRef = (0, _react.useRef)(null);
@@ -83,6 +84,11 @@ function useOTAUpdate(config) {
83
84
  isMandatory: response.release.isMandatory,
84
85
  releaseNotes: response.release.releaseNotes
85
86
  };
87
+
88
+ // Reset dismiss state if this is a different version than what was previously dismissed
89
+ if (!updateInfo || updateInfo.version !== info.version) {
90
+ setIsDismissed(false);
91
+ }
86
92
  setUpdateInfo(info);
87
93
  setStatus('available');
88
94
  return info;
@@ -254,6 +260,16 @@ function useOTAUpdate(config) {
254
260
  setStatus('idle');
255
261
  }, []);
256
262
 
263
+ // Dismiss the update notification (user can hide the banner)
264
+ const dismissUpdate = (0, _react.useCallback)(() => {
265
+ setIsDismissed(true);
266
+ }, []);
267
+
268
+ // Reset dismiss state (useful when a new update is found)
269
+ const resetDismiss = (0, _react.useCallback)(() => {
270
+ setIsDismissed(false);
271
+ }, []);
272
+
257
273
  // Check on mount
258
274
  (0, _react.useEffect)(() => {
259
275
  if (checkOnMount) {
@@ -280,10 +296,13 @@ function useOTAUpdate(config) {
280
296
  downloadProgress,
281
297
  error,
282
298
  currentVersion,
299
+ isDismissed,
283
300
  checkForUpdate,
284
301
  downloadUpdate,
285
302
  applyUpdate,
286
- clearPendingUpdate
303
+ clearPendingUpdate,
304
+ dismissUpdate,
305
+ resetDismiss
287
306
  };
288
307
  }
289
308
  //# sourceMappingURL=useOTAUpdate.js.map
@@ -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","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","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","_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":[]}
@@ -94,5 +94,5 @@ var _verification = require("./utils/verification");
94
94
  // Utilities
95
95
 
96
96
  // Version info
97
- const VERSION = exports.VERSION = '0.1.0';
97
+ const VERSION = exports.VERSION = '0.1.8';
98
98
  //# sourceMappingURL=index.js.map
@@ -47,7 +47,59 @@ class OTAApiClient {
47
47
  if (!response.ok) {
48
48
  throw new Error(`Failed to download bundle: HTTP ${response.status}`);
49
49
  }
50
- return response.arrayBuffer();
50
+
51
+ // Validate content type if available
52
+ const contentType = response.headers.get('content-type');
53
+ if (contentType && contentType.includes('text/html')) {
54
+ throw new Error('Server returned HTML instead of JavaScript bundle. Check your server configuration.');
55
+ }
56
+ const data = await response.arrayBuffer();
57
+
58
+ // Basic validation: check if content looks like JavaScript
59
+ // JavaScript bundles typically start with specific patterns
60
+ if (!this.isValidJavaScriptBundle(data)) {
61
+ throw new Error('Downloaded content does not appear to be a valid JavaScript bundle');
62
+ }
63
+ return data;
64
+ }
65
+ isValidJavaScriptBundle(data) {
66
+ // Check minimum size (a valid bundle should be at least a few bytes)
67
+ if (data.byteLength < 10) {
68
+ return false;
69
+ }
70
+
71
+ // Read first 1000 bytes as string to check content
72
+ const bytes = new Uint8Array(data, 0, Math.min(1000, data.byteLength));
73
+ let preview = '';
74
+ for (let i = 0; i < bytes.length; i++) {
75
+ preview += String.fromCharCode(bytes[i]);
76
+ }
77
+ const trimmed = preview.trim();
78
+
79
+ // Check for HTML indicators (common error page patterns)
80
+ if (trimmed.startsWith('<!DOCTYPE') || trimmed.startsWith('<!doctype') || trimmed.startsWith('<html') || trimmed.startsWith('<HTML') || trimmed.includes('<head>') || trimmed.includes('<body>')) {
81
+ return false;
82
+ }
83
+
84
+ // JavaScript bundles typically start with:
85
+ // - var, let, const (variable declarations)
86
+ // - (function or !function (IIFEs)
87
+ // - "use strict"
88
+ // - Object.defineProperty (common in transpiled code)
89
+ // - __d( (Metro bundler format)
90
+ // - Comments: // or /*
91
+ const jsPatterns = [/^var\s/, /^let\s/, /^const\s/, /^\(function/, /^!function/, /^["']use strict["']/, /^Object\.defineProperty/, /^__d\(/, /^\/[/*]/, /^"use strict"/, /^__BUNDLE_START_TIME__/];
92
+ for (const pattern of jsPatterns) {
93
+ if (pattern.test(trimmed)) {
94
+ return true;
95
+ }
96
+ }
97
+
98
+ // Also accept if it contains common JS tokens (for minified bundles)
99
+ if (trimmed.includes('function') || trimmed.includes('exports') || trimmed.includes('require(') || trimmed.includes('__d(')) {
100
+ return true;
101
+ }
102
+ return false;
51
103
  }
52
104
  }
53
105
  exports.OTAApiClient = OTAApiClient;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","OTAApiClient","constructor","serverUrl","replace","checkUpdate","request","response","fetch","method","headers","body","JSON","stringify","ok","error","json","catch","Error","status","reportEvent","__DEV__","console","warn","downloadBundle","bundleUrl","arrayBuffer","exports","getDeviceInfo","os","Platform","OS","osVersion","Version","toString"],"sourceRoot":"../../../src","sources":["utils/api.ts"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAyCO,MAAMC,YAAY,CAAC;EAGxBC,WAAWA,CAACC,SAAiB,EAAE;IAC7B,IAAI,CAACA,SAAS,GAAGA,SAAS,CAACC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;EACjD;EAEA,MAAMC,WAAWA,CAACC,OAA2B,EAAgC;IAC3E,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAAC,GAAG,IAAI,CAACL,SAAS,sBAAsB,EAAE;MACpEM,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE;MAClB,CAAC;MACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO;IAC9B,CAAC,CAAC;IAEF,IAAI,CAACC,QAAQ,CAACO,EAAE,EAAE;MAChB,MAAMC,KAAK,GAAG,MAAMR,QAAQ,CAACS,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,OAAO;QAAEF,KAAK,EAAE;MAAgB,CAAC,CAAC,CAAC;MAC7E,MAAM,IAAIG,KAAK,CAAEH,KAAK,CAAuBA,KAAK,IAAI,QAAQR,QAAQ,CAACY,MAAM,EAAE,CAAC;IAClF;IAEA,OAAOZ,QAAQ,CAACS,IAAI,CAAC,CAAC;EACxB;EAEA,MAAMI,WAAWA,CAACd,OAA2B,EAAiB;IAC5D,IAAI;MACF,MAAME,KAAK,CAAC,GAAG,IAAI,CAACL,SAAS,sBAAsB,EAAE;QACnDM,MAAM,EAAE,MAAM;QACdC,OAAO,EAAE;UACP,cAAc,EAAE;QAClB,CAAC;QACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO;MAC9B,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOS,KAAK,EAAE;MACd;MACA,IAAIM,OAAO,EAAE;QACXC,OAAO,CAACC,IAAI,CAAC,qCAAqC,EAAER,KAAK,CAAC;MAC5D;IACF;EACF;EAEA,MAAMS,cAAcA,CAACC,SAAiB,EAAwB;IAC5D,MAAMlB,QAAQ,GAAG,MAAMC,KAAK,CAACiB,SAAS,CAAC;IAEvC,IAAI,CAAClB,QAAQ,CAACO,EAAE,EAAE;MAChB,MAAM,IAAII,KAAK,CAAC,mCAAmCX,QAAQ,CAACY,MAAM,EAAE,CAAC;IACvE;IAEA,OAAOZ,QAAQ,CAACmB,WAAW,CAAC,CAAC;EAC/B;AACF;AAACC,OAAA,CAAA1B,YAAA,GAAAA,YAAA;AAEM,SAAS2B,aAAaA,CAAA,EAAsC;EACjE,OAAO;IACLC,EAAE,EAAEC,qBAAQ,CAACC,EAAE;IACfC,SAAS,EAAEF,qBAAQ,CAACG,OAAO,CAACC,QAAQ,CAAC;EACvC,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","OTAApiClient","constructor","serverUrl","replace","checkUpdate","request","response","fetch","method","headers","body","JSON","stringify","ok","error","json","catch","Error","status","reportEvent","__DEV__","console","warn","downloadBundle","bundleUrl","contentType","get","includes","data","arrayBuffer","isValidJavaScriptBundle","byteLength","bytes","Uint8Array","Math","min","preview","i","length","String","fromCharCode","trimmed","trim","startsWith","jsPatterns","pattern","test","exports","getDeviceInfo","os","Platform","OS","osVersion","Version","toString"],"sourceRoot":"../../../src","sources":["utils/api.ts"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAyCO,MAAMC,YAAY,CAAC;EAGxBC,WAAWA,CAACC,SAAiB,EAAE;IAC7B,IAAI,CAACA,SAAS,GAAGA,SAAS,CAACC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;EACjD;EAEA,MAAMC,WAAWA,CAACC,OAA2B,EAAgC;IAC3E,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAAC,GAAG,IAAI,CAACL,SAAS,sBAAsB,EAAE;MACpEM,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE;MAClB,CAAC;MACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO;IAC9B,CAAC,CAAC;IAEF,IAAI,CAACC,QAAQ,CAACO,EAAE,EAAE;MAChB,MAAMC,KAAK,GAAG,MAAMR,QAAQ,CAACS,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,OAAO;QAAEF,KAAK,EAAE;MAAgB,CAAC,CAAC,CAAC;MAC7E,MAAM,IAAIG,KAAK,CAAEH,KAAK,CAAuBA,KAAK,IAAI,QAAQR,QAAQ,CAACY,MAAM,EAAE,CAAC;IAClF;IAEA,OAAOZ,QAAQ,CAACS,IAAI,CAAC,CAAC;EACxB;EAEA,MAAMI,WAAWA,CAACd,OAA2B,EAAiB;IAC5D,IAAI;MACF,MAAME,KAAK,CAAC,GAAG,IAAI,CAACL,SAAS,sBAAsB,EAAE;QACnDM,MAAM,EAAE,MAAM;QACdC,OAAO,EAAE;UACP,cAAc,EAAE;QAClB,CAAC;QACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO;MAC9B,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOS,KAAK,EAAE;MACd;MACA,IAAIM,OAAO,EAAE;QACXC,OAAO,CAACC,IAAI,CAAC,qCAAqC,EAAER,KAAK,CAAC;MAC5D;IACF;EACF;EAEA,MAAMS,cAAcA,CAACC,SAAiB,EAAwB;IAC5D,MAAMlB,QAAQ,GAAG,MAAMC,KAAK,CAACiB,SAAS,CAAC;IAEvC,IAAI,CAAClB,QAAQ,CAACO,EAAE,EAAE;MAChB,MAAM,IAAII,KAAK,CAAC,mCAAmCX,QAAQ,CAACY,MAAM,EAAE,CAAC;IACvE;;IAEA;IACA,MAAMO,WAAW,GAAGnB,QAAQ,CAACG,OAAO,CAACiB,GAAG,CAAC,cAAc,CAAC;IACxD,IAAID,WAAW,IAAIA,WAAW,CAACE,QAAQ,CAAC,WAAW,CAAC,EAAE;MACpD,MAAM,IAAIV,KAAK,CAAC,qFAAqF,CAAC;IACxG;IAEA,MAAMW,IAAI,GAAG,MAAMtB,QAAQ,CAACuB,WAAW,CAAC,CAAC;;IAEzC;IACA;IACA,IAAI,CAAC,IAAI,CAACC,uBAAuB,CAACF,IAAI,CAAC,EAAE;MACvC,MAAM,IAAIX,KAAK,CAAC,oEAAoE,CAAC;IACvF;IAEA,OAAOW,IAAI;EACb;EAEQE,uBAAuBA,CAACF,IAAiB,EAAW;IAC1D;IACA,IAAIA,IAAI,CAACG,UAAU,GAAG,EAAE,EAAE;MACxB,OAAO,KAAK;IACd;;IAEA;IACA,MAAMC,KAAK,GAAG,IAAIC,UAAU,CAACL,IAAI,EAAE,CAAC,EAAEM,IAAI,CAACC,GAAG,CAAC,IAAI,EAAEP,IAAI,CAACG,UAAU,CAAC,CAAC;IACtE,IAAIK,OAAO,GAAG,EAAE;IAChB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,KAAK,CAACM,MAAM,EAAED,CAAC,EAAE,EAAE;MACrCD,OAAO,IAAIG,MAAM,CAACC,YAAY,CAACR,KAAK,CAACK,CAAC,CAAC,CAAC;IAC1C;IACA,MAAMI,OAAO,GAAGL,OAAO,CAACM,IAAI,CAAC,CAAC;;IAE9B;IACA,IACED,OAAO,CAACE,UAAU,CAAC,WAAW,CAAC,IAC/BF,OAAO,CAACE,UAAU,CAAC,WAAW,CAAC,IAC/BF,OAAO,CAACE,UAAU,CAAC,OAAO,CAAC,IAC3BF,OAAO,CAACE,UAAU,CAAC,OAAO,CAAC,IAC3BF,OAAO,CAACd,QAAQ,CAAC,QAAQ,CAAC,IAC1Bc,OAAO,CAACd,QAAQ,CAAC,QAAQ,CAAC,EAC1B;MACA,OAAO,KAAK;IACd;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAMiB,UAAU,GAAG,CACjB,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,QAAQ,EACR,SAAS,EACT,eAAe,EACf,wBAAwB,CACzB;IAED,KAAK,MAAMC,OAAO,IAAID,UAAU,EAAE;MAChC,IAAIC,OAAO,CAACC,IAAI,CAACL,OAAO,CAAC,EAAE;QACzB,OAAO,IAAI;MACb;IACF;;IAEA;IACA,IACEA,OAAO,CAACd,QAAQ,CAAC,UAAU,CAAC,IAC5Bc,OAAO,CAACd,QAAQ,CAAC,SAAS,CAAC,IAC3Bc,OAAO,CAACd,QAAQ,CAAC,UAAU,CAAC,IAC5Bc,OAAO,CAACd,QAAQ,CAAC,MAAM,CAAC,EACxB;MACA,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;AACF;AAACoB,OAAA,CAAA/C,YAAA,GAAAA,YAAA;AAEM,SAASgD,aAAaA,CAAA,EAAsC;EACjE,OAAO;IACLC,EAAE,EAAEC,qBAAQ,CAACC,EAAE;IACfC,SAAS,EAAEF,qBAAQ,CAACG,OAAO,CAACC,QAAQ,CAAC;EACvC,CAAC;AACH","ignoreList":[]}
@@ -16,12 +16,48 @@ function normalizePath(path) {
16
16
  return path;
17
17
  }
18
18
 
19
+ // Convert ArrayBuffer to base64 in chunks to avoid btoa() size limits
20
+ // btoa() can fail for strings > 2MB on some JS engines
21
+ // Chunk size must be multiple of 3 to avoid base64 padding issues between chunks
22
+ function arrayBufferToBase64(buffer) {
23
+ const bytes = new Uint8Array(buffer);
24
+ // 32766 is divisible by 3, so each chunk produces valid base64 without padding (except last)
25
+ const chunkSize = 32766;
26
+ const chunks = [];
27
+ for (let i = 0; i < bytes.length; i += chunkSize) {
28
+ const chunk = bytes.subarray(i, Math.min(i + chunkSize, bytes.length));
29
+ let binary = '';
30
+ for (let j = 0; j < chunk.length; j++) {
31
+ binary += String.fromCharCode(chunk[j]);
32
+ }
33
+ chunks.push(btoa(binary));
34
+ }
35
+ return chunks.join('');
36
+ }
37
+
38
+ // Convert base64 to ArrayBuffer
39
+ function base64ToArrayBuffer(base64) {
40
+ const binary = atob(base64);
41
+ const bytes = new Uint8Array(binary.length);
42
+ for (let i = 0; i < binary.length; i++) {
43
+ bytes[i] = binary.charCodeAt(i);
44
+ }
45
+ return bytes.buffer;
46
+ }
47
+
19
48
  // Try to use Expo FileSystem if available
49
+ // Use legacy API to avoid deprecation warnings in expo-file-system v54+
20
50
  let ExpoFileSystem = null;
21
51
  try {
22
- ExpoFileSystem = require('expo-file-system');
52
+ // Try legacy import first (expo-file-system v54+)
53
+ ExpoFileSystem = require('expo-file-system/legacy');
23
54
  } catch {
24
- // Expo not available, will use native module
55
+ try {
56
+ // Fallback to regular import for older versions
57
+ ExpoFileSystem = require('expo-file-system');
58
+ } catch {
59
+ // Expo not available, will use native module
60
+ }
25
61
  }
26
62
 
27
63
  // Native module for bare React Native
@@ -34,13 +70,8 @@ class ExpoStorageAdapter {
34
70
  }
35
71
  async writeFile(path, data) {
36
72
  if (data instanceof ArrayBuffer) {
37
- // Convert ArrayBuffer to base64
38
- const bytes = new Uint8Array(data);
39
- let binary = '';
40
- for (let i = 0; i < bytes.length; i++) {
41
- binary += String.fromCharCode(bytes[i]);
42
- }
43
- const base64 = btoa(binary);
73
+ // Convert ArrayBuffer to base64 using chunked approach for large bundles
74
+ const base64 = arrayBufferToBase64(data);
44
75
  await ExpoFileSystem.writeAsStringAsync(path, base64, {
45
76
  encoding: ExpoFileSystem.EncodingType.Base64
46
77
  });
@@ -91,12 +122,8 @@ class NativeStorageAdapter {
91
122
  throw new Error('OTAUpdate native module not found');
92
123
  }
93
124
  if (data instanceof ArrayBuffer) {
94
- const bytes = new Uint8Array(data);
95
- let binary = '';
96
- for (let i = 0; i < bytes.length; i++) {
97
- binary += String.fromCharCode(bytes[i]);
98
- }
99
- const base64 = btoa(binary);
125
+ // Convert ArrayBuffer to base64 using chunked approach for large bundles
126
+ const base64 = arrayBufferToBase64(data);
100
127
  await OTAUpdateNative.writeFileBase64(path, base64);
101
128
  } else {
102
129
  await OTAUpdateNative.writeFile(path, data);
@@ -232,6 +259,89 @@ class UpdateStorage {
232
259
  // In a more advanced implementation, we might keep a few for rollback
233
260
  }
234
261
 
262
+ /**
263
+ * Validate that a stored bundle is a valid JavaScript file.
264
+ * This helps detect corrupted downloads (e.g., HTML error pages saved as bundles).
265
+ *
266
+ * @param releaseId The release ID to validate
267
+ * @returns true if bundle is valid JavaScript, false otherwise
268
+ */
269
+ async validateBundle(releaseId) {
270
+ try {
271
+ const bundleData = await this.readBundle(releaseId);
272
+ if (!bundleData) {
273
+ return false;
274
+ }
275
+
276
+ // Check minimum size
277
+ if (bundleData.byteLength < 10) {
278
+ return false;
279
+ }
280
+
281
+ // Read first 1000 bytes to check content
282
+ const bytes = new Uint8Array(bundleData, 0, Math.min(1000, bundleData.byteLength));
283
+ let preview = '';
284
+ for (let i = 0; i < bytes.length; i++) {
285
+ preview += String.fromCharCode(bytes[i]);
286
+ }
287
+ const trimmed = preview.trim();
288
+
289
+ // Check for HTML indicators (common error page patterns)
290
+ if (trimmed.startsWith('<!DOCTYPE') || trimmed.startsWith('<!doctype') || trimmed.startsWith('<html') || trimmed.startsWith('<HTML') || trimmed.includes('<head>') || trimmed.includes('<body>')) {
291
+ return false;
292
+ }
293
+
294
+ // Accept if it looks like JavaScript
295
+ const jsIndicators = [/^var\s/, /^let\s/, /^const\s/, /^\(function/, /^!function/, /^["']use strict["']/, /^Object\.defineProperty/, /^__d\(/, /^\/[/*]/, /^"use strict"/, /^__BUNDLE_START_TIME__/];
296
+ for (const pattern of jsIndicators) {
297
+ if (pattern.test(trimmed)) {
298
+ return true;
299
+ }
300
+ }
301
+
302
+ // Also check for common JS tokens in minified bundles
303
+ if (trimmed.includes('function') || trimmed.includes('exports') || trimmed.includes('require(') || trimmed.includes('__d(')) {
304
+ return true;
305
+ }
306
+ return false;
307
+ } catch {
308
+ return false;
309
+ }
310
+ }
311
+
312
+ /**
313
+ * Clear corrupted bundle if detected.
314
+ * Call this on app startup to recover from bad OTA updates.
315
+ *
316
+ * @returns true if a corrupted bundle was cleared, false otherwise
317
+ */
318
+ async clearCorruptedBundle() {
319
+ try {
320
+ const metadata = await this.getMetadata();
321
+ if (!metadata) {
322
+ return false;
323
+ }
324
+ const isValid = await this.validateBundle(metadata.releaseId);
325
+ if (!isValid) {
326
+ if (__DEV__) {
327
+ console.warn('[OTAUpdate] Detected corrupted bundle, clearing...');
328
+ }
329
+
330
+ // Clear the corrupted bundle
331
+ await this.deleteBundle(metadata.releaseId);
332
+ await this.clearMetadata();
333
+ await this.clearNativePendingBundle();
334
+ return true;
335
+ }
336
+ return false;
337
+ } catch (error) {
338
+ if (__DEV__) {
339
+ console.error('[OTAUpdate] Error checking bundle:', error);
340
+ }
341
+ return false;
342
+ }
343
+ }
344
+
235
345
  /**
236
346
  * Register the bundle path with the native module.
237
347
  * This saves the path to SharedPreferences (Android) or UserDefaults (iOS)
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","normalizePath","path","startsWith","slice","ExpoFileSystem","OTAUpdateNative","NativeModules","OTAUpdate","ExpoStorageAdapter","getDocumentDirectory","documentDirectory","writeFile","data","ArrayBuffer","bytes","Uint8Array","binary","i","length","String","fromCharCode","base64","btoa","writeAsStringAsync","encoding","EncodingType","Base64","readFile","readAsStringAsync","readFileAsBuffer","atob","charCodeAt","buffer","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","registerBundleWithNative","restart","applyBundle","normalizedPath","__DEV__","console","log","error","clearNativePendingBundle","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","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":[]}
@@ -32,26 +32,39 @@ function hexToBytes(hex) {
32
32
  return bytes;
33
33
  }
34
34
 
35
+ // Convert ArrayBuffer to base64 in chunks to avoid btoa() size limits
36
+ // btoa() can fail for strings > 2MB on some JS engines
37
+ // Chunk size must be multiple of 3 to avoid base64 padding issues between chunks
38
+ function arrayBufferToBase64(buffer) {
39
+ const bytes = new Uint8Array(buffer);
40
+ // 32766 is divisible by 3, so each chunk produces valid base64 without padding (except last)
41
+ const chunkSize = 32766;
42
+ const chunks = [];
43
+ for (let i = 0; i < bytes.length; i += chunkSize) {
44
+ const chunk = bytes.subarray(i, Math.min(i + chunkSize, bytes.length));
45
+ let binary = '';
46
+ for (let j = 0; j < chunk.length; j++) {
47
+ binary += String.fromCharCode(chunk[j]);
48
+ }
49
+ chunks.push(btoa(binary));
50
+ }
51
+ return chunks.join('');
52
+ }
53
+
35
54
  // Calculate SHA-256 hash of data
36
55
  async function calculateHash(data) {
37
- if (ExpoCrypto) {
38
- // Use Expo Crypto
39
- const hash = await ExpoCrypto.digestStringAsync(ExpoCrypto.CryptoDigestAlgorithm.SHA256, bufferToHex(data), {
40
- encoding: ExpoCrypto.CryptoEncoding.HEX
41
- });
42
- return 'sha256:' + hash;
43
- }
56
+ // Use native module first (most reliable for binary data)
44
57
  if (OTAUpdateNative?.calculateSHA256) {
45
- // Use native module
46
- const bytes = new Uint8Array(data);
47
- let binary = '';
48
- for (let i = 0; i < bytes.length; i++) {
49
- binary += String.fromCharCode(bytes[i]);
50
- }
51
- const base64 = btoa(binary);
58
+ // Use chunked base64 encoding for large bundles
59
+ const base64 = arrayBufferToBase64(data);
52
60
  const hash = await OTAUpdateNative.calculateSHA256(base64);
53
61
  return 'sha256:' + hash;
54
62
  }
63
+ if (ExpoCrypto?.digest) {
64
+ // Use Expo Crypto digest (takes Uint8Array, returns ArrayBuffer)
65
+ const hashBuffer = await ExpoCrypto.digest(ExpoCrypto.CryptoDigestAlgorithm.SHA256, new Uint8Array(data));
66
+ return 'sha256:' + bufferToHex(hashBuffer);
67
+ }
55
68
 
56
69
  // Fallback: Use SubtleCrypto (not available in all RN environments)
57
70
  if (typeof crypto !== 'undefined' && crypto.subtle) {
@@ -73,12 +86,8 @@ async function verifySignature(data, signatureHex, publicKeyHex) {
73
86
  // We rely on native modules or skip if not available
74
87
 
75
88
  if (OTAUpdateNative?.verifySignature) {
76
- const bytes = new Uint8Array(data);
77
- let binary = '';
78
- for (let i = 0; i < bytes.length; i++) {
79
- binary += String.fromCharCode(bytes[i]);
80
- }
81
- const base64 = btoa(binary);
89
+ // Use chunked base64 encoding for large bundles
90
+ const base64 = arrayBufferToBase64(data);
82
91
  return OTAUpdateNative.verifySignature(base64, signatureHex, publicKeyHex);
83
92
  }
84
93
 
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","ExpoCrypto","OTAUpdateNative","NativeModules","OTAUpdate","bufferToHex","buffer","bytes","Uint8Array","Array","from","map","b","toString","padStart","join","hexToBytes","hex","length","i","parseInt","substr","calculateHash","data","hash","digestStringAsync","CryptoDigestAlgorithm","SHA256","encoding","CryptoEncoding","HEX","calculateSHA256","binary","String","fromCharCode","base64","btoa","crypto","subtle","hashBuffer","digest","Error","verifyBundleHash","expectedHash","actualHash","verifySignature","signatureHex","publicKeyHex","__DEV__","console","warn","verifyBundle","signature","publicKey","hashValid","error","valid","signatureValid"],"sourceRoot":"../../../src","sources":["utils/verification.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","ExpoCrypto","OTAUpdateNative","NativeModules","OTAUpdate","bufferToHex","buffer","bytes","Uint8Array","Array","from","map","b","toString","padStart","join","hexToBytes","hex","length","i","parseInt","substr","arrayBufferToBase64","chunkSize","chunks","chunk","subarray","Math","min","binary","j","String","fromCharCode","push","btoa","calculateHash","data","calculateSHA256","base64","hash","digest","hashBuffer","CryptoDigestAlgorithm","SHA256","crypto","subtle","Error","verifyBundleHash","expectedHash","actualHash","verifySignature","signatureHex","publicKeyHex","__DEV__","console","warn","verifyBundle","signature","publicKey","hashValid","error","valid","signatureValid"],"sourceRoot":"../../../src","sources":["utils/verification.ts"],"mappings":"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","ignoreList":[]}