@swiftpatch/react-native 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +430 -0
  2. package/android/build.gradle +105 -0
  3. package/android/src/main/AndroidManifest.xml +6 -0
  4. package/android/src/main/java/com/swiftpatch/BundleManager.kt +107 -0
  5. package/android/src/main/java/com/swiftpatch/CrashDetector.kt +79 -0
  6. package/android/src/main/java/com/swiftpatch/CryptoVerifier.kt +69 -0
  7. package/android/src/main/java/com/swiftpatch/DownloadManager.kt +120 -0
  8. package/android/src/main/java/com/swiftpatch/EventQueue.kt +86 -0
  9. package/android/src/main/java/com/swiftpatch/FileUtils.kt +60 -0
  10. package/android/src/main/java/com/swiftpatch/PatchApplier.kt +60 -0
  11. package/android/src/main/java/com/swiftpatch/SignalCrashHandler.kt +84 -0
  12. package/android/src/main/java/com/swiftpatch/SlotManager.kt +299 -0
  13. package/android/src/main/java/com/swiftpatch/SwiftPatchModule.kt +630 -0
  14. package/android/src/main/java/com/swiftpatch/SwiftPatchPackage.kt +21 -0
  15. package/android/src/main/jni/CMakeLists.txt +12 -0
  16. package/android/src/main/jni/bspatch.c +188 -0
  17. package/android/src/main/jni/bspatch.h +57 -0
  18. package/android/src/main/jni/bspatch_jni.c +28 -0
  19. package/ios/Libraries/bspatch/bspatch.c +188 -0
  20. package/ios/Libraries/bspatch/bspatch.h +50 -0
  21. package/ios/Libraries/bspatch/module.modulemap +4 -0
  22. package/ios/SwiftPatch/BundleManager.swift +113 -0
  23. package/ios/SwiftPatch/CrashDetector.swift +71 -0
  24. package/ios/SwiftPatch/CryptoVerifier.swift +70 -0
  25. package/ios/SwiftPatch/DownloadManager.swift +125 -0
  26. package/ios/SwiftPatch/EventQueue.swift +116 -0
  27. package/ios/SwiftPatch/FileUtils.swift +38 -0
  28. package/ios/SwiftPatch/PatchApplier.swift +41 -0
  29. package/ios/SwiftPatch/SignalCrashHandler.swift +129 -0
  30. package/ios/SwiftPatch/SlotManager.swift +360 -0
  31. package/ios/SwiftPatch/SwiftPatchModule.m +56 -0
  32. package/ios/SwiftPatch/SwiftPatchModule.swift +621 -0
  33. package/lib/commonjs/SwiftPatchCore.js +140 -0
  34. package/lib/commonjs/SwiftPatchCore.js.map +1 -0
  35. package/lib/commonjs/SwiftPatchProvider.js +617 -0
  36. package/lib/commonjs/SwiftPatchProvider.js.map +1 -0
  37. package/lib/commonjs/constants.js +50 -0
  38. package/lib/commonjs/constants.js.map +1 -0
  39. package/lib/commonjs/core/Downloader.js +63 -0
  40. package/lib/commonjs/core/Downloader.js.map +1 -0
  41. package/lib/commonjs/core/Installer.js +46 -0
  42. package/lib/commonjs/core/Installer.js.map +1 -0
  43. package/lib/commonjs/core/Rollback.js +36 -0
  44. package/lib/commonjs/core/Rollback.js.map +1 -0
  45. package/lib/commonjs/core/UpdateChecker.js +57 -0
  46. package/lib/commonjs/core/UpdateChecker.js.map +1 -0
  47. package/lib/commonjs/core/Verifier.js +82 -0
  48. package/lib/commonjs/core/Verifier.js.map +1 -0
  49. package/lib/commonjs/core/index.js +41 -0
  50. package/lib/commonjs/core/index.js.map +1 -0
  51. package/lib/commonjs/index.js +154 -0
  52. package/lib/commonjs/index.js.map +1 -0
  53. package/lib/commonjs/modal/SwiftPatchModal.js +667 -0
  54. package/lib/commonjs/modal/SwiftPatchModal.js.map +1 -0
  55. package/lib/commonjs/modal/useSwiftPatchModal.js +26 -0
  56. package/lib/commonjs/modal/useSwiftPatchModal.js.map +1 -0
  57. package/lib/commonjs/native/NativeSwiftPatch.js +85 -0
  58. package/lib/commonjs/native/NativeSwiftPatch.js.map +1 -0
  59. package/lib/commonjs/native/NativeSwiftPatchSpec.js +15 -0
  60. package/lib/commonjs/native/NativeSwiftPatchSpec.js.map +1 -0
  61. package/lib/commonjs/package.json +1 -0
  62. package/lib/commonjs/types.js +126 -0
  63. package/lib/commonjs/types.js.map +1 -0
  64. package/lib/commonjs/useSwiftPatch.js +31 -0
  65. package/lib/commonjs/useSwiftPatch.js.map +1 -0
  66. package/lib/commonjs/utils/api.js +206 -0
  67. package/lib/commonjs/utils/api.js.map +1 -0
  68. package/lib/commonjs/utils/device.js +23 -0
  69. package/lib/commonjs/utils/device.js.map +1 -0
  70. package/lib/commonjs/utils/logger.js +30 -0
  71. package/lib/commonjs/utils/logger.js.map +1 -0
  72. package/lib/commonjs/utils/storage.js +31 -0
  73. package/lib/commonjs/utils/storage.js.map +1 -0
  74. package/lib/commonjs/withSwiftPatch.js +42 -0
  75. package/lib/commonjs/withSwiftPatch.js.map +1 -0
  76. package/lib/module/SwiftPatchCore.js +135 -0
  77. package/lib/module/SwiftPatchCore.js.map +1 -0
  78. package/lib/module/SwiftPatchProvider.js +611 -0
  79. package/lib/module/SwiftPatchProvider.js.map +1 -0
  80. package/lib/module/constants.js +46 -0
  81. package/lib/module/constants.js.map +1 -0
  82. package/lib/module/core/Downloader.js +57 -0
  83. package/lib/module/core/Downloader.js.map +1 -0
  84. package/lib/module/core/Installer.js +41 -0
  85. package/lib/module/core/Installer.js.map +1 -0
  86. package/lib/module/core/Rollback.js +31 -0
  87. package/lib/module/core/Rollback.js.map +1 -0
  88. package/lib/module/core/UpdateChecker.js +51 -0
  89. package/lib/module/core/UpdateChecker.js.map +1 -0
  90. package/lib/module/core/Verifier.js +76 -0
  91. package/lib/module/core/Verifier.js.map +1 -0
  92. package/lib/module/core/index.js +8 -0
  93. package/lib/module/core/index.js.map +1 -0
  94. package/lib/module/index.js +34 -0
  95. package/lib/module/index.js.map +1 -0
  96. package/lib/module/modal/SwiftPatchModal.js +661 -0
  97. package/lib/module/modal/SwiftPatchModal.js.map +1 -0
  98. package/lib/module/modal/useSwiftPatchModal.js +22 -0
  99. package/lib/module/modal/useSwiftPatchModal.js.map +1 -0
  100. package/lib/module/native/NativeSwiftPatch.js +78 -0
  101. package/lib/module/native/NativeSwiftPatch.js.map +1 -0
  102. package/lib/module/native/NativeSwiftPatchSpec.js +12 -0
  103. package/lib/module/native/NativeSwiftPatchSpec.js.map +1 -0
  104. package/lib/module/types.js +139 -0
  105. package/lib/module/types.js.map +1 -0
  106. package/lib/module/useSwiftPatch.js +26 -0
  107. package/lib/module/useSwiftPatch.js.map +1 -0
  108. package/lib/module/utils/api.js +197 -0
  109. package/lib/module/utils/api.js.map +1 -0
  110. package/lib/module/utils/device.js +18 -0
  111. package/lib/module/utils/device.js.map +1 -0
  112. package/lib/module/utils/logger.js +26 -0
  113. package/lib/module/utils/logger.js.map +1 -0
  114. package/lib/module/utils/storage.js +24 -0
  115. package/lib/module/utils/storage.js.map +1 -0
  116. package/lib/module/withSwiftPatch.js +37 -0
  117. package/lib/module/withSwiftPatch.js.map +1 -0
  118. package/lib/typescript/SwiftPatchCore.d.ts +64 -0
  119. package/lib/typescript/SwiftPatchCore.d.ts.map +1 -0
  120. package/lib/typescript/SwiftPatchProvider.d.ts +22 -0
  121. package/lib/typescript/SwiftPatchProvider.d.ts.map +1 -0
  122. package/lib/typescript/constants.d.ts +33 -0
  123. package/lib/typescript/constants.d.ts.map +1 -0
  124. package/lib/typescript/core/Downloader.d.ts +34 -0
  125. package/lib/typescript/core/Downloader.d.ts.map +1 -0
  126. package/lib/typescript/core/Installer.d.ts +25 -0
  127. package/lib/typescript/core/Installer.d.ts.map +1 -0
  128. package/lib/typescript/core/Rollback.d.ts +18 -0
  129. package/lib/typescript/core/Rollback.d.ts.map +1 -0
  130. package/lib/typescript/core/UpdateChecker.d.ts +27 -0
  131. package/lib/typescript/core/UpdateChecker.d.ts.map +1 -0
  132. package/lib/typescript/core/Verifier.d.ts +31 -0
  133. package/lib/typescript/core/Verifier.d.ts.map +1 -0
  134. package/lib/typescript/core/index.d.ts +8 -0
  135. package/lib/typescript/core/index.d.ts.map +1 -0
  136. package/lib/typescript/index.d.ts +13 -0
  137. package/lib/typescript/index.d.ts.map +1 -0
  138. package/lib/typescript/modal/SwiftPatchModal.d.ts +11 -0
  139. package/lib/typescript/modal/SwiftPatchModal.d.ts.map +1 -0
  140. package/lib/typescript/modal/useSwiftPatchModal.d.ts +7 -0
  141. package/lib/typescript/modal/useSwiftPatchModal.d.ts.map +1 -0
  142. package/lib/typescript/native/NativeSwiftPatch.d.ts +61 -0
  143. package/lib/typescript/native/NativeSwiftPatch.d.ts.map +1 -0
  144. package/lib/typescript/native/NativeSwiftPatchSpec.d.ts +67 -0
  145. package/lib/typescript/native/NativeSwiftPatchSpec.d.ts.map +1 -0
  146. package/lib/typescript/types.d.ts +266 -0
  147. package/lib/typescript/types.d.ts.map +1 -0
  148. package/lib/typescript/useSwiftPatch.d.ts +12 -0
  149. package/lib/typescript/useSwiftPatch.d.ts.map +1 -0
  150. package/lib/typescript/utils/api.d.ts +87 -0
  151. package/lib/typescript/utils/api.d.ts.map +1 -0
  152. package/lib/typescript/utils/device.d.ts +9 -0
  153. package/lib/typescript/utils/device.d.ts.map +1 -0
  154. package/lib/typescript/utils/logger.d.ts +8 -0
  155. package/lib/typescript/utils/logger.d.ts.map +1 -0
  156. package/lib/typescript/utils/storage.d.ts +14 -0
  157. package/lib/typescript/utils/storage.d.ts.map +1 -0
  158. package/lib/typescript/withSwiftPatch.d.ts +12 -0
  159. package/lib/typescript/withSwiftPatch.d.ts.map +1 -0
  160. package/package.json +99 -0
  161. package/react-native-swiftpatch.podspec +50 -0
  162. package/src/SwiftPatchCore.ts +148 -0
  163. package/src/SwiftPatchProvider.tsx +514 -0
  164. package/src/constants.ts +49 -0
  165. package/src/core/Downloader.ts +74 -0
  166. package/src/core/Installer.ts +38 -0
  167. package/src/core/Rollback.ts +28 -0
  168. package/src/core/UpdateChecker.ts +70 -0
  169. package/src/core/Verifier.ts +92 -0
  170. package/src/core/index.ts +11 -0
  171. package/src/index.ts +64 -0
  172. package/src/modal/SwiftPatchModal.tsx +657 -0
  173. package/src/modal/useSwiftPatchModal.ts +24 -0
  174. package/src/native/NativeSwiftPatch.ts +205 -0
  175. package/src/native/NativeSwiftPatchSpec.ts +139 -0
  176. package/src/types.ts +336 -0
  177. package/src/useSwiftPatch.ts +29 -0
  178. package/src/utils/api.ts +244 -0
  179. package/src/utils/device.ts +15 -0
  180. package/src/utils/logger.ts +29 -0
  181. package/src/utils/storage.ts +23 -0
  182. package/src/withSwiftPatch.tsx +41 -0
@@ -0,0 +1,266 @@
1
+ /**
2
+ * SwiftPatch SDK Configuration
3
+ */
4
+ export interface SwiftPatchConfig {
5
+ /** Deployment key from SwiftPatch dashboard */
6
+ deploymentKey: string;
7
+ /** Server URL (defaults to cloud) */
8
+ serverUrl?: string;
9
+ /** Check for updates when app comes to foreground */
10
+ checkOnResume?: boolean;
11
+ /** Minimum interval between update checks (ms) */
12
+ checkInterval?: number;
13
+ /** Install mode for non-mandatory updates */
14
+ installMode?: InstallMode;
15
+ /** Install mode for mandatory updates */
16
+ mandatoryInstallMode?: InstallMode;
17
+ /** Enable debug logging */
18
+ debug?: boolean;
19
+ /** Custom headers for API requests */
20
+ customHeaders?: Record<string, string>;
21
+ /** Public key for bundle verification (optional) */
22
+ publicKey?: string;
23
+ /** Auto-stabilize after N successful launches (0 = manual only) */
24
+ autoStabilizeAfterLaunches?: number;
25
+ /** SDK PIN for in-app dashboard access (optional) */
26
+ sdkPin?: string;
27
+ }
28
+ /**
29
+ * When to install downloaded updates
30
+ */
31
+ export declare enum InstallMode {
32
+ /** Install immediately and restart */
33
+ IMMEDIATE = "immediate",
34
+ /** Install on next app restart */
35
+ ON_NEXT_RESTART = "onNextRestart",
36
+ /** Install on next resume from background */
37
+ ON_NEXT_RESUME = "onNextResume"
38
+ }
39
+ /**
40
+ * Current update status
41
+ */
42
+ export declare enum UpdateStatus {
43
+ /** Checking for updates */
44
+ CHECKING = "checking",
45
+ /** No update available */
46
+ UP_TO_DATE = "upToDate",
47
+ /** Update available, not downloaded */
48
+ UPDATE_AVAILABLE = "updateAvailable",
49
+ /** Downloading update */
50
+ DOWNLOADING = "downloading",
51
+ /** Download complete, ready to install */
52
+ READY_TO_INSTALL = "readyToInstall",
53
+ /** Installing update */
54
+ INSTALLING = "installing",
55
+ /** Update installed, restart required */
56
+ RESTART_REQUIRED = "restartRequired",
57
+ /** Error occurred */
58
+ ERROR = "error"
59
+ }
60
+ /**
61
+ * Slot states for the dual-slot architecture
62
+ */
63
+ export declare enum SlotState {
64
+ DEFAULT_SLOT = "DEFAULT_SLOT",
65
+ STABLE_SLOT = "STABLE_SLOT",
66
+ NEW_SLOT = "NEW_SLOT"
67
+ }
68
+ /**
69
+ * Environment mode
70
+ */
71
+ export declare enum EnvironmentMode {
72
+ PRODUCTION = "PROD",
73
+ STAGING = "STAGE"
74
+ }
75
+ /**
76
+ * Information about an available release
77
+ */
78
+ export interface ReleaseInfo {
79
+ /** Unique release ID */
80
+ id: string;
81
+ /** Semantic version (e.g., "1.2.3") */
82
+ version: string;
83
+ /** Release notes */
84
+ releaseNote: string | null;
85
+ /** Whether update is mandatory */
86
+ isMandatory: boolean;
87
+ /** SHA-256 hash of the bundle */
88
+ bundleHash: string;
89
+ /** Download URL (patch or full bundle) */
90
+ downloadUrl: string;
91
+ /** Size in bytes */
92
+ downloadSize: number;
93
+ /** Whether this is a patch (true) or full bundle (false) */
94
+ isPatch: boolean;
95
+ /** Cryptographic signature (if signing enabled) */
96
+ signature?: string;
97
+ /** Release timestamp */
98
+ releasedAt: string;
99
+ }
100
+ /**
101
+ * Current bundle information
102
+ */
103
+ export interface BundleInfo {
104
+ /** SHA-256 hash of current bundle */
105
+ hash: string;
106
+ /** Version string */
107
+ version: string;
108
+ /** When bundle was installed */
109
+ installedAt: string;
110
+ /** Whether this is the original bundled bundle */
111
+ isOriginal: boolean;
112
+ /** Current slot state */
113
+ slot: SlotState;
114
+ /** Current environment */
115
+ environment: EnvironmentMode;
116
+ }
117
+ /**
118
+ * Slot metadata for the dual-slot system
119
+ */
120
+ export interface SlotMetadata {
121
+ environment: EnvironmentMode;
122
+ prod: {
123
+ currentSlot: SlotState;
124
+ newHash: string | null;
125
+ stableHash: string | null;
126
+ tempHash: string | null;
127
+ };
128
+ stage: {
129
+ newHash: string | null;
130
+ };
131
+ }
132
+ /**
133
+ * Download progress information
134
+ */
135
+ export interface DownloadProgress {
136
+ /** Bytes downloaded so far */
137
+ downloadedBytes: number;
138
+ /** Total bytes to download */
139
+ totalBytes: number;
140
+ /** Progress percentage (0-100) */
141
+ percentage: number;
142
+ }
143
+ /**
144
+ * SDK event types for analytics
145
+ */
146
+ export declare enum SwiftPatchEventType {
147
+ DOWNLOAD_PROD_STARTED = "DOWNLOAD_PROD_STARTED",
148
+ DOWNLOAD_PROD_COMPLETED = "DOWNLOAD_PROD_COMPLETED",
149
+ DOWNLOAD_PROD_FAILED = "DOWNLOAD_PROD_FAILED",
150
+ INSTALLED_PROD = "INSTALLED_PROD",
151
+ ROLLBACK_PROD = "ROLLBACK_PROD",
152
+ STABILIZE_PROD = "STABILIZE_PROD",
153
+ CORRUPTION_PROD = "CORRUPTION_PROD",
154
+ DOWNLOAD_STAGE_STARTED = "DOWNLOAD_STAGE_STARTED",
155
+ DOWNLOAD_STAGE_COMPLETED = "DOWNLOAD_STAGE_COMPLETED",
156
+ DOWNLOAD_STAGE_FAILED = "DOWNLOAD_STAGE_FAILED",
157
+ INSTALLED_STAGE = "INSTALLED_STAGE",
158
+ SYNC_ERROR = "SYNC_ERROR",
159
+ VERSION_CHANGED = "VERSION_CHANGED",
160
+ CRASH_DETECTED = "CRASH_DETECTED"
161
+ }
162
+ /**
163
+ * A queued SDK event
164
+ */
165
+ export interface SwiftPatchEvent {
166
+ id: string;
167
+ eventType: SwiftPatchEventType;
168
+ timestamp: number;
169
+ releaseHash?: string;
170
+ errorMessage?: string;
171
+ metadata?: Record<string, unknown>;
172
+ }
173
+ /**
174
+ * SwiftPatch state exposed via hook
175
+ */
176
+ export interface SwiftPatchState {
177
+ /** Current update status */
178
+ status: UpdateStatus;
179
+ /** Download progress (if downloading) */
180
+ downloadProgress: DownloadProgress | null;
181
+ /** Currently installed bundle info */
182
+ currentBundle: BundleInfo | null;
183
+ /** Available update info */
184
+ availableUpdate: ReleaseInfo | null;
185
+ /** Whether restart is required to apply update */
186
+ isRestartRequired: boolean;
187
+ /** Last error (if status is ERROR) */
188
+ error: SwiftPatchError | null;
189
+ /** Last check timestamp */
190
+ lastCheckedAt: Date | null;
191
+ /** Current slot metadata */
192
+ slotMetadata: SlotMetadata | null;
193
+ /** Current environment */
194
+ environment: EnvironmentMode;
195
+ }
196
+ /**
197
+ * SwiftPatch actions exposed via hook
198
+ */
199
+ export interface SwiftPatchActions {
200
+ /** Check for available updates */
201
+ checkForUpdate: () => Promise<ReleaseInfo | null>;
202
+ /** Download available update */
203
+ downloadUpdate: () => Promise<void>;
204
+ /** Install downloaded update */
205
+ installUpdate: () => Promise<void>;
206
+ /** Restart app to apply update */
207
+ restart: () => void;
208
+ /** Manually rollback to previous version */
209
+ rollback: () => Promise<void>;
210
+ /** Clear pending update */
211
+ clearPendingUpdate: () => Promise<void>;
212
+ /** Get current bundle info */
213
+ getCurrentBundle: () => Promise<BundleInfo | null>;
214
+ /** Stabilize current bundle (promote NEW → STABLE) */
215
+ stabilize: () => Promise<SlotMetadata>;
216
+ /** Switch environment (PROD / STAGE) */
217
+ switchEnvironment: (env: EnvironmentMode) => Promise<SlotMetadata>;
218
+ /** Get slot metadata */
219
+ getSlotMetadata: () => Promise<SlotMetadata>;
220
+ /** Mark app as mounted (for crash detection) */
221
+ markMounted: () => void;
222
+ /** Download a stage bundle for testing */
223
+ downloadStageBundle: (url: string, hash: string) => Promise<void>;
224
+ }
225
+ /**
226
+ * Combined hook return type
227
+ */
228
+ export type UseSwiftPatchReturn = SwiftPatchState & SwiftPatchActions;
229
+ /**
230
+ * Simplified update hook return type
231
+ */
232
+ export interface UseSwiftPatchUpdateReturn {
233
+ isRestartRequired: boolean;
234
+ newReleaseBundle: ReleaseInfo | null;
235
+ currentBundle: BundleInfo | null;
236
+ status: UpdateStatus;
237
+ restart: () => void;
238
+ }
239
+ /**
240
+ * SwiftPatch error
241
+ */
242
+ export interface SwiftPatchError {
243
+ code: SwiftPatchErrorCode;
244
+ message: string;
245
+ details?: unknown;
246
+ }
247
+ export declare enum SwiftPatchErrorCode {
248
+ NETWORK_ERROR = "NETWORK_ERROR",
249
+ DOWNLOAD_ERROR = "DOWNLOAD_ERROR",
250
+ VERIFICATION_ERROR = "VERIFICATION_ERROR",
251
+ PATCH_ERROR = "PATCH_ERROR",
252
+ INSTALL_ERROR = "INSTALL_ERROR",
253
+ CONFIG_ERROR = "CONFIG_ERROR",
254
+ STABILIZE_ERROR = "STABILIZE_ERROR",
255
+ ENVIRONMENT_ERROR = "ENVIRONMENT_ERROR",
256
+ UNKNOWN_ERROR = "UNKNOWN_ERROR"
257
+ }
258
+ /**
259
+ * Modal hook return type
260
+ */
261
+ export interface UseSwiftPatchModalReturn {
262
+ showModal: () => void;
263
+ hideModal: () => void;
264
+ isModalVisible: boolean;
265
+ }
266
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { UseSwiftPatchReturn, UseSwiftPatchUpdateReturn } from './types';
2
+ /**
3
+ * Main hook for accessing all SwiftPatch state and actions.
4
+ * Must be used within SwiftPatchProvider.
5
+ */
6
+ export declare function useSwiftPatch(): UseSwiftPatchReturn;
7
+ /**
8
+ * Simplified hook that only exposes update-related state.
9
+ * Useful for showing update banners or restart prompts.
10
+ */
11
+ export declare function useSwiftPatchUpdate(): UseSwiftPatchUpdateReturn;
12
+ //# sourceMappingURL=useSwiftPatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSwiftPatch.d.ts","sourceRoot":"","sources":["../../src/useSwiftPatch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,wBAAgB,aAAa,IAAI,mBAAmB,CAEnD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,yBAAyB,CAU/D"}
@@ -0,0 +1,87 @@
1
+ import type { ReleaseInfo, SwiftPatchEvent } from '../types';
2
+ interface CheckUpdateParams {
3
+ serverUrl: string;
4
+ deploymentKey: string;
5
+ appVersion: string;
6
+ currentBundleHash: string | null;
7
+ platform: 'ios' | 'android';
8
+ deviceId: string;
9
+ customHeaders?: Record<string, string>;
10
+ unverifiedHashes?: string[];
11
+ }
12
+ interface CheckUpdateResponse {
13
+ updateAvailable: boolean;
14
+ release?: ReleaseInfo;
15
+ appliedRelease?: {
16
+ isRolledBack: boolean;
17
+ targetAppVersion: string;
18
+ };
19
+ }
20
+ /**
21
+ * Check for available updates from the SwiftPatch server
22
+ */
23
+ export declare function checkForUpdateAPI(params: CheckUpdateParams): Promise<CheckUpdateResponse>;
24
+ interface ReportStatusParams {
25
+ serverUrl: string;
26
+ deploymentKey: string;
27
+ releaseId: string;
28
+ status: 'downloaded' | 'installed' | 'crashed' | 'rolledBack';
29
+ error?: string;
30
+ }
31
+ /**
32
+ * Report install status to the SwiftPatch server
33
+ */
34
+ export declare function reportInstallStatus(params: ReportStatusParams): Promise<void>;
35
+ interface LogBulkEventsParams {
36
+ serverUrl: string;
37
+ deploymentKey: string;
38
+ deviceId: string;
39
+ events: SwiftPatchEvent[];
40
+ customHeaders?: Record<string, string>;
41
+ }
42
+ /**
43
+ * Send bulk analytics events to the server
44
+ */
45
+ export declare function logBulkEvents(params: LogBulkEventsParams): Promise<{
46
+ acknowledged: string[];
47
+ }>;
48
+ interface VerifyPinParams {
49
+ serverUrl: string;
50
+ deploymentKey: string;
51
+ pin: string;
52
+ customHeaders?: Record<string, string>;
53
+ }
54
+ /**
55
+ * Verify SDK PIN for dashboard access
56
+ */
57
+ export declare function verifySDKPin(params: VerifyPinParams): Promise<{
58
+ sdkToken: string;
59
+ } | null>;
60
+ interface ListBucketsParams {
61
+ serverUrl: string;
62
+ sdkToken: string;
63
+ deploymentKey: string;
64
+ customHeaders?: Record<string, string>;
65
+ }
66
+ /**
67
+ * List available channels/buckets
68
+ */
69
+ export declare function listBuckets(params: ListBucketsParams): Promise<any[]>;
70
+ interface ListBundlesParams {
71
+ serverUrl: string;
72
+ sdkToken: string;
73
+ deploymentKey: string;
74
+ channelId?: string;
75
+ platform?: string;
76
+ pageOffset?: number;
77
+ customHeaders?: Record<string, string>;
78
+ }
79
+ /**
80
+ * List bundles with pagination
81
+ */
82
+ export declare function listBundles(params: ListBundlesParams): Promise<{
83
+ bundles: any[];
84
+ hasMore: boolean;
85
+ }>;
86
+ export {};
87
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/utils/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Get a unique device identifier for rollout bucketing
3
+ */
4
+ export declare function getDeviceId(): Promise<string>;
5
+ /**
6
+ * Get the current binary app version
7
+ */
8
+ export declare function getAppVersion(): Promise<string>;
9
+ //# sourceMappingURL=device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/utils/device.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAEnD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAErD"}
@@ -0,0 +1,8 @@
1
+ export declare const logger: {
2
+ setDebug(enabled: boolean): void;
3
+ debug(...args: unknown[]): void;
4
+ info(...args: unknown[]): void;
5
+ warn(...args: unknown[]): void;
6
+ error(...args: unknown[]): void;
7
+ };
8
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,MAAM;sBACC,OAAO,GAAG,IAAI;mBAIjB,OAAO,EAAE,GAAG,IAAI;kBAMjB,OAAO,EAAE,GAAG,IAAI;kBAMhB,OAAO,EAAE,GAAG,IAAI;mBAIf,OAAO,EAAE,GAAG,IAAI;CAGhC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { BundleInfo } from '../types';
2
+ /**
3
+ * Get current bundle info from native storage
4
+ */
5
+ export declare function getCurrentBundleInfo(): Promise<BundleInfo | null>;
6
+ /**
7
+ * Check if an install is pending confirmation
8
+ */
9
+ export declare function hasPendingInstall(): Promise<boolean>;
10
+ /**
11
+ * Confirm the current install is stable
12
+ */
13
+ export declare function confirmInstall(): Promise<void>;
14
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/utils/storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAEvE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE1D;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpD"}
@@ -0,0 +1,12 @@
1
+ import React, { type ComponentType } from 'react';
2
+ import type { SwiftPatchConfig } from './types';
3
+ /**
4
+ * Higher-order component to wrap your root component with SwiftPatchProvider.
5
+ * Also includes the built-in dashboard modal (accessible via useSwiftPatchModal).
6
+ */
7
+ export declare function withSwiftPatch<P extends object>(WrappedComponent: ComponentType<P>, config: SwiftPatchConfig): {
8
+ (props: P): React.JSX.Element;
9
+ displayName: string;
10
+ };
11
+ export default withSwiftPatch;
12
+ //# sourceMappingURL=withSwiftPatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withSwiftPatch.d.ts","sourceRoot":"","sources":["../../src/withSwiftPatch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAY,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGhD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,EAClC,MAAM,EAAE,gBAAgB;YAIO,CAAC;;EAsBjC;AAED,eAAe,cAAc,CAAC"}
package/package.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "name": "@swiftpatch/react-native",
3
+ "version": "2.0.0",
4
+ "description": "React Native SDK for SwiftPatch OTA updates with differential patching, automatic rollback, and bundle signing",
5
+ "main": "lib/commonjs/index",
6
+ "module": "lib/module/index",
7
+ "types": "lib/typescript/index.d.ts",
8
+ "react-native": "src/index",
9
+ "source": "src/index",
10
+ "files": [
11
+ "src",
12
+ "lib",
13
+ "android",
14
+ "ios",
15
+ "cpp",
16
+ "*.podspec",
17
+ "!ios/build",
18
+ "!android/build",
19
+ "!android/gradle",
20
+ "!android/gradlew",
21
+ "!android/gradlew.bat",
22
+ "!android/local.properties",
23
+ "!**/__tests__",
24
+ "!**/__fixtures__",
25
+ "!**/__mocks__",
26
+ "!**/.*"
27
+ ],
28
+ "scripts": {
29
+ "typescript": "tsc --noEmit",
30
+ "lint": "eslint \"**/*.{js,ts,tsx}\"",
31
+ "prepare": "bob build",
32
+ "release": "release-it",
33
+ "example": "yarn workspace @swiftpatch/example",
34
+ "clean": "del-cli lib"
35
+ },
36
+ "keywords": [
37
+ "react-native",
38
+ "ota",
39
+ "over-the-air",
40
+ "updates",
41
+ "code-push",
42
+ "hot-update",
43
+ "differential-patching",
44
+ "bsdiff",
45
+ "swiftpatch"
46
+ ],
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/codewprincee/react-native-swiftpatch"
50
+ },
51
+ "author": "SwiftPatch <sdk@swiftpatch.io>",
52
+ "license": "MIT",
53
+ "bugs": {
54
+ "url": "https://github.com/codewprincee/react-native-swiftpatch/issues"
55
+ },
56
+ "homepage": "https://swiftpatch.io",
57
+ "publishConfig": {
58
+ "registry": "https://registry.npmjs.org/",
59
+ "access": "public"
60
+ },
61
+ "devDependencies": {
62
+ "@types/react": "^18.3.0",
63
+ "@types/react-native": "^0.73.0",
64
+ "react": "^18.3.0",
65
+ "react-native": "^0.76.5",
66
+ "react-native-builder-bob": "^0.40.0",
67
+ "typescript": "^5.7.0",
68
+ "vitest": "^4.0.18"
69
+ },
70
+ "peerDependencies": {
71
+ "react": ">=18.2.0",
72
+ "react-native": ">=0.76.0"
73
+ },
74
+ "engines": {
75
+ "node": ">= 18.0.0"
76
+ },
77
+ "codegenConfig": {
78
+ "name": "RNSwiftPatchSpec",
79
+ "type": "modules",
80
+ "jsSrcsDir": "src/native",
81
+ "android": {
82
+ "javaPackageName": "com.swiftpatch"
83
+ }
84
+ },
85
+ "react-native-builder-bob": {
86
+ "source": "src",
87
+ "output": "lib",
88
+ "targets": [
89
+ "commonjs",
90
+ "module",
91
+ [
92
+ "typescript",
93
+ {
94
+ "project": "tsconfig.build.json"
95
+ }
96
+ ]
97
+ ]
98
+ }
99
+ }
@@ -0,0 +1,50 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+ folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
5
+
6
+ Pod::Spec.new do |s|
7
+ s.name = "react-native-swiftpatch"
8
+ s.version = package["version"]
9
+ s.summary = package["description"]
10
+ s.homepage = package["homepage"]
11
+ s.license = package["license"]
12
+ s.authors = package["author"]
13
+
14
+ s.platforms = { :ios => "13.4" }
15
+ s.source = { :git => "https://github.com/codewprincee/react-native-swiftpatch.git", :tag => "#{s.version}" }
16
+
17
+ s.source_files = "ios/**/*.{h,m,mm,swift,c}"
18
+ s.preserve_paths = "ios/Libraries/bspatch/module.modulemap"
19
+
20
+ # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0
21
+ # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79
22
+ if respond_to?(:install_modules_dependencies, true)
23
+ install_modules_dependencies(s)
24
+ else
25
+ s.dependency "React-Core"
26
+
27
+ # Don't install the dependencies when we run `pod install` in the old architecture
28
+ if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
29
+ s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
30
+ s.pod_target_xcconfig = {
31
+ "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
32
+ "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1",
33
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
34
+ }
35
+ s.dependency "React-Codegen"
36
+ s.dependency "RCT-Folly"
37
+ s.dependency "RCTRequired"
38
+ s.dependency "RCTTypeSafety"
39
+ s.dependency "ReactCommon/turbomodule/core"
40
+ end
41
+ end
42
+
43
+ s.pod_target_xcconfig = {
44
+ "DEFINES_MODULE" => "YES",
45
+ "SWIFT_INCLUDE_PATHS" => "$(PODS_TARGET_SRCROOT)/ios/Libraries/bspatch",
46
+ "SWIFT_VERSION" => "5.9"
47
+ }
48
+
49
+ s.swift_version = "5.9"
50
+ end