@jimrising/easymerchantsdk-react-native 2.2.9 → 2.3.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 (102) hide show
  1. package/.idea/caches/deviceStreaming.xml +11 -0
  2. package/README.md +310 -171
  3. package/android/build/.transforms/20e1216b87bd06eaab3c9e5c68d4267a/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/reactlibrary/RNEasymerchantsdkModule$2.dex +0 -0
  4. package/android/build/.transforms/20e1216b87bd06eaab3c9e5c68d4267a/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/reactlibrary/RNEasymerchantsdkModule$3.dex +0 -0
  5. package/android/build/.transforms/20e1216b87bd06eaab3c9e5c68d4267a/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/reactlibrary/RNEasymerchantsdkModule.dex +0 -0
  6. package/android/build/.transforms/20e1216b87bd06eaab3c9e5c68d4267a/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  7. package/android/build/.transforms/3f3a228346492fb34e3f574e941b632f/transformed/bundleLibRuntimeToDirRelease/bundleLibRuntimeToDirRelease_dex/com/reactlibrary/RNEasymerchantsdkModule$2.dex +0 -0
  8. package/android/build/.transforms/3f3a228346492fb34e3f574e941b632f/transformed/bundleLibRuntimeToDirRelease/bundleLibRuntimeToDirRelease_dex/com/reactlibrary/RNEasymerchantsdkModule$3.dex +0 -0
  9. package/android/build/.transforms/3f3a228346492fb34e3f574e941b632f/transformed/bundleLibRuntimeToDirRelease/bundleLibRuntimeToDirRelease_dex/com/reactlibrary/RNEasymerchantsdkModule.dex +0 -0
  10. package/android/build/.transforms/3f3a228346492fb34e3f574e941b632f/transformed/bundleLibRuntimeToDirRelease/desugar_graph.bin +0 -0
  11. package/android/build/.transforms/58b147bdc43284da2468dab19bc4a64d/transformed/classes/classes_dex/classes.dex +0 -0
  12. package/android/build/.transforms/e9a664a11ce12edf79cd87b1e07aa243/transformed/classes/classes_dex/classes.dex +0 -0
  13. package/android/build/intermediates/aar_main_jar/release/syncReleaseLibJars/classes.jar +0 -0
  14. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  15. package/android/build/intermediates/compile_library_classes_jar/release/bundleLibCompileToJarRelease/classes.jar +0 -0
  16. package/android/build/intermediates/full_jar/release/createFullJarRelease/full.jar +0 -0
  17. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
  18. package/android/build/intermediates/incremental/lintVitalAnalyzeRelease/release-artifact-dependencies.xml +4 -4
  19. package/android/build/intermediates/incremental/lintVitalAnalyzeRelease/release-artifact-libraries.xml +4 -4
  20. package/android/build/intermediates/incremental/release/mergeReleaseResources/compile-file-map.properties +916 -916
  21. package/android/build/intermediates/incremental/release/mergeReleaseResources/merger.xml +3 -3
  22. package/android/build/intermediates/incremental/release/packageReleaseResources/compile-file-map.properties +1 -1
  23. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule$2.class +0 -0
  24. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule$3.class +0 -0
  25. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule.class +0 -0
  26. package/android/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule$2.class +0 -0
  27. package/android/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule$3.class +0 -0
  28. package/android/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes/com/reactlibrary/RNEasymerchantsdkModule.class +0 -0
  29. package/android/build/intermediates/lint-cache/lintVitalAnalyzeRelease/maven.google/com/android/tools/build/group-index.xml +22 -0
  30. package/android/build/intermediates/lint_model/release/generateReleaseLintModel/release-artifact-dependencies.xml +4 -4
  31. package/android/build/intermediates/lint_model/release/generateReleaseLintModel/release-artifact-libraries.xml +4 -4
  32. package/android/build/intermediates/lint_vital_lint_model/release/generateReleaseLintVitalModel/release-artifact-dependencies.xml +4 -4
  33. package/android/build/intermediates/lint_vital_lint_model/release/generateReleaseLintVitalModel/release-artifact-libraries.xml +4 -4
  34. package/android/build/intermediates/local_aar_for_lint/release/out.aar +0 -0
  35. package/android/build/intermediates/merged_res/release/mergeReleaseResources/layout/activity_payment_done_url.xml +2 -1
  36. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/multi-v2/values-night-v8.json +2 -2
  37. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/multi-v2/values.json +38 -38
  38. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/anim-v21.json +9 -9
  39. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/anim.json +24 -24
  40. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/animator-v21.json +1 -1
  41. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/animator.json +34 -34
  42. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/color-night-v8.json +3 -3
  43. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/color-v31.json +10 -10
  44. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/color.json +153 -153
  45. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-anydpi-v21.json +6 -6
  46. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-hdpi-v4.json +13 -13
  47. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-ldpi-v4.json +6 -6
  48. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-mdpi-v4.json +12 -12
  49. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-v21.json +4 -4
  50. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-v23.json +7 -7
  51. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-v29.json +1 -1
  52. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-xhdpi-v4.json +12 -12
  53. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-xxhdpi-v4.json +7 -7
  54. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable-xxxhdpi-v4.json +7 -7
  55. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/drawable.json +395 -395
  56. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/font.json +9 -9
  57. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/interpolator-v21.json +10 -10
  58. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/interpolator.json +11 -11
  59. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout-land.json +3 -3
  60. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout-sw600dp-v13.json +2 -2
  61. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout-v21.json +4 -4
  62. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout-v26.json +1 -1
  63. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/layout.json +108 -108
  64. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-anydpi-v26.json +2 -2
  65. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-hdpi-v4.json +2 -2
  66. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-mdpi-v4.json +2 -2
  67. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-xhdpi-v4.json +2 -2
  68. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-xxhdpi-v4.json +2 -2
  69. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/mipmap-xxxhdpi-v4.json +2 -2
  70. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/raw.json +46 -46
  71. package/android/build/intermediates/merged_res_blame_folder/release/mergeReleaseResources/out/single/xml.json +3 -3
  72. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/reactlibrary/RNEasymerchantsdkModule$2.class +0 -0
  73. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/reactlibrary/RNEasymerchantsdkModule$3.class +0 -0
  74. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/reactlibrary/RNEasymerchantsdkModule.class +0 -0
  75. package/android/build/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease/com/reactlibrary/RNEasymerchantsdkModule$2.class +0 -0
  76. package/android/build/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease/com/reactlibrary/RNEasymerchantsdkModule$3.class +0 -0
  77. package/android/build/intermediates/runtime_library_classes_dir/release/bundleLibRuntimeToDirRelease/com/reactlibrary/RNEasymerchantsdkModule.class +0 -0
  78. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  79. package/android/build/intermediates/runtime_library_classes_jar/release/bundleLibRuntimeToJarRelease/classes.jar +0 -0
  80. package/android/build/intermediates/source_set_path_map/release/mapReleaseSourceSetPaths/file-map.txt +38 -38
  81. package/android/build/intermediates/verified_library_resources/release/verifyReleaseResources/compiled/layout_activity_payment_done_url.xml.flat +0 -0
  82. package/android/build/outputs/aar/jimrising_easymerchantsdk-react-native-release.aar +0 -0
  83. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  84. package/android/build/tmp/compileReleaseJavaWithJavac/previous-compilation-data.bin +0 -0
  85. package/android/build.gradle +1 -1
  86. package/android/src/main/java/com/reactlibrary/RNEasymerchantsdkModule.java +56 -1
  87. package/ios/Classes/EasyMerchantSdk.m +124 -141
  88. package/ios/Classes/EasyMerchantSdk.swift +270 -502
  89. package/ios/Classes/EasyPayViewController.swift +18 -15
  90. package/ios/CustomComponents/TextFieldStackView.swift +16 -46
  91. package/ios/EnvironmentConfig.swift +16 -0
  92. package/ios/Example/ViewController.swift +513 -76
  93. package/ios/Models/Request.swift +365 -171
  94. package/ios/Pods/UserDefaults/UserStoreSingleton.swift +116 -12
  95. package/ios/Pods/ViewControllers/AdditionalInfoVC.swift +2 -32
  96. package/ios/Pods/ViewControllers/GrailPayVC.swift +258 -18
  97. package/ios/Pods/ViewControllers/OTPVerificationVC.swift +1 -66
  98. package/ios/Pods/ViewControllers/PaymentInformation/PaymentInfoVC.swift +571 -369
  99. package/ios/Pods/ViewControllers/ThreeDSecurePaymentDoneVC.swift +18 -9
  100. package/ios/easymerchantsdk.podspec +1 -1
  101. package/ios/easymerchantsdk.storyboard +108 -85
  102. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  #import <React/RCTLog.h>
3
3
  #import <React/RCTBridgeModule.h>
4
4
 
5
- //#import <easymerchantsdk-Swift.h>
5
+ //#import "easymerchantsdk-Swift.h"
6
6
  #import <easymerchantsdk/easymerchantsdk-Swift.h>
7
7
 
8
8
 
@@ -14,171 +14,154 @@
14
14
 
15
15
  RCT_EXPORT_MODULE()
16
16
 
17
+ - (instancetype)init {
18
+ if (self = [super init]) {
19
+ _sdkPluginInstance = [EasyMerchantSdkPlugin new];
20
+ }
21
+ return self;
22
+ }
23
+
17
24
  RCT_EXPORT_METHOD(configureEnvironment:(NSString *)env
18
25
  apiKey:(NSString *)apiKey
19
- apiSecret:(NSString *)apiSecret)
26
+ apiSecret:(NSString *)apiSecret
27
+ resolver:(RCTPromiseResolveBlock)resolve
28
+ rejecter:(RCTPromiseRejectBlock)reject)
20
29
  {
30
+ dispatch_async(dispatch_get_main_queue(), ^{
21
31
  if (!self.sdkPluginInstance) {
22
- self.sdkPluginInstance = [[EasyMerchantSdkPlugin alloc] init];
32
+ reject(@"NO_SDK_INSTANCE", @"SDK plugin instance is not initialized", nil);
33
+ return;
23
34
  }
24
- @try {
25
- [self.sdkPluginInstance configureEnvironment:env apiKey:apiKey apiSecret:apiSecret];
26
- } @catch (NSException *exception) {
27
- RCTLogError(@"Failed to call configureEnvironment: %@", exception.reason);
35
+
36
+ NSArray<NSString *> *validEnvs = @[@"production", @"sandbox", @"staging"];
37
+ if (![validEnvs containsObject:env.lowercaseString]) {
38
+ reject(@"INVALID_ENVIRONMENT", @"Environment must be 'production', 'sandbox', or 'staging'", nil);
39
+ return;
28
40
  }
41
+
42
+ [self.sdkPluginInstance configureEnvironment:env
43
+ apiKey:apiKey
44
+ apiSecret:apiSecret
45
+ resolver:resolve
46
+ rejecter:reject];
47
+ });
29
48
  }
30
49
 
31
- RCT_EXPORT_METHOD(
32
- makePayment:(NSString *)jsonConfig
33
- resolver:(RCTPromiseResolveBlock)resolve
34
- rejecter:(RCTPromiseRejectBlock)reject
35
- )
50
+ RCT_EXPORT_METHOD(makePayment:(NSString *)jsonConfig
51
+ resolver:(RCTPromiseResolveBlock)resolve
52
+ rejecter:(RCTPromiseRejectBlock)reject)
36
53
  {
37
- if (!self.sdkPluginInstance) {
38
- self.sdkPluginInstance = [[EasyMerchantSdkPlugin alloc] init];
39
- }
40
- @try {
41
- [self.sdkPluginInstance makePayment:jsonConfig
42
- resolver:^(id result) {
43
- resolve(result);
44
- self.sdkPluginInstance = nil;
45
- }
46
- rejecter:^(NSString *code, NSString *message, NSError *error) {
47
- reject(code, message, error);
48
- self.sdkPluginInstance = nil;
49
- }];
50
- } @catch (NSException *exception) {
51
- reject(@"BRIDGE_ERROR", [NSString stringWithFormat:@"Failed to call makePayment: %@", exception.reason], nil);
52
- }
54
+ if (!self.sdkPluginInstance) {
55
+ reject(@"NO_SDK_INSTANCE", @"SDK plugin instance is not initialized", nil);
56
+ return;
57
+ }
58
+ dispatch_async(dispatch_get_main_queue(), ^{
59
+ [self.sdkPluginInstance makePayment:jsonConfig resolver:resolve rejecter:reject];
60
+ });
53
61
  }
54
62
 
55
- RCT_EXPORT_METHOD(
56
- billing:(NSString *)amount
57
- currency:(NSString *)currency
58
- fields:(NSDictionary *)fields
59
- paymentMethods:(NSArray *)paymentMethods
60
- appearanceSettings:(NSDictionary *)appearanceSettings
61
- tokenOnly:(BOOL)tokenOnly
62
- saveCard:(BOOL)saveCard
63
- saveAccount:(BOOL)saveAccount
64
- authenticatedACH:(BOOL)authenticatedACH
65
- grailPayParams:(NSDictionary *)grailPayParams
66
- submitButtonText:(NSString *)submitButtonText
67
- isRecurring:(BOOL)isRecurring
68
- numOfCycle:(NSInteger)numOfCycle
69
- recurringIntervals:(NSArray *)recurringIntervals
70
- recurringStartDateType:(NSString *)recurringStartDateType
71
- recurringStartDate:(NSString *)recurringStartDate
72
- secureAuthentication:(BOOL)secureAuthentication
73
- showReceipt:(BOOL)showReceipt
74
- showTotal:(BOOL)showTotal
75
- showSubmitButton:(BOOL)showSubmitButton
76
- isEmail:(BOOL)isEmail
77
- email:(NSString *)email
78
- name:(NSString *)name
79
- enable3DS:(BOOL)enable3DS
80
- metadata:(NSDictionary *)metadata
81
- resolver:(RCTPromiseResolveBlock)resolve
82
- rejecter:(RCTPromiseRejectBlock)reject
83
- )
63
+ RCT_EXPORT_METHOD(makePaymentV2:(NSString *)jsonConfig
64
+ resolver:(RCTPromiseResolveBlock)resolve
65
+ rejecter:(RCTPromiseRejectBlock)reject)
84
66
  {
85
- if (!self.sdkPluginInstance) {
86
- self.sdkPluginInstance = [[EasyMerchantSdkPlugin alloc] init];
87
- }
88
- @try {
89
- [self.sdkPluginInstance billing:amount
90
- currency:currency
91
- fields:fields
92
- paymentMethods:paymentMethods
93
- appearanceSettings:appearanceSettings
94
- tokenOnly:tokenOnly
95
- saveCard:saveCard
96
- saveAccount:saveAccount
97
- authenticatedACH:authenticatedACH
98
- grailPayParams:grailPayParams
99
- submitButtonText:submitButtonText
100
- isRecurring:isRecurring
101
- numOfCycle:numOfCycle
102
- recurringIntervals:recurringIntervals
103
- recurringStartDateType:recurringStartDateType
104
- recurringStartDate:recurringStartDate
105
- secureAuthentication:secureAuthentication
106
- showReceipt:showReceipt
107
- showTotal:showTotal
108
- showSubmitButton:showSubmitButton
109
- isEmail:isEmail
110
- email:email
111
- name:name
112
- enable3DS:enable3DS
113
- metadata:metadata
114
- resolver:^(id result) {
115
- resolve(result);
116
- self.sdkPluginInstance = nil;
117
- }
118
- rejecter:^(NSString *code, NSString *message, NSError *error) {
119
- reject(code, message, error);
120
- self.sdkPluginInstance = nil;
121
- }];
122
- } @catch (NSException *exception) {
123
- reject(@"BRIDGE_ERROR", [NSString stringWithFormat:@"Failed to call billing: %@", exception.reason], nil);
124
- }
67
+ if (!self.sdkPluginInstance) {
68
+ reject(@"NO_SDK_INSTANCE", @"SDK plugin instance is not initialized", nil);
69
+ return;
70
+ }
71
+ dispatch_async(dispatch_get_main_queue(), ^{
72
+ [self.sdkPluginInstance makePaymentV2:jsonConfig resolver:resolve rejecter:reject];
73
+ });
125
74
  }
126
75
 
127
- RCT_EXPORT_METHOD(
128
- paymentReference:(NSString *)referenceToken
129
- resolver:(RCTPromiseResolveBlock)resolve
130
- rejecter:(RCTPromiseRejectBlock)reject
131
- )
76
+ RCT_EXPORT_METHOD(paymentReference:(NSString *)referenceToken
77
+ resolver:(RCTPromiseResolveBlock)resolve
78
+ rejecter:(RCTPromiseRejectBlock)reject)
132
79
  {
133
- if (!self.sdkPluginInstance) {
134
- self.sdkPluginInstance = [[EasyMerchantSdkPlugin alloc] init];
135
- }
136
- @try {
137
- [self.sdkPluginInstance paymentReference:referenceToken
138
- resolver:^(id result) {
139
- resolve(result);
140
- self.sdkPluginInstance = nil;
141
- }
142
- rejecter:^(NSString *code, NSString *message, NSError *error) {
143
- reject(code, message, error);
144
- self.sdkPluginInstance = nil;
145
- }];
146
- } @catch (NSException *exception) {
147
- reject(@"BRIDGE_ERROR", [NSString stringWithFormat:@"Failed to call paymentReference: %@", exception.reason], nil);
148
- }
80
+ if (!self.sdkPluginInstance) {
81
+ reject(@"NO_SDK_INSTANCE", @"SDK plugin instance is not initialized", nil);
82
+ return;
83
+ }
84
+
85
+ if (!referenceToken || [referenceToken length] == 0) {
86
+ reject(@"INVALID_TOKEN", @"Reference token is required", nil);
87
+ return;
88
+ }
89
+
90
+ dispatch_async(dispatch_get_main_queue(), ^{
91
+ [self.sdkPluginInstance paymentReference:referenceToken resolver:resolve rejecter:reject];
92
+ });
149
93
  }
150
94
 
151
- RCT_REMAP_METHOD(setViewController,
152
- setViewControllerWithResolver:(RCTPromiseResolveBlock)resolve
153
- rejecter:(RCTPromiseRejectBlock)reject)
95
+ RCT_EXPORT_METHOD(setViewController:(RCTPromiseResolveBlock)resolve
96
+ rejecter:(RCTPromiseRejectBlock)reject)
154
97
  {
155
- @try {
156
- UIViewController *rootVC = [UIApplication sharedApplication].delegate.window.rootViewController;
157
- if (!rootVC) {
158
- reject(@"NO_ROOT_VC", @"No root view controller found", nil);
159
- return;
160
- }
161
- EasyMerchantSdkPlugin *sdkPlugin = [[EasyMerchantSdkPlugin alloc] init];
162
- [sdkPlugin setViewController:rootVC];
163
- resolve(@"ViewController set");
164
- } @catch (NSException *exception) {
165
- reject(@"BRIDGE_ERROR", [NSString stringWithFormat:@"Failed to set view controller: %@", exception.reason], nil);
98
+ dispatch_async(dispatch_get_main_queue(), ^{
99
+ if (!self.sdkPluginInstance) {
100
+ reject(@"NO_SDK_INSTANCE", @"SDK plugin instance is not initialized", nil);
101
+ return;
166
102
  }
103
+
104
+ UIViewController *topVC = [self topMostViewController];
105
+ if (!topVC) {
106
+ reject(@"NO_VIEW_CONTROLLER", @"No valid view controller found", nil);
107
+ return;
108
+ }
109
+
110
+ [self.sdkPluginInstance setViewController:topVC resolver:resolve rejecter:reject];
111
+ });
167
112
  }
168
113
 
169
114
  RCT_EXPORT_METHOD(getPlatformVersion:(RCTPromiseResolveBlock)resolve
170
115
  rejecter:(RCTPromiseRejectBlock)reject)
171
116
  {
172
- @try {
173
- EasyMerchantSdkPlugin *sdkPlugin = [[EasyMerchantSdkPlugin alloc] init];
174
- [sdkPlugin getPlatformVersion:^(id result) {
175
- resolve(result);
176
- } rejecter:^(NSString *code, NSString *message, NSError *error) {
177
- reject(code, message, error);
178
- }];
179
- } @catch (NSException *exception) {
180
- reject(@"BRIDGE_ERROR", [NSString stringWithFormat:@"Failed to get platform version: %@", exception.reason], nil);
117
+ if (!self.sdkPluginInstance) {
118
+ reject(@"NO_SDK_INSTANCE", @"SDK plugin instance is not initialized", nil);
119
+ return;
120
+ }
121
+ dispatch_async(dispatch_get_main_queue(), ^{
122
+ [self.sdkPluginInstance getPlatformVersion:resolve rejecter:reject];
123
+ });
124
+ }
125
+
126
+ // Helper method to find the top-most view controller
127
+ - (UIViewController *)topMostViewController {
128
+ UIWindow *keyWindow = nil;
129
+
130
+ for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
131
+ if (scene.activationState == UISceneActivationStateForegroundActive ||
132
+ scene.activationState == UISceneActivationStateForegroundInactive) {
133
+ if ([scene isKindOfClass:[UIWindowScene class]]) {
134
+ UIWindowScene *windowScene = (UIWindowScene *)scene;
135
+ for (UIWindow *window in windowScene.windows) {
136
+ if (window.isKeyWindow) {
137
+ keyWindow = window;
138
+ break;
139
+ }
140
+ }
141
+ }
142
+ }
143
+ if (keyWindow) break;
144
+ }
145
+
146
+ if (!keyWindow) {
147
+ keyWindow = UIApplication.sharedApplication.keyWindow;
148
+ }
149
+
150
+ UIViewController *base = keyWindow.rootViewController;
151
+
152
+ while (true) {
153
+ if ([base isKindOfClass:[UINavigationController class]]) {
154
+ base = [(UINavigationController *)base visibleViewController];
155
+ } else if ([base isKindOfClass:[UITabBarController class]]) {
156
+ base = [(UITabBarController *)base selectedViewController];
157
+ } else if (base.presentedViewController) {
158
+ base = base.presentedViewController;
159
+ } else {
160
+ break;
181
161
  }
162
+ }
163
+
164
+ return base;
182
165
  }
183
166
 
184
167
  @end