@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.
Files changed (36) hide show
  1. package/Package.swift +5 -2
  2. package/README.md +643 -115
  3. package/android/build.gradle +3 -3
  4. package/android/src/main/java/ee/forgr/capacitor_updater/AndroidAppExitReporter.java +92 -0
  5. package/android/src/main/java/ee/forgr/capacitor_updater/CapacitorUpdaterPlugin.java +3121 -353
  6. package/android/src/main/java/ee/forgr/capacitor_updater/CapgoUpdater.java +924 -290
  7. package/android/src/main/java/ee/forgr/capacitor_updater/DelayUpdateUtils.java +49 -13
  8. package/android/src/main/java/ee/forgr/capacitor_updater/DeviceIdHelper.java +45 -30
  9. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadService.java +75 -32
  10. package/android/src/main/java/ee/forgr/capacitor_updater/DownloadWorkerManager.java +2 -0
  11. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeDetector.java +3 -3
  12. package/android/src/main/java/ee/forgr/capacitor_updater/ShakeMenu.java +401 -27
  13. package/android/src/main/java/ee/forgr/capacitor_updater/ThreeFingerPinchDetector.java +323 -0
  14. package/dist/docs.json +1590 -196
  15. package/dist/esm/definitions.d.ts +755 -66
  16. package/dist/esm/definitions.js.map +1 -1
  17. package/dist/esm/web.d.ts +11 -2
  18. package/dist/esm/web.js +59 -5
  19. package/dist/esm/web.js.map +1 -1
  20. package/dist/plugin.cjs.js +59 -5
  21. package/dist/plugin.cjs.js.map +1 -1
  22. package/dist/plugin.js +59 -5
  23. package/dist/plugin.js.map +1 -1
  24. package/ios/Sources/CapacitorUpdaterPlugin/AES.swift +0 -1
  25. package/ios/Sources/CapacitorUpdaterPlugin/AppHealthTracker.swift +82 -0
  26. package/ios/Sources/CapacitorUpdaterPlugin/BigInt.swift +0 -16
  27. package/ios/Sources/CapacitorUpdaterPlugin/BundleInfo.swift +2 -2
  28. package/ios/Sources/CapacitorUpdaterPlugin/BundleStatus.swift +78 -2
  29. package/ios/Sources/CapacitorUpdaterPlugin/CapacitorUpdaterPlugin.swift +2732 -417
  30. package/ios/Sources/CapacitorUpdaterPlugin/CapgoUpdater.swift +1191 -363
  31. package/ios/Sources/CapacitorUpdaterPlugin/CryptoCipher.swift +0 -1
  32. package/ios/Sources/CapacitorUpdaterPlugin/DelayUpdateUtils.swift +37 -16
  33. package/ios/Sources/CapacitorUpdaterPlugin/InternalUtils.swift +80 -1
  34. package/ios/Sources/CapacitorUpdaterPlugin/ShakeMenu.swift +438 -39
  35. package/ios/Sources/CapacitorUpdaterPlugin/WebViewStatsReporter.swift +276 -0
  36. package/package.json +24 -9
@@ -6,7 +6,6 @@
6
6
 
7
7
  import Foundation
8
8
  import CryptoKit
9
- import BigInt
10
9
 
11
10
  public struct CryptoCipher {
12
11
  private static var logger: Logger!
@@ -97,25 +97,17 @@ public class DelayUpdateUtils {
97
97
 
98
98
  case "date":
99
99
  if let value = value, !value.isEmpty {
100
- do {
101
- let dateFormatter = ISO8601DateFormatter()
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.error("Date delay (value: \(value)) condition removed due to parsing issue at index \(index)")
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
- } catch {
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): \(error)")
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: String?
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