@reclaimprotocol/inapp-rn-sdk 0.7.3 → 0.8.3

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 (40) hide show
  1. package/InappRnSdk.podspec +1 -1
  2. package/README.md +7 -6
  3. package/android/build.gradle +1 -1
  4. package/android/generated/java/com/reclaimprotocol/inapp_rn_sdk/NativeInappRnSdkSpec.java +4 -0
  5. package/android/generated/jni/RNInappRnSdkSpec-generated.cpp +6 -0
  6. package/android/generated/jni/react/renderer/components/RNInappRnSdkSpec/RNInappRnSdkSpecJSI-generated.cpp +7 -0
  7. package/android/generated/jni/react/renderer/components/RNInappRnSdkSpec/RNInappRnSdkSpecJSI.h +95 -22
  8. package/android/src/main/java/com/reclaimprotocol/inapp_rn_sdk/InappRnSdkModule.kt +44 -9
  9. package/android/src/main/java/com/reclaimprotocol/inapp_rn_sdk/JsonExtension.kt +18 -0
  10. package/ios/InappRnSdk.mm +266 -138
  11. package/ios/generated/RNInappRnSdkSpec/RNInappRnSdkSpec-generated.mm +13 -0
  12. package/ios/generated/RNInappRnSdkSpec/RNInappRnSdkSpec.h +45 -10
  13. package/ios/generated/RNInappRnSdkSpecJSI-generated.cpp +7 -0
  14. package/ios/generated/RNInappRnSdkSpecJSI.h +95 -22
  15. package/ios/inapp_rn_sdk/Api.swift +322 -154
  16. package/lib/commonjs/index.js +36 -1
  17. package/lib/commonjs/index.js.map +1 -1
  18. package/lib/commonjs/specs/NativeInappRnSdk.js.map +1 -1
  19. package/lib/module/index.js +36 -1
  20. package/lib/module/index.js.map +1 -1
  21. package/lib/module/specs/NativeInappRnSdk.js.map +1 -1
  22. package/lib/typescript/commonjs/src/index.d.ts +18 -2
  23. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  24. package/lib/typescript/commonjs/src/specs/NativeInappRnSdk.d.ts +22 -2
  25. package/lib/typescript/commonjs/src/specs/NativeInappRnSdk.d.ts.map +1 -1
  26. package/lib/typescript/commonjs/user-workspace/src/App.d.ts +2 -0
  27. package/lib/typescript/commonjs/user-workspace/src/App.d.ts.map +1 -0
  28. package/lib/typescript/commonjs/user-workspace/src/App.overrides.d.ts +2 -0
  29. package/lib/typescript/commonjs/user-workspace/src/App.overrides.d.ts.map +1 -0
  30. package/lib/typescript/module/src/index.d.ts +18 -2
  31. package/lib/typescript/module/src/index.d.ts.map +1 -1
  32. package/lib/typescript/module/src/specs/NativeInappRnSdk.d.ts +22 -2
  33. package/lib/typescript/module/src/specs/NativeInappRnSdk.d.ts.map +1 -1
  34. package/lib/typescript/module/user-workspace/src/App.d.ts +2 -0
  35. package/lib/typescript/module/user-workspace/src/App.d.ts.map +1 -0
  36. package/lib/typescript/module/user-workspace/src/App.overrides.d.ts +2 -0
  37. package/lib/typescript/module/user-workspace/src/App.overrides.d.ts.map +1 -0
  38. package/package.json +8 -7
  39. package/src/index.ts +59 -3
  40. package/src/specs/NativeInappRnSdk.ts +24 -2
@@ -4,10 +4,10 @@ import ReclaimInAppSdk
4
4
  @objc public func ping() -> Bool {
5
5
  return true
6
6
  }
7
-
7
+
8
8
  @MainActor
9
9
  static fileprivate var replyHandlers: [String: (Result<Bool, any Error>) -> Void] = [:]
10
-
10
+
11
11
  static fileprivate func setReplyCallback(
12
12
  _ callback: @escaping (Result<Bool, any Error>) -> Void
13
13
  ) -> String {
@@ -17,7 +17,7 @@ import ReclaimInAppSdk
17
17
  }
18
18
  return replyId
19
19
  }
20
-
20
+
21
21
  @objc public func reply(replyId: String?, reply: Bool) {
22
22
  if let replyId {
23
23
  Task { @MainActor in
@@ -33,10 +33,10 @@ import ReclaimInAppSdk
33
33
  NSLog("[Api.reply] Missing arg replyId")
34
34
  }
35
35
  }
36
-
36
+
37
37
  @MainActor
38
38
  static fileprivate var replyWithStringHandler: [String: (Result<String, any Error>) -> Void] = [:]
39
-
39
+
40
40
  static fileprivate func setReplyWithStringCallback(
41
41
  _ callback: @escaping (Result<String, any Error>) -> Void
42
42
  ) -> String {
@@ -46,7 +46,7 @@ import ReclaimInAppSdk
46
46
  }
47
47
  return replyId
48
48
  }
49
-
49
+
50
50
  @objc public func replyWithString(replyId: String?, value: String?) {
51
51
  if let replyId {
52
52
  Task { @MainActor in
@@ -55,14 +55,16 @@ import ReclaimInAppSdk
55
55
  Api.replyWithStringHandler.removeValue(forKey: replyId)
56
56
  callback(.success(value ?? ""))
57
57
  } else {
58
- NSLog("[Api.replyWithString] No callback found for replyId \(replyId)")
58
+ NSLog(
59
+ "[Api.replyWithString] No callback found for replyId \(replyId)"
60
+ )
59
61
  }
60
62
  }
61
63
  } else {
62
64
  NSLog("[Api.replyWithString] Missing arg replyId")
63
65
  }
64
66
  }
65
-
67
+
66
68
  @objc public func startVerification(
67
69
  appId: String?,
68
70
  secret: String?,
@@ -72,47 +74,62 @@ import ReclaimInAppSdk
72
74
  sessionSignature: String?,
73
75
  context: String?,
74
76
  parameters: [String: String]?,
75
- acceptAiProviders: Bool,
76
- webhookUrl: String?
77
+ providerVersion: [String: String]?
77
78
  ) async throws -> [String: Any] {
78
79
  var session: ReclaimSessionInformation? = nil
79
- if let sessionTimestamp = sessionTimestamp, let sessionSessionId = sessionSessionId, let sessionSignature = sessionSignature {
80
+ if let sessionTimestamp = sessionTimestamp,
81
+ let sessionSessionId = sessionSessionId,
82
+ let sessionSignature = sessionSignature
83
+ {
80
84
  session = .init(
81
85
  timestamp: sessionTimestamp,
82
86
  sessionId: sessionSessionId,
83
87
  signature: sessionSignature
84
88
  )
85
89
  }
86
- let request: ReclaimVerification.Request = if let appId = appId, let secret = secret, !appId.isEmpty && !secret.isEmpty {
87
- .params(.init(
88
- appId: appId,
89
- secret: secret,
90
- providerId: providerId,
91
- session: session,
92
- context: context ?? "",
93
- parameters: parameters ?? [String:String](),
94
- acceptAiProviders: acceptAiProviders,
95
- webhookUrl: webhookUrl
96
- ))
90
+ let providerVersion = ReclaimVerification.Request.Params.ProviderVersion(
91
+ exactVersion: providerVersion?["resolvedVersion"] ?? "",
92
+ versionExpression: providerVersion?["versionExpression"]
93
+ ?? providerVersion?["resolvedVersion"] ?? ""
94
+ )
95
+ var request: ReclaimVerification.Request? = nil
96
+ if let appId = appId, let secret = secret,
97
+ !appId.isEmpty && !secret.isEmpty
98
+ {
99
+ request = .params(
100
+ .init(
101
+ appId: appId,
102
+ secret: secret,
103
+ providerId: providerId,
104
+ session: session,
105
+ context: context ?? "",
106
+ parameters: parameters ?? [String: String](),
107
+ providerVersion: providerVersion
108
+ )
109
+ )
97
110
  } else {
98
- .params(try .init(
99
- providerId: providerId,
100
- session: session,
101
- context: context ?? "",
102
- parameters: parameters ?? [String:String](),
103
- acceptAiProviders: acceptAiProviders,
104
- webhookUrl: webhookUrl
105
- ))
111
+ request = .params(
112
+ try .init(
113
+ // TODO: Won't work because of a missing params providerVersion in the constructor
114
+ appId: "",
115
+ secret: "",
116
+ providerId: providerId,
117
+ session: session,
118
+ context: context ?? "",
119
+ parameters: parameters ?? [String: String](),
120
+ providerVersion: providerVersion
121
+ )
122
+ )
106
123
  }
107
- return try await startVerificationWithRequest(request)
124
+ return try await startVerificationWithRequest(request!)
108
125
  }
109
-
126
+
110
127
  @objc public func startVerificationFromUrl(
111
128
  url: String
112
129
  ) async throws -> [String: Any] {
113
130
  return try await startVerificationWithRequest(.url(url))
114
131
  }
115
-
132
+
116
133
  @objc public func setOverrides(
117
134
  provider: OverridenProviderInformation?,
118
135
  featureOptions: OverridenFeatureOptions?,
@@ -121,55 +138,64 @@ import ReclaimInAppSdk
121
138
  appInfo: OverridenReclaimAppInfo?,
122
139
  capabilityAccessToken: String?
123
140
  ) async throws {
124
- let providerOverrides: ReclaimOverrides.ProviderInformation? = if let url = provider?.url {
125
- .url(url: url)
141
+ var providerOverrides: ReclaimOverrides.ProviderInformation? = nil
142
+ if let url = provider?.url {
143
+ providerOverrides = .url(url: url)
126
144
  } else if let jsonString = provider?.jsonString {
127
- .jsonString(jsonString: jsonString)
145
+ providerOverrides = .jsonString(jsonString: jsonString)
128
146
  } else if let callback = provider?.callback {
129
- .callback(callbackHandler: callback)
147
+ providerOverrides = .callback(callbackHandler: callback)
130
148
  } else {
131
- nil
149
+ providerOverrides = nil
132
150
  }
133
-
134
- let featureOptionsOverrides: ReclaimOverrides.FeatureOptions? = if let featureOptions {
135
- .init(
151
+
152
+ var featureOptionsOverrides: ReclaimOverrides.FeatureOptions? = nil
153
+ if let featureOptions {
154
+ featureOptionsOverrides = .init(
136
155
  cookiePersist: featureOptions.cookiePersist?.boolValue,
137
156
  singleReclaimRequest: featureOptions.singleReclaimRequest?.boolValue,
138
- idleTimeThresholdForManualVerificationTrigger: featureOptions.idleTimeThresholdForManualVerificationTrigger?.int64Value,
139
- sessionTimeoutForManualVerificationTrigger: featureOptions.sessionTimeoutForManualVerificationTrigger?.int64Value,
157
+ idleTimeThresholdForManualVerificationTrigger: featureOptions
158
+ .idleTimeThresholdForManualVerificationTrigger?.int64Value,
159
+ sessionTimeoutForManualVerificationTrigger: featureOptions
160
+ .sessionTimeoutForManualVerificationTrigger?.int64Value,
140
161
  attestorBrowserRpcUrl: featureOptions.attestorBrowserRpcUrl,
141
- isAIFlowEnabled: featureOptions.isAIFlowEnabled?.boolValue
162
+ isAIFlowEnabled: featureOptions.isAIFlowEnabled?.boolValue,
163
+ manualReviewMessage: featureOptions.manualReviewMessage,
164
+ loginPromptMessage: featureOptions.loginPromptMessage
142
165
  )
143
166
  } else {
144
- nil
167
+ featureOptionsOverrides = nil
145
168
  }
146
-
147
- let logConsumerOverrides: ReclaimOverrides.LogConsumer? = if let logConsumer = logConsumer {
148
- .init(
169
+
170
+ var logConsumerOverrides: ReclaimOverrides.LogConsumer? = nil
171
+ if let logConsumer = logConsumer {
172
+ logConsumerOverrides = .init(
149
173
  logHandler: logConsumer.logHandler,
150
174
  canSdkCollectTelemetry: logConsumer.canSdkCollectTelemetry,
151
175
  canSdkPrintLogs: logConsumer.canSdkPrintLogs?.boolValue
152
176
  )
153
177
  } else {
154
- nil
178
+ logConsumerOverrides = nil
155
179
  }
156
-
157
- let sessionManagementOverrides: ReclaimOverrides.SessionManagement? = if let sessionManagement = sessionManagement {
158
- .init(handler: sessionManagement.handler)
180
+
181
+ var sessionManagementOverrides: ReclaimOverrides.SessionManagement? = nil
182
+ if let sessionManagement = sessionManagement {
183
+ sessionManagementOverrides = .init(handler: sessionManagement.handler)
159
184
  } else {
160
- nil
185
+ sessionManagementOverrides = nil
161
186
  }
162
-
163
- let appInfoOverrides: ReclaimOverrides.ReclaimAppInfo? = if let appInfo {
164
- .init(
187
+
188
+ var appInfoOverrides: ReclaimOverrides.ReclaimAppInfo? = nil
189
+ if let appInfo {
190
+ appInfoOverrides = .init(
165
191
  appName: appInfo.appName,
166
192
  appImageUrl: appInfo.appImageUrl,
167
193
  isRecurring: appInfo.isRecurring?.boolValue ?? false
168
194
  )
169
195
  } else {
170
- nil
196
+ appInfoOverrides = nil
171
197
  }
172
-
198
+
173
199
  return try await ReclaimVerification.setOverrides(
174
200
  provider: providerOverrides,
175
201
  featureOptions: featureOptionsOverrides,
@@ -179,48 +205,85 @@ import ReclaimInAppSdk
179
205
  capabilityAccessToken: capabilityAccessToken
180
206
  )
181
207
  }
182
-
208
+
183
209
  @objc public func clearAllOverrides() async throws {
184
210
  return try await ReclaimVerification.clearAllOverrides()
185
211
  }
186
-
212
+
187
213
  @objc public func setVerificationOptions(
188
214
  options: ReclaimApiVerificationOptions?
189
215
  ) async throws {
190
- return try await ReclaimVerification.setVerificationOptions(options: options?.toSdkOptions())
216
+ return try await ReclaimVerification.setVerificationOptions(
217
+ options: options?.toSdkOptions()
218
+ )
191
219
  }
192
-
193
- func startVerificationWithRequest(_ request: ReclaimVerification.Request) async throws -> [String: Any] {
194
- NSLog("[Api] starting verification");
220
+
221
+ func startVerificationWithRequest(_ request: ReclaimVerification.Request)
222
+ async throws -> [String: Any]
223
+ {
224
+ NSLog("[Api] starting verification")
195
225
  return try await withCheckedThrowingContinuation { continuation in
196
- NSLog("[Api] starting verification going");
226
+ NSLog("[Api] starting verification going")
197
227
  Task { @MainActor in
198
- NSLog("[Api] starting verification doing");
228
+ NSLog("[Api] starting verification doing")
199
229
  do {
200
230
  let result = try await ReclaimVerification.startVerification(request)
201
231
  let map: [String: Any] = [
202
232
  "sessionId": result.sessionId,
203
233
  "didSubmitManualVerification": result.didSubmitManualVerification,
204
- "proofs": result.proofs
234
+ "proofs": result.proofs,
205
235
  ]
206
236
  continuation.resume(returning: map)
207
237
  } catch {
208
- NSLog("[Api] failed verification \(error)");
209
- let apiError: ApiError = if (error is ReclaimVerificationError) {
210
- switch (error as! ReclaimVerificationError) {
211
- case .cancelled(sessionId: let sessionId, didSubmitManualVerification: let didSubmitManualVerification):
212
- .init(errorType: "cancelled", sessionId: sessionId, didSubmitManualVerification: didSubmitManualVerification, reason: nil)
213
- case .dismissed(sessionId: let sessionId, didSubmitManualVerification: let didSubmitManualVerification):
214
- .init(errorType: "dismissed", sessionId: sessionId, didSubmitManualVerification: didSubmitManualVerification, reason: nil)
215
- case .sessionExpired(sessionId: let sessionId, didSubmitManualVerification: let didSubmitManualVerification):
216
- .init(errorType: "sessionExpired", sessionId: sessionId, didSubmitManualVerification: didSubmitManualVerification, reason: nil)
217
- case .failed(sessionId: let sessionId, didSubmitManualVerification: let didSubmitManualVerification, reason: let reason):
218
- .init(errorType: "failed", sessionId: sessionId, didSubmitManualVerification: didSubmitManualVerification, reason: reason)
238
+ NSLog("[Api] failed verification \(error)")
239
+ var apiError: ApiError? = nil
240
+ if error is ReclaimVerificationError {
241
+ switch error as! ReclaimVerificationError {
242
+ case .cancelled(let sessionId, let didSubmitManualVerification):
243
+ apiError = .init(
244
+ errorType: "cancelled",
245
+ sessionId: sessionId,
246
+ didSubmitManualVerification: didSubmitManualVerification,
247
+ reason: nil
248
+ )
249
+ case .dismissed(let sessionId, let didSubmitManualVerification):
250
+ apiError = .init(
251
+ errorType: "dismissed",
252
+ sessionId: sessionId,
253
+ didSubmitManualVerification: didSubmitManualVerification,
254
+ reason: nil
255
+ )
256
+ case .sessionExpired(
257
+ let sessionId,
258
+ let didSubmitManualVerification
259
+ ):
260
+ apiError = .init(
261
+ errorType: "sessionExpired",
262
+ sessionId: sessionId,
263
+ didSubmitManualVerification: didSubmitManualVerification,
264
+ reason: nil
265
+ )
266
+ case .failed(
267
+ let sessionId,
268
+ let didSubmitManualVerification,
269
+ let reason
270
+ ):
271
+ apiError = .init(
272
+ errorType: "failed",
273
+ sessionId: sessionId,
274
+ didSubmitManualVerification: didSubmitManualVerification,
275
+ reason: reason
276
+ )
219
277
  }
220
278
  } else {
221
- ApiError(errorType: "failed", sessionId: request.maybeSessionId ?? "", didSubmitManualVerification: false, reason: "\(error)")
279
+ apiError = ApiError(
280
+ errorType: "failed",
281
+ sessionId: request.maybeSessionId ?? "",
282
+ didSubmitManualVerification: false,
283
+ reason: "\(error)"
284
+ )
222
285
  }
223
- continuation.resume(throwing: apiError)
286
+ continuation.resume(throwing: apiError!)
224
287
  }
225
288
  }
226
289
  }
@@ -232,20 +295,29 @@ import ReclaimInAppSdk
232
295
  @objc public let sessionId: String?
233
296
  @objc public let didSubmitManualVerification: Bool
234
297
  @objc public let reason: String?
235
-
236
- public init(errorType: String, sessionId: String?, didSubmitManualVerification: Bool, reason: String?) {
298
+
299
+ public init(
300
+ errorType: String,
301
+ sessionId: String?,
302
+ didSubmitManualVerification: Bool,
303
+ reason: String?
304
+ ) {
237
305
  self.errorType = errorType
238
306
  self.sessionId = sessionId
239
307
  self.didSubmitManualVerification = didSubmitManualVerification
240
308
  self.reason = reason
241
- super.init(domain: "ApiError", code: 1, userInfo: [
242
- "errorType": errorType,
243
- "sessionId": sessionId ?? "",
244
- "didSubmitManualVerification": didSubmitManualVerification,
245
- "reason": reason ?? ""
246
- ])
309
+ super.init(
310
+ domain: "ApiError",
311
+ code: 1,
312
+ userInfo: [
313
+ "errorType": errorType,
314
+ "sessionId": sessionId ?? "",
315
+ "didSubmitManualVerification": didSubmitManualVerification,
316
+ "reason": reason ?? "",
317
+ ]
318
+ )
247
319
  }
248
-
320
+
249
321
  required init?(coder: NSCoder) {
250
322
  fatalError("init(coder:) has not been implemented")
251
323
  }
@@ -260,13 +332,18 @@ public typealias OverridenProviderCallback = (
260
332
  _ replyId: String
261
333
  ) -> Void
262
334
 
263
- @objc(OverridenProviderCallbackHandler) public class OverridenProviderCallbackHandler: NSObject, ReclaimOverrides.ProviderInformation.CallbackHandler {
335
+ @objc(OverridenProviderCallbackHandler)
336
+ public class OverridenProviderCallbackHandler: NSObject, ReclaimOverrides
337
+ .ProviderInformation.CallbackHandler
338
+ {
264
339
  @objc let _fetchProviderInformation: OverridenProviderCallback
265
-
266
- @objc public init(_fetchProviderInformation: @escaping OverridenProviderCallback) {
340
+
341
+ @objc public init(
342
+ _fetchProviderInformation: @escaping OverridenProviderCallback
343
+ ) {
267
344
  self._fetchProviderInformation = _fetchProviderInformation
268
345
  }
269
-
346
+
270
347
  public func fetchProviderInformation(
271
348
  appId: String,
272
349
  providerId: String,
@@ -276,15 +353,23 @@ public typealias OverridenProviderCallback = (
276
353
  completion: @escaping (Result<String, any Error>) -> Void
277
354
  ) {
278
355
  let replyId = Api.setReplyWithStringCallback(completion)
279
- self._fetchProviderInformation(appId, providerId, sessionId, signature, timestamp, replyId)
356
+ self._fetchProviderInformation(
357
+ appId,
358
+ providerId,
359
+ sessionId,
360
+ signature,
361
+ timestamp,
362
+ replyId
363
+ )
280
364
  }
281
365
  }
282
366
 
283
- @objc(OverridenProviderInformation) public class OverridenProviderInformation: NSObject {
367
+ @objc(OverridenProviderInformation)
368
+ public class OverridenProviderInformation: NSObject {
284
369
  @objc public var url: String?
285
370
  @objc public var jsonString: String?
286
371
  @objc public var callback: OverridenProviderCallbackHandler?
287
-
372
+
288
373
  @objc public init(
289
374
  url: String? = nil,
290
375
  jsonString: String? = nil,
@@ -300,29 +385,37 @@ public typealias OverridenProviderCallback = (
300
385
  // bool
301
386
  @objc public var cookiePersist: NSNumber?
302
387
  // bool
303
- @objc public var singleReclaimRequest: NSNumber?
388
+ @objc public var singleReclaimRequest: NSNumber?
304
389
  // int64 (long)
305
- @objc public var idleTimeThresholdForManualVerificationTrigger: NSNumber?
390
+ @objc public var idleTimeThresholdForManualVerificationTrigger: NSNumber?
306
391
  // int64 (long)
307
- @objc public var sessionTimeoutForManualVerificationTrigger: NSNumber?
308
- @objc public var attestorBrowserRpcUrl: String?
392
+ @objc public var sessionTimeoutForManualVerificationTrigger: NSNumber?
393
+ @objc public var attestorBrowserRpcUrl: String?
309
394
  // bool
310
- @objc public var isAIFlowEnabled: NSNumber?
311
-
395
+ @objc public var isAIFlowEnabled: NSNumber?
396
+ @objc public var manualReviewMessage: String?
397
+ @objc public var loginPromptMessage: String?
398
+
312
399
  @objc public init(
313
400
  cookiePersist: NSNumber? = nil,
314
401
  singleReclaimRequest: NSNumber? = nil,
315
402
  idleTimeThresholdForManualVerificationTrigger: NSNumber? = nil,
316
403
  sessionTimeoutForManualVerificationTrigger: NSNumber? = nil,
317
404
  attestorBrowserRpcUrl: String? = nil,
318
- isAIFlowEnabled: NSNumber? = nil
405
+ isAIFlowEnabled: NSNumber? = nil,
406
+ manualReviewMessage: String? = nil,
407
+ loginPromptMessage: String? = nil
319
408
  ) {
320
409
  self.cookiePersist = cookiePersist
321
410
  self.singleReclaimRequest = singleReclaimRequest
322
- self.idleTimeThresholdForManualVerificationTrigger = idleTimeThresholdForManualVerificationTrigger
323
- self.sessionTimeoutForManualVerificationTrigger = sessionTimeoutForManualVerificationTrigger
411
+ self.idleTimeThresholdForManualVerificationTrigger =
412
+ idleTimeThresholdForManualVerificationTrigger
413
+ self.sessionTimeoutForManualVerificationTrigger =
414
+ sessionTimeoutForManualVerificationTrigger
324
415
  self.attestorBrowserRpcUrl = attestorBrowserRpcUrl
325
416
  self.isAIFlowEnabled = isAIFlowEnabled
417
+ self.manualReviewMessage = manualReviewMessage
418
+ self.loginPromptMessage = loginPromptMessage
326
419
  }
327
420
  }
328
421
 
@@ -330,7 +423,7 @@ public typealias OverridenProviderCallback = (
330
423
  @objc public let appName: String
331
424
  @objc public let appImageUrl: String
332
425
  @objc public let isRecurring: NSNumber?
333
-
426
+
334
427
  @objc public init(
335
428
  appName: String,
336
429
  appImageUrl: String,
@@ -357,7 +450,7 @@ public typealias OverridenProviderCallback = (
357
450
  * Type: Bool.
358
451
  */
359
452
  @objc public let canSdkPrintLogs: NSNumber?
360
-
453
+
361
454
  @objc public init(
362
455
  logHandler: OverridenLogHandler? = nil,
363
456
  canSdkCollectTelemetry: Bool = true,
@@ -369,13 +462,16 @@ public typealias OverridenProviderCallback = (
369
462
  }
370
463
  }
371
464
 
372
- @objc(OverridenLogHandler) public class OverridenLogHandler: NSObject, ReclaimOverrides.LogConsumer.LogHandler {
465
+ @objc(OverridenLogHandler)
466
+ public class OverridenLogHandler: NSObject, ReclaimOverrides.LogConsumer
467
+ .LogHandler
468
+ {
373
469
  @objc let _onLogs: (String) -> Void
374
-
470
+
375
471
  @objc public init(onLogs: @escaping (String) -> Void) {
376
472
  self._onLogs = onLogs
377
473
  }
378
-
474
+
379
475
  @objc public func onLogs(logJsonString: String) {
380
476
  self._onLogs(logJsonString)
381
477
  }
@@ -386,6 +482,7 @@ public typealias OverridenCreateSessionCallback = (
386
482
  _ providerId: String,
387
483
  _ timestamp: String,
388
484
  _ signature: String,
485
+ _ providerVersion: String,
389
486
  _ replyId: String
390
487
  ) -> Void
391
488
  public typealias OverridenUpdateSessionCallback = (
@@ -401,18 +498,22 @@ public typealias OverridenLogSessionCallback = (
401
498
  _ logType: String
402
499
  ) -> Void
403
500
 
404
- @objc(OverridenSessionManagement) public class OverridenSessionManagement: NSObject {
501
+ @objc(OverridenSessionManagement)
502
+ public class OverridenSessionManagement: NSObject {
405
503
  @objc public let handler: OverridenSessionHandler
406
-
504
+
407
505
  @objc public init(handler: OverridenSessionHandler) {
408
506
  self.handler = handler
409
507
  }
410
-
411
- @objc(OverridenSessionHandler) public class OverridenSessionHandler: NSObject, ReclaimOverrides.SessionManagement.SessionHandler {
508
+
509
+ @objc(OverridenSessionHandler)
510
+ public class OverridenSessionHandler: NSObject, ReclaimOverrides
511
+ .SessionManagement.SessionHandler
512
+ {
412
513
  @objc let _createSession: OverridenCreateSessionCallback
413
514
  @objc let _updateSession: OverridenUpdateSessionCallback
414
515
  @objc let _logSession: OverridenLogSessionCallback
415
-
516
+
416
517
  @objc public init(
417
518
  _createSession: @escaping OverridenCreateSessionCallback,
418
519
  _updateSession: @escaping OverridenUpdateSessionCallback,
@@ -422,44 +523,94 @@ public typealias OverridenLogSessionCallback = (
422
523
  self._updateSession = _updateSession
423
524
  self._logSession = _logSession
424
525
  }
425
- public func createSession(appId: String, providerId: String, timestamp: String, signature: String, completion: @escaping (Result<String, any Error>) -> Void) {
426
- let replyId = Api.setReplyWithStringCallback(completion)
427
- self._createSession(appId, providerId, timestamp, signature, replyId)
526
+
527
+ public func createSession(
528
+ appId: String,
529
+ providerId: String,
530
+ timestamp: String,
531
+ signature: String,
532
+ providerVersion: String,
533
+ completion: @escaping (
534
+ Result<
535
+ ReclaimInAppSdk.ReclaimOverrides.SessionManagement.InitResponse,
536
+ any Error
537
+ >
538
+ ) -> Void
539
+ ) {
540
+ let replyId = Api.setReplyWithStringCallback({ value in
541
+ func process(value: String) {
542
+ let data = JSONUtility.fromString(value)
543
+ if let data = data as? [AnyHashable?: Any?] {
544
+ completion(
545
+ .success(
546
+ ReclaimOverrides.SessionManagement.InitResponse(
547
+ sessionId: data["sessionId"] as? String ?? "",
548
+ resolvedProviderVersion: data["resolvedProviderVersion"]
549
+ as? String ?? ""
550
+ )
551
+ )
552
+ )
553
+ } else {
554
+ print(
555
+ "Error parsing session init response as Map. Type was: \(type(of: data)), data was: \(String(describing: data))"
556
+ )
557
+ completion(
558
+ .success(
559
+ ReclaimOverrides.SessionManagement.InitResponse(
560
+ sessionId: "-",
561
+ resolvedProviderVersion: ""
562
+ )
563
+ )
564
+ )
565
+ }
566
+ }
567
+ })
568
+ self._createSession(
569
+ appId,
570
+ providerId,
571
+ timestamp,
572
+ signature,
573
+ providerVersion,
574
+ replyId
575
+ )
428
576
  }
429
-
577
+
430
578
  public func updateSession(
431
- sessionId: String, status: ReclaimInAppSdk.ReclaimOverrides.SessionManagement.SessionStatus, completion: @escaping (Result<Bool, any Error>) -> Void
579
+ sessionId: String,
580
+ status: ReclaimInAppSdk.ReclaimOverrides.SessionManagement.SessionStatus,
581
+ completion: @escaping (Result<Bool, any Error>) -> Void
432
582
  ) {
433
- let statusString = switch (status) {
583
+ var statusString: String? = nil
584
+ switch status {
434
585
  case .USER_STARTED_VERIFICATION:
435
- "USER_STARTED_VERIFICATION"
586
+ statusString = "USER_STARTED_VERIFICATION"
436
587
  case .USER_INIT_VERIFICATION:
437
- "USER_INIT_VERIFICATION"
588
+ statusString = "USER_INIT_VERIFICATION"
438
589
  case .PROOF_GENERATION_STARTED:
439
- "PROOF_GENERATION_STARTED"
590
+ statusString = "PROOF_GENERATION_STARTED"
440
591
  case .PROOF_GENERATION_RETRY:
441
- "PROOF_GENERATION_RETRY"
592
+ statusString = "PROOF_GENERATION_RETRY"
442
593
  case .PROOF_GENERATION_SUCCESS:
443
- "PROOF_GENERATION_SUCCESS"
594
+ statusString = "PROOF_GENERATION_SUCCESS"
444
595
  case .PROOF_GENERATION_FAILED:
445
- "PROOF_GENERATION_FAILED"
596
+ statusString = "PROOF_GENERATION_FAILED"
446
597
  case .PROOF_SUBMITTED:
447
- "PROOF_SUBMITTED"
598
+ statusString = "PROOF_SUBMITTED"
448
599
  case .PROOF_SUBMISSION_FAILED:
449
- "PROOF_SUBMISSION_FAILED"
600
+ statusString = "PROOF_SUBMISSION_FAILED"
450
601
  case .PROOF_MANUAL_VERIFICATION_SUBMITTED:
451
- "PROOF_MANUAL_VERIFICATION_SUBMITTED"
602
+ statusString = "PROOF_MANUAL_VERIFICATION_SUBMITTED"
452
603
  }
453
604
  let replyId = Api.setReplyCallback(completion)
454
- self._updateSession(sessionId, statusString, replyId)
605
+ self._updateSession(sessionId, statusString!, replyId)
455
606
  }
456
-
607
+
457
608
  public func logSession(
458
609
  appId: String,
459
610
  providerId: String,
460
611
  sessionId: String,
461
612
  logType: String,
462
- metadata: [String : (any Sendable)?]?
613
+ metadata: [String: (any Sendable)?]?
463
614
  ) {
464
615
  self._logSession(appId, providerId, sessionId, logType)
465
616
  }
@@ -471,22 +622,25 @@ public typealias ReclaimVerificationOptionFetchAttestorAuthRequestHandler = (
471
622
  _ replyId: String
472
623
  ) -> Void
473
624
 
474
- @objc(ReclaimApiVerificationOptions) public class ReclaimApiVerificationOptions: NSObject {
625
+ @objc(ReclaimApiVerificationOptions)
626
+ public class ReclaimApiVerificationOptions: NSObject {
475
627
  public let canDeleteCookiesBeforeVerificationStarts: Bool
476
- public let attestorAuthRequestProvider: ReclaimVerification.VerificationOptions.AttestorAuthRequestProvider?
628
+ public let attestorAuthRequestProvider:
629
+ ReclaimVerification.VerificationOptions.AttestorAuthRequestProvider?
477
630
  public let claimCreationType: String?
478
631
  public let canAutoSubmit: Bool
479
632
  public let isCloseButtonVisible: Bool
480
-
481
-
633
+
482
634
  @objc public init(
483
635
  canDeleteCookiesBeforeVerificationStarts: Bool,
484
- fetchAttestorAuthenticationRequest: ReclaimVerificationOptionFetchAttestorAuthRequestHandler?,
636
+ fetchAttestorAuthenticationRequest:
637
+ ReclaimVerificationOptionFetchAttestorAuthRequestHandler?,
485
638
  claimCreationType: String?,
486
639
  canAutoSubmit: Bool,
487
640
  isCloseButtonVisible: Bool
488
641
  ) {
489
- self.canDeleteCookiesBeforeVerificationStarts = canDeleteCookiesBeforeVerificationStarts
642
+ self.canDeleteCookiesBeforeVerificationStarts =
643
+ canDeleteCookiesBeforeVerificationStarts
490
644
  if let fetchAttestorAuthenticationRequest {
491
645
  self.attestorAuthRequestProvider = _AttestorAuthRequestProvider(
492
646
  fetchAttestorAuthenticationRequest: fetchAttestorAuthenticationRequest
@@ -498,34 +652,48 @@ public typealias ReclaimVerificationOptionFetchAttestorAuthRequestHandler = (
498
652
  self.canAutoSubmit = canAutoSubmit
499
653
  self.isCloseButtonVisible = isCloseButtonVisible
500
654
  }
501
-
502
- func claimCreationTypeApi() -> ReclaimVerification.VerificationOptions.ClaimCreationType {
503
- switch (claimCreationType) {
504
- case "meChain": return .meChain
505
- case _: return .standalone
655
+
656
+ func claimCreationTypeApi()
657
+ -> ReclaimVerification.VerificationOptions.ClaimCreationType
658
+ {
659
+ switch claimCreationType {
660
+ case "meChain": return .meChain
661
+ case _: return .standalone
506
662
  }
507
663
  }
508
-
664
+
509
665
  func toSdkOptions() -> ReclaimVerification.VerificationOptions {
510
666
  return .init(
511
- canDeleteCookiesBeforeVerificationStarts: canDeleteCookiesBeforeVerificationStarts,
667
+ canDeleteCookiesBeforeVerificationStarts:
668
+ canDeleteCookiesBeforeVerificationStarts,
512
669
  attestorAuthRequestProvider: attestorAuthRequestProvider,
513
670
  claimCreationType: claimCreationTypeApi(),
514
671
  canAutoSubmit: canAutoSubmit,
515
672
  isCloseButtonVisible: isCloseButtonVisible
516
673
  )
517
674
  }
518
-
519
- class _AttestorAuthRequestProvider: ReclaimVerification.VerificationOptions.AttestorAuthRequestProvider {
675
+
676
+ class _AttestorAuthRequestProvider: ReclaimVerification.VerificationOptions
677
+ .AttestorAuthRequestProvider
678
+ {
520
679
  let fetchAttestorAuthenticationRequest: ReclaimVerificationOptionFetchAttestorAuthRequestHandler
521
-
522
- init(fetchAttestorAuthenticationRequest: @escaping ReclaimVerificationOptionFetchAttestorAuthRequestHandler) {
523
- self.fetchAttestorAuthenticationRequest = fetchAttestorAuthenticationRequest
680
+
681
+ init(
682
+ fetchAttestorAuthenticationRequest: @escaping
683
+ ReclaimVerificationOptionFetchAttestorAuthRequestHandler
684
+ ) {
685
+ self.fetchAttestorAuthenticationRequest =
686
+ fetchAttestorAuthenticationRequest
524
687
  }
525
-
526
- func fetchAttestorAuthenticationRequest(reclaimHttpProvider: [AnyHashable? : (any Sendable)?], completion: @escaping (Result<String, any Error>) -> Void) {
688
+
689
+ func fetchAttestorAuthenticationRequest(
690
+ reclaimHttpProvider: [AnyHashable?: (any Sendable)?],
691
+ completion: @escaping (Result<String, any Error>) -> Void
692
+ ) {
527
693
  let replyId = Api.setReplyWithStringCallback(completion)
528
- let reclaimHttpProviderJsonString = JSONUtility.toString(reclaimHttpProvider)
694
+ let reclaimHttpProviderJsonString = JSONUtility.toString(
695
+ reclaimHttpProvider
696
+ )
529
697
  fetchAttestorAuthenticationRequest(reclaimHttpProviderJsonString, replyId)
530
698
  }
531
699
  }