@capgo/capacitor-updater 7.43.3 → 7.50.1
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/Package.swift +5 -2
- package/README.md +643 -115
- package/android/build.gradle +3 -3
- package/android/src/main/java/ee/forgr/capacitor_updater/AndroidAppExitReporter.java +92 -0
- package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdaterPlugin.java +3121 -353
- package/android/src/main/java/ee/forgr/capacitor_updater/CapgoUpdater.java +924 -290
- package/android/src/main/java/ee/forgr/capacitor_updater/DelayUpdateUtils.java +49 -13
- package/android/src/main/java/ee/forgr/capacitor_updater/DeviceIdHelper.java +45 -30
- package/android/src/main/java/ee/forgr/capacitor_updater/DownloadService.java +75 -32
- package/android/src/main/java/ee/forgr/capacitor_updater/DownloadWorkerManager.java +2 -0
- package/android/src/main/java/ee/forgr/capacitor_updater/ShakeDetector.java +3 -3
- package/android/src/main/java/ee/forgr/capacitor_updater/ShakeMenu.java +401 -27
- package/android/src/main/java/ee/forgr/capacitor_updater/ThreeFingerPinchDetector.java +323 -0
- package/dist/docs.json +1590 -196
- package/dist/esm/definitions.d.ts +755 -66
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +11 -2
- package/dist/esm/web.js +59 -5
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +59 -5
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +59 -5
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/CapacitorUpdaterPlugin/AES.swift +0 -1
- package/ios/Sources/CapacitorUpdaterPlugin/AppHealthTracker.swift +82 -0
- package/ios/Sources/CapacitorUpdaterPlugin/BigInt.swift +0 -16
- package/ios/Sources/CapacitorUpdaterPlugin/BundleInfo.swift +2 -2
- package/ios/Sources/CapacitorUpdaterPlugin/BundleStatus.swift +78 -2
- package/ios/Sources/CapacitorUpdaterPlugin/CapacitorUpdaterPlugin.swift +2732 -417
- package/ios/Sources/CapacitorUpdaterPlugin/CapgoUpdater.swift +1191 -363
- package/ios/Sources/CapacitorUpdaterPlugin/CryptoCipher.swift +0 -1
- package/ios/Sources/CapacitorUpdaterPlugin/DelayUpdateUtils.swift +37 -16
- package/ios/Sources/CapacitorUpdaterPlugin/InternalUtils.swift +80 -1
- package/ios/Sources/CapacitorUpdaterPlugin/ShakeMenu.swift +438 -39
- package/ios/Sources/CapacitorUpdaterPlugin/WebViewStatsReporter.swift +276 -0
- package/package.json +24 -9
|
@@ -97,25 +97,17 @@ public class DelayUpdateUtils {
|
|
|
97
97
|
|
|
98
98
|
case "date":
|
|
99
99
|
if let value = value, !value.isEmpty {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
dateFormatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
|
|
103
|
-
|
|
104
|
-
if let date = dateFormatter.date(from: value) {
|
|
105
|
-
if Date() > date {
|
|
106
|
-
// swiftlint:disable:next line_length
|
|
107
|
-
logger.info("Date delay (value: \(value)) condition removed due to expired date at index \(index)")
|
|
108
|
-
} else {
|
|
109
|
-
delayConditionListToKeep.append(condition)
|
|
110
|
-
logger.info("Date delay (value: \(value)) kept at index \(index)")
|
|
111
|
-
}
|
|
112
|
-
} else {
|
|
100
|
+
if let date = parseDateCondition(value) {
|
|
101
|
+
if Date() > date {
|
|
113
102
|
// swiftlint:disable:next line_length
|
|
114
|
-
logger.
|
|
103
|
+
logger.info("Date delay (value: \(value)) condition removed due to expired date at index \(index)")
|
|
104
|
+
} else {
|
|
105
|
+
delayConditionListToKeep.append(condition)
|
|
106
|
+
logger.info("Date delay (value: \(value)) kept at index \(index)")
|
|
115
107
|
}
|
|
116
|
-
}
|
|
108
|
+
} else {
|
|
117
109
|
// swiftlint:disable:next line_length
|
|
118
|
-
logger.error("Date delay (value: \(value)) condition removed due to parsing issue at index \(index)
|
|
110
|
+
logger.error("Date delay (value: \(value)) condition removed due to parsing issue at index \(index)")
|
|
119
111
|
}
|
|
120
112
|
} else {
|
|
121
113
|
// swiftlint:disable:next line_length
|
|
@@ -216,6 +208,35 @@ public class DelayUpdateUtils {
|
|
|
216
208
|
|
|
217
209
|
// MARK: - Helper methods
|
|
218
210
|
|
|
211
|
+
private func parseDateCondition(_ value: String) -> Date? {
|
|
212
|
+
let withFractionalSeconds = ISO8601DateFormatter()
|
|
213
|
+
withFractionalSeconds.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
|
|
214
|
+
if let date = withFractionalSeconds.date(from: value) {
|
|
215
|
+
return date
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
let withoutFractionalSeconds = ISO8601DateFormatter()
|
|
219
|
+
withoutFractionalSeconds.formatOptions = [.withInternetDateTime]
|
|
220
|
+
if let date = withoutFractionalSeconds.date(from: value) {
|
|
221
|
+
return date
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Legacy fallback for strings without timezone.
|
|
225
|
+
for format in ["yyyy-MM-dd'T'HH:mm:ss.SSS", "yyyy-MM-dd'T'HH:mm:ss"] {
|
|
226
|
+
let formatter = DateFormatter()
|
|
227
|
+
formatter.locale = Locale(identifier: "en_US_POSIX")
|
|
228
|
+
formatter.calendar = Calendar(identifier: .gregorian)
|
|
229
|
+
formatter.timeZone = .current
|
|
230
|
+
formatter.isLenient = false
|
|
231
|
+
formatter.dateFormat = format
|
|
232
|
+
if let date = formatter.date(from: value) {
|
|
233
|
+
return date
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return nil
|
|
238
|
+
}
|
|
239
|
+
|
|
219
240
|
private func toJson(object: Any) -> String {
|
|
220
241
|
guard let data = try? JSONSerialization.data(withJSONObject: object, options: []) else {
|
|
221
242
|
return ""
|
|
@@ -70,7 +70,7 @@ extension GetChannel {
|
|
|
70
70
|
}
|
|
71
71
|
// swiftlint:disable identifier_name
|
|
72
72
|
struct ChannelInfo: Codable {
|
|
73
|
-
let id:
|
|
73
|
+
let id: Int
|
|
74
74
|
let name: String?
|
|
75
75
|
let `public`: Bool?
|
|
76
76
|
let allow_self_set: Bool?
|
|
@@ -129,10 +129,61 @@ struct InfoObject: Codable {
|
|
|
129
129
|
let plugin_version: String?
|
|
130
130
|
let is_emulator: Bool?
|
|
131
131
|
let is_prod: Bool?
|
|
132
|
+
let installSource: String?
|
|
132
133
|
var action: String?
|
|
133
134
|
var channel: String?
|
|
134
135
|
var defaultChannel: String?
|
|
135
136
|
var key_id: String?
|
|
137
|
+
|
|
138
|
+
enum CodingKeys: String, CodingKey {
|
|
139
|
+
case platform
|
|
140
|
+
case device_id
|
|
141
|
+
case app_id
|
|
142
|
+
case custom_id
|
|
143
|
+
case version_build
|
|
144
|
+
case version_code
|
|
145
|
+
case version_os
|
|
146
|
+
case version_name
|
|
147
|
+
case old_version_name
|
|
148
|
+
case plugin_version
|
|
149
|
+
case is_emulator
|
|
150
|
+
case is_prod
|
|
151
|
+
case installSource = "install_source"
|
|
152
|
+
case action
|
|
153
|
+
case channel
|
|
154
|
+
case defaultChannel
|
|
155
|
+
case key_id
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
extension InfoObject {
|
|
160
|
+
func toParameters() -> [String: Any] {
|
|
161
|
+
var parameters: [String: Any] = [:]
|
|
162
|
+
func set(_ key: String, _ value: Any?) {
|
|
163
|
+
guard let value = value else {
|
|
164
|
+
return
|
|
165
|
+
}
|
|
166
|
+
parameters[key] = value
|
|
167
|
+
}
|
|
168
|
+
set("platform", platform)
|
|
169
|
+
set("device_id", device_id)
|
|
170
|
+
set("app_id", app_id)
|
|
171
|
+
set("custom_id", custom_id)
|
|
172
|
+
set("version_build", version_build)
|
|
173
|
+
set("version_code", version_code)
|
|
174
|
+
set("version_os", version_os)
|
|
175
|
+
set("version_name", version_name)
|
|
176
|
+
set("old_version_name", old_version_name)
|
|
177
|
+
set("plugin_version", plugin_version)
|
|
178
|
+
set("is_emulator", is_emulator)
|
|
179
|
+
set("is_prod", is_prod)
|
|
180
|
+
set("install_source", installSource)
|
|
181
|
+
set("action", action)
|
|
182
|
+
set("channel", channel)
|
|
183
|
+
set("defaultChannel", defaultChannel)
|
|
184
|
+
set("key_id", key_id)
|
|
185
|
+
return parameters
|
|
186
|
+
}
|
|
136
187
|
}
|
|
137
188
|
// swiftlint:enable identifier_name
|
|
138
189
|
|
|
@@ -150,11 +201,35 @@ struct StatsEvent: Codable {
|
|
|
150
201
|
let plugin_version: String?
|
|
151
202
|
let is_emulator: Bool?
|
|
152
203
|
let is_prod: Bool?
|
|
204
|
+
let installSource: String?
|
|
153
205
|
let action: String?
|
|
154
206
|
let channel: String?
|
|
155
207
|
let defaultChannel: String?
|
|
156
208
|
let key_id: String?
|
|
209
|
+
let metadata: [String: String]?
|
|
157
210
|
let timestamp: Int64
|
|
211
|
+
|
|
212
|
+
enum CodingKeys: String, CodingKey {
|
|
213
|
+
case platform
|
|
214
|
+
case device_id
|
|
215
|
+
case app_id
|
|
216
|
+
case custom_id
|
|
217
|
+
case version_build
|
|
218
|
+
case version_code
|
|
219
|
+
case version_os
|
|
220
|
+
case version_name
|
|
221
|
+
case old_version_name
|
|
222
|
+
case plugin_version
|
|
223
|
+
case is_emulator
|
|
224
|
+
case is_prod
|
|
225
|
+
case installSource = "install_source"
|
|
226
|
+
case action
|
|
227
|
+
case channel
|
|
228
|
+
case defaultChannel
|
|
229
|
+
case key_id
|
|
230
|
+
case metadata
|
|
231
|
+
case timestamp
|
|
232
|
+
}
|
|
158
233
|
}
|
|
159
234
|
// swiftlint:enable identifier_name
|
|
160
235
|
|
|
@@ -186,6 +261,7 @@ struct AppVersionDec: Decodable {
|
|
|
186
261
|
let url: String?
|
|
187
262
|
let message: String?
|
|
188
263
|
let error: String?
|
|
264
|
+
let kind: String?
|
|
189
265
|
let session_key: String?
|
|
190
266
|
let major: Bool?
|
|
191
267
|
let breaking: Bool?
|
|
@@ -203,11 +279,14 @@ public class AppVersion: NSObject {
|
|
|
203
279
|
var url: String = ""
|
|
204
280
|
var message: String?
|
|
205
281
|
var error: String?
|
|
282
|
+
var kind: String?
|
|
206
283
|
var sessionKey: String?
|
|
207
284
|
var major: Bool?
|
|
208
285
|
var breaking: Bool?
|
|
209
286
|
var data: [String: String]?
|
|
210
287
|
var manifest: [ManifestEntry]?
|
|
288
|
+
var missing: [String: Any]?
|
|
289
|
+
var downloadSize: [String: Any]?
|
|
211
290
|
var link: String?
|
|
212
291
|
var comment: String?
|
|
213
292
|
var statusCode: Int = 0
|