fidel-react-native 1.6.4 → 2.1.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.
Files changed (114) hide show
  1. package/CHANGELOG.md +1 -51
  2. package/README.md +4 -378
  3. package/android/build.gradle +12 -8
  4. package/android/jacoco.gradle +2 -2
  5. package/android/src/main/java/com/fidelreactlibrary/FidelModule.java +61 -44
  6. package/android/src/main/java/com/fidelreactlibrary/FidelPackage.java +64 -49
  7. package/android/src/main/java/com/fidelreactlibrary/adapters/CardVerificationConfigurationProperties.java +22 -0
  8. package/android/src/main/java/com/fidelreactlibrary/adapters/FidelCardSchemesAdapter.java +46 -29
  9. package/android/src/main/java/com/fidelreactlibrary/adapters/FidelCardVerificationChoiceAdapter.java +57 -0
  10. package/android/src/main/java/com/fidelreactlibrary/adapters/FidelCountryAdapter.java +47 -19
  11. package/android/src/main/java/com/fidelreactlibrary/adapters/FidelProgramTypeAdapter.java +46 -0
  12. package/android/src/main/java/com/fidelreactlibrary/adapters/FidelSetupAdapter.java +108 -6
  13. package/android/src/main/java/com/fidelreactlibrary/adapters/FidelSetupProperties.java +67 -0
  14. package/android/src/main/java/com/fidelreactlibrary/adapters/FidelVerificationConfigurationAdapter.java +35 -0
  15. package/android/src/main/java/com/fidelreactlibrary/adapters/ImageFromReadableMapAdapter.java +5 -1
  16. package/android/src/main/java/com/fidelreactlibrary/adapters/ResultsAdapter.java +288 -0
  17. package/android/src/main/java/com/fidelreactlibrary/adapters/abstraction/CardSchemesAdapter.java +6 -2
  18. package/android/src/main/java/com/fidelreactlibrary/adapters/abstraction/CardVerificationChoiceAdapter.java +11 -0
  19. package/android/src/main/java/com/fidelreactlibrary/adapters/abstraction/CountryAdapter.java +14 -3
  20. package/android/src/main/java/com/fidelreactlibrary/adapters/abstraction/DataAdapter.java +5 -0
  21. package/android/src/main/java/com/fidelreactlibrary/adapters/abstraction/ProgramTypeAdapter.java +11 -0
  22. package/android/src/main/java/com/fidelreactlibrary/adapters/abstraction/VerificationConfigurationAdapter.java +9 -0
  23. package/android/src/main/java/com/fidelreactlibrary/events/BridgeLibraryEvent.java +17 -0
  24. package/android/src/main/java/com/fidelreactlibrary/events/BridgeLibraryEventEmitter.java +24 -0
  25. package/android/src/main/java/com/fidelreactlibrary/events/CardVerificationChoiceObserver.java +29 -0
  26. package/android/src/main/java/com/fidelreactlibrary/events/CardVerificationStartedObserver.java +31 -0
  27. package/android/src/main/java/com/fidelreactlibrary/events/ResultsObserver.java +72 -0
  28. package/android/src/test/java/com/fidelreactlibrary/FidelModuleTests.java +50 -31
  29. package/android/src/test/java/com/fidelreactlibrary/FidelPackageTests.java +0 -1
  30. package/android/src/test/java/com/fidelreactlibrary/{FidelCardSchemesAdapterTests.java → adapters/FidelCardSchemesAdapterTests.java} +51 -47
  31. package/android/src/test/java/com/fidelreactlibrary/adapters/FidelCardVerificationChoiceAdapterTest.java +70 -0
  32. package/android/src/test/java/com/fidelreactlibrary/adapters/FidelCountryAdapterTests.java +157 -0
  33. package/android/src/test/java/com/fidelreactlibrary/adapters/FidelProgramTypeAdapterTests.java +54 -0
  34. package/android/src/test/java/com/fidelreactlibrary/adapters/FidelSetupAdapterTests.java +900 -0
  35. package/android/src/test/java/com/fidelreactlibrary/adapters/FidelVerificationConfigurationAdapterTest.java +51 -0
  36. package/android/src/test/java/com/fidelreactlibrary/adapters/ResultsAdapterTests.java +74 -0
  37. package/android/src/test/java/com/fidelreactlibrary/{ErrorEventEmitterTests.java → events/BridgeLibraryEventEmitterTests.java} +18 -7
  38. package/android/src/test/java/com/fidelreactlibrary/events/BridgeLibraryEventTests.java +17 -0
  39. package/android/src/test/java/com/fidelreactlibrary/events/CardVerificationStartedObserverTests.java +49 -0
  40. package/android/src/test/java/com/fidelreactlibrary/events/ResultsObserverTests.java +38 -0
  41. package/android/src/test/java/com/fidelreactlibrary/fakes/CardSchemeAdapterStub.java +17 -6
  42. package/android/src/test/java/com/fidelreactlibrary/fakes/ConstantsProviderStub.java +2 -2
  43. package/android/src/test/java/com/fidelreactlibrary/fakes/CountryAdapterStub.java +25 -10
  44. package/android/src/test/java/com/fidelreactlibrary/fakes/{DataConverterStub.java → DataAdapterStub.java} +3 -3
  45. package/android/src/test/java/com/fidelreactlibrary/fakes/ProgramTypeAdapterStub.java +31 -0
  46. package/android/src/test/java/com/fidelreactlibrary/fakes/ReactContextMock.java +1 -1
  47. package/android/src/test/java/com/fidelreactlibrary/fakes/ReadableArrayStub.java +82 -0
  48. package/android/src/test/java/com/fidelreactlibrary/fakes/ReadableMapStub.java +175 -40
  49. package/android/src/test/java/com/fidelreactlibrary/fakes/VerificationConfigurationAdapterStub.java +13 -0
  50. package/fidel-react-native.podspec +1 -1
  51. package/index.js +78 -19
  52. package/ios/Adapters/CardSchemesAdapter.swift +13 -0
  53. package/ios/Adapters/ConsentDetailsAdapter.swift +19 -0
  54. package/ios/Adapters/EnrollmentResultAdapter.swift +28 -0
  55. package/ios/Adapters/ErrorResultAdapter.swift +71 -0
  56. package/ios/{FLRNImageAdapter.h → Adapters/FLRNImageFromRNAdapter.h} +2 -3
  57. package/ios/Adapters/FidelSetupAdapter.swift +89 -0
  58. package/ios/Adapters/FidelVerificationConfigurationAdapter.swift +19 -0
  59. package/ios/Adapters/VerificationResultAdapter.swift +17 -0
  60. package/ios/CardVerificationConfigurationProperties.swift +14 -0
  61. package/ios/Constants/CardSchemeConstants.swift +38 -0
  62. package/ios/Constants/CardVerificationChoiceConstants.swift +24 -0
  63. package/ios/Constants/CountryConstants.swift +47 -0
  64. package/ios/Constants/EnrollmentErrorTypeConstants.swift +25 -0
  65. package/ios/Constants/ErrorTypeConstants.swift +37 -0
  66. package/ios/Constants/ExportedConstantsProvider.swift +42 -0
  67. package/ios/Constants/ProgramTypeConstants.swift +30 -0
  68. package/ios/Constants/ResultTypeConstants.swift +35 -0
  69. package/ios/Constants/VerificationErrorTypeConstants.swift +29 -0
  70. package/ios/Events/BridgeLibraryEvent.swift +14 -0
  71. package/ios/Events/CardVerificationChoiceSelectedObserver.swift +23 -0
  72. package/ios/Events/CardVerificationStartedObserver.swift +21 -0
  73. package/ios/Events/EventObserver.swift +13 -0
  74. package/ios/Events/JSResultProperties.swift +15 -0
  75. package/ios/Events/JSResultTypes.swift +14 -0
  76. package/ios/Events/ResultsObserver.swift +37 -0
  77. package/ios/FidelSetupProperties.swift +33 -0
  78. package/ios/NativeFidelBridge.m +13 -0
  79. package/ios/NativeFidelBridge.swift +100 -0
  80. package/package.json +1 -4
  81. package/android/src/main/java/com/fidelreactlibrary/adapters/FidelOptionsAdapter.java +0 -121
  82. package/android/src/main/java/com/fidelreactlibrary/adapters/WritableMapDataConverter.java +0 -94
  83. package/android/src/main/java/com/fidelreactlibrary/adapters/abstraction/DataConverter.java +0 -5
  84. package/android/src/main/java/com/fidelreactlibrary/events/CallbackActivityEventListener.java +0 -64
  85. package/android/src/main/java/com/fidelreactlibrary/events/CallbackInput.java +0 -7
  86. package/android/src/main/java/com/fidelreactlibrary/events/ErrorEventEmitter.java +0 -22
  87. package/android/src/test/java/com/fidelreactlibrary/CallbackActivityEventListenerTests.java +0 -133
  88. package/android/src/test/java/com/fidelreactlibrary/FidelCountryAdapterTests.java +0 -74
  89. package/android/src/test/java/com/fidelreactlibrary/FidelOptionsAdapterTests.java +0 -414
  90. package/android/src/test/java/com/fidelreactlibrary/FidelSetupAdapterTests.java +0 -65
  91. package/android/src/test/java/com/fidelreactlibrary/WritableMapDataConverterTests.java +0 -186
  92. package/android/src/test/java/com/fidelreactlibrary/fakes/CallbackInputSpy.java +0 -12
  93. package/android/src/test/java/com/fidelreactlibrary/fakes/CallbackSpy.java +0 -18
  94. package/android/src/test/java/com/fidelreactlibrary/fakes/IntentMock.java +0 -20
  95. package/ios/FLRNCardSchemesAdapter.h +0 -16
  96. package/ios/FLRNCardSchemesFromJSAdapter.h +0 -14
  97. package/ios/FLRNCardSchemesFromJSAdapter.m +0 -39
  98. package/ios/FLRNConstantsProvider.h +0 -15
  99. package/ios/FLRNImageFromRNAdapter.h +0 -14
  100. package/ios/FLRNObjectToDictionaryAdapter.h +0 -15
  101. package/ios/FLRNOptionsAdapter.h +0 -24
  102. package/ios/FLRNOptionsAdapter.m +0 -133
  103. package/ios/FLRNRuntimeObjectToDictionaryAdapter.h +0 -14
  104. package/ios/FLRNRuntimeObjectToDictionaryAdapter.m +0 -36
  105. package/ios/FLRNSDKOptions.h +0 -24
  106. package/ios/FLRNSDKSetupOptions.h +0 -14
  107. package/ios/FLRNSetupAdapter.h +0 -17
  108. package/ios/FLRNSetupAdapter.m +0 -50
  109. package/ios/Fidel.h +0 -20
  110. package/ios/Fidel.m +0 -79
  111. package/ios/RCTConvert+CardScheme.h +0 -33
  112. package/ios/RCTConvert+Options.h +0 -52
  113. package/ios/RCTConvert+Options.m +0 -21
  114. /package/ios/{FLRNImageFromRNAdapter.m → Adapters/FLRNImageFromRNAdapter.m} +0 -0
@@ -1,6 +1,7 @@
1
1
  package com.fidelreactlibrary.fakes;
2
2
 
3
3
  import androidx.annotation.NonNull;
4
+ import androidx.annotation.Nullable;
4
5
 
5
6
  import com.facebook.react.bridge.Dynamic;
6
7
  import com.facebook.react.bridge.JavaOnlyArray;
@@ -8,111 +9,245 @@ import com.facebook.react.bridge.ReadableArray;
8
9
  import com.facebook.react.bridge.ReadableMap;
9
10
  import com.facebook.react.bridge.ReadableMapKeySetIterator;
10
11
  import com.facebook.react.bridge.ReadableType;
12
+ import com.fidelreactlibrary.adapters.CardVerificationConfigurationProperties;
13
+ import com.fidelreactlibrary.adapters.FidelSetupProperties;
11
14
 
12
15
  import java.util.ArrayList;
16
+ import java.util.Arrays;
13
17
  import java.util.HashMap;
14
18
  import java.util.Iterator;
15
19
  import java.util.List;
16
20
  import java.util.Map;
17
21
 
18
- import javax.annotation.Nonnull;
19
- import javax.annotation.Nullable;
20
-
21
22
  public class ReadableMapStub implements ReadableMap {
22
23
 
23
24
  public List<String> keyNamesCheckedFor = new ArrayList<>();
24
25
  public List<String> keyNamesVerifiedNullFor = new ArrayList<>();
25
- public List<String> keyNamesAskedFor = new ArrayList<>();
26
+ public List<String> keyNamesAskedValueFor = new ArrayList<>();
26
27
  public HashMap<String, ReadableMap> mapsForKeysToReturn = new HashMap<>();
27
28
  public HashMap<String, Object> hashMapToReturn;
28
29
  public HashMap<String, String> stringForKeyToReturn = new HashMap<>();
29
- public ReadableArray readableArrayToReturn = new JavaOnlyArray();
30
+ public HashMap<String, ReadableArray> readableArraysToReturn = new HashMap<>();
30
31
  public boolean boolToReturn;
31
- public int intToReturn;
32
- private String hasKeyString = "";
33
- private String isNullString = "";
32
+ private final List<String> hasKeyStrings = new ArrayList<>();
33
+ private final List<String> isNullStrings = new ArrayList<>();
34
34
 
35
- public ReadableMapStub() {}
36
- private ReadableMapStub(String hasKeyString, String isNullString) {
37
- this.hasKeyString = hasKeyString;
38
- this.isNullString = isNullString;
35
+ public ReadableMapStub() {
39
36
  }
40
37
 
41
38
  public static ReadableMapStub mapWithNoKey() {
42
- return new ReadableMapStub("", "");
39
+ return new ReadableMapStub();
40
+ }
41
+
42
+ public static ReadableMapStub mapWithAllValidSetupKeys() {
43
+ ReadableMapStub mapStub = new ReadableMapStub();
44
+ String[] keyJsNames = Arrays.stream(FidelSetupProperties.values()).map(FidelSetupProperties::jsName)
45
+ .toArray(String[]::new);
46
+ mapStub.hasKeyStrings.addAll(Arrays.asList(keyJsNames));
47
+ mapStub.stringForKeyToReturn.put(FidelSetupProperties.SDK_KEY.jsName(), "pk_test_some_sdk_key");
48
+ mapStub.stringForKeyToReturn.put(FidelSetupProperties.PROGRAM_ID.jsName(), "some test program ID");
49
+ mapStub.stringForKeyToReturn.put(FidelSetupProperties.PROGRAM_TYPE.jsName(), "some test program type");
50
+ ReadableMapStub optionsReadableMap = ReadableMapStub.optionsMapWithAllValidSetupKeys();
51
+ mapStub.mapsForKeysToReturn.put(FidelSetupProperties.OPTIONS.jsName(), optionsReadableMap);
52
+ ReadableMapStub consentTextReadableMap = ReadableMapStub.consentTextMapWithAllValidSetupKeys();
53
+ mapStub.mapsForKeysToReturn.put(FidelSetupProperties.CONSENT_TEXT.jsName(), consentTextReadableMap);
54
+ return mapStub;
55
+ }
56
+
57
+ private static ReadableMapStub optionsMapWithAllValidSetupKeys() {
58
+ ReadableMapStub mapStub = new ReadableMapStub();
59
+ String[] keyJsNames = Arrays.stream(FidelSetupProperties.Options.values())
60
+ .map(FidelSetupProperties.Options::jsName)
61
+ .toArray(String[]::new);
62
+ mapStub.hasKeyStrings.addAll(Arrays.asList(keyJsNames));
63
+ mapStub.mapsForKeysToReturn.put(FidelSetupProperties.Options.BANNER_IMAGE.jsName(), new ReadableMapStub());
64
+ mapStub.readableArraysToReturn.put(FidelSetupProperties.Options.ALLOWED_COUNTRIES.jsName(),
65
+ new JavaOnlyArray());
66
+ mapStub.stringForKeyToReturn.put(FidelSetupProperties.Options.DEFAULT_SELECTED_COUNTRY.jsName(), "japan");
67
+ mapStub.readableArraysToReturn.put(FidelSetupProperties.Options.SUPPORTED_CARD_SCHEMES.jsName(),
68
+ new JavaOnlyArray());
69
+ mapStub.boolToReturn = false;
70
+ ReadableMapStub metaDataMap = new ReadableMapStub();
71
+ metaDataMap.hashMapToReturn = new HashMap<>();
72
+ mapStub.mapsForKeysToReturn.put(FidelSetupProperties.Options.META_DATA.jsName(), metaDataMap);
73
+ return mapStub;
74
+ }
75
+
76
+ private static ReadableMapStub consentTextMapWithAllValidSetupKeys() {
77
+ ReadableMapStub mapStub = new ReadableMapStub();
78
+ String[] keyJsNames = Arrays.stream(FidelSetupProperties.ConsentText.values())
79
+ .map(FidelSetupProperties.ConsentText::jsName)
80
+ .toArray(String[]::new);
81
+ mapStub.hasKeyStrings.addAll(Arrays.asList(keyJsNames));
82
+ mapStub.stringForKeyToReturn.put(FidelSetupProperties.ConsentText.COMPANY_NAME.jsName(),
83
+ "some test company name");
84
+ mapStub.stringForKeyToReturn.put(FidelSetupProperties.ConsentText.TERMS_AND_CONDITIONS_URL.jsName(),
85
+ "some test terms and conditions url");
86
+ mapStub.stringForKeyToReturn.put(FidelSetupProperties.ConsentText.PRIVACY_POLICY_URL.jsName(),
87
+ "some test privacy policy url");
88
+ mapStub.stringForKeyToReturn.put(FidelSetupProperties.ConsentText.PROGRAM_NAME.jsName(),
89
+ "some test program name");
90
+ return mapStub;
43
91
  }
44
92
 
45
- public static ReadableMapStub mapWithExistingKey(String existingKey) {
46
- return new ReadableMapStub(existingKey, "");
93
+ public static ReadableMapStub withEmptyValueForKey(FidelSetupProperties key) {
94
+ ReadableMapStub mapStub = ReadableMapStub.mapWithAllValidSetupKeys();
95
+ mapStub.stringForKeyToReturn.put(key.jsName(), "");
96
+ return mapStub;
47
97
  }
48
98
 
49
- public static ReadableMapStub mapWithExistingKeyButNoValue(String existingKey) {
50
- return new ReadableMapStub(existingKey, existingKey);
99
+ public static ReadableMapStub withoutKey(FidelSetupProperties key) {
100
+ ReadableMapStub mapStub = ReadableMapStub.mapWithAllValidSetupKeys();
101
+ mapStub.hasKeyStrings.remove(key.jsName());
102
+ mapStub.stringForKeyToReturn.remove(key.jsName());
103
+ mapStub.mapsForKeysToReturn.remove(key.jsName());
104
+ mapStub.readableArraysToReturn.remove(key.jsName());
105
+ return mapStub;
106
+ }
107
+
108
+ public static ReadableMapStub withoutOptionsKey(FidelSetupProperties.Options optionsKey) {
109
+ ReadableMapStub mapStub = ReadableMapStub.mapWithAllValidSetupKeys();
110
+ ReadableMapStub optionsMapStub = (ReadableMapStub) mapStub.getMap(FidelSetupProperties.OPTIONS.jsName());
111
+ assert optionsMapStub != null;
112
+ optionsMapStub.hasKeyStrings.remove(optionsKey.jsName());
113
+ optionsMapStub.stringForKeyToReturn.remove(optionsKey.jsName());
114
+ optionsMapStub.mapsForKeysToReturn.remove(optionsKey.jsName());
115
+ optionsMapStub.readableArraysToReturn.remove(optionsKey.jsName());
116
+ return mapStub;
117
+ }
118
+
119
+ public static ReadableMapStub withoutConsentTextKey(FidelSetupProperties.ConsentText consentTextKey) {
120
+ ReadableMapStub mapStub = ReadableMapStub.mapWithAllValidSetupKeys();
121
+ ReadableMapStub consentTextMapStub = (ReadableMapStub) mapStub
122
+ .getMap(FidelSetupProperties.CONSENT_TEXT.jsName());
123
+ assert consentTextMapStub != null;
124
+ consentTextMapStub.hasKeyStrings.remove(consentTextKey.jsName());
125
+ consentTextMapStub.stringForKeyToReturn.remove(consentTextKey.jsName());
126
+ consentTextMapStub.mapsForKeysToReturn.remove(consentTextKey.jsName());
127
+ consentTextMapStub.readableArraysToReturn.remove(consentTextKey.jsName());
128
+ return mapStub;
129
+ }
130
+
131
+ public static ReadableMapStub withNullValueForKey(FidelSetupProperties key) {
132
+ ReadableMapStub mapStub = ReadableMapStub.mapWithAllValidSetupKeys();
133
+ mapStub.isNullStrings.remove(key.jsName());
134
+ mapStub.stringForKeyToReturn.remove(key.jsName());
135
+ mapStub.mapsForKeysToReturn.remove(key.jsName());
136
+ mapStub.readableArraysToReturn.remove(key.jsName());
137
+ return mapStub;
138
+ }
139
+
140
+ public static ReadableMapStub withNullValueForOptionKey(FidelSetupProperties.Options optionKey) {
141
+ ReadableMapStub mapStub = ReadableMapStub.mapWithAllValidSetupKeys();
142
+ ReadableMapStub optionsMapStub = (ReadableMapStub) mapStub.getMap(FidelSetupProperties.OPTIONS.jsName());
143
+ assert optionsMapStub != null;
144
+ optionsMapStub.isNullStrings.add(optionKey.jsName());
145
+ optionsMapStub.stringForKeyToReturn.remove(optionKey.jsName());
146
+ optionsMapStub.mapsForKeysToReturn.remove(optionKey.jsName());
147
+ optionsMapStub.readableArraysToReturn.remove(optionKey.jsName());
148
+ return mapStub;
149
+ }
150
+
151
+ public static ReadableMapStub withNullValueForConsentTextKey(FidelSetupProperties.ConsentText consentTextKey) {
152
+ ReadableMapStub mapStub = ReadableMapStub.mapWithAllValidSetupKeys();
153
+ ReadableMapStub consentTextMapStub = (ReadableMapStub) mapStub
154
+ .getMap(FidelSetupProperties.CONSENT_TEXT.jsName());
155
+ assert consentTextMapStub != null;
156
+ consentTextMapStub.isNullStrings.add(consentTextKey.jsName());
157
+ consentTextMapStub.stringForKeyToReturn.remove(consentTextKey.jsName());
158
+ consentTextMapStub.mapsForKeysToReturn.remove(consentTextKey.jsName());
159
+ consentTextMapStub.readableArraysToReturn.remove(consentTextKey.jsName());
160
+ return mapStub;
161
+ }
162
+
163
+ public static ReadableMapStub cardConfigWithAllValidConfigKeys() {
164
+ ReadableMapStub mapStub = new ReadableMapStub();
165
+ String[] keyJsNames = Arrays.stream(CardVerificationConfigurationProperties.values())
166
+ .map(CardVerificationConfigurationProperties::jsName).toArray(String[]::new);
167
+ mapStub.hasKeyStrings.addAll(Arrays.asList(keyJsNames));
168
+ mapStub.stringForKeyToReturn.put(CardVerificationConfigurationProperties.ID.jsName(), "123");
169
+ mapStub.stringForKeyToReturn.put(CardVerificationConfigurationProperties.CONSENT_ID.jsName(), "456");
170
+ mapStub.stringForKeyToReturn.put(CardVerificationConfigurationProperties.LAST_4_DIGITS.jsName(), "4567");
171
+ return mapStub;
172
+ }
173
+
174
+ public static ReadableMapStub cardConfigWithAllInValidConfigKeys() {
175
+ ReadableMapStub mapStub = new ReadableMapStub();
176
+ String[] keyJsNames = Arrays.stream(CardVerificationConfigurationProperties.values())
177
+ .map(CardVerificationConfigurationProperties::jsName).toArray(String[]::new);
178
+ mapStub.hasKeyStrings.addAll(Arrays.asList(keyJsNames));
179
+ mapStub.stringForKeyToReturn.put(CardVerificationConfigurationProperties.ID.jsName(), null);
180
+ mapStub.stringForKeyToReturn.put(CardVerificationConfigurationProperties.CONSENT_ID.jsName(), null);
181
+ mapStub.stringForKeyToReturn.put(CardVerificationConfigurationProperties.LAST_4_DIGITS.jsName(), null);
182
+ return mapStub;
183
+ }
184
+
185
+ public void putString(String key, String value) {
186
+ stringForKeyToReturn.put(key, value);
51
187
  }
52
188
 
53
189
  @Override
54
- public boolean hasKey(@Nonnull String name) {
190
+ public boolean hasKey(@NonNull String name) {
55
191
  keyNamesCheckedFor.add(name);
56
- return hasKeyString.equals(name);
192
+ return hasKeyStrings.contains(name);
57
193
  }
58
194
 
59
195
  @Override
60
- public boolean isNull(@Nonnull String name) {
196
+ public boolean isNull(@NonNull String name) {
61
197
  keyNamesVerifiedNullFor.add(name);
62
- return isNullString.equals(name);
198
+ return isNullStrings.contains(name);
63
199
  }
64
200
 
65
201
  @Override
66
- public boolean getBoolean(@Nonnull String name) {
67
- keyNamesAskedFor.add(name);
202
+ public boolean getBoolean(@NonNull String name) {
203
+ keyNamesAskedValueFor.add(name);
68
204
  return boolToReturn;
69
205
  }
70
206
 
71
207
  @Override
72
- public double getDouble(@Nonnull String name) {
208
+ public double getDouble(@NonNull String name) {
73
209
  return 0;
74
210
  }
75
211
 
76
212
  @Override
77
- public int getInt(@Nonnull String name) {
78
- keyNamesAskedFor.add(name);
79
- return intToReturn;
213
+ public int getInt(@NonNull String name) {
214
+ return -1;
80
215
  }
81
216
 
82
217
  @Nullable
83
218
  @Override
84
- public String getString(@Nonnull String name) {
85
- keyNamesAskedFor.add(name);
219
+ public String getString(@NonNull String name) {
220
+ keyNamesAskedValueFor.add(name);
86
221
  return stringForKeyToReturn.get(name);
87
222
  }
88
223
 
89
224
  @Nullable
90
225
  @Override
91
- public ReadableArray getArray(@Nonnull String name) {
92
- keyNamesAskedFor.add(name);
93
- return readableArrayToReturn;
226
+ public ReadableArray getArray(@NonNull String name) {
227
+ keyNamesAskedValueFor.add(name);
228
+ return readableArraysToReturn.get(name);
94
229
  }
95
230
 
96
231
  @Nullable
97
232
  @Override
98
- public ReadableMap getMap(@Nonnull String name) {
99
- keyNamesAskedFor.add(name);
233
+ public ReadableMap getMap(@NonNull String name) {
234
+ keyNamesAskedValueFor.add(name);
100
235
  return mapsForKeysToReturn.get(name);
101
236
  }
102
237
 
103
- @Nonnull
238
+ @NonNull
104
239
  @Override
105
- public Dynamic getDynamic(@Nonnull String name) {
240
+ public Dynamic getDynamic(@NonNull String name) {
106
241
  return null;
107
242
  }
108
243
 
109
- @Nonnull
244
+ @NonNull
110
245
  @Override
111
- public ReadableType getType(@Nonnull String name) {
246
+ public ReadableType getType(@NonNull String name) {
112
247
  return null;
113
248
  }
114
249
 
115
- @Nonnull
250
+ @NonNull
116
251
  @Override
117
252
  public ReadableMapKeySetIterator keySetIterator() {
118
253
  return null;
@@ -124,7 +259,7 @@ public class ReadableMapStub implements ReadableMap {
124
259
  return null;
125
260
  }
126
261
 
127
- @Nonnull
262
+ @NonNull
128
263
  @Override
129
264
  public HashMap<String, Object> toHashMap() {
130
265
  return hashMapToReturn;
@@ -0,0 +1,13 @@
1
+ package com.fidelreactlibrary.fakes;
2
+
3
+ import com.facebook.react.bridge.ReadableMap;
4
+ import com.fidelapi.entities.CardVerificationConfiguration;
5
+ import com.fidelreactlibrary.adapters.abstraction.VerificationConfigurationAdapter;
6
+
7
+ public class VerificationConfigurationAdapterStub implements VerificationConfigurationAdapter {
8
+
9
+ @Override
10
+ public CardVerificationConfiguration adapt(ReadableMap data) {
11
+ return new CardVerificationConfiguration("", "", null);
12
+ }
13
+ }
@@ -13,7 +13,7 @@ Pod::Spec.new do |s|
13
13
  s.platform = :ios, "9.1"
14
14
 
15
15
  s.source = { :git => "https://github.com/FidelLimited/rn-sdk.git", :tag => "v#{s.version}" }
16
- s.source_files = "ios/**/*.{h,m}"
16
+ s.source_files = "ios/**/*.{h,m,swift}"
17
17
 
18
18
  s.dependency 'React'
19
19
  s.dependency 'Fidel'
package/index.js CHANGED
@@ -1,26 +1,85 @@
1
-
2
- import { NativeEventEmitter, NativeModules } from 'react-native';
1
+ import { NativeEventEmitter, NativeModules } from "react-native";
2
+ import { version } from "./package.json";
3
3
 
4
4
  const { NativeFidelBridge } = NativeModules;
5
5
 
6
- class Fidel {
7
-
8
- static setup(params) { NativeFidelBridge.setup(params) }
9
- static setOptions(params) { NativeFidelBridge.setOptions(params) }
10
- static openForm(callback) {
11
- if (this.eventSubscription != null) {
12
- this.eventSubscription.remove();
13
- }
14
- this.eventSubscription = Fidel.emitter.addListener(
15
- "CardLinkFailed",
16
- error => callback(error, null)
6
+ export default class Fidel {
7
+ static emitter = new NativeEventEmitter(NativeFidelBridge);
8
+ static Country = NativeFidelBridge.Country;
9
+ static CardScheme = NativeFidelBridge.CardScheme;
10
+ static ProgramType = NativeFidelBridge.ProgramType;
11
+ static ErrorType = NativeFidelBridge.ErrorType;
12
+ static EnrollmentErrorType = NativeFidelBridge.EnrollmentErrorType;
13
+ static VerificationErrorType = NativeFidelBridge.VerificationErrorType;
14
+ static CardVerificationChoice = NativeFidelBridge.CardVerificationChoice;
15
+
16
+ static setup(params, callback) {
17
+ if (this.eventSubscription != null) {
18
+ this.eventSubscription.remove();
19
+ }
20
+ const { onCardVerificationStarted } = params;
21
+ if (
22
+ onCardVerificationStarted != null &&
23
+ onCardVerificationStarted != undefined &&
24
+ typeof onCardVerificationStarted === "function"
25
+ ) {
26
+ if (this.onCardVerificationStartedEventSubscription != null) {
27
+ this.onCardVerificationStartedEventSubscription.remove();
28
+ }
29
+ this.onCardVerificationStartedEventSubscription =
30
+ Fidel.emitter.addListener(
31
+ "CardVerificationStarted",
32
+ (consentDetails) => {
33
+ onCardVerificationStarted(consentDetails);
34
+ }
17
35
  );
18
- NativeFidelBridge.openForm(callback);
19
36
  }
20
- }
37
+ const { onCardVerificationChoiceSelected } = params;
38
+ if (
39
+ onCardVerificationChoiceSelected != null &&
40
+ onCardVerificationChoiceSelected != undefined &&
41
+ typeof onCardVerificationChoiceSelected === "function"
42
+ ) {
43
+ if (this.onCardVerificationChoiceSelectedEventSubscription != null) {
44
+ this.onCardVerificationChoiceSelectedEventSubscription.remove();
45
+ }
46
+ this.onCardVerificationChoiceSelectedEventSubscription =
47
+ Fidel.emitter.addListener(
48
+ "CardVerificationChoiceSelected",
49
+ (verificationChoice) => {
50
+ onCardVerificationChoiceSelected(verificationChoice);
51
+ }
52
+ );
53
+ }
54
+ if (
55
+ callback != null &&
56
+ callback != undefined &&
57
+ typeof callback === "function"
58
+ ) {
59
+ this.eventSubscription = Fidel.emitter.addListener(
60
+ "ResultAvailable",
61
+ (result) => callback(result)
62
+ );
63
+ }
64
+ NativeFidelBridge.setup(params);
65
+ }
66
+
67
+ static start() {
68
+ Fidel.identifyMetricsDataSource()
69
+ NativeFidelBridge.start();
70
+ }
21
71
 
22
- Fidel.emitter = new NativeEventEmitter(NativeFidelBridge);
23
- Fidel.Country = NativeFidelBridge.Country
24
- Fidel.CardScheme = NativeFidelBridge.CardScheme
72
+ static verifyCard(params) {
73
+ Fidel.identifyMetricsDataSource()
74
+ NativeFidelBridge.verifyCard(params);
75
+ }
76
+
77
+ static identifyMetricsDataSource() {
78
+ NativeFidelBridge.identifyMetricsDataSource("rn", version);
79
+ }
80
+ }
25
81
 
26
- module.exports = Fidel;
82
+ export const ENROLLMENT_RESULT = NativeFidelBridge.ResultType.EnrollmentResult;
83
+ export const ERROR = NativeFidelBridge.ResultType.Error;
84
+ export const VERIFICATION_RESULT =
85
+ NativeFidelBridge.ResultType.VerificationResult;
@@ -0,0 +1,13 @@
1
+ //
2
+ // CardSchemesAdapter.swift
3
+ // fidel-react-native
4
+ //
5
+ // Created by Corneliu Chitanu on 08/12/21.
6
+ //
7
+
8
+ import Foundation
9
+ import Fidel
10
+
11
+ protocol CardSchemesAdapter {
12
+ func cardSchemes(from rawObject: NSObject) -> Set<CardScheme>
13
+ }
@@ -0,0 +1,19 @@
1
+ //
2
+ // ConsentDetailsAdapter.swift
3
+ // fidel-react-native
4
+ //
5
+ // Created by Corneliu Chitanu on 07/06/23.
6
+ //
7
+
8
+ import Foundation
9
+ import Fidel
10
+
11
+ extension ConsentDetails {
12
+ var dictionary: [String: Any] {
13
+ return [
14
+ "cardId": cardID,
15
+ "consentId": consentID,
16
+ "programId": programID
17
+ ]
18
+ }
19
+ }
@@ -0,0 +1,28 @@
1
+ //
2
+ // EnrollmentResultAdapter.swift
3
+ // fidel-react-native
4
+ //
5
+ // Created by Corneliu Chitanu on 09/12/21.
6
+ //
7
+
8
+ import Foundation
9
+ import Fidel
10
+
11
+ extension EnrollmentResult{
12
+ var dictionary: [String: Any] {
13
+ return [
14
+ "cardId": cardID,
15
+ "accountId": accountID,
16
+ "programId": programID,
17
+ "enrollmentDate": enrollmentDate.timeIntervalSince1970,
18
+ "cardScheme": scheme.constantKey,
19
+ "isLive": isLive,
20
+ "cardExpirationYear": cardExpirationYear,
21
+ "cardExpirationMonth": cardExpirationMonth,
22
+ "cardIssuingCountry": cardIssuingCountry.constantKey,
23
+ "cardFirstNumbers": cardFirstNumbers ?? NSNull(),
24
+ "cardLastNumbers": cardLastNumbers ?? NSNull(),
25
+ "metaData": metaData ?? NSNull(),
26
+ ]
27
+ }
28
+ }
@@ -0,0 +1,71 @@
1
+ //
2
+ // ErrorResultAdapter.swift
3
+ // fidel-react-native
4
+ //
5
+ // Created by Corneliu Chitanu on 09/12/21.
6
+ //
7
+
8
+ import Foundation
9
+ import Fidel
10
+
11
+ extension FidelError {
12
+ var dictionary: [String: Any] {
13
+ var dictionaryToReturn: [String: Any] = [
14
+ "type": type.jsTypeValue,
15
+ "message": message,
16
+ "date": date.timeIntervalSince1970
17
+ ]
18
+ if let subtype = type.jsErrorSubtype {
19
+ dictionaryToReturn["subtype"] = subtype
20
+ }
21
+ return dictionaryToReturn
22
+ }
23
+ }
24
+
25
+ extension FidelErrorType {
26
+ var jsTypeValue: String {
27
+ switch self {
28
+ case .enrollmentError: return "enrollmentError"
29
+ case .verificationError: return "verificationError"
30
+ case .userCanceled: return "userCanceled"
31
+ case .sdkConfigurationError: return "sdkConfigurationError"
32
+ case .deviceNotSecure: return "deviceNotSecure"
33
+ @unknown default: return "unknown"
34
+ }
35
+ }
36
+
37
+ var jsErrorSubtype: String? {
38
+ switch self {
39
+ case let .enrollmentError(enrollmentError):
40
+ switch enrollmentError {
41
+ case .cardAlreadyExists: return "cardAlreadyExists"
42
+ case .inexistentProgram: return "inexistentProgram"
43
+ case .invalidSDKKey: return "invalidSdkKey"
44
+ case .invalidProgramID: return "invalidProgramId"
45
+ case .unexpected: return "unexpected"
46
+ case .unauthorized: return "unauthorized"
47
+ case .issuerProcessingError: return "issuerProcessingError"
48
+ case .duplicateTransactionError: return "duplicateTransactionError"
49
+ case .insufficientFundsError: return "insufficientFundsError"
50
+ case .processingChargeError: return "processingChargeError"
51
+ case .cardDetailsError: return "cardDetailsError"
52
+ case .cardLimitExceededError: return "cardLimitExceededError"
53
+ @unknown default: return "unexpected"
54
+ }
55
+ case let .verificationError(verificationError):
56
+ switch verificationError {
57
+ case .cardAlreadyVerified: return "cardAlreadyVerified"
58
+ case .cardNotFound: return "cardNotFound"
59
+ case .verificationNotFound: return "verificationNotFound"
60
+ case .genericError: return "genericError"
61
+ case .maximumAttemptsReached: return "maximumAttemptsReached"
62
+ case .incorrectAmount, .incorrectAmountCode: return "incorrectAmount"
63
+ case .unauthorized: return "unauthorized"
64
+ case .unexpected: return "unexpected"
65
+ case .invalidSDKKey: return "invalidSdkKey"
66
+ @unknown default: return "unexpected"
67
+ }
68
+ default: return nil
69
+ }
70
+ }
71
+ }
@@ -1,5 +1,5 @@
1
1
  //
2
- // FLRNImageAdapter.h
2
+ // FLRNImageFromRNAdapter.h
3
3
  // Fidel
4
4
  //
5
5
  // Created by Corneliu on 24/03/2019.
@@ -7,9 +7,8 @@
7
7
  //
8
8
 
9
9
  #import <Foundation/Foundation.h>
10
- #import <UIKit/UIKit.h>
11
10
 
12
- @protocol FLRNImageAdapter <NSObject>
11
+ @interface FLRNImageFromRNAdapter : NSObject
13
12
 
14
13
  -(UIImage *)imageFromRawData:(id)rawImageData;
15
14
 
@@ -0,0 +1,89 @@
1
+ //
2
+ // FidelSetupAdapter.swift
3
+ // fidel-react-native
4
+ //
5
+ // Created by Corneliu Chitanu on 08/12/21.
6
+ //
7
+
8
+ import Foundation
9
+ import Fidel
10
+
11
+ class FidelSetupAdapter: NSObject {
12
+
13
+ private let imageAdapter: FLRNImageFromRNAdapter
14
+
15
+ init(imageAdapter: FLRNImageFromRNAdapter) {
16
+ self.imageAdapter = imageAdapter
17
+ super.init()
18
+ }
19
+
20
+ func setup(with parameters: NSDictionary) {
21
+ guard let parameters = parameters as? [String: Any?] else {
22
+ return
23
+ }
24
+ if parameters.keys.contains(FidelSetupProperties.sdkKey.rawValue) {
25
+ Fidel.sdkKey = parameters[FidelSetupProperties.sdkKey.rawValue] as? String
26
+ }
27
+ if parameters.keys.contains(FidelSetupProperties.programID.rawValue) {
28
+ Fidel.programID = parameters[FidelSetupProperties.programID.rawValue] as? String
29
+ }
30
+ if parameters.keys.contains(FidelSetupProperties.programType.rawValue) {
31
+ let programTypeJSValue = parameters[FidelSetupProperties.programType.rawValue] as? String
32
+ Fidel.programType = ProgramType.programType(from: programTypeJSValue)
33
+ }
34
+ if parameters.keys.contains(FidelSetupProperties.options.rawValue),
35
+ let options = parameters[FidelSetupProperties.options.rawValue] as? [String: Any?] {
36
+ setOptions(options)
37
+ }
38
+ if parameters.keys.contains(FidelSetupProperties.consentText.rawValue),
39
+ let consentTextValues = parameters[FidelSetupProperties.consentText.rawValue] as? [String: Any?] {
40
+ setConsentTextValues(consentTextValues)
41
+ }
42
+ }
43
+
44
+ func setOptions(_ options: [String: Any?]) {
45
+ if options.keys.contains(FidelSetupProperties.Options.bannerImage.rawValue),
46
+ let rawImageObject = options[FidelSetupProperties.Options.bannerImage.rawValue] as? NSObject {
47
+ Fidel.bannerImage = imageAdapter.image(fromRawData: rawImageObject)
48
+ }
49
+ if options.keys.contains(FidelSetupProperties.Options.allowedCountries.rawValue),
50
+ let countryJSKeys = options[FidelSetupProperties.Options.allowedCountries.rawValue] as? [String] {
51
+ Fidel.allowedCountries = Country.countriesSet(from: countryJSKeys)
52
+ }
53
+ if options.keys.contains(FidelSetupProperties.Options.defaultSelectedCountry.rawValue),
54
+ let countryJSKey = options[FidelSetupProperties.Options.defaultSelectedCountry.rawValue] as? String,
55
+ let defaultSelectedCountry = Country.country(from: countryJSKey) {
56
+ Fidel.defaultSelectedCountry = defaultSelectedCountry
57
+ }
58
+ if options.keys.contains(FidelSetupProperties.Options.supportedCardSchemes.rawValue),
59
+ let supportedCardSchemeJSKeys = options[FidelSetupProperties.Options.supportedCardSchemes.rawValue] as? [String] {
60
+ Fidel.supportedCardSchemes = CardScheme.cardSchemesSet(from: supportedCardSchemeJSKeys)
61
+ }
62
+ if options.keys.contains(FidelSetupProperties.Options.thirdPartyVerificationChoice.rawValue) {
63
+ Fidel.thirdPartyVerificationChoice = options[FidelSetupProperties.Options.thirdPartyVerificationChoice.rawValue] as? Bool ?? false
64
+ }
65
+ if options.keys.contains(FidelSetupProperties.Options.metaData.rawValue) {
66
+ Fidel.metaData = options[FidelSetupProperties.Options.metaData.rawValue] as? [String: Any]
67
+ }
68
+ }
69
+
70
+ private func setConsentTextValues(_ consentTextValues: [String: Any?]) {
71
+ if consentTextValues.keys.contains(FidelSetupProperties.ConsentText.companyName.rawValue) {
72
+ Fidel.companyName = consentTextValues[FidelSetupProperties.ConsentText.companyName.rawValue] as? String
73
+ }
74
+ if consentTextValues.keys.contains(FidelSetupProperties.ConsentText.termsAndConditionsURL.rawValue) {
75
+ Fidel.termsAndConditionsURL = consentTextValues[FidelSetupProperties.ConsentText.termsAndConditionsURL.rawValue] as? String
76
+ }
77
+ if consentTextValues.keys.contains(FidelSetupProperties.ConsentText.privacyPolicyURL.rawValue) {
78
+ Fidel.privacyPolicyURL = consentTextValues[FidelSetupProperties.ConsentText.privacyPolicyURL.rawValue] as? String
79
+ }
80
+ if consentTextValues.keys.contains(FidelSetupProperties.ConsentText.programName.rawValue),
81
+ let programName = consentTextValues[FidelSetupProperties.ConsentText.programName.rawValue] as? String {
82
+ Fidel.programName = programName
83
+ }
84
+ if consentTextValues.keys.contains(FidelSetupProperties.ConsentText.deleteInstructions.rawValue),
85
+ let deleteInstructions = consentTextValues[FidelSetupProperties.ConsentText.deleteInstructions.rawValue] as? String {
86
+ Fidel.deleteInstructions = deleteInstructions
87
+ }
88
+ }
89
+ }