@capgo/capacitor-updater 6.39.0 → 6.40.2
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/CapgoCapacitorUpdater.podspec +1 -1
- package/Package.swift +2 -2
- package/README.md +70 -202
- package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdaterPlugin.java +54 -56
- package/android/src/main/java/ee/forgr/capacitor_updater/CapgoUpdater.java +52 -33
- package/android/src/main/java/ee/forgr/capacitor_updater/CryptoCipher.java +10 -14
- package/android/src/main/java/ee/forgr/capacitor_updater/DeviceIdHelper.java +0 -6
- package/dist/docs.json +112 -684
- package/dist/esm/definitions.d.ts +23 -352
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/history.js +2 -2
- package/dist/esm/history.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +3 -2
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +4 -4
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/CapacitorUpdaterPlugin/CapacitorUpdaterPlugin.swift +2 -2
- package/ios/Sources/CapacitorUpdaterPlugin/CapgoUpdater.swift +151 -107
- package/ios/Sources/CapacitorUpdaterPlugin/CryptoCipher.swift +34 -23
- package/package.json +6 -5
|
@@ -45,7 +45,8 @@ public struct CryptoCipher {
|
|
|
45
45
|
if isHexString(checksum) {
|
|
46
46
|
// Hex encoded (new format from CLI for plugin versions >= 5.30.0, 6.30.0, 7.30.0)
|
|
47
47
|
guard let hexData = hexStringToData(checksum) else {
|
|
48
|
-
logger.error("Cannot decode checksum as hex
|
|
48
|
+
logger.error("Cannot decode checksum as hex")
|
|
49
|
+
logger.debug("Checksum value: \(checksum)")
|
|
49
50
|
throw CustomError.cannotDecode
|
|
50
51
|
}
|
|
51
52
|
checksumBytes = hexData
|
|
@@ -54,7 +55,8 @@ public struct CryptoCipher {
|
|
|
54
55
|
// TODO: remove backwards compatibility
|
|
55
56
|
// Base64 encoded (old format for backwards compatibility)
|
|
56
57
|
guard let base64Data = Data(base64Encoded: checksum) else {
|
|
57
|
-
logger.error("Cannot decode checksum as base64
|
|
58
|
+
logger.error("Cannot decode checksum as base64")
|
|
59
|
+
logger.debug("Checksum value: \(checksum)")
|
|
58
60
|
throw CustomError.cannotDecode
|
|
59
61
|
}
|
|
60
62
|
checksumBytes = base64Data
|
|
@@ -86,15 +88,17 @@ public struct CryptoCipher {
|
|
|
86
88
|
detectedAlgorithm = "SHA-256"
|
|
87
89
|
} else if decryptedChecksum.count == 4 {
|
|
88
90
|
detectedAlgorithm = "CRC32 (deprecated)"
|
|
89
|
-
logger.error("CRC32 checksum detected
|
|
91
|
+
logger.error("CRC32 checksum detected - deprecated algorithm")
|
|
90
92
|
} else {
|
|
91
93
|
detectedAlgorithm = "unknown (\(decryptedChecksum.count) bytes)"
|
|
92
|
-
logger.error("Unknown checksum algorithm detected
|
|
94
|
+
logger.error("Unknown checksum algorithm detected")
|
|
95
|
+
logger.debug("Byte count: \(decryptedChecksum.count), Expected: 32 (SHA-256)")
|
|
93
96
|
}
|
|
94
97
|
logger.debug("Decrypted checksum: \(detectedAlgorithm) hex format (length: \(result.count) chars, \(decryptedChecksum.count) bytes)")
|
|
95
98
|
return result
|
|
96
99
|
} catch {
|
|
97
|
-
logger.error("
|
|
100
|
+
logger.error("Checksum decryption failed")
|
|
101
|
+
logger.debug("Error: \(error.localizedDescription)")
|
|
98
102
|
throw CustomError.cannotDecode
|
|
99
103
|
}
|
|
100
104
|
}
|
|
@@ -121,9 +125,10 @@ public struct CryptoCipher {
|
|
|
121
125
|
let algorithm = detectChecksumAlgorithm(hexChecksum)
|
|
122
126
|
logger.debug("\(label): \(algorithm) hex format (length: \(hexChecksum.count) chars)")
|
|
123
127
|
if algorithm.contains("CRC32") {
|
|
124
|
-
logger.error("CRC32 checksum detected
|
|
128
|
+
logger.error("CRC32 checksum detected - deprecated algorithm")
|
|
125
129
|
} else if algorithm.contains("unknown") {
|
|
126
|
-
logger.error("Unknown checksum algorithm detected
|
|
130
|
+
logger.error("Unknown checksum algorithm detected")
|
|
131
|
+
logger.debug("Char count: \(hexChecksum.count), Expected: 64 (SHA-256)")
|
|
127
132
|
}
|
|
128
133
|
}
|
|
129
134
|
|
|
@@ -136,7 +141,8 @@ public struct CryptoCipher {
|
|
|
136
141
|
do {
|
|
137
142
|
fileHandle = try FileHandle(forReadingFrom: filePath)
|
|
138
143
|
} catch {
|
|
139
|
-
logger.error("Cannot open file for checksum
|
|
144
|
+
logger.error("Cannot open file for checksum calculation")
|
|
145
|
+
logger.debug("Path: \(filePath.path), Error: \(error)")
|
|
140
146
|
return ""
|
|
141
147
|
}
|
|
142
148
|
|
|
@@ -144,20 +150,18 @@ public struct CryptoCipher {
|
|
|
144
150
|
do {
|
|
145
151
|
try fileHandle.close()
|
|
146
152
|
} catch {
|
|
147
|
-
logger.error("Error closing file
|
|
153
|
+
logger.error("Error closing file during checksum")
|
|
154
|
+
logger.debug("Error: \(error)")
|
|
148
155
|
}
|
|
149
156
|
}
|
|
150
157
|
|
|
151
158
|
while autoreleasepool(invoking: {
|
|
152
159
|
let fileData: Data
|
|
153
160
|
do {
|
|
154
|
-
|
|
155
|
-
fileData = try fileHandle.read(upToCount: bufferSize) ?? Data()
|
|
156
|
-
} else {
|
|
157
|
-
fileData = fileHandle.readData(ofLength: bufferSize)
|
|
158
|
-
}
|
|
161
|
+
fileData = try fileHandle.read(upToCount: bufferSize) ?? Data()
|
|
159
162
|
} catch {
|
|
160
|
-
logger.error("Error reading file
|
|
163
|
+
logger.error("Error reading file during checksum")
|
|
164
|
+
logger.debug("Error: \(error)")
|
|
161
165
|
return false
|
|
162
166
|
}
|
|
163
167
|
|
|
@@ -172,7 +176,8 @@ public struct CryptoCipher {
|
|
|
172
176
|
let digest = sha256.finalize()
|
|
173
177
|
return digest.compactMap { String(format: "%02x", $0) }.joined()
|
|
174
178
|
} catch {
|
|
175
|
-
logger.error("Cannot
|
|
179
|
+
logger.error("Cannot calculate checksum")
|
|
180
|
+
logger.debug("Path: \(filePath.path), Error: \(error)")
|
|
176
181
|
return ""
|
|
177
182
|
}
|
|
178
183
|
}
|
|
@@ -199,17 +204,20 @@ public struct CryptoCipher {
|
|
|
199
204
|
let encryptedKeyBase64 = sessionKeyComponents[1]
|
|
200
205
|
|
|
201
206
|
guard let ivData = Data(base64Encoded: ivBase64) else {
|
|
202
|
-
logger.error("Cannot decode sessionKey IV
|
|
207
|
+
logger.error("Cannot decode sessionKey IV")
|
|
208
|
+
logger.debug("IV value: \(ivBase64)")
|
|
203
209
|
throw CustomError.cannotDecode
|
|
204
210
|
}
|
|
205
211
|
|
|
206
212
|
if ivData.count != 16 {
|
|
207
|
-
logger.error("IV data has invalid length
|
|
213
|
+
logger.error("IV data has invalid length")
|
|
214
|
+
logger.debug("Length: \(ivData.count), Expected: 16")
|
|
208
215
|
throw CustomError.cannotDecode
|
|
209
216
|
}
|
|
210
217
|
|
|
211
218
|
guard let sessionKeyDataEncrypted = Data(base64Encoded: encryptedKeyBase64) else {
|
|
212
|
-
logger.error("Cannot decode sessionKey data
|
|
219
|
+
logger.error("Cannot decode sessionKey data")
|
|
220
|
+
logger.debug("Key value: \(encryptedKeyBase64)")
|
|
213
221
|
throw NSError(domain: "Invalid session key data", code: 1, userInfo: nil)
|
|
214
222
|
}
|
|
215
223
|
|
|
@@ -219,7 +227,8 @@ public struct CryptoCipher {
|
|
|
219
227
|
}
|
|
220
228
|
|
|
221
229
|
if sessionKeyDataDecrypted.count != 16 {
|
|
222
|
-
logger.error("Decrypted session key has invalid length
|
|
230
|
+
logger.error("Decrypted session key has invalid length")
|
|
231
|
+
logger.debug("Length: \(sessionKeyDataDecrypted.count), Expected: 16")
|
|
223
232
|
throw NSError(domain: "Invalid decrypted session key", code: 5, userInfo: nil)
|
|
224
233
|
}
|
|
225
234
|
|
|
@@ -229,7 +238,8 @@ public struct CryptoCipher {
|
|
|
229
238
|
do {
|
|
230
239
|
encryptedData = try Data(contentsOf: filePath)
|
|
231
240
|
} catch {
|
|
232
|
-
logger.error("Failed to read encrypted data
|
|
241
|
+
logger.error("Failed to read encrypted data")
|
|
242
|
+
logger.debug("Error: \(error)")
|
|
233
243
|
throw NSError(domain: "Failed to read encrypted data", code: 3, userInfo: nil)
|
|
234
244
|
}
|
|
235
245
|
|
|
@@ -255,12 +265,13 @@ public struct CryptoCipher {
|
|
|
255
265
|
throw NSError(domain: "File write failed", code: 8, userInfo: nil)
|
|
256
266
|
}
|
|
257
267
|
} catch {
|
|
258
|
-
logger.error("Error writing decrypted file
|
|
268
|
+
logger.error("Error writing decrypted file")
|
|
269
|
+
logger.debug("Error: \(error)")
|
|
259
270
|
throw error
|
|
260
271
|
}
|
|
261
272
|
|
|
262
273
|
} catch {
|
|
263
|
-
logger.error("
|
|
274
|
+
logger.error("File decryption failed")
|
|
264
275
|
throw CustomError.cannotDecode
|
|
265
276
|
}
|
|
266
277
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capgo/capacitor-updater",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.40.2",
|
|
4
4
|
"license": "MPL-2.0",
|
|
5
5
|
"description": "Live update for capacitor apps",
|
|
6
6
|
"main": "dist/plugin.cjs.js",
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"bugs": {
|
|
25
25
|
"url": "https://github.com/Cap-go/capacitor-updater/issues"
|
|
26
26
|
},
|
|
27
|
+
"homepage": "https://capgo.app/docs/plugins/updater/",
|
|
27
28
|
"keywords": [
|
|
28
29
|
"capacitor",
|
|
29
30
|
"live updates",
|
|
@@ -36,8 +37,7 @@
|
|
|
36
37
|
"OTA",
|
|
37
38
|
"ionic",
|
|
38
39
|
"appflow alternative",
|
|
39
|
-
"
|
|
40
|
-
"@capawesome/capacitor-live-update",
|
|
40
|
+
"microsoft alternative",
|
|
41
41
|
"native"
|
|
42
42
|
],
|
|
43
43
|
"scripts": {
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
|
|
52
52
|
"fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
|
|
53
53
|
"eslint": "eslint . --ext .ts",
|
|
54
|
-
"prettier": "prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java",
|
|
54
|
+
"prettier": "prettier-pretty-check \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java",
|
|
55
55
|
"swiftlint": "node-swiftlint",
|
|
56
56
|
"docgen": "node scripts/generate-docs.js",
|
|
57
57
|
"build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs",
|
|
@@ -77,7 +77,8 @@
|
|
|
77
77
|
"rimraf": "^6.0.1",
|
|
78
78
|
"rollup": "^4.50.0",
|
|
79
79
|
"swiftlint": "^2.0.0",
|
|
80
|
-
"typescript": "^5.9.2"
|
|
80
|
+
"typescript": "^5.9.2",
|
|
81
|
+
"prettier-pretty-check": "^0.2.0"
|
|
81
82
|
},
|
|
82
83
|
"peerDependencies": {
|
|
83
84
|
"@capacitor/core": "^6.0.0"
|