react-native-stallion 2.4.0-alpha.3 → 2.4.0-alpha.5
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/android/src/main/cpp/CMakeLists.txt +41 -0
- package/android/src/main/cpp/bspatch_bridge.c +268 -0
- package/android/src/main/cpp/bspatch_bridge.h +26 -0
- package/android/src/main/cpp/bzip2/blocksort.c +1094 -0
- package/android/src/main/cpp/bzip2/bzlib.c +1572 -0
- package/android/src/main/cpp/bzip2/bzlib.h +282 -0
- package/android/src/main/cpp/bzip2/bzlib_private.h +509 -0
- package/android/src/main/cpp/bzip2/compress.c +672 -0
- package/android/src/main/cpp/bzip2/crctable.c +104 -0
- package/android/src/main/cpp/bzip2/decompress.c +652 -0
- package/android/src/main/cpp/bzip2/huffman.c +205 -0
- package/android/src/main/cpp/bzip2/randtable.c +84 -0
- package/android/src/main/cpp/stallion_bspatch_jni.cpp +39 -0
- package/android/src/main/java/com/stallion/StallionModule.java +13 -1
- package/android/src/main/java/com/stallion/networkmanager/StallionPatchHandler.java +222 -0
- package/android/src/main/java/com/stallion/networkmanager/StallionSyncHandler.java +88 -16
- package/android/src/main/java/com/stallion/storage/StallionMeta.java +12 -0
- package/android/src/main/java/com/stallion/storage/StallionStateManager.java +25 -0
- package/android/src/main/java/com/stallion/utils/StallionBSPatch.java +30 -0
- package/ios/Stallion.xcodeproj/project.pbxproj +6 -0
- package/ios/main/Stallion-Bridging-Header.h +1 -0
- package/ios/main/Stallion.m +22 -0
- package/ios/main/Stallion.swift +8 -1
- package/ios/main/StallionBSPatch.swift +35 -0
- package/ios/main/StallionMeta.h +1 -0
- package/ios/main/StallionMeta.m +12 -0
- package/ios/main/StallionModule.m +3 -3
- package/ios/main/StallionPatchHandler.swift +206 -0
- package/ios/main/StallionSignatureVerification.swift +1 -1
- package/ios/main/StallionStateManager.h +3 -0
- package/ios/main/StallionStateManager.m +3 -0
- package/ios/main/StallionSyncHandler.swift +86 -10
- package/ios/main/bspatch.c +270 -0
- package/ios/main/bspatch_bridge.h +25 -0
- package/package.json +1 -1
- package/react-native-stallion.podspec +3 -1
- package/src/index.js +2 -0
- package/src/index.js.map +1 -1
- package/src/main/utils/StallionNativeUtils.js +3 -0
- package/src/main/utils/StallionNativeUtils.js.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/main/utils/StallionNativeUtils.d.ts +2 -1
- package/types/main/utils/StallionNativeUtils.d.ts.map +1 -1
- package/types/types/utils.types.d.ts +1 -0
- package/types/types/utils.types.d.ts.map +1 -1
|
@@ -37,7 +37,7 @@ class StallionSignatureVerification {
|
|
|
37
37
|
guard let payloadData = base64UrlDecode(payload),
|
|
38
38
|
let payloadJson = try JSONSerialization.jsonObject(with: payloadData) as? [String: Any],
|
|
39
39
|
let expectedHash = payloadJson["packageHash"] as? String else { return false }
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
let actualHash = try computeCodePushStyleHash(folderPath: downloadedBundlePath)
|
|
42
42
|
return expectedHash == actualHash
|
|
43
43
|
|
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
@property (nonatomic, assign) BOOL isMounted;
|
|
17
17
|
@property (nonatomic, copy) NSString *pendingReleaseUrl;
|
|
18
18
|
@property (nonatomic, copy) NSString *pendingReleaseHash;
|
|
19
|
+
@property (nonatomic, copy) NSString *pendingReleaseDiffUrl;
|
|
20
|
+
@property (nonatomic, assign) BOOL pendingReleaseIsBundlePatched;
|
|
21
|
+
@property (nonatomic, copy) NSString *pendingReleaseBundleDiffId;
|
|
19
22
|
|
|
20
23
|
+ (instancetype)sharedInstance;
|
|
21
24
|
+ (void)initializeInstance;
|
|
@@ -44,6 +44,9 @@ static StallionStateManager *_instance = nil;
|
|
|
44
44
|
_isMounted = NO;
|
|
45
45
|
_pendingReleaseUrl = @"";
|
|
46
46
|
_pendingReleaseHash = @"";
|
|
47
|
+
_pendingReleaseDiffUrl = nil;
|
|
48
|
+
_pendingReleaseIsBundlePatched = NO;
|
|
49
|
+
_pendingReleaseBundleDiffId = nil;
|
|
47
50
|
|
|
48
51
|
// Reset mount state on initialization (ensures mount marker file is deleted for new session)
|
|
49
52
|
[self setIsMounted:NO];
|
|
@@ -151,21 +151,55 @@ class StallionSyncHandler {
|
|
|
151
151
|
!newReleaseUrl.isEmpty,
|
|
152
152
|
!newReleaseHash.isEmpty else { return }
|
|
153
153
|
|
|
154
|
+
// Extract diffData if it exists
|
|
155
|
+
var diffUrl: String? = nil
|
|
156
|
+
var isBundlePatched: Bool = false
|
|
157
|
+
var bundleDiffId: String? = nil
|
|
158
|
+
if let diffData = newReleaseData["bundleDiff"] as? [String: Any] {
|
|
159
|
+
if let extractedDiffUrl = diffData["url"] as? String,
|
|
160
|
+
!extractedDiffUrl.isEmpty {
|
|
161
|
+
diffUrl = extractedDiffUrl
|
|
162
|
+
}
|
|
163
|
+
isBundlePatched = diffData["isBundlePatched"] as? Bool ?? false
|
|
164
|
+
if let extractedId = diffData["id"] as? String,
|
|
165
|
+
!extractedId.isEmpty {
|
|
166
|
+
bundleDiffId = extractedId
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
154
170
|
let stateManager = StallionStateManager.sharedInstance()
|
|
155
171
|
let lastRolledBackHash = stateManager?.stallionMeta?.getLastRolledBackHash() ?? ""
|
|
156
172
|
let lastUnverifiedHash = stateManager?.stallionConfig?.lastUnverifiedHash ?? ""
|
|
157
173
|
|
|
158
174
|
if newReleaseHash != lastRolledBackHash && newReleaseHash != lastUnverifiedHash {
|
|
159
175
|
if stateManager?.isMounted == true {
|
|
160
|
-
downloadNewRelease(newReleaseHash: newReleaseHash, newReleaseUrl: newReleaseUrl)
|
|
176
|
+
downloadNewRelease(newReleaseHash: newReleaseHash, newReleaseUrl: newReleaseUrl, diffUrl: diffUrl, isBundlePatched: isBundlePatched, bundleDiffId: bundleDiffId)
|
|
161
177
|
} else {
|
|
162
178
|
stateManager?.pendingReleaseUrl = newReleaseUrl
|
|
163
179
|
stateManager?.pendingReleaseHash = newReleaseHash
|
|
180
|
+
stateManager?.pendingReleaseDiffUrl = diffUrl
|
|
181
|
+
stateManager?.pendingReleaseIsBundlePatched = isBundlePatched
|
|
182
|
+
stateManager?.pendingReleaseBundleDiffId = bundleDiffId
|
|
164
183
|
}
|
|
165
184
|
}
|
|
166
185
|
}
|
|
167
186
|
|
|
187
|
+
// Overloaded method for backward compatibility
|
|
168
188
|
static func downloadNewRelease(newReleaseHash: String, newReleaseUrl: String) {
|
|
189
|
+
downloadNewRelease(newReleaseHash: newReleaseHash, newReleaseUrl: newReleaseUrl, diffUrl: nil, isBundlePatched: false, bundleDiffId: nil)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Overloaded method for backward compatibility
|
|
193
|
+
static func downloadNewRelease(newReleaseHash: String, newReleaseUrl: String, diffUrl: String?) {
|
|
194
|
+
downloadNewRelease(newReleaseHash: newReleaseHash, newReleaseUrl: newReleaseUrl, diffUrl: diffUrl, isBundlePatched: false, bundleDiffId: nil)
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Overloaded method for backward compatibility
|
|
198
|
+
static func downloadNewRelease(newReleaseHash: String, newReleaseUrl: String, diffUrl: String?, isBundlePatched: Bool) {
|
|
199
|
+
downloadNewRelease(newReleaseHash: newReleaseHash, newReleaseUrl: newReleaseUrl, diffUrl: diffUrl, isBundlePatched: isBundlePatched, bundleDiffId: nil)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
static func downloadNewRelease(newReleaseHash: String, newReleaseUrl: String, diffUrl: String?, isBundlePatched: Bool, bundleDiffId: String?) {
|
|
169
203
|
guard let stateManager = StallionStateManager.sharedInstance(),
|
|
170
204
|
let config = stateManager.stallionConfig else { return }
|
|
171
205
|
|
|
@@ -181,11 +215,22 @@ class StallionSyncHandler {
|
|
|
181
215
|
let downloadPath = config.filesDirectory + "/" + StallionConstants.PROD_DIRECTORY + "/" + StallionConstants.TEMP_FOLDER_SLOT
|
|
182
216
|
let projectId = config.projectId ?? ""
|
|
183
217
|
|
|
218
|
+
// Use diffUrl if it exists, otherwise use newReleaseUrl
|
|
219
|
+
let urlToDownload = (diffUrl != nil && !diffUrl!.isEmpty) ? diffUrl! : newReleaseUrl
|
|
184
220
|
let publicSigningKey = config.publicSigningKey ?? ""
|
|
185
221
|
|
|
186
|
-
|
|
222
|
+
// Track if this is a diff download
|
|
223
|
+
let isDiffDownload = (diffUrl != nil && !diffUrl!.isEmpty)
|
|
224
|
+
// Store original newReleaseUrl for potential retry
|
|
225
|
+
let originalNewReleaseUrl = newReleaseUrl
|
|
226
|
+
// Store isBundlePatched flag for patch handler
|
|
227
|
+
let isBundlePatchedFlag = isBundlePatched
|
|
228
|
+
// Store bundleDiffId for events
|
|
229
|
+
let bundleDiffIdForEvents = bundleDiffId
|
|
230
|
+
|
|
231
|
+
guard let fromUrl = URL(string: urlToDownload + "?projectId=" + projectId) else { return }
|
|
187
232
|
|
|
188
|
-
emitDownloadStarted(releaseHash: newReleaseHash)
|
|
233
|
+
emitDownloadStarted(releaseHash: newReleaseHash, bundleDiffId: bundleDiffIdForEvents)
|
|
189
234
|
|
|
190
235
|
StallionFileDownloader().downloadBundle(
|
|
191
236
|
url: fromUrl,
|
|
@@ -196,6 +241,31 @@ class StallionSyncHandler {
|
|
|
196
241
|
resolve: { _ in
|
|
197
242
|
completeDownload()
|
|
198
243
|
|
|
244
|
+
// If this was a diff download, handle patch
|
|
245
|
+
if isDiffDownload {
|
|
246
|
+
// Get base bundle path from current slot
|
|
247
|
+
guard let slotPath = stateManager.stallionMeta?.getCurrentProdSlotPath() else {
|
|
248
|
+
// No valid slot path (e.g., default slot), skip patch and retry with full bundle
|
|
249
|
+
StallionFileManager.deleteFileOrFolderSilently(downloadPath)
|
|
250
|
+
downloadNewRelease(newReleaseHash: newReleaseHash, newReleaseUrl: originalNewReleaseUrl, diffUrl: nil, isBundlePatched: false, bundleDiffId: nil)
|
|
251
|
+
return
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
do {
|
|
255
|
+
let baseBundlePath = config.filesDirectory + "/" + StallionConstants.PROD_DIRECTORY + "/" + slotPath
|
|
256
|
+
|
|
257
|
+
// Invoke patch handler with isBundlePatched flag
|
|
258
|
+
try StallionPatchHandler.applyPatch(baseBundlePath: baseBundlePath, diffPath: downloadPath, isBundlePatched: isBundlePatchedFlag)
|
|
259
|
+
} catch {
|
|
260
|
+
// Patch application failed, retry with full bundle download
|
|
261
|
+
// Clean up the failed diff download
|
|
262
|
+
StallionFileManager.deleteFileOrFolderSilently(downloadPath)
|
|
263
|
+
// Retry download with full bundle (no diffUrl)
|
|
264
|
+
downloadNewRelease(newReleaseHash: newReleaseHash, newReleaseUrl: originalNewReleaseUrl, diffUrl: nil, isBundlePatched: false, bundleDiffId: nil)
|
|
265
|
+
return
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
199
269
|
if(publicSigningKey != nil && !publicSigningKey.isEmpty) {
|
|
200
270
|
if(
|
|
201
271
|
!StallionSignatureVerification.verifyReleaseSignature(
|
|
@@ -217,7 +287,7 @@ class StallionSyncHandler {
|
|
|
217
287
|
StallionSlotManager.stabilizeProd()
|
|
218
288
|
}
|
|
219
289
|
stateManager.syncStallionMeta()
|
|
220
|
-
emitDownloadSuccess(releaseHash: newReleaseHash)
|
|
290
|
+
emitDownloadSuccess(releaseHash: newReleaseHash, bundleDiffId: bundleDiffIdForEvents)
|
|
221
291
|
},
|
|
222
292
|
reject: { code, prefix, error in
|
|
223
293
|
completeDownload()
|
|
@@ -256,18 +326,24 @@ class StallionSyncHandler {
|
|
|
256
326
|
)
|
|
257
327
|
}
|
|
258
328
|
|
|
259
|
-
private static func emitDownloadSuccess(releaseHash: String) {
|
|
260
|
-
|
|
329
|
+
private static func emitDownloadSuccess(releaseHash: String, bundleDiffId: String?) {
|
|
330
|
+
var successPayload: [String: Any] = ["releaseHash": releaseHash]
|
|
331
|
+
if let bundleDiffId = bundleDiffId, !bundleDiffId.isEmpty {
|
|
332
|
+
successPayload["diffId"] = bundleDiffId
|
|
333
|
+
}
|
|
261
334
|
Stallion.sendEventToRn(eventName: StallionConstants.NativeEventTypesProd.DOWNLOAD_COMPLETE_PROD,
|
|
262
|
-
eventBody: successPayload,
|
|
335
|
+
eventBody: successPayload as NSDictionary,
|
|
263
336
|
shouldCache: true
|
|
264
337
|
)
|
|
265
338
|
}
|
|
266
339
|
|
|
267
|
-
private static func emitDownloadStarted(releaseHash: String) {
|
|
268
|
-
|
|
340
|
+
private static func emitDownloadStarted(releaseHash: String, bundleDiffId: String?) {
|
|
341
|
+
var startedPayload: [String: Any] = ["releaseHash": releaseHash]
|
|
342
|
+
if let bundleDiffId = bundleDiffId, !bundleDiffId.isEmpty {
|
|
343
|
+
startedPayload["diffId"] = bundleDiffId
|
|
344
|
+
}
|
|
269
345
|
Stallion.sendEventToRn(eventName: StallionConstants.NativeEventTypesProd.DOWNLOAD_STARTED_PROD,
|
|
270
|
-
eventBody: startedPayload,
|
|
346
|
+
eventBody: startedPayload as NSDictionary,
|
|
271
347
|
shouldCache: true
|
|
272
348
|
)
|
|
273
349
|
}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
//
|
|
2
|
+
// bspatch.c
|
|
3
|
+
// react-native-stallion
|
|
4
|
+
//
|
|
5
|
+
// Based on original bsdiff/bspatch by Colin Percival
|
|
6
|
+
// Adapted for iOS library use with bzip2-compressed BSDIFF40 format
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#include "bspatch_bridge.h"
|
|
10
|
+
|
|
11
|
+
#include <bzlib.h>
|
|
12
|
+
#include <stdlib.h>
|
|
13
|
+
#include <stdio.h>
|
|
14
|
+
#include <string.h>
|
|
15
|
+
#include <errno.h>
|
|
16
|
+
#include <sys/types.h>
|
|
17
|
+
#include <unistd.h>
|
|
18
|
+
#include <fcntl.h>
|
|
19
|
+
|
|
20
|
+
// Error codes (negative)
|
|
21
|
+
#define BSPATCH_ERR_OPEN_OLD -1
|
|
22
|
+
#define BSPATCH_ERR_OPEN_NEW -2
|
|
23
|
+
#define BSPATCH_ERR_OPEN_PATCH -3
|
|
24
|
+
#define BSPATCH_ERR_READ_HDR -4
|
|
25
|
+
#define BSPATCH_ERR_BAD_MAGIC -5
|
|
26
|
+
#define BSPATCH_ERR_READ_CTRL -6
|
|
27
|
+
#define BSPATCH_ERR_READ_DIFF -7
|
|
28
|
+
#define BSPATCH_ERR_READ_EXTRA -8
|
|
29
|
+
#define BSPATCH_ERR_SEEK_OLD -9
|
|
30
|
+
#define BSPATCH_ERR_WRITE_NEW -10
|
|
31
|
+
#define BSPATCH_ERR_BZ2_ERROR -11
|
|
32
|
+
#define BSPATCH_ERR_OVERFLOW -12
|
|
33
|
+
|
|
34
|
+
/* Type compatibility */
|
|
35
|
+
#ifndef u_char
|
|
36
|
+
#define u_char unsigned char
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
static off_t offtin(u_char *buf)
|
|
40
|
+
{
|
|
41
|
+
off_t y;
|
|
42
|
+
|
|
43
|
+
y=buf[7]&0x7F;
|
|
44
|
+
y=y*256;y+=buf[6];
|
|
45
|
+
y=y*256;y+=buf[5];
|
|
46
|
+
y=y*256;y+=buf[4];
|
|
47
|
+
y=y*256;y+=buf[3];
|
|
48
|
+
y=y*256;y+=buf[2];
|
|
49
|
+
y=y*256;y+=buf[1];
|
|
50
|
+
y=y*256;y+=buf[0];
|
|
51
|
+
|
|
52
|
+
if(buf[7]&0x80) y=-y;
|
|
53
|
+
|
|
54
|
+
return y;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
int bspatch_apply(const char *oldPath, const char *newPath, const char *patchPath) {
|
|
58
|
+
FILE * f = NULL, * cpf = NULL, * dpf = NULL, * epf = NULL;
|
|
59
|
+
BZFILE * cpfbz2 = NULL, * dpfbz2 = NULL, * epfbz2 = NULL;
|
|
60
|
+
int cbz2err, dbz2err, ebz2err;
|
|
61
|
+
int fd = -1;
|
|
62
|
+
ssize_t oldsize,newsize;
|
|
63
|
+
ssize_t bzctrllen,bzdatalen;
|
|
64
|
+
u_char header[32],buf[8];
|
|
65
|
+
u_char *old = NULL, *new = NULL;
|
|
66
|
+
off_t oldpos,newpos;
|
|
67
|
+
off_t ctrl[3];
|
|
68
|
+
off_t lenread;
|
|
69
|
+
off_t i;
|
|
70
|
+
int ret = 0;
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
File format:
|
|
74
|
+
0 8 "BSDIFF40"
|
|
75
|
+
8 8 X
|
|
76
|
+
16 8 Y
|
|
77
|
+
24 8 sizeof(newfile)
|
|
78
|
+
32 X bzip2(control block)
|
|
79
|
+
32+X Y bzip2(diff block)
|
|
80
|
+
32+X+Y ??? bzip2(extra block)
|
|
81
|
+
with control block a set of triples (x,y,z) meaning "add x bytes
|
|
82
|
+
from oldfile to x bytes from the diff block; copy y bytes from the
|
|
83
|
+
extra block; seek forwards in oldfile by z bytes".
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
/* Open patch file */
|
|
87
|
+
if ((f = fopen(patchPath, "rb")) == NULL) {
|
|
88
|
+
ret = BSPATCH_ERR_OPEN_PATCH;
|
|
89
|
+
goto cleanup;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* Read header */
|
|
93
|
+
if (fread(header, 1, 32, f) < 32) {
|
|
94
|
+
ret = BSPATCH_ERR_READ_HDR;
|
|
95
|
+
goto cleanup;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* Check for appropriate magic */
|
|
99
|
+
if (memcmp(header, "BSDIFF40", 8) != 0) {
|
|
100
|
+
ret = BSPATCH_ERR_BAD_MAGIC;
|
|
101
|
+
goto cleanup;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Read lengths from header */
|
|
105
|
+
bzctrllen=offtin(header+8);
|
|
106
|
+
bzdatalen=offtin(header+16);
|
|
107
|
+
newsize=offtin(header+24);
|
|
108
|
+
if((bzctrllen<0) || (bzdatalen<0) || (newsize<0)) {
|
|
109
|
+
ret = BSPATCH_ERR_OVERFLOW;
|
|
110
|
+
goto cleanup;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Close patch file and re-open it via libbzip2 at the right places */
|
|
114
|
+
if (fclose(f)) {
|
|
115
|
+
ret = BSPATCH_ERR_OPEN_PATCH;
|
|
116
|
+
goto cleanup;
|
|
117
|
+
}
|
|
118
|
+
f = NULL;
|
|
119
|
+
|
|
120
|
+
/* Open control stream */
|
|
121
|
+
if ((cpf = fopen(patchPath, "rb")) == NULL) {
|
|
122
|
+
ret = BSPATCH_ERR_OPEN_PATCH;
|
|
123
|
+
goto cleanup;
|
|
124
|
+
}
|
|
125
|
+
if (fseeko(cpf, 32, SEEK_SET)) {
|
|
126
|
+
ret = BSPATCH_ERR_OPEN_PATCH;
|
|
127
|
+
goto cleanup;
|
|
128
|
+
}
|
|
129
|
+
if ((cpfbz2 = BZ2_bzReadOpen(&cbz2err, cpf, 0, 0, NULL, 0)) == NULL) {
|
|
130
|
+
ret = BSPATCH_ERR_BZ2_ERROR;
|
|
131
|
+
goto cleanup;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* Open diff stream */
|
|
135
|
+
if ((dpf = fopen(patchPath, "rb")) == NULL) {
|
|
136
|
+
ret = BSPATCH_ERR_OPEN_PATCH;
|
|
137
|
+
goto cleanup;
|
|
138
|
+
}
|
|
139
|
+
if (fseeko(dpf, 32 + bzctrllen, SEEK_SET)) {
|
|
140
|
+
ret = BSPATCH_ERR_OPEN_PATCH;
|
|
141
|
+
goto cleanup;
|
|
142
|
+
}
|
|
143
|
+
if ((dpfbz2 = BZ2_bzReadOpen(&dbz2err, dpf, 0, 0, NULL, 0)) == NULL) {
|
|
144
|
+
ret = BSPATCH_ERR_BZ2_ERROR;
|
|
145
|
+
goto cleanup;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* Open extra stream */
|
|
149
|
+
if ((epf = fopen(patchPath, "rb")) == NULL) {
|
|
150
|
+
ret = BSPATCH_ERR_OPEN_PATCH;
|
|
151
|
+
goto cleanup;
|
|
152
|
+
}
|
|
153
|
+
if (fseeko(epf, 32 + bzctrllen + bzdatalen, SEEK_SET)) {
|
|
154
|
+
ret = BSPATCH_ERR_OPEN_PATCH;
|
|
155
|
+
goto cleanup;
|
|
156
|
+
}
|
|
157
|
+
if ((epfbz2 = BZ2_bzReadOpen(&ebz2err, epf, 0, 0, NULL, 0)) == NULL) {
|
|
158
|
+
ret = BSPATCH_ERR_BZ2_ERROR;
|
|
159
|
+
goto cleanup;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* Load old file into memory */
|
|
163
|
+
if(((fd=open(oldPath,O_RDONLY,0))<0) ||
|
|
164
|
+
((oldsize=lseek(fd,0,SEEK_END))==-1) ||
|
|
165
|
+
((old=malloc(oldsize+1))==NULL) ||
|
|
166
|
+
(lseek(fd,0,SEEK_SET)!=0) ||
|
|
167
|
+
(read(fd,old,oldsize)!=oldsize) ||
|
|
168
|
+
(close(fd)==-1)) {
|
|
169
|
+
if (fd >= 0) close(fd);
|
|
170
|
+
fd = -1;
|
|
171
|
+
ret = BSPATCH_ERR_OPEN_OLD;
|
|
172
|
+
goto cleanup;
|
|
173
|
+
}
|
|
174
|
+
fd = -1;
|
|
175
|
+
|
|
176
|
+
/* Allocate memory for new file */
|
|
177
|
+
if((new=malloc(newsize+1))==NULL) {
|
|
178
|
+
ret = BSPATCH_ERR_OVERFLOW;
|
|
179
|
+
goto cleanup;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
oldpos=0;newpos=0;
|
|
183
|
+
while(newpos<newsize) {
|
|
184
|
+
/* Read control data */
|
|
185
|
+
for(i=0;i<=2;i++) {
|
|
186
|
+
lenread = BZ2_bzRead(&cbz2err, cpfbz2, buf, 8);
|
|
187
|
+
if ((lenread < 8) || ((cbz2err != BZ_OK) &&
|
|
188
|
+
(cbz2err != BZ_STREAM_END))) {
|
|
189
|
+
ret = BSPATCH_ERR_READ_CTRL;
|
|
190
|
+
goto cleanup;
|
|
191
|
+
}
|
|
192
|
+
ctrl[i]=offtin(buf);
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
/* Sanity-check */
|
|
196
|
+
if(newpos+ctrl[0]>newsize) {
|
|
197
|
+
ret = BSPATCH_ERR_OVERFLOW;
|
|
198
|
+
goto cleanup;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* Read diff string */
|
|
202
|
+
lenread = BZ2_bzRead(&dbz2err, dpfbz2, new + newpos, ctrl[0]);
|
|
203
|
+
if ((lenread < ctrl[0]) ||
|
|
204
|
+
((dbz2err != BZ_OK) && (dbz2err != BZ_STREAM_END))) {
|
|
205
|
+
ret = BSPATCH_ERR_READ_DIFF;
|
|
206
|
+
goto cleanup;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/* Add old data to diff string */
|
|
210
|
+
for(i=0;i<ctrl[0];i++)
|
|
211
|
+
if((oldpos+i>=0) && (oldpos+i<oldsize))
|
|
212
|
+
new[newpos+i]+=old[oldpos+i];
|
|
213
|
+
|
|
214
|
+
/* Adjust pointers */
|
|
215
|
+
newpos+=ctrl[0];
|
|
216
|
+
oldpos+=ctrl[0];
|
|
217
|
+
|
|
218
|
+
/* Sanity-check */
|
|
219
|
+
if(newpos+ctrl[1]>newsize) {
|
|
220
|
+
ret = BSPATCH_ERR_OVERFLOW;
|
|
221
|
+
goto cleanup;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* Read extra string */
|
|
225
|
+
lenread = BZ2_bzRead(&ebz2err, epfbz2, new + newpos, ctrl[1]);
|
|
226
|
+
if ((lenread < ctrl[1]) ||
|
|
227
|
+
((ebz2err != BZ_OK) && (ebz2err != BZ_STREAM_END))) {
|
|
228
|
+
ret = BSPATCH_ERR_READ_EXTRA;
|
|
229
|
+
goto cleanup;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* Adjust pointers */
|
|
233
|
+
newpos+=ctrl[1];
|
|
234
|
+
oldpos+=ctrl[2];
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
/* Clean up the bzip2 reads */
|
|
238
|
+
BZ2_bzReadClose(&cbz2err, cpfbz2);
|
|
239
|
+
cpfbz2 = NULL;
|
|
240
|
+
BZ2_bzReadClose(&dbz2err, dpfbz2);
|
|
241
|
+
dpfbz2 = NULL;
|
|
242
|
+
BZ2_bzReadClose(&ebz2err, epfbz2);
|
|
243
|
+
epfbz2 = NULL;
|
|
244
|
+
|
|
245
|
+
/* Write the new file */
|
|
246
|
+
if(((fd=open(newPath,O_CREAT|O_TRUNC|O_WRONLY,0666))<0) ||
|
|
247
|
+
(write(fd,new,newsize)!=newsize) || (close(fd)==-1)) {
|
|
248
|
+
if (fd >= 0) close(fd);
|
|
249
|
+
fd = -1;
|
|
250
|
+
ret = BSPATCH_ERR_WRITE_NEW;
|
|
251
|
+
goto cleanup;
|
|
252
|
+
}
|
|
253
|
+
fd = -1;
|
|
254
|
+
|
|
255
|
+
ret = 0;
|
|
256
|
+
|
|
257
|
+
cleanup:
|
|
258
|
+
if (cpfbz2) BZ2_bzReadClose(&cbz2err, cpfbz2);
|
|
259
|
+
if (dpfbz2) BZ2_bzReadClose(&dbz2err, dpfbz2);
|
|
260
|
+
if (epfbz2) BZ2_bzReadClose(&ebz2err, epfbz2);
|
|
261
|
+
if (f) fclose(f);
|
|
262
|
+
if (cpf) fclose(cpf);
|
|
263
|
+
if (dpf) fclose(dpf);
|
|
264
|
+
if (epf) fclose(epf);
|
|
265
|
+
if (fd >= 0) close(fd);
|
|
266
|
+
if (new) free(new);
|
|
267
|
+
if (old) free(old);
|
|
268
|
+
|
|
269
|
+
return ret;
|
|
270
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//
|
|
2
|
+
// bspatch_bridge.h
|
|
3
|
+
// react-native-stallion
|
|
4
|
+
//
|
|
5
|
+
// Created by Thor963 on 04/11/25.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#ifndef BSPATCH_BRIDGE_H
|
|
9
|
+
#define BSPATCH_BRIDGE_H
|
|
10
|
+
|
|
11
|
+
#include <stddef.h>
|
|
12
|
+
|
|
13
|
+
#ifdef __cplusplus
|
|
14
|
+
extern "C" {
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
// Apply a bsdiff patch file to oldPath, writing the result to newPath.
|
|
18
|
+
// Returns 0 on success, negative values on error.
|
|
19
|
+
int bspatch_apply(const char *oldPath, const char *newPath, const char *patchPath);
|
|
20
|
+
|
|
21
|
+
#ifdef __cplusplus
|
|
22
|
+
}
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
#endif /* BSPATCH_BRIDGE_H */
|
package/package.json
CHANGED
|
@@ -39,7 +39,7 @@ Pod::Spec.new do |s|
|
|
|
39
39
|
isStallionEnabled = true
|
|
40
40
|
|
|
41
41
|
if isStallionEnabled then
|
|
42
|
-
s.source_files = "ios/main/**/*.{h,m,mm,swift}"
|
|
42
|
+
s.source_files = "ios/main/**/*.{h,m,mm,swift,c}"
|
|
43
43
|
else
|
|
44
44
|
s.source_files = "ios/noop/**/*.{h,m,mm,swift}"
|
|
45
45
|
puts "Stallion is disabled, falling back to noop version. Check your stallion.config.js file"
|
|
@@ -48,6 +48,8 @@ Pod::Spec.new do |s|
|
|
|
48
48
|
s.dependency "React-Core"
|
|
49
49
|
if isStallionEnabled then
|
|
50
50
|
s.dependency "ZIPFoundation"
|
|
51
|
+
# Link libbz2 for bspatch (bsdiff/bspatch uses bzip2 compression)
|
|
52
|
+
s.libraries = "bz2"
|
|
51
53
|
end
|
|
52
54
|
|
|
53
55
|
if respond_to?(:install_modules_dependencies, true)
|
package/src/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import useStallionModalNoop from './noop/useStallionModal';
|
|
|
8
8
|
import withStallionMain from './main/utils/withStallion';
|
|
9
9
|
import useStallionModalMain from './main/utils/useStallionModal';
|
|
10
10
|
import { stallionEventEmitter } from './main/utils/StallionEventEmitter';
|
|
11
|
+
import { getActiveReleaseHashNative } from './main/utils/StallionNativeUtils';
|
|
11
12
|
export let withStallion;
|
|
12
13
|
export let useStallionModal;
|
|
13
14
|
if (StallionNativeModule !== null && StallionNativeModule !== void 0 && StallionNativeModule.getStallionConfig) {
|
|
@@ -22,4 +23,5 @@ export { sync, restart } from './main/utils/StallionNativeUtils';
|
|
|
22
23
|
export { useStallionUpdate } from './main/utils/useStallionUpdate';
|
|
23
24
|
export const addEventListener = stallionEventEmitter.addEventListener.bind(stallionEventEmitter);
|
|
24
25
|
export const removeEventListener = stallionEventEmitter.removeEventListener.bind(stallionEventEmitter);
|
|
26
|
+
export const ACTIVE_RELEASE_HASH = getActiveReleaseHashNative();
|
|
25
27
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StallionNativeModule","STALLION_DISABLED_ERROR","withStallionNoop","useStallionModalNoop","withStallionMain","useStallionModalMain","stallionEventEmitter","withStallion","useStallionModal","getStallionConfig","console","warn","sync","restart","useStallionUpdate","addEventListener","bind","removeEventListener"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,OAAOA,oBAAoB,IACzBC,uBAAuB,QAClB,wBAAwB;;AAE/B;AACA,OAAOC,gBAAgB,MAAM,qBAAqB;AAClD,OAAOC,oBAAoB,MAAM,yBAAyB;;AAE1D;AACA,OAAOC,gBAAgB,MAAM,2BAA2B;AACxD,OAAOC,oBAAoB,MAAM,+BAA+B;AAGhE,SAASC,oBAAoB,QAAQ,mCAAmC;
|
|
1
|
+
{"version":3,"names":["StallionNativeModule","STALLION_DISABLED_ERROR","withStallionNoop","useStallionModalNoop","withStallionMain","useStallionModalMain","stallionEventEmitter","getActiveReleaseHashNative","withStallion","useStallionModal","getStallionConfig","console","warn","sync","restart","useStallionUpdate","addEventListener","bind","removeEventListener","ACTIVE_RELEASE_HASH"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,OAAOA,oBAAoB,IACzBC,uBAAuB,QAClB,wBAAwB;;AAE/B;AACA,OAAOC,gBAAgB,MAAM,qBAAqB;AAClD,OAAOC,oBAAoB,MAAM,yBAAyB;;AAE1D;AACA,OAAOC,gBAAgB,MAAM,2BAA2B;AACxD,OAAOC,oBAAoB,MAAM,+BAA+B;AAGhE,SAASC,oBAAoB,QAAQ,mCAAmC;AACxE,SAASC,0BAA0B,QAAQ,kCAAkC;AAE7E,OAAO,IAAIC,YAA2B;AACtC,OAAO,IAAIC,gBAAyC;AAEpD,IAAIT,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAEU,iBAAiB,EAAE;EAC3CF,YAAY,GAAGJ,gBAAgB;EAC/BK,gBAAgB,GAAGJ,oBAAoB;AACzC,CAAC,MAAM;EACLM,OAAO,CAACC,IAAI,CAACX,uBAAuB,CAAC;EACrCO,YAAY,GAAGN,gBAAgB;EAC/BO,gBAAgB,GAAGN,oBAAoB;AACzC;AAEA,SAASU,IAAI,EAAEC,OAAO,QAAQ,kCAAkC;AAChE,SAASC,iBAAiB,QAAQ,gCAAgC;AAClE,OAAO,MAAMC,gBAAgB,GAC3BV,oBAAoB,CAACU,gBAAgB,CAACC,IAAI,CAACX,oBAAoB,CAAC;AAClE,OAAO,MAAMY,mBAAmB,GAC9BZ,oBAAoB,CAACY,mBAAmB,CAACD,IAAI,CAACX,oBAAoB,CAAC;AAErE,OAAO,MAAMa,mBAAmB,GAAGZ,0BAA0B,CAAC,CAAC"}
|
|
@@ -36,4 +36,7 @@ export const restart = () => {
|
|
|
36
36
|
var _StallionNativeModule;
|
|
37
37
|
StallionNativeModule === null || StallionNativeModule === void 0 ? void 0 : (_StallionNativeModule = StallionNativeModule.restart) === null || _StallionNativeModule === void 0 ? void 0 : _StallionNativeModule.call(StallionNativeModule);
|
|
38
38
|
};
|
|
39
|
+
export const getActiveReleaseHashNative = () => {
|
|
40
|
+
return (StallionNativeModule === null || StallionNativeModule === void 0 ? void 0 : StallionNativeModule.getActiveReleaseHash()) || null;
|
|
41
|
+
};
|
|
39
42
|
//# sourceMappingURL=StallionNativeUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StallionNativeModule","setSdkTokenNative","updateSdkToken","getStallionMetaNative","Promise","resolve","reject","getStallionMeta","then","metaString","JSON","parse","_","catch","getStallionConfigNative","getStallionConfig","configString","toggleStallionSwitchNative","toggleStallionSwitch","downloadBundleNative","downloadStageBundle","onLaunchNative","onLaunch","sync","popEventsNative","popEvents","acknowledgeEventsNative","acknowledgeEvents","restart","_StallionNativeModule","call"],"sourceRoot":"../../../../src","sources":["main/utils/StallionNativeUtils.ts"],"mappings":"AAAA,OAAOA,oBAAoB,MAAM,4BAA4B;
|
|
1
|
+
{"version":3,"names":["StallionNativeModule","setSdkTokenNative","updateSdkToken","getStallionMetaNative","Promise","resolve","reject","getStallionMeta","then","metaString","JSON","parse","_","catch","getStallionConfigNative","getStallionConfig","configString","toggleStallionSwitchNative","toggleStallionSwitch","downloadBundleNative","downloadStageBundle","onLaunchNative","onLaunch","sync","popEventsNative","popEvents","acknowledgeEventsNative","acknowledgeEvents","restart","_StallionNativeModule","call","getActiveReleaseHashNative","getActiveReleaseHash"],"sourceRoot":"../../../../src","sources":["main/utils/StallionNativeUtils.ts"],"mappings":"AAAA,OAAOA,oBAAoB,MAAM,4BAA4B;AAY7D,OAAO,MAAMC,iBAAqC,GAChDD,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEE,cAAc;AAEtC,OAAO,MAAMC,qBAA6C,GAAGA,CAAA,KAAM;EACjE,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtCN,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEO,eAAe,CAAC,CAAC,CACpCC,IAAI,CAAEC,UAAkB,IAAK;MAC5B,IAAI;QACFJ,OAAO,CAACK,IAAI,CAACC,KAAK,CAACF,UAAU,CAAC,CAAC;MACjC,CAAC,CAAC,OAAOG,CAAC,EAAE;QACVN,MAAM,CAAC,qBAAqB,CAAC;MAC/B;IACF,CAAC,CAAC,CACDO,KAAK,CAAC,MAAM;MACXP,MAAM,CAAC,6BAA6B,CAAC;IACvC,CAAC,CAAC;EACN,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,MAAMQ,uBAAiD,GAAGA,CAAA,KAAM;EACrE,OAAO,IAAIV,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtCN,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEe,iBAAiB,CAAC,CAAC,CACtCP,IAAI,CAAEQ,YAAoB,IAAK;MAC9B,IAAI;QACFX,OAAO,CAACK,IAAI,CAACC,KAAK,CAACK,YAAY,CAAC,CAAC;MACnC,CAAC,CAAC,OAAOJ,CAAC,EAAE;QACVN,MAAM,CAAC,uBAAuB,CAAC;MACjC;IACF,CAAC,CAAC,CACDO,KAAK,CAAC,MAAM;MACXP,MAAM,CAAC,+BAA+B,CAAC;IACzC,CAAC,CAAC;EACN,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,MAAMW,0BAAuD,GAClEjB,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEkB,oBAAoB;AAE5C,OAAO,MAAMC,oBAA2C,GACtDnB,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEoB,mBAAmB;AAE3C,OAAO,MAAMC,cAAqC,GAChDrB,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEsB,QAAQ;AAEhC,OAAO,MAAMC,IAAgB,GAAGvB,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEuB,IAAI;AAE1D,OAAO,MAAMC,eAAsC,GACjDxB,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEyB,SAAS;AAEjC,OAAO,MAAMC,uBAA8D,GACzE1B,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAE2B,iBAAiB;AAEzC,OAAO,MAAMC,OAAO,GAAGA,CAAA,KAAM;EAAA,IAAAC,qBAAA;EAC3B7B,oBAAoB,aAApBA,oBAAoB,wBAAA6B,qBAAA,GAApB7B,oBAAoB,CAAE4B,OAAO,cAAAC,qBAAA,uBAA7BA,qBAAA,CAAAC,IAAA,CAAA9B,oBAAgC,CAAC;AACnC,CAAC;AAED,OAAO,MAAM+B,0BAAuD,GAAGA,CAAA,KAAM;EAC3E,OAAO,CAAA/B,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAEgC,oBAAoB,CAAC,CAAC,KAAI,IAAI;AAC7D,CAAC"}
|
package/types/index.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ export { sync, restart } from './main/utils/StallionNativeUtils';
|
|
|
5
5
|
export { useStallionUpdate } from './main/utils/useStallionUpdate';
|
|
6
6
|
export declare const addEventListener: (listener: (data?: import("./main/state/useStallionEvents").IStallionNativeEventData | undefined) => void) => void;
|
|
7
7
|
export declare const removeEventListener: (listenerToRemove: (data?: import("./main/state/useStallionEvents").IStallionNativeEventData | undefined) => void) => void;
|
|
8
|
+
export declare const ACTIVE_RELEASE_HASH: string | null;
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIvE,eAAO,IAAI,YAAY,EAAE,aAAa,CAAC;AACvC,eAAO,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAWrD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,eAAO,MAAM,gBAAgB,oHACqC,CAAC;AACnE,eAAO,MAAM,mBAAmB,4HACqC,CAAC;AAEtE,eAAO,MAAM,mBAAmB,eAA+B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TDownloadBundleNative, TSetSdkTokenNative, TGetStallionMetaNative, TToggleStallionSwitchNative, TOnLaunchBundleNative, TGetStallionConfigNative } from 'src/types/utils.types';
|
|
1
|
+
import { TDownloadBundleNative, TSetSdkTokenNative, TGetStallionMetaNative, TToggleStallionSwitchNative, TOnLaunchBundleNative, TGetStallionConfigNative, TGetActiveReleaseHashNative } from 'src/types/utils.types';
|
|
2
2
|
export declare const setSdkTokenNative: TSetSdkTokenNative;
|
|
3
3
|
export declare const getStallionMetaNative: TGetStallionMetaNative;
|
|
4
4
|
export declare const getStallionConfigNative: TGetStallionConfigNative;
|
|
@@ -9,4 +9,5 @@ export declare const sync: () => void;
|
|
|
9
9
|
export declare const popEventsNative: () => Promise<string>;
|
|
10
10
|
export declare const acknowledgeEventsNative: (eventIds: string) => Promise<string>;
|
|
11
11
|
export declare const restart: () => void;
|
|
12
|
+
export declare const getActiveReleaseHashNative: TGetActiveReleaseHashNative;
|
|
12
13
|
//# sourceMappingURL=StallionNativeUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StallionNativeUtils.d.ts","sourceRoot":"","sources":["../../../../src/main/utils/StallionNativeUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"StallionNativeUtils.d.ts","sourceRoot":"","sources":["../../../../src/main/utils/StallionNativeUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,EAC5B,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,iBAAiB,EAAE,kBACM,CAAC;AAEvC,eAAO,MAAM,qBAAqB,EAAE,sBAcnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,wBAcrC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,2BACG,CAAC;AAE7C,eAAO,MAAM,oBAAoB,EAAE,qBACQ,CAAC;AAE5C,eAAO,MAAM,cAAc,EAAE,qBACG,CAAC;AAEjC,eAAO,MAAM,IAAI,EAAE,MAAM,IAAiC,CAAC;AAE3D,eAAO,MAAM,eAAe,EAAE,MAAM,OAAO,CAAC,MAAM,CACjB,CAAC;AAElC,eAAO,MAAM,uBAAuB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CACjC,CAAC;AAE1C,eAAO,MAAM,OAAO,YAEnB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,2BAExC,CAAC"}
|
|
@@ -24,6 +24,7 @@ export type TGetStallionConfigNative = () => Promise<IStallionConfigJson>;
|
|
|
24
24
|
export type TToggleStallionSwitchNative = (switchState: SWITCH_STATES) => Promise<string>;
|
|
25
25
|
export type TDownloadBundleNative = (bundleInfo: IBundleInfo) => Promise<string>;
|
|
26
26
|
export type TOnLaunchBundleNative = (stallionInitParams: string) => void;
|
|
27
|
+
export type TGetActiveReleaseHashNative = () => string | null;
|
|
27
28
|
export interface IUseStallionUpdate {
|
|
28
29
|
isRestartRequired: boolean;
|
|
29
30
|
currentlyRunningBundle: IUpdateMeta | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.types.d.ts","sourceRoot":"","sources":["../../../src/types/utils.types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;CAAG;AAEvC,MAAM,MAAM,aAAa,GAAG,CAC1B,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,SAAS,CAAC,EAAE,mBAAmB,KAC5B,KAAK,CAAC,aAAa,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAC7B,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;AAElE,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE1E,MAAM,MAAM,2BAA2B,GAAG,CACxC,WAAW,EAAE,aAAa,KACvB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAAG,CAClC,UAAU,EAAE,WAAW,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAAG,CAAC,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,gBAAgB,EAAE,WAAW,GAAG,IAAI,CAAC;CACtC"}
|
|
1
|
+
{"version":3,"file":"utils.types.d.ts","sourceRoot":"","sources":["../../../src/types/utils.types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;CAAG;AAEvC,MAAM,MAAM,aAAa,GAAG,CAC1B,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,SAAS,CAAC,EAAE,mBAAmB,KAC5B,KAAK,CAAC,aAAa,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAC7B,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;AAElE,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE1E,MAAM,MAAM,2BAA2B,GAAG,CACxC,WAAW,EAAE,aAAa,KACvB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAAG,CAClC,UAAU,EAAE,WAAW,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAAG,CAAC,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzE,MAAM,MAAM,2BAA2B,GAAG,MAAM,MAAM,GAAG,IAAI,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,gBAAgB,EAAE,WAAW,GAAG,IAAI,CAAC;CACtC"}
|