@icedevml/react-native-host-card-emulation 0.9.2 → 1.0.0

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.
@@ -1,6 +1,21 @@
1
1
  #import "RTNHCEModuleIOS.h"
2
+
3
+ #if __has_include("RCTDefaultReactNativeFactoryDelegate.h")
2
4
  #import "RCTDefaultReactNativeFactoryDelegate.h"
5
+ #endif
6
+
7
+ // the header generated from the Swift sources is named after the module:
8
+ // "RTNHCEModuleIOS" (CocoaPods) or "ReactNativeHostCardEmulationSwift" (SwiftPM)
9
+ #if __has_include("RTNHCEModuleIOS-Swift.h")
3
10
  #import "RTNHCEModuleIOS-Swift.h"
11
+ #elif __has_include(<RTNHCEModuleIOS/RTNHCEModuleIOS-Swift.h>)
12
+ #import <RTNHCEModuleIOS/RTNHCEModuleIOS-Swift.h>
13
+ #else
14
+ #import "ReactNativeHostCardEmulationSwift-Swift.h"
15
+ #endif
16
+
17
+ static NSString *const kUnsupportedCode = @"err_platform_unsupported";
18
+ static NSString *const kUnsupportedMessage = @"This iOS version does not support HCE.";
4
19
 
5
20
  @implementation RTNHCEModuleIOS {
6
21
  API_AVAILABLE(ios(17.4))
@@ -14,39 +29,51 @@
14
29
  __weak RTNHCEModuleIOS *weakSelf = self;
15
30
 
16
31
  hcemoduleios = [RTNHCEModuleIOSImpl new];
17
- [hcemoduleios setEmitOnEventWithEmitOnEvent:^(NSString *type, NSString *arg){
18
- [weakSelf emitOnEvent:@{@"type": type, @"arg": arg}];
32
+ [hcemoduleios setEmitOnEventWithEmitOnEvent:^(NSDictionary *value){
33
+ [weakSelf emitOnEvent:value];
19
34
  }];
20
- } else {
21
- // ignore
22
35
  }
23
36
 
24
37
  return(self);
25
38
  }
26
39
 
40
+ // called by React Native when the module is torn down (e.g. JS reload)
41
+ - (void)invalidate {
42
+ if (@available(iOS 17.4, *)) {
43
+ [hcemoduleios invalidateAll];
44
+ }
45
+ }
46
+
27
47
  - (void)dealloc {
28
- [hcemoduleios setEmitOnEventWithEmitOnEvent:^(NSString *type, NSString *arg){
29
- // no-op
30
- }];
48
+ if (@available(iOS 17.4, *)) {
49
+ [hcemoduleios invalidateAll];
50
+ }
31
51
  }
32
52
 
33
53
  - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params {
34
54
  return std::make_shared<facebook::react::NativeHCEModuleSpecJSI>(params);
35
55
  }
36
56
 
37
- - (nonnull NSNumber *)isPlatformSupported {
57
+ - (void)getCapabilities:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
38
58
  if (@available(iOS 17.4, *)) {
39
- return @1;
59
+ [hcemoduleios getCapabilitiesWithResolve:resolve reject:reject];
60
+ } else {
61
+ resolve(@{
62
+ @"platform": @"ios",
63
+ @"hceSupported": @NO,
64
+ @"nfcEnabled": @NO,
65
+ @"eligible": @NO,
66
+ @"backgroundSupported": @NO,
67
+ @"presentmentSupported": @NO,
68
+ });
40
69
  }
41
-
42
- return @0;
43
70
  }
44
71
 
45
72
  - (void)acquireExclusiveNFC:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
46
73
  if (@available(iOS 17.4, *)) {
47
- return [hcemoduleios acquireExclusiveNFCWithResolve:resolve reject:reject];
74
+ [hcemoduleios acquireExclusiveNFCWithResolve:resolve reject:reject];
48
75
  } else {
49
- reject(@"err_platform_unsupported", @"This iOS version does not support HCE.", nil);
76
+ reject(kUnsupportedCode, kUnsupportedMessage, nil);
50
77
  }
51
78
  }
52
79
 
@@ -58,78 +85,72 @@
58
85
 
59
86
  - (nonnull NSNumber *)isExclusiveNFC {
60
87
  if (@available(iOS 17.4, *)) {
61
- return [hcemoduleios isExclusiveNFC] ? @1 : @0;
88
+ return [hcemoduleios isExclusiveNFC] ? @YES : @NO;
62
89
  }
63
90
 
64
- return @0;
91
+ return @NO;
65
92
  }
66
93
 
67
- - (void)beginSession:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
94
+ // allowWhenLocked is ignored, it's impossible to communicate over HCE while the device is locked
95
+ - (void)beginSession:(nonnull NSString *)sessionId allowWhenLocked:(BOOL)allowWhenLocked resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
68
96
  if (@available(iOS 17.4, *)) {
69
- return [hcemoduleios beginSessionWithResolve:resolve reject:reject];
97
+ [hcemoduleios beginSessionWithSessionId:sessionId resolve:resolve reject:reject];
70
98
  } else {
71
- reject(@"err_platform_unsupported", @"This iOS version does not support HCE.", nil);
99
+ reject(kUnsupportedCode, kUnsupportedMessage, nil);
72
100
  }
73
101
  }
74
102
 
75
- - (void)setSessionAlertMessage:(nonnull NSString *)message {
103
+ - (void)invalidateSession:(nonnull NSString *)sessionId {
76
104
  if (@available(iOS 17.4, *)) {
77
- return [hcemoduleios setSessionAlertMessageWithMessage:message];
105
+ [hcemoduleios invalidateSessionWithSessionId:sessionId];
78
106
  }
79
107
  }
80
108
 
81
- - (void)invalidateSession {
109
+ - (void)setSessionAlertMessage:(nonnull NSString *)sessionId message:(nonnull NSString *)message {
82
110
  if (@available(iOS 17.4, *)) {
83
- [hcemoduleios invalidateSession];
111
+ [hcemoduleios setSessionAlertMessageWithSessionId:sessionId message:message];
84
112
  }
85
113
  }
86
114
 
87
- - (nonnull NSNumber *)isSessionRunning {
115
+ - (void)startEmulation:(nonnull NSString *)sessionId resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
88
116
  if (@available(iOS 17.4, *)) {
89
- return [hcemoduleios isSessionRunning] ? @1 : @0;
117
+ [hcemoduleios startEmulationWithSessionId:sessionId resolve:resolve reject:reject];
90
118
  } else {
91
- return @0;
119
+ reject(kUnsupportedCode, kUnsupportedMessage, nil);
92
120
  }
93
121
  }
94
122
 
95
- - (nonnull NSNumber *)beginBackgroundHCE:(nonnull NSString *)handle {
96
- return @0;
97
- }
98
-
99
- - (nonnull NSNumber *)finishBackgroundHCE:(nonnull NSString *)handle {
100
- return @0;
101
- }
102
-
103
- - (void)startHCE:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
123
+ - (void)stopEmulation:(nonnull NSString *)sessionId status:(nonnull NSString *)status resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
104
124
  if (@available(iOS 17.4, *)) {
105
- return [hcemoduleios startHCEWithResolve:resolve reject:reject];
125
+ [hcemoduleios stopEmulationWithSessionId:sessionId status:status resolve:resolve reject:reject];
106
126
  } else {
107
- reject(@"err_platform_unsupported", @"This iOS version does not support HCE.", nil);
127
+ reject(kUnsupportedCode, kUnsupportedMessage, nil);
108
128
  }
109
129
  }
110
130
 
111
- - (void)stopHCE:(nonnull NSString *)status resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
131
+ - (void)isEmulationRunning:(nonnull NSString *)sessionId resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
112
132
  if (@available(iOS 17.4, *)) {
113
- return [hcemoduleios stopHCEWithStatus:status resolve:resolve reject:reject];
133
+ [hcemoduleios isEmulationRunningWithSessionId:sessionId resolve:resolve reject:reject];
114
134
  } else {
115
- reject(@"err_platform_unsupported", @"This iOS version does not support HCE.", nil);
135
+ resolve(@NO);
116
136
  }
117
137
  }
118
138
 
119
- - (void)respondAPDU:(NSString * _Nullable)handle rapdu:(nonnull NSString *)rapdu resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
139
+ - (void)respondApdu:(nonnull NSString *)sessionId apduId:(double)apduId rapdu:(nonnull NSString *)rapdu resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
120
140
  if (@available(iOS 17.4, *)) {
121
- return [hcemoduleios respondAPDUWithHandle:handle rapdu:rapdu resolve:resolve reject:reject];
141
+ [hcemoduleios respondApduWithSessionId:sessionId apduId:apduId rapdu:rapdu resolve:resolve reject:reject];
122
142
  } else {
123
- reject(@"err_platform_unsupported", @"This iOS version does not support HCE.", nil);
143
+ reject(kUnsupportedCode, kUnsupportedMessage, nil);
124
144
  }
125
145
  }
126
146
 
127
- - (void)isHCERunning:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
128
- if (@available(iOS 17.4, *)) {
129
- [hcemoduleios isHCERunningWithResolve:resolve reject:reject];
130
- } else {
131
- reject(@"err_platform_unsupported", @"This iOS version does not support HCE.", nil);
132
- }
147
+ - (void)setBackgroundHandlerRegistered:(BOOL)registered allowWhenLocked:(BOOL)allowWhenLocked {
148
+ // background HCE is not supported on iOS, no-op
149
+ }
150
+
151
+ - (nonnull NSNumber *)backgroundSessionReady:(nonnull NSString *)sessionId {
152
+ // background HCE is not supported on iOS
153
+ return @NO;
133
154
  }
134
155
 
135
156
  + (NSString *)moduleName {