@jimrising/easymerchantsdk-react-native 2.5.3 → 2.5.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.
@@ -96,7 +96,7 @@ dependencies {
96
96
  implementation 'com.google.android.material:material:1.13.0'
97
97
 
98
98
  // Third-party libs
99
- implementation 'com.app:paysdk:1.7.0'
99
+ implementation 'com.app:paysdk:1.7.1'
100
100
  implementation 'com.hbb20:ccp:2.7.3'
101
101
  implementation 'com.github.bumptech.glide:glide:5.0.4'
102
102
  implementation 'com.github.androidmads:QRGenerator:1.0.5'
@@ -14,12 +14,12 @@ struct APIHeaders {
14
14
 
15
15
  static func clientTokenHeader() -> [String: String] {
16
16
  guard let token = UserStoreSingleton.shared.clientToken else { return [:] }
17
- return ["Client-Token": token]
17
+ return ["client-token": token]
18
18
  }
19
19
 
20
20
  static func customerTokenHeader() -> [String: String] {
21
21
  guard let token = UserStoreSingleton.shared.customerToken else { return [:] }
22
- return ["Customer-Token": token]
22
+ return ["customer-token": token]
23
23
  }
24
24
 
25
25
  /// API key/secret headers (match Android SDK: X-Api-Key, X-Api-Secret)
@@ -84,7 +84,7 @@ public class EasyMerchantSdkPlugin: NSObject, RCTBridgeModule {
84
84
  return
85
85
  }
86
86
 
87
- guard let presentingVC = presentingViewControllerInWindowHierarchy() else {
87
+ guard let (presentingVC, toDismiss) = presentingViewControllerAndOptionalDismiss() else {
88
88
  reject("NO_VIEW_CONTROLLER", "Unable to find a view controller in the window hierarchy", nil)
89
89
  clearCallbacks()
90
90
  return
@@ -98,8 +98,8 @@ public class EasyMerchantSdkPlugin: NSObject, RCTBridgeModule {
98
98
  }
99
99
 
100
100
  let controller = EasyPayViewController(request: request, delegate: self)
101
- DispatchQueue.main.async {
102
- presentingVC.present(controller, animated: true)
101
+ DispatchQueue.main.async { [weak self] in
102
+ self?.presentPaymentController(controller, from: presentingVC, dismissFirst: toDismiss)
103
103
  }
104
104
  }
105
105
 
@@ -117,15 +117,15 @@ public class EasyMerchantSdkPlugin: NSObject, RCTBridgeModule {
117
117
  return
118
118
  }
119
119
 
120
- guard let presentingVC = presentingViewControllerInWindowHierarchy() else {
120
+ guard let (presentingVC, toDismiss) = presentingViewControllerAndOptionalDismiss() else {
121
121
  reject("NO_VIEW_CONTROLLER", "Unable to find a view controller in the window hierarchy", nil)
122
122
  clearCallbacks()
123
123
  return
124
124
  }
125
125
 
126
126
  let controller = EasyPayViewController(request: request, delegate: self)
127
- DispatchQueue.main.async {
128
- presentingVC.present(controller, animated: true)
127
+ DispatchQueue.main.async { [weak self] in
128
+ self?.presentPaymentController(controller, from: presentingVC, dismissFirst: toDismiss)
129
129
  }
130
130
  }
131
131
 
@@ -155,14 +155,61 @@ public class EasyMerchantSdkPlugin: NSObject, RCTBridgeModule {
155
155
  return UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.rootViewController
156
156
  }
157
157
 
158
- /// Present from the last VC in the chain whose view is in the window. RCTFabricModalHostViewController
159
- /// is often on top but its view is not in the window hierarchy; presenting from it crashes.
158
+ /// Returns (presenter, viewControllerToDismiss). If the top is a modal host or our EasyPay, we must dismiss it first so presenter is not "already presenting".
159
+ private func presentingViewControllerAndOptionalDismiss() -> (UIViewController, UIViewController?)? {
160
+ guard var vc = keyWindowRootViewController() else { return nil }
161
+ while let presented = vc.presentedViewController {
162
+ vc = presented
163
+ }
164
+ let top = vc
165
+ // Step back from modal host or our own payment VC to get the real presenter
166
+ while (isModalHostViewController(vc) || isEasyPayViewController(vc)), let presenter = vc.presentingViewController {
167
+ vc = presenter
168
+ }
169
+ if isModalHostViewController(vc) || isEasyPayViewController(vc) { return nil }
170
+ // If top was a modal or EasyPay, that top is currently presented by vc; we must dismiss it first
171
+ let dismissFirst: UIViewController? = (top !== vc) ? top : nil
172
+ return (vc, dismissFirst)
173
+ }
174
+
175
+ private func presentPaymentController(_ controller: UIViewController, from presentingVC: UIViewController, dismissFirst: UIViewController?) {
176
+ if let toDismiss = dismissFirst {
177
+ toDismiss.dismiss(animated: false) { [weak self] in
178
+ DispatchQueue.main.async {
179
+ // After dismiss, get top then step back from modal host / EasyPay so we never present from them
180
+ guard let presenter = self?.presentingViewControllerInWindowHierarchy() else {
181
+ presentingVC.present(controller, animated: true)
182
+ return
183
+ }
184
+ presenter.present(controller, animated: true)
185
+ }
186
+ }
187
+ } else {
188
+ presentingVC.present(controller, animated: true)
189
+ }
190
+ }
191
+
192
+ /// Present from a VC that can safely present (not RCTFabricModalHostViewController; not our EasyPayViewController).
160
193
  private func presentingViewControllerInWindowHierarchy() -> UIViewController? {
161
194
  guard var vc = keyWindowRootViewController() else { return nil }
162
- while let presented = vc.presentedViewController, presented.viewIfLoaded?.window != nil {
195
+ while let presented = vc.presentedViewController {
163
196
  vc = presented
164
197
  }
165
- return vc.viewIfLoaded?.window != nil ? vc : nil
198
+ while (isModalHostViewController(vc) || isEasyPayViewController(vc)), let presenter = vc.presentingViewController {
199
+ vc = presenter
200
+ }
201
+ if isModalHostViewController(vc) || isEasyPayViewController(vc) { return nil }
202
+ return vc
203
+ }
204
+
205
+ private func isModalHostViewController(_ vc: UIViewController?) -> Bool {
206
+ guard let vc = vc else { return false }
207
+ let name = String(describing: type(of: vc))
208
+ return name.contains("ModalHost") || name.contains("RCTModalHost")
209
+ }
210
+
211
+ private func isEasyPayViewController(_ vc: UIViewController?) -> Bool {
212
+ vc is EasyPayViewController
166
213
  }
167
214
 
168
215
  private func getTopViewController() -> UIViewController? {
@@ -934,7 +934,7 @@ public final class Request: NSObject {
934
934
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
935
935
 
936
936
  // let tokenn = UserStoreSingleton.shared.customerToken
937
- // uRLRequest.addValue(tokenn ?? "", forHTTPHeaderField: "Customer-Token")
937
+ // uRLRequest.addValue(tokenn ?? "", forHTTPHeaderField: "customer-token")
938
938
 
939
939
  let token = clientToken ?? UserStoreSingleton.shared.clientToken ?? ""
940
940
  uRLRequest.addValue(token, forHTTPHeaderField: "clientToken")
@@ -17,7 +17,7 @@ enum GrailPaySource {
17
17
  case newAccount
18
18
  }
19
19
 
20
- let easymerchantsdk = UIStoryboard(name: "easymerchantsdk", bundle: Bundle.easyPayBundle)
20
+ let easymerchantsdk = UIStoryboard(name: "EasyPaySdk", bundle: Bundle.easyPayBundle)
21
21
 
22
22
  class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
23
23
 
@@ -2038,7 +2038,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
2038
2038
  }
2039
2039
 
2040
2040
  @objc func aboutTerms(sender: UITapGestureRecognizer) {
2041
- guard let vc = UIStoryboard(name: "easymerchantsdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2041
+ guard let vc = UIStoryboard(name: "EasyPaySdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2042
2042
  print("Error: Could not find TermAndConditionsVC in easymerchantsdk storyboard.")
2043
2043
  return
2044
2044
  }
@@ -2066,7 +2066,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
2066
2066
  }
2067
2067
 
2068
2068
  @objc func aboutTermsAndConditions(sender: UITapGestureRecognizer) {
2069
- guard let vc = UIStoryboard(name: "easymerchantsdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2069
+ guard let vc = UIStoryboard(name: "EasyPaySdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2070
2070
  return
2071
2071
  }
2072
2072
  vc.modalPresentationStyle = .overFullScreen
@@ -2118,7 +2118,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
2118
2118
  }
2119
2119
 
2120
2120
  @objc func aboutTermsGrailPayConditions(sender: UITapGestureRecognizer) {
2121
- guard let vc = UIStoryboard(name: "easymerchantsdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2121
+ guard let vc = UIStoryboard(name: "EasyPaySdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2122
2122
  return
2123
2123
  }
2124
2124
  vc.modalPresentationStyle = .overFullScreen
@@ -2145,7 +2145,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
2145
2145
  }
2146
2146
 
2147
2147
  @objc func aboutTermsGrailPayNewAccountConditions(sender: UITapGestureRecognizer) {
2148
- guard let vc = UIStoryboard(name: "easymerchantsdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2148
+ guard let vc = UIStoryboard(name: "EasyPaySdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2149
2149
  return
2150
2150
  }
2151
2151
  vc.modalPresentationStyle = .overFullScreen
@@ -2172,7 +2172,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
2172
2172
  }
2173
2173
 
2174
2174
  @objc func aboutTermsNewAccountViewConditions(sender: UITapGestureRecognizer) {
2175
- guard let vc = UIStoryboard(name: "easymerchantsdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2175
+ guard let vc = UIStoryboard(name: "EasyPaySdk", bundle: Bundle.easyPayBundle).instantiateViewController(withIdentifier: "TermAndConditionsVC") as? TermAndConditionsVC else {
2176
2176
  return
2177
2177
  }
2178
2178
  vc.modalPresentationStyle = .overFullScreen
@@ -2785,7 +2785,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
2785
2785
  }
2786
2786
  else if showBilling {
2787
2787
  // Push to BillingInfoVC
2788
- let billingInfoVC = UIStoryboard(name: "easymerchantsdk", bundle: .easyPayBundle).instantiateViewController(withIdentifier: "BillingInfoVC") as! BillingInfoVC
2788
+ let billingInfoVC = UIStoryboard(name: "EasyPaySdk", bundle: .easyPayBundle).instantiateViewController(withIdentifier: "BillingInfoVC") as! BillingInfoVC
2789
2789
 
2790
2790
  billingInfoVC.isFrom = "SavedCards"
2791
2791
  billingInfoVC.selectedCard = self.selectedCard // Passing the selected card data
@@ -2811,7 +2811,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
2811
2811
  }
2812
2812
  else {
2813
2813
  // Push to AdditionalInfoVC
2814
- let additionalInfoVC = UIStoryboard(name: "easymerchantsdk", bundle: .easyPayBundle).instantiateViewController(withIdentifier: "AdditionalInfoVC") as! AdditionalInfoVC
2814
+ let additionalInfoVC = UIStoryboard(name: "EasyPaySdk", bundle: .easyPayBundle).instantiateViewController(withIdentifier: "AdditionalInfoVC") as! AdditionalInfoVC
2815
2815
  additionalInfoVC.isFrom = "SavedCards"
2816
2816
  additionalInfoVC.selectedCard = self.selectedCard // Passing the selected card data
2817
2817
  additionalInfoVC.cvvText = cvvText // Passing the CVV text
@@ -4162,7 +4162,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
4162
4162
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
4163
4163
 
4164
4164
  let token = UserStoreSingleton.shared.clientToken
4165
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
4165
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
4166
4166
 
4167
4167
  var params: [String: Any] = [
4168
4168
  "account_id": self.grailPayAccountID ?? "",
@@ -4378,7 +4378,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
4378
4378
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
4379
4379
 
4380
4380
  let token = UserStoreSingleton.shared.clientToken
4381
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
4381
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
4382
4382
 
4383
4383
  let emailText = txtFieldEmailGrailPayView.text
4384
4384
  let emailPrefix = emailText.components(separatedBy: "@").first ?? ""
@@ -4611,7 +4611,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
4611
4611
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
4612
4612
 
4613
4613
  let token = UserStoreSingleton.shared.clientToken
4614
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
4614
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
4615
4615
 
4616
4616
  let finalEmail: String
4617
4617
  if let verificationEmail = UserStoreSingleton.shared.verificationEmail, !verificationEmail.isEmpty {
@@ -4843,7 +4843,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
4843
4843
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
4844
4844
 
4845
4845
  let token = UserStoreSingleton.shared.clientToken
4846
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
4846
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
4847
4847
 
4848
4848
  let finalEmail: String
4849
4849
  if let verificationEmail = UserStoreSingleton.shared.verificationEmail, !verificationEmail.isEmpty {
@@ -6433,7 +6433,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
6433
6433
 
6434
6434
  // Use the clientToken from your singleton
6435
6435
  let token = UserStoreSingleton.shared.clientToken
6436
- request.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
6436
+ request.addValue(token ?? "", forHTTPHeaderField: "client-token")
6437
6437
  // Match Android: send_otp also needs X-Api-Key / X-Api-Secret for merchant auth
6438
6438
  if let apiKey = EnvironmentConfig.apiKey, let apiSecret = EnvironmentConfig.apiSecret {
6439
6439
  request.addValue(apiKey, forHTTPHeaderField: "X-Api-Key")
@@ -6452,7 +6452,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
6452
6452
  let apiSecretMask = EnvironmentConfig.apiSecret.map { _ in "****" } ?? "nil"
6453
6453
  NSLog("[send_otp] ----- REQUEST -----")
6454
6454
  NSLog("[send_otp] URL: %@", fullURL)
6455
- NSLog("[send_otp] Headers: Content-Type=application/json, Client-Token=%@, X-Api-Key=%@, X-Api-Secret=%@", clientTokenMask, apiKeyMask, apiSecretMask)
6455
+ NSLog("[send_otp] Headers: Content-Type=application/json, client-token=%@, X-Api-Key=%@, X-Api-Secret=%@", clientTokenMask, apiKeyMask, apiSecretMask)
6456
6456
  NSLog("[send_otp] Body: %@", params.description)
6457
6457
 
6458
6458
  do {
@@ -6527,8 +6527,8 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
6527
6527
  urlRequest.httpMethod = "POST"
6528
6528
  urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
6529
6529
 
6530
- // Verify_otp: match Android — only Customer-Token + Content-Type (no X-Api-Key/X-Api-Secret)
6531
- urlRequest.addValue(UserStoreSingleton.shared.customerToken ?? "", forHTTPHeaderField: "Customer-Token")
6530
+ // Verify_otp: match Android — only customer-token + Content-Type (no X-Api-Key/X-Api-Secret)
6531
+ urlRequest.addValue(UserStoreSingleton.shared.customerToken ?? "", forHTTPHeaderField: "customer-token")
6532
6532
 
6533
6533
  // Safe access from main thread (assumes you call this from main thread)
6534
6534
  let email = self.txtFieldEmail.text ?? ""
@@ -6545,7 +6545,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
6545
6545
  let customerTokenMask = customerT.isEmpty ? "nil" : String(customerT.prefix(8)) + "..."
6546
6546
  NSLog("[verify_otp] ----- REQUEST -----")
6547
6547
  NSLog("[verify_otp] URL: %@", fullURL)
6548
- NSLog("[verify_otp] Headers: Customer-Token=%@, Content-Type=application/json", customerTokenMask)
6548
+ NSLog("[verify_otp] Headers: customer-token=%@, Content-Type=application/json", customerTokenMask)
6549
6549
  NSLog("[verify_otp] Body: card_search_value=%@, card_search_key=email, otp=%@", email, String(repeating: "*", count: otp.count))
6550
6550
 
6551
6551
  do {
@@ -6682,7 +6682,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
6682
6682
  // uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
6683
6683
  //
6684
6684
  // let token = UserStoreSingleton.shared.customerToken
6685
- // uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
6685
+ // uRLRequest.addValue(token ?? "", forHTTPHeaderField: "customer-token")
6686
6686
  //
6687
6687
  // let session = URLSession.shared
6688
6688
  // let task = session.dataTask(with: uRLRequest) { [weak self] (data, response, error) in
@@ -6798,7 +6798,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
6798
6798
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
6799
6799
 
6800
6800
  let token = UserStoreSingleton.shared.customerToken
6801
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
6801
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "customer-token")
6802
6802
 
6803
6803
  let session = URLSession.shared
6804
6804
  let task = session.dataTask(with: uRLRequest) { [weak self] (data, response, error) in
@@ -7465,7 +7465,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
7465
7465
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
7466
7466
 
7467
7467
  let token = UserStoreSingleton.shared.clientToken
7468
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
7468
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
7469
7469
 
7470
7470
  let finalEmail: String
7471
7471
  if let verificationEmail = UserStoreSingleton.shared.verificationEmail, !verificationEmail.isEmpty {
@@ -7787,7 +7787,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
7787
7787
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
7788
7788
 
7789
7789
  let token = UserStoreSingleton.shared.clientToken
7790
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
7790
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
7791
7791
 
7792
7792
  // let emailPrefix = UserStoreSingleton.shared.verificationEmail?.components(separatedBy: "@").first ?? ""
7793
7793
 
@@ -8006,7 +8006,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
8006
8006
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
8007
8007
 
8008
8008
  let token = UserStoreSingleton.shared.clientToken
8009
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
8009
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
8010
8010
 
8011
8011
  // let emailPrefix = UserStoreSingleton.shared.verificationEmail?.components(separatedBy: "@").first ?? ""
8012
8012
 
@@ -8284,7 +8284,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
8284
8284
  // request.addValue("application/json", forHTTPHeaderField: "Content-Type")
8285
8285
  //
8286
8286
  // let token = UserStoreSingleton.shared.customerToken
8287
- // request.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
8287
+ // request.addValue(token ?? "", forHTTPHeaderField: "customer-token")
8288
8288
  //
8289
8289
  // // Get the text fields from the selected cell and trim whitespace
8290
8290
  // let nameText = txtFieldNameOnCardUpdateCardView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
@@ -8425,7 +8425,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
8425
8425
  request.addValue("application/json", forHTTPHeaderField: "Content-Type")
8426
8426
 
8427
8427
  let token = UserStoreSingleton.shared.customerToken
8428
- request.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
8428
+ request.addValue(token ?? "", forHTTPHeaderField: "customer-token")
8429
8429
 
8430
8430
  let nameText = txtFieldNameOnCardUpdateCardView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
8431
8431
  let cvvText = txtFieldCVVUpdateCardView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
@@ -8533,9 +8533,9 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
8533
8533
  request.httpMethod = "DELETE"
8534
8534
  request.addValue("application/json", forHTTPHeaderField: "Content-Type")
8535
8535
 
8536
- // Add Customer-Token
8536
+ // Add customer-token
8537
8537
  if let token = UserStoreSingleton.shared.customerToken {
8538
- request.addValue(token, forHTTPHeaderField: "Customer-Token")
8538
+ request.addValue(token, forHTTPHeaderField: "customer-token")
8539
8539
  } else {
8540
8540
  }
8541
8541
 
@@ -8666,7 +8666,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
8666
8666
  return
8667
8667
  }
8668
8668
 
8669
- urlRequest.addValue(token, forHTTPHeaderField: "Customer-Token")
8669
+ urlRequest.addValue(token, forHTTPHeaderField: "customer-token")
8670
8670
 
8671
8671
  let session = URLSession.shared
8672
8672
  let task = session.dataTask(with: urlRequest) { [weak self] (data, response, error) in
@@ -8822,7 +8822,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
8822
8822
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
8823
8823
 
8824
8824
  let token = UserStoreSingleton.shared.clientToken
8825
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
8825
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
8826
8826
 
8827
8827
  var params: [String: Any] = [
8828
8828
  "name": txtFieldAccountName.text ?? "",
@@ -9029,7 +9029,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
9029
9029
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
9030
9030
 
9031
9031
  let token = UserStoreSingleton.shared.clientToken
9032
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
9032
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
9033
9033
 
9034
9034
  var params: [String: Any] = [
9035
9035
  "name": !(request.name?.isEmpty ?? true) ? request.name! : (txtFieldAccountName.text ?? ""),
@@ -9291,7 +9291,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
9291
9291
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
9292
9292
 
9293
9293
  let token = UserStoreSingleton.shared.clientToken
9294
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
9294
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
9295
9295
 
9296
9296
  let finalEmail: String
9297
9297
  if let verificationEmail = UserStoreSingleton.shared.verificationEmail, !verificationEmail.isEmpty {
@@ -9484,7 +9484,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
9484
9484
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
9485
9485
 
9486
9486
  let token = UserStoreSingleton.shared.clientToken
9487
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
9487
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
9488
9488
 
9489
9489
  let finalEmail: String
9490
9490
  if let verificationEmail = UserStoreSingleton.shared.verificationEmail, !verificationEmail.isEmpty {
@@ -9731,7 +9731,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
9731
9731
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
9732
9732
 
9733
9733
  let token = UserStoreSingleton.shared.clientToken
9734
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
9734
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
9735
9735
 
9736
9736
  let accountName = txtFieldAccountNameNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
9737
9737
  let routingNumber = txtFieldRoutingNumberNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
@@ -9933,7 +9933,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
9933
9933
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
9934
9934
 
9935
9935
  let token = UserStoreSingleton.shared.clientToken
9936
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
9936
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
9937
9937
 
9938
9938
  let accountName = txtFieldAccountNameNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
9939
9939
  let routingNumber = txtFieldRoutingNumberNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
@@ -10190,7 +10190,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
10190
10190
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
10191
10191
 
10192
10192
  let token = UserStoreSingleton.shared.clientToken
10193
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
10193
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
10194
10194
 
10195
10195
  // Retrieve and trim text field values (removing leading and trailing whitespace)
10196
10196
  let accountName = txtFieldAccountNameNewAccountView.text?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
@@ -10410,7 +10410,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
10410
10410
  // request.addValue("application/json", forHTTPHeaderField: "Content-Type")
10411
10411
  //
10412
10412
  // let token = UserStoreSingleton.shared.customerToken
10413
- // request.addValue(token ?? "", forHTTPHeaderField: "Customer-Token")
10413
+ // request.addValue(token ?? "", forHTTPHeaderField: "customer-token")
10414
10414
  //
10415
10415
  // let session = URLSession.shared
10416
10416
  // let task = session.dataTask(with: request) { [weak self] (serviceData, serviceResponse, error) in
@@ -10482,7 +10482,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
10482
10482
  request.addValue("application/json", forHTTPHeaderField: "Content-Type")
10483
10483
 
10484
10484
  if let token = UserStoreSingleton.shared.customerToken {
10485
- request.addValue(token, forHTTPHeaderField: "Customer-Token")
10485
+ request.addValue(token, forHTTPHeaderField: "customer-token")
10486
10486
  }
10487
10487
 
10488
10488
  // Also send accountID in request body
@@ -10574,7 +10574,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
10574
10574
  urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
10575
10575
 
10576
10576
  let token = UserStoreSingleton.shared.clientToken
10577
- urlRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
10577
+ urlRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
10578
10578
 
10579
10579
  var params: [String: Any] = [
10580
10580
  "name": UserStoreSingleton.shared.merchantName ?? "",
@@ -10711,7 +10711,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
10711
10711
  request.addValue("application/json", forHTTPHeaderField: "Content-Type")
10712
10712
 
10713
10713
  let token = UserStoreSingleton.shared.clientToken
10714
- request.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
10714
+ request.addValue(token ?? "", forHTTPHeaderField: "client-token")
10715
10715
 
10716
10716
  let session = URLSession.shared
10717
10717
  let task = session.dataTask(with: request) { [weak self] (data, response, error) in
@@ -10765,7 +10765,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
10765
10765
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
10766
10766
 
10767
10767
  let token = UserStoreSingleton.shared.clientToken
10768
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
10768
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
10769
10769
 
10770
10770
  var params: [String: Any] = [
10771
10771
  "name": cardNameTextField.text,
@@ -11115,7 +11115,7 @@ class PaymentInfoVC: BaseVC, BillingInfoVCDelegate {
11115
11115
  uRLRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
11116
11116
 
11117
11117
  let token = UserStoreSingleton.shared.clientToken
11118
- uRLRequest.addValue(token ?? "", forHTTPHeaderField: "Client-Token")
11118
+ uRLRequest.addValue(token ?? "", forHTTPHeaderField: "client-token")
11119
11119
 
11120
11120
  let finalEmail: String
11121
11121
  if let verificationEmail = UserStoreSingleton.shared.verificationEmail, !verificationEmail.isEmpty {
@@ -1,6 +1,6 @@
1
1
  Pod::Spec.new do |s|
2
2
  s.name = 'easymerchantsdk'
3
- s.version = '2.5.3'
3
+ s.version = '2.5.5'
4
4
  s.summary = 'A React Native SDK for Easy Merchant.'
5
5
  s.description = <<-DESC
6
6
  A React Native SDK to enable Easy Merchant functionality in mobile applications.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jimrising/easymerchantsdk-react-native",
3
- "version": "2.5.3",
3
+ "version": "2.5.5",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {