@finspringinnovations/fdsdk 0.0.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 (315) hide show
  1. package/README.md +184 -0
  2. package/lib/api/applicationApi.d.ts +1 -0
  3. package/lib/api/applicationApi.js +11 -0
  4. package/lib/api/bankApi.d.ts +352 -0
  5. package/lib/api/bankApi.js +54 -0
  6. package/lib/api/baseApi.d.ts +8 -0
  7. package/lib/api/baseApi.js +456 -0
  8. package/lib/api/customerApi.d.ts +855 -0
  9. package/lib/api/customerApi.js +213 -0
  10. package/lib/api/fdApi.d.ts +979 -0
  11. package/lib/api/fdApi.js +112 -0
  12. package/lib/api/fdCalculatorApi.d.ts +179 -0
  13. package/lib/api/fdCalculatorApi.js +36 -0
  14. package/lib/api/index.d.ts +14 -0
  15. package/lib/api/index.js +45 -0
  16. package/lib/api/interestRateApi.d.ts +585 -0
  17. package/lib/api/interestRateApi.js +101 -0
  18. package/lib/api/kycApi.d.ts +486 -0
  19. package/lib/api/kycApi.js +71 -0
  20. package/lib/api/masterDataApi.d.ts +158 -0
  21. package/lib/api/masterDataApi.js +32 -0
  22. package/lib/api/nomineeApi.d.ts +325 -0
  23. package/lib/api/nomineeApi.js +46 -0
  24. package/lib/api/onboardingApi.d.ts +192 -0
  25. package/lib/api/onboardingApi.js +41 -0
  26. package/lib/api/panApi.d.ts +0 -0
  27. package/lib/api/panApi.js +23 -0
  28. package/lib/api/paymentApi.d.ts +325 -0
  29. package/lib/api/paymentApi.js +46 -0
  30. package/lib/api/workflowApi.d.ts +654 -0
  31. package/lib/api/workflowApi.js +90 -0
  32. package/lib/assets/images/images.d.ts +4 -0
  33. package/lib/assets/images/images.js +10 -0
  34. package/lib/components/AadhaarInput.d.ts +13 -0
  35. package/lib/components/AadhaarInput.js +47 -0
  36. package/lib/components/ActionButton.d.ts +12 -0
  37. package/lib/components/ActionButton.js +87 -0
  38. package/lib/components/ActiveFDCard.d.ts +16 -0
  39. package/lib/components/ActiveFDCard.js +95 -0
  40. package/lib/components/AmountInput.d.ts +20 -0
  41. package/lib/components/AmountInput.js +144 -0
  42. package/lib/components/CheckboxOption.d.ts +11 -0
  43. package/lib/components/CheckboxOption.js +41 -0
  44. package/lib/components/CompanyHeader.d.ts +7 -0
  45. package/lib/components/CompanyHeader.js +57 -0
  46. package/lib/components/DropdownSelector.d.ts +9 -0
  47. package/lib/components/DropdownSelector.js +49 -0
  48. package/lib/components/EmptyState.d.ts +17 -0
  49. package/lib/components/EmptyState.js +44 -0
  50. package/lib/components/ErrorDisplay.d.ts +17 -0
  51. package/lib/components/ErrorDisplay.js +69 -0
  52. package/lib/components/FAQItem.d.ts +9 -0
  53. package/lib/components/FAQItem.js +52 -0
  54. package/lib/components/FDCard.d.ts +21 -0
  55. package/lib/components/FDCard.js +96 -0
  56. package/lib/components/FormDropdown.d.ts +18 -0
  57. package/lib/components/FormDropdown.js +155 -0
  58. package/lib/components/FormSection.d.ts +14 -0
  59. package/lib/components/FormSection.js +38 -0
  60. package/lib/components/Header.d.ts +14 -0
  61. package/lib/components/Header.js +52 -0
  62. package/lib/components/IFSCSearchResultCard.d.ts +13 -0
  63. package/lib/components/IFSCSearchResultCard.js +70 -0
  64. package/lib/components/InfoBox.d.ts +8 -0
  65. package/lib/components/InfoBox.js +39 -0
  66. package/lib/components/InterestRateCard.d.ts +8 -0
  67. package/lib/components/InterestRateCard.js +46 -0
  68. package/lib/components/LoadingIndicator.d.ts +12 -0
  69. package/lib/components/LoadingIndicator.js +30 -0
  70. package/lib/components/OTPInput.d.ts +17 -0
  71. package/lib/components/OTPInput.js +144 -0
  72. package/lib/components/PaymentDetailsCard.d.ts +20 -0
  73. package/lib/components/PaymentDetailsCard.js +68 -0
  74. package/lib/components/PendingFDBottomSheet.d.ts +18 -0
  75. package/lib/components/PendingFDBottomSheet.js +122 -0
  76. package/lib/components/SafeAreaWrapper.d.ts +13 -0
  77. package/lib/components/SafeAreaWrapper.js +41 -0
  78. package/lib/components/ScreenHeader.d.ts +11 -0
  79. package/lib/components/ScreenHeader.js +46 -0
  80. package/lib/components/StatusDisplay.d.ts +15 -0
  81. package/lib/components/StatusDisplay.js +88 -0
  82. package/lib/components/TextFieldWithLabel.d.ts +46 -0
  83. package/lib/components/TextFieldWithLabel.js +326 -0
  84. package/lib/components/TrustBox.d.ts +8 -0
  85. package/lib/components/TrustBox.js +45 -0
  86. package/lib/components/ValidationErrorAlert.d.ts +23 -0
  87. package/lib/components/ValidationErrorAlert.js +39 -0
  88. package/lib/components/ValidationMessage.d.ts +9 -0
  89. package/lib/components/ValidationMessage.js +98 -0
  90. package/lib/components/index.d.ts +35 -0
  91. package/lib/components/index.js +64 -0
  92. package/lib/config/apiConfig.d.ts +34 -0
  93. package/lib/config/apiConfig.js +158 -0
  94. package/lib/config/appDataConfig.d.ts +114 -0
  95. package/lib/config/appDataConfig.js +264 -0
  96. package/lib/config/encryptionConfig.d.ts +21 -0
  97. package/lib/config/encryptionConfig.js +61 -0
  98. package/lib/config/workflowConstants.d.ts +37 -0
  99. package/lib/config/workflowConstants.js +38 -0
  100. package/lib/constants/strings/bank.d.ts +72 -0
  101. package/lib/constants/strings/bank.js +86 -0
  102. package/lib/constants/strings/base64Images.d.ts +25 -0
  103. package/lib/constants/strings/base64Images.js +28 -0
  104. package/lib/constants/strings/common.d.ts +53 -0
  105. package/lib/constants/strings/common.js +62 -0
  106. package/lib/constants/strings/employee.d.ts +61 -0
  107. package/lib/constants/strings/employee.js +77 -0
  108. package/lib/constants/strings/faq.d.ts +14 -0
  109. package/lib/constants/strings/faq.js +20 -0
  110. package/lib/constants/strings/fd.d.ts +122 -0
  111. package/lib/constants/strings/fd.js +151 -0
  112. package/lib/constants/strings/home.d.ts +49 -0
  113. package/lib/constants/strings/home.js +62 -0
  114. package/lib/constants/strings/index.d.ts +16 -0
  115. package/lib/constants/strings/index.js +44 -0
  116. package/lib/constants/strings/kyc.d.ts +80 -0
  117. package/lib/constants/strings/kyc.js +94 -0
  118. package/lib/constants/strings/nominee.d.ts +64 -0
  119. package/lib/constants/strings/nominee.js +81 -0
  120. package/lib/hooks/useAuth.d.ts +25 -0
  121. package/lib/hooks/useAuth.js +39 -0
  122. package/lib/hooks/useFDData.d.ts +11 -0
  123. package/lib/hooks/useFDData.js +40 -0
  124. package/lib/index.d.ts +69 -0
  125. package/lib/index.js +182 -0
  126. package/lib/navigation/RootNavigator.d.ts +8 -0
  127. package/lib/navigation/RootNavigator.js +205 -0
  128. package/lib/navigation/SimpleNavigator.d.ts +11 -0
  129. package/lib/navigation/SimpleNavigator.js +107 -0
  130. package/lib/navigation/helpers.d.ts +11 -0
  131. package/lib/navigation/helpers.js +83 -0
  132. package/lib/navigation/index.d.ts +15 -0
  133. package/lib/navigation/index.js +42 -0
  134. package/lib/navigation/types.d.ts +113 -0
  135. package/lib/navigation/types.js +2 -0
  136. package/lib/navigation/workflowNavigator.d.ts +22 -0
  137. package/lib/navigation/workflowNavigator.js +104 -0
  138. package/lib/providers/ApiProvider.d.ts +7 -0
  139. package/lib/providers/ApiProvider.js +34 -0
  140. package/lib/providers/MasterDataProvider.d.ts +10 -0
  141. package/lib/providers/MasterDataProvider.js +54 -0
  142. package/lib/screens/AadhaarVerification.d.ts +7 -0
  143. package/lib/screens/AadhaarVerification.js +627 -0
  144. package/lib/screens/AddBankAccount.d.ts +22 -0
  145. package/lib/screens/AddBankAccount.js +381 -0
  146. package/lib/screens/BankDetail.d.ts +16 -0
  147. package/lib/screens/BankDetail.js +596 -0
  148. package/lib/screens/BookFD.d.ts +0 -0
  149. package/lib/screens/BookFD.js +315 -0
  150. package/lib/screens/Employee.d.ts +18 -0
  151. package/lib/screens/Employee.js +594 -0
  152. package/lib/screens/FDCalculator.d.ts +18 -0
  153. package/lib/screens/FDCalculator.js +759 -0
  154. package/lib/screens/FDList.d.ts +27 -0
  155. package/lib/screens/FDList.js +1008 -0
  156. package/lib/screens/FindIFSC.d.ts +16 -0
  157. package/lib/screens/FindIFSC.js +248 -0
  158. package/lib/screens/Home.d.ts +0 -0
  159. package/lib/screens/Home.js +143 -0
  160. package/lib/screens/NomineeDetail.d.ts +17 -0
  161. package/lib/screens/NomineeDetail.js +592 -0
  162. package/lib/screens/PayNow.d.ts +14 -0
  163. package/lib/screens/PayNow.js +230 -0
  164. package/lib/screens/Payment.d.ts +11 -0
  165. package/lib/screens/Payment.js +191 -0
  166. package/lib/screens/PaymentStatus.d.ts +16 -0
  167. package/lib/screens/PaymentStatus.js +397 -0
  168. package/lib/screens/ReviewKYC.d.ts +21 -0
  169. package/lib/screens/ReviewKYC.js +660 -0
  170. package/lib/state/paymentSession.d.ts +8 -0
  171. package/lib/state/paymentSession.js +13 -0
  172. package/lib/store/fdListSelectedSlice.d.ts +21 -0
  173. package/lib/store/fdListSelectedSlice.js +26 -0
  174. package/lib/store/hooks.d.ts +8 -0
  175. package/lib/store/hooks.js +31 -0
  176. package/lib/store/index.d.ts +3 -0
  177. package/lib/store/index.js +8 -0
  178. package/lib/store/onboardingSlice.d.ts +12 -0
  179. package/lib/store/onboardingSlice.js +32 -0
  180. package/lib/store/store.d.ts +13 -0
  181. package/lib/store/store.js +33 -0
  182. package/lib/theme/ThemeContext.d.ts +210 -0
  183. package/lib/theme/ThemeContext.js +90 -0
  184. package/lib/theme/colors.d.ts +80 -0
  185. package/lib/theme/colors.js +85 -0
  186. package/lib/theme/index.d.ts +34 -0
  187. package/lib/theme/index.js +69 -0
  188. package/lib/theme/shadows.d.ts +53 -0
  189. package/lib/theme/shadows.js +58 -0
  190. package/lib/theme/typography.d.ts +134 -0
  191. package/lib/theme/typography.js +143 -0
  192. package/lib/types/dataTypes.d.ts +34 -0
  193. package/lib/types/dataTypes.js +2 -0
  194. package/lib/types/workflowTypes.d.ts +2 -0
  195. package/lib/types/workflowTypes.js +2 -0
  196. package/lib/utils/apiLogger.d.ts +48 -0
  197. package/lib/utils/apiLogger.js +105 -0
  198. package/lib/utils/encryption.d.ts +28 -0
  199. package/lib/utils/encryption.js +113 -0
  200. package/lib/utils/getFDData.d.ts +48 -0
  201. package/lib/utils/getFDData.js +154 -0
  202. package/lib/utils/globalData.d.ts +2 -0
  203. package/lib/utils/globalData.js +10 -0
  204. package/package.json +76 -0
  205. package/src/api/applicationApi.ts +12 -0
  206. package/src/api/bankApi.ts +42 -0
  207. package/src/api/baseApi.ts +513 -0
  208. package/src/api/customerApi.ts +291 -0
  209. package/src/api/fdApi.ts +150 -0
  210. package/src/api/fdCalculatorApi.ts +41 -0
  211. package/src/api/index.ts +29 -0
  212. package/src/api/interestRateApi.ts +143 -0
  213. package/src/api/kycApi.ts +63 -0
  214. package/src/api/masterDataApi.ts +34 -0
  215. package/src/api/nomineeApi.ts +34 -0
  216. package/src/api/onboardingApi.ts +64 -0
  217. package/src/api/panApi.ts +25 -0
  218. package/src/api/paymentApi.ts +34 -0
  219. package/src/api/workflowApi.ts +94 -0
  220. package/src/assets/images/arrow-filled.png +0 -0
  221. package/src/assets/images/arrow-left.png +0 -0
  222. package/src/assets/images/backicon.png +0 -0
  223. package/src/assets/images/calendar.png +0 -0
  224. package/src/assets/images/chevron-down.png +0 -0
  225. package/src/assets/images/chevron-down@2x.png +0 -0
  226. package/src/assets/images/chevron-down@3x.png +0 -0
  227. package/src/assets/images/images.js +8 -0
  228. package/src/components/AadhaarInput.tsx +91 -0
  229. package/src/components/ActionButton.tsx +129 -0
  230. package/src/components/ActiveFDCard.tsx +158 -0
  231. package/src/components/AmountInput.tsx +217 -0
  232. package/src/components/CheckboxOption.tsx +93 -0
  233. package/src/components/CompanyHeader.tsx +78 -0
  234. package/src/components/DropdownSelector.tsx +77 -0
  235. package/src/components/EmptyState.tsx +109 -0
  236. package/src/components/ErrorDisplay.tsx +135 -0
  237. package/src/components/FAQItem.tsx +90 -0
  238. package/src/components/FDCard.tsx +165 -0
  239. package/src/components/FormDropdown.tsx +214 -0
  240. package/src/components/FormSection.tsx +86 -0
  241. package/src/components/Header.tsx +110 -0
  242. package/src/components/IFSCSearchResultCard.tsx +139 -0
  243. package/src/components/InfoBox.tsx +55 -0
  244. package/src/components/InterestRateCard.tsx +77 -0
  245. package/src/components/LoadingIndicator.tsx +63 -0
  246. package/src/components/OTPInput.tsx +213 -0
  247. package/src/components/PaymentDetailsCard.tsx +120 -0
  248. package/src/components/PendingFDBottomSheet.tsx +235 -0
  249. package/src/components/README.md +210 -0
  250. package/src/components/SafeAreaWrapper.tsx +68 -0
  251. package/src/components/ScreenHeader.tsx +83 -0
  252. package/src/components/StatusDisplay.tsx +139 -0
  253. package/src/components/TextFieldWithLabel.tsx +502 -0
  254. package/src/components/TrustBox.tsx +63 -0
  255. package/src/components/ValidationErrorAlert.tsx +57 -0
  256. package/src/components/ValidationMessage.tsx +134 -0
  257. package/src/components/index.tsx +47 -0
  258. package/src/config/apiConfig.ts +217 -0
  259. package/src/config/appDataConfig.ts +279 -0
  260. package/src/config/encryptionConfig.ts +65 -0
  261. package/src/config/workflowConstants.ts +43 -0
  262. package/src/constants/strings/README.md +146 -0
  263. package/src/constants/strings/bank.ts +92 -0
  264. package/src/constants/strings/base64Images.ts +29 -0
  265. package/src/constants/strings/common.ts +63 -0
  266. package/src/constants/strings/employee.ts +85 -0
  267. package/src/constants/strings/faq.ts +23 -0
  268. package/src/constants/strings/fd.ts +172 -0
  269. package/src/constants/strings/home.ts +67 -0
  270. package/src/constants/strings/index.ts +21 -0
  271. package/src/constants/strings/kyc.ts +100 -0
  272. package/src/constants/strings/nominee.ts +90 -0
  273. package/src/hooks/useAuth.ts +42 -0
  274. package/src/hooks/useFDData.ts +48 -0
  275. package/src/index.tsx +173 -0
  276. package/src/navigation/RootNavigator.tsx +352 -0
  277. package/src/navigation/SimpleNavigator.tsx +107 -0
  278. package/src/navigation/helpers.ts +85 -0
  279. package/src/navigation/index.tsx +81 -0
  280. package/src/navigation/types.ts +124 -0
  281. package/src/navigation/workflowNavigator.ts +131 -0
  282. package/src/providers/ApiProvider.tsx +43 -0
  283. package/src/providers/MasterDataProvider.tsx +30 -0
  284. package/src/screens/AadhaarVerification.tsx +809 -0
  285. package/src/screens/AddBankAccount.tsx +541 -0
  286. package/src/screens/BankDetail.tsx +826 -0
  287. package/src/screens/BookFD.tsx +330 -0
  288. package/src/screens/Employee.tsx +822 -0
  289. package/src/screens/FDCalculator.tsx +987 -0
  290. package/src/screens/FDList.tsx +1284 -0
  291. package/src/screens/FindIFSC.tsx +332 -0
  292. package/src/screens/Home.tsx +152 -0
  293. package/src/screens/NomineeDetail.tsx +800 -0
  294. package/src/screens/PayNow.tsx +282 -0
  295. package/src/screens/Payment.tsx +224 -0
  296. package/src/screens/PaymentStatus.tsx +561 -0
  297. package/src/screens/ReviewKYC.tsx +956 -0
  298. package/src/state/paymentSession.ts +13 -0
  299. package/src/store/fdListSelectedSlice.ts +42 -0
  300. package/src/store/hooks.ts +27 -0
  301. package/src/store/index.ts +3 -0
  302. package/src/store/onboardingSlice.ts +37 -0
  303. package/src/store/store.ts +35 -0
  304. package/src/theme/ThemeContext.tsx +82 -0
  305. package/src/theme/colors.ts +90 -0
  306. package/src/theme/index.ts +64 -0
  307. package/src/theme/shadows.ts +61 -0
  308. package/src/theme/typography.ts +151 -0
  309. package/src/types/dataTypes.ts +37 -0
  310. package/src/types/env.d.ts +93 -0
  311. package/src/types/workflowTypes.ts +12 -0
  312. package/src/utils/apiLogger.ts +166 -0
  313. package/src/utils/encryption.ts +159 -0
  314. package/src/utils/getFDData.ts +175 -0
  315. package/src/utils/globalData.ts +7 -0
@@ -0,0 +1,134 @@
1
+ import React from 'react';
2
+ import { View, Text, StyleSheet, Image } from 'react-native';
3
+ import Icon from 'react-native-vector-icons/Ionicons';
4
+ import { base64Images } from '../constants/strings/base64Images';
5
+ import { useColors } from '../theme/ThemeContext';
6
+
7
+ export type MessageType = 'error' | 'success' | 'loading';
8
+
9
+ export interface ValidationMessageProps {
10
+ type: MessageType;
11
+ message: string;
12
+ visible?: boolean;
13
+ }
14
+
15
+ const ValidationMessage: React.FC<ValidationMessageProps> = ({
16
+ type,
17
+ message,
18
+ visible = true,
19
+ }) => {
20
+ const colors = useColors();
21
+ const styles = createStyles(colors);
22
+
23
+ if (!visible || !message) return null;
24
+
25
+ const getIconName = (): string => {
26
+ switch (type) {
27
+ case 'error':
28
+ return 'warning';
29
+ case 'success':
30
+ return 'checkmark-circle';
31
+ case 'loading':
32
+ return 'time';
33
+ default:
34
+ return 'information-circle';
35
+ }
36
+ };
37
+
38
+ const getIconColor = (): string => {
39
+ switch (type) {
40
+ case 'error':
41
+ return colors.error;
42
+ case 'success':
43
+ return colors.success;
44
+ case 'loading':
45
+ return colors.primary;
46
+ default:
47
+ return colors.textLight;
48
+ }
49
+ };
50
+
51
+ const getTextStyle = () => {
52
+ switch (type) {
53
+ case 'error':
54
+ return styles.errorText;
55
+ case 'success':
56
+ return styles.successText;
57
+ case 'loading':
58
+ return styles.loadingText;
59
+ default:
60
+ return styles.defaultText;
61
+ }
62
+ };
63
+
64
+ return (
65
+ <View style={[styles.container, type === 'loading' && styles.loadingContainer]}>
66
+ {type === 'success' ? (
67
+ <Image
68
+ source={{ uri: base64Images.greenTick }}
69
+ style={styles.imageIcon}
70
+ resizeMode="contain"
71
+ />
72
+ ) : type === 'error' ? (
73
+ <Image
74
+ source={{ uri: base64Images.error }}
75
+ style={styles.imageIcon}
76
+ resizeMode="contain"
77
+ />
78
+ ) : (
79
+ <Icon
80
+ name={getIconName()}
81
+ size={16}
82
+ color={getIconColor()}
83
+ style={styles.icon}
84
+ />
85
+ )}
86
+ <Text style={getTextStyle()}>{message}</Text>
87
+ </View>
88
+ );
89
+ };
90
+
91
+ const createStyles = (colors: any) => StyleSheet.create({
92
+ container: {
93
+ flexDirection: 'row',
94
+ alignItems: 'center',
95
+ marginTop: -8,
96
+ marginBottom: 16,
97
+ },
98
+ loadingContainer: {
99
+ justifyContent: 'center',
100
+ },
101
+ icon: {
102
+ marginRight: 6,
103
+ },
104
+ imageIcon: {
105
+ width: 16,
106
+ height: 16,
107
+ marginRight: 6,
108
+ },
109
+ errorText: {
110
+ fontSize: 12,
111
+ color: colors.error,
112
+ fontWeight: '500',
113
+ flex: 1,
114
+ },
115
+ successText: {
116
+ fontSize: 12,
117
+ color: colors.success,
118
+ fontWeight: '500',
119
+ flex: 1,
120
+ },
121
+ loadingText: {
122
+ fontSize: 12,
123
+ color: colors.primary,
124
+ fontWeight: '500',
125
+ },
126
+ defaultText: {
127
+ fontSize: 12,
128
+ color: colors.textLight,
129
+ fontWeight: '500',
130
+ flex: 1,
131
+ },
132
+ });
133
+
134
+ export default ValidationMessage;
@@ -0,0 +1,47 @@
1
+ export { default as Header } from './Header';
2
+ export { default as ActiveFDCard } from './ActiveFDCard';
3
+ export { default as FDCard } from './FDCard';
4
+ export { default as PendingFDBottomSheet } from './PendingFDBottomSheet';
5
+ export { default as AmountInput } from './AmountInput';
6
+ export { default as DropdownSelector } from './DropdownSelector';
7
+ export { default as InterestRateCard } from './InterestRateCard';
8
+ export { default as CheckboxOption } from './CheckboxOption';
9
+ export { default as TrustBox } from './TrustBox';
10
+ export { default as FAQItem } from './FAQItem';
11
+ export { default as CompanyHeader } from './CompanyHeader';
12
+ export { default as InfoBox } from './InfoBox';
13
+
14
+ // New Aadhaar Verification Components
15
+ export { default as AadhaarInput } from './AadhaarInput';
16
+ export { default as OTPInput } from './OTPInput';
17
+ export { default as ValidationMessage } from './ValidationMessage';
18
+ export { default as ActionButton } from './ActionButton';
19
+ export { default as ScreenHeader } from './ScreenHeader';
20
+
21
+ // Reusable Form Components
22
+ export { default as TextFieldWithLabel } from './TextFieldWithLabel';
23
+ export type { TextFieldWithLabelProps, BaseTextFieldProps } from './TextFieldWithLabel';
24
+
25
+ // Payment Components
26
+ export { default as PaymentDetailsCard } from './PaymentDetailsCard';
27
+ export type { PaymentDetailsCardProps } from './PaymentDetailsCard';
28
+
29
+ // Form Components
30
+ export { default as FormDropdown } from './FormDropdown';
31
+ export type { FormDropdownProps } from './FormDropdown';
32
+ export { default as FormSection } from './FormSection';
33
+ export type { FormSectionProps } from './FormSection';
34
+
35
+ // Status and Display Components
36
+ export { default as StatusDisplay } from './StatusDisplay';
37
+ export type { StatusDisplayProps } from './StatusDisplay';
38
+ export { default as LoadingIndicator } from './LoadingIndicator';
39
+ export type { LoadingIndicatorProps } from './LoadingIndicator';
40
+ export { default as ErrorDisplay } from './ErrorDisplay';
41
+ export type { ErrorDisplayProps } from './ErrorDisplay';
42
+ export { default as EmptyState } from './EmptyState';
43
+ export type { EmptyStateProps } from './EmptyState';
44
+
45
+ // IFSC Search Components
46
+ export { default as IFSCSearchResultCard } from './IFSCSearchResultCard';
47
+ export type { IFSCSearchResultCardProps } from './IFSCSearchResultCard';
@@ -0,0 +1,217 @@
1
+ // API Configuration with values from main app
2
+ import 'react-native-get-random-values';
3
+ import { getEnvironmentData } from './appDataConfig';
4
+
5
+
6
+ export const logEnvLoaderValues = () => {
7
+ // Environment values logging removed for security
8
+ };
9
+
10
+ export type Environment = 'development' | 'staging' | 'production';
11
+
12
+ // Secure API configuration interface
13
+ export interface ApiConfig {
14
+ baseUrl: string;
15
+ timeout: number;
16
+ retryAttempts: number;
17
+ enableEncryption: boolean;
18
+ enableLogging: boolean;
19
+ headers: Record<string, string>;
20
+ // New encryption toggle parameter
21
+ allowEncryptionToggle?: boolean;
22
+ }
23
+
24
+ // Environment detection - using hardcoded default
25
+ export const getEnvironment = (): Environment => {
26
+ // Default to development for hardcoded configuration
27
+ return 'development';
28
+ };
29
+
30
+ // Common configuration shared by all environments
31
+ const COMMON_CONFIG = {
32
+ timeout: 60000,
33
+ retryAttempts: 3,
34
+ enableEncryption: true,
35
+ enableLogging: true,
36
+ allowEncryptionToggle: true,
37
+ headersBase: {
38
+ 'X-Client-Version': '1.0.0',
39
+ },
40
+ };
41
+
42
+
43
+ const API_ENDPOINTS = {
44
+ development: {
45
+ ...COMMON_CONFIG,
46
+ baseUrl: '',
47
+ headers: {
48
+ ...COMMON_CONFIG.headersBase,
49
+ 'X-Environment': 'development',
50
+ 'X-API-Key': '',
51
+ },
52
+ }
53
+ } as const;
54
+
55
+ // Get API configuration for current environment
56
+ export const getApiConfig = (env?: Environment): ApiConfig => {
57
+ // Get environment data from main app first
58
+ const environmentData = getEnvironmentData();
59
+
60
+ // Use environment from EnvironmentData if available, otherwise use parameter or default
61
+ // const currentEnv = env || environmentData?.environment || getEnvironment();
62
+ const config = API_ENDPOINTS.development;
63
+
64
+ // Create a new config object to avoid read-only issues
65
+ let finalConfig = { ...config };
66
+
67
+ // Override configuration with values from main app if available
68
+ if (environmentData) {
69
+ // Override base URL if provided by main app
70
+ if (environmentData.apiBaseUrl) {
71
+ // finalConfig.baseUrl = environmentData.apiBaseUrl as any;
72
+ finalConfig = { ...finalConfig, baseUrl: environmentData.apiBaseUrl as any };
73
+ }
74
+
75
+ // Override API key if provided by main app
76
+ if (environmentData.apiKey) {
77
+ finalConfig.headers = { ...finalConfig.headers, 'X-API-Key': environmentData.apiKey as any };
78
+ }
79
+
80
+ // Override environment if provided by main app
81
+ if (environmentData.environment) {
82
+ finalConfig.headers = { ...finalConfig.headers, 'X-Environment': environmentData.environment as any };
83
+ }
84
+ }
85
+
86
+ // Use secure logger for API configuration logging
87
+
88
+ // Validate configuration
89
+ if (!finalConfig.baseUrl) {
90
+ throw new Error(`Missing API base URL `);
91
+ }
92
+
93
+ return {
94
+ ...finalConfig,
95
+ baseUrl: sanitizeUrl(finalConfig.baseUrl),
96
+ };
97
+ };
98
+
99
+ // Sanitize and validate URL
100
+ const sanitizeUrl = (url: string): string => {
101
+ if (!url || typeof url !== 'string') {
102
+ throw new Error(`Invalid API URL: ${url}`);
103
+ }
104
+
105
+ // Trim leading and trailing spaces
106
+ let sanitized = url.trim();
107
+
108
+ // Basic URL validation - check if it starts with http:// or https://
109
+ if (!sanitized.match(/^https?:\/\//)) {
110
+ throw new Error(`Invalid API URL format: ${sanitized}`);
111
+ }
112
+
113
+ // Ensure HTTPS in production
114
+ if (getEnvironment() === 'production' && !sanitized.startsWith('https://')) {
115
+ throw new Error('Production API must use HTTPS');
116
+ }
117
+
118
+ // Remove trailing slash
119
+ return sanitized.replace(/\/$/, '');
120
+ };
121
+
122
+ // Get secure headers for API requests
123
+ export const getSecureHeaders = (env?: Environment): Record<string, string> => {
124
+ const config = getApiConfig(env);
125
+ //const currentEnv = env || getEnvironment();
126
+
127
+ return {
128
+ ...config.headers,
129
+ 'Content-Type': 'application/json',
130
+ 'Accept': 'application/json',
131
+ 'User-Agent': `ShriramSDK/'1.0.0'`,
132
+ 'X-Timestamp': Date.now().toString(),
133
+ 'X-Request-ID': generateRequestId(),
134
+ };
135
+ };
136
+
137
+ // Generate unique request ID
138
+ const generateRequestId = (): string => {
139
+ return `req_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
140
+ };
141
+
142
+ // Validate environment configuration
143
+ export const validateApiConfig = (config: ApiConfig): boolean => {
144
+ const errors: string[] = [];
145
+
146
+ if (!config.baseUrl) {
147
+ errors.push('Base URL is required');
148
+ }
149
+
150
+ if (config.timeout < 5000) {
151
+ errors.push('Timeout should be at least 5 seconds');
152
+ }
153
+
154
+ if (config.retryAttempts < 0 || config.retryAttempts > 5) {
155
+ errors.push('Retry attempts should be between 0 and 5');
156
+ }
157
+
158
+ // Validate URL format without using new URL (React Native compatible)
159
+ if (config.baseUrl && !config.baseUrl.match(/^https?:\/\//)) {
160
+ errors.push('Invalid base URL format - must start with http:// or https://');
161
+ }
162
+
163
+ if (errors.length > 0) {
164
+ return false;
165
+ }
166
+
167
+ return true;
168
+ };
169
+
170
+ // Get environment-specific configuration
171
+ export const getEnvironmentConfig = () => {
172
+ const env = getEnvironment();
173
+ const config = getApiConfig(env);
174
+
175
+ return {
176
+ environment: env,
177
+ config,
178
+ isProduction: env === 'production',
179
+ isDevelopment: env === 'development',
180
+ isStaging: env === 'staging',
181
+ };
182
+ };
183
+
184
+ // Debug configuration (works in all environments now)
185
+ export const debugApiConfig = (): void => {
186
+ // API Configuration debug complete
187
+ };
188
+
189
+ // New utility to help clients debug 403 errors
190
+ export const debugApiCall = (endpoint: string, method: string = 'GET') => {
191
+ const config = getApiConfig();
192
+ const headers = getSecureHeaders();
193
+
194
+ // API Call debug complete
195
+
196
+ return {
197
+ url: `${config.baseUrl || ''}/${endpoint}`,
198
+ headers,
199
+ environment: getEnvironment(),
200
+ encryptionEnabled: config.enableEncryption,
201
+ hasApiKey: !!headers['X-API-Key']
202
+ };
203
+ };
204
+
205
+ // Environment logging utility
206
+ export const logEnvironmentInfo = (): void => {
207
+ // Environment logging removed for security
208
+ };
209
+
210
+
211
+ // Function to log environment details (can be called from anywhere)
212
+ export const logEnvironmentDetails = () => {
213
+ // Environment details logging removed for security
214
+ };
215
+
216
+ // Export default configuration
217
+ export default getApiConfig;
@@ -0,0 +1,279 @@
1
+ // AppData Configuration - Data received from main app when SDK starts
2
+
3
+ export interface EnvironmentData {
4
+ environment: string;
5
+ apiBaseUrl?: string;
6
+ apiKey?: string;
7
+ encryptionKey?: string;
8
+ enableLogging?: boolean;
9
+ }
10
+
11
+ export interface AppData {
12
+ // Required user identification fields
13
+ id: string; // Required: User ID from main app
14
+ name: string; // Required: User full name
15
+ dob: string; // Required: Date of birth in YYYY-MM-DD format
16
+ gender: string; // Required: Male, Female, Other
17
+ mobNo: string; // Required: Mobile number (10 digits)
18
+ email: string; // Required: Email address
19
+ panNumber: string; // Required: PAN number from main app
20
+
21
+ // Optional fields - can be collected in SDK if not provided
22
+ address?: string;
23
+ area?: string;
24
+ city?: string;
25
+ state?: string;
26
+ country?: string;
27
+ pinCode?: string;
28
+ accountNo?: string;
29
+ nameOfBank?: string;
30
+ ifsc?: string;
31
+ typeOfAccount?: string; // Optional: Savings, Current, Fixed Deposit, Recurring Deposit
32
+ maritalStatus?: string; // Optional: Single, Married, Divorced, Widowed
33
+ userReferenceId?: string; // Optional: User reference ID from main app
34
+ eventNotifyUrl?: string; // Optional webhook/callback URL for SDK events
35
+ }
36
+
37
+ // Global app data storage
38
+ let globalAppData: AppData | null = null;
39
+
40
+ // Global environment data storage
41
+ let globalEnvironmentData: EnvironmentData | null = null;
42
+
43
+ /**
44
+ * Initialize the SDK with app data from the main application
45
+ * This should be called when the SDK starts
46
+ */
47
+ export const initializeSDK = (appData: AppData, onValidationError?: (errors: string[]) => void): void => {
48
+ // Validate required user identification fields
49
+ const requiredFields = [
50
+ { field: 'id', label: 'User ID' },
51
+ { field: 'name', label: 'User Name' },
52
+ { field: 'dob', label: 'Date of Birth' },
53
+ { field: 'gender', label: 'Gender' },
54
+ { field: 'mobNo', label: 'Mobile Number' },
55
+ { field: 'email', label: 'Email' },
56
+ { field: 'panNumber', label: 'PAN Number' },
57
+ ];
58
+
59
+ const missingFields: string[] = [];
60
+
61
+ requiredFields.forEach(({ field, label }) => {
62
+ const value = (appData as any)[field];
63
+ if (!value || (typeof value === 'string' && !value.trim())) {
64
+ missingFields.push(label);
65
+ }
66
+ });
67
+
68
+ // If required fields are missing, call error handler
69
+ if (missingFields.length > 0) {
70
+ const errorMessage = `Missing required user information from main app:\n${missingFields.join(', ')}`;
71
+
72
+ if (onValidationError) {
73
+ onValidationError(missingFields);
74
+ }
75
+
76
+ throw new Error(errorMessage);
77
+ }
78
+
79
+ // Validate all fields
80
+ const validation = validateAppData(appData);
81
+ if (!validation.isValid) {
82
+ if (onValidationError) {
83
+ onValidationError(validation.errors);
84
+ }
85
+
86
+ throw new Error(`App data validation failed: ${validation.errors.join(', ')}`);
87
+ }
88
+
89
+ globalAppData = appData;
90
+
91
+ // SDK initialization started
92
+ try {
93
+ // logging removed
94
+ } catch { }
95
+
96
+ // Import and call environment logging
97
+ import('./apiConfig').then(({ logEnvironmentInfo }) => {
98
+ logEnvironmentInfo();
99
+ });
100
+ };
101
+
102
+ /**
103
+ * Initialize the SDK with environment configuration from the main application
104
+ * This should be called to configure SDK environment settings
105
+ */
106
+ export const initializeEnvironment = (environmentData: EnvironmentData): void => {
107
+ globalEnvironmentData = environmentData;
108
+
109
+ // Environment initialization started
110
+ try {
111
+ // logging removed
112
+ } catch { }
113
+
114
+ // Environment initialized
115
+ };
116
+
117
+ /**
118
+ * Get the current app data
119
+ */
120
+ export const getAppData = (): AppData | null => {
121
+ return globalAppData;
122
+ };
123
+
124
+ /**
125
+ * Get the current environment data
126
+ */
127
+ export const getEnvironmentData = (): EnvironmentData | null => {
128
+ return globalEnvironmentData;
129
+ };
130
+
131
+ /**
132
+ * Check if SDK is initialized with app data
133
+ */
134
+ export const isSDKInitialized = (): boolean => {
135
+ return globalAppData !== null;
136
+ };
137
+
138
+ /**
139
+ * Check if environment is initialized
140
+ */
141
+ export const isEnvironmentInitialized = (): boolean => {
142
+ return globalEnvironmentData !== null;
143
+ };
144
+
145
+ /**
146
+ * Get specific user information for API requests
147
+ */
148
+ export const getUserInfoForAPI = () => {
149
+ if (!globalAppData) {
150
+ throw new Error('SDK not initialized. Call initializeSDK() first.');
151
+ }
152
+
153
+ return {
154
+ id: globalAppData.id,
155
+ name: globalAppData.name,
156
+ dob: globalAppData.dob,
157
+ gender: globalAppData.gender,
158
+ panNumber: globalAppData.panNumber,
159
+ mobileNumber: globalAppData.mobNo,
160
+ email: globalAppData.email,
161
+ eventNotifyUrl: globalAppData.eventNotifyUrl,
162
+ userReferenceId: globalAppData.id, // Use userReferenceId or fallback to id
163
+ address: {
164
+ line1: globalAppData.address,
165
+ area: globalAppData.area,
166
+ city: globalAppData.city,
167
+ state: globalAppData.state,
168
+ country: globalAppData.country,
169
+ pinCode: globalAppData.pinCode,
170
+ },
171
+ bankDetails: {
172
+ accountNumber: globalAppData.accountNo,
173
+ bankName: globalAppData.nameOfBank,
174
+ ifsc: globalAppData.ifsc,
175
+ accountType: globalAppData.typeOfAccount,
176
+ },
177
+ maritalStatus: globalAppData.maritalStatus,
178
+ };
179
+ };
180
+
181
+ /**
182
+ * Get user demographics for interest rate calculations
183
+ */
184
+ export const getUserDemographics = () => {
185
+ if (!globalAppData) {
186
+ throw new Error('SDK not initialized. Call initializeSDK() first.');
187
+ }
188
+
189
+ // Calculate age from DOB
190
+ const calculateAge = (dob: string): number => {
191
+ const today = new Date();
192
+ const birthDate = new Date(dob);
193
+ let age = today.getFullYear() - birthDate.getFullYear();
194
+ const monthDiff = today.getMonth() - birthDate.getMonth();
195
+
196
+ if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
197
+ age--;
198
+ }
199
+
200
+ return age;
201
+ };
202
+
203
+ const age = calculateAge(globalAppData.dob);
204
+ const isSeniorCitizen = age >= 60;
205
+ const isWomenDepositor = globalAppData.gender === 'Female' || globalAppData.gender === 'female';
206
+
207
+ return {
208
+ age,
209
+ isSeniorCitizen,
210
+ isWomenDepositor,
211
+ gender: globalAppData.gender,
212
+ maritalStatus: globalAppData.maritalStatus,
213
+ dob: globalAppData.dob,
214
+ };
215
+ };
216
+
217
+ /**
218
+ * Validate app data
219
+ */
220
+ export const validateAppData = (appData: AppData): { isValid: boolean; errors: string[] } => {
221
+ const errors: string[] = [];
222
+
223
+ // Required fields validation
224
+ if (!appData.id?.trim()) errors.push('ID is required');
225
+ if (!appData.name?.trim()) errors.push('Name is required');
226
+ if (!appData.dob?.trim()) errors.push('Date of birth is required');
227
+ if (!appData.gender) errors.push('Gender is required');
228
+ if (!appData.mobNo?.trim()) errors.push('Mobile number is required');
229
+ if (!appData.email?.trim()) errors.push('Email is required');
230
+ if (!appData.panNumber?.trim()) errors.push('PAN number is required');
231
+
232
+ // Format validation (only if fields are provided)
233
+ if (appData.dob && !/^\d{4}-\d{2}-\d{2}$/.test(appData.dob)) {
234
+ errors.push('Date of birth must be in YYYY-MM-DD format');
235
+ }
236
+
237
+ if (appData.panNumber && !/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/.test(appData.panNumber)) {
238
+ errors.push('PAN number must be in valid format (e.g., ABCDE1234F)');
239
+ }
240
+
241
+ if (appData.mobNo && !/^[6-9]\d{9}$/.test(appData.mobNo)) {
242
+ errors.push('Mobile number must be 10 digits starting with 6-9');
243
+ }
244
+
245
+ if (appData.email && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(appData.email)) {
246
+ errors.push('Email must be in valid format');
247
+ }
248
+
249
+ if (appData.ifsc && appData.ifsc.trim() && !/^[A-Z]{4}0[A-Z0-9]{6}$/.test(appData.ifsc)) {
250
+ errors.push('IFSC code must be in valid format (e.g., SBIN0001234)');
251
+ }
252
+
253
+ return {
254
+ isValid: errors.length === 0,
255
+ errors,
256
+ };
257
+ };
258
+
259
+ /**
260
+ * Clear app data (for testing or logout scenarios)
261
+ */
262
+ export const clearAppData = (): void => {
263
+ globalAppData = null;
264
+ };
265
+
266
+ /**
267
+ * Clear environment data (for testing or logout scenarios)
268
+ */
269
+ export const clearEnvironmentData = (): void => {
270
+ globalEnvironmentData = null;
271
+ };
272
+
273
+ /**
274
+ * Clear all data (app data and environment data)
275
+ */
276
+ export const clearAllData = (): void => {
277
+ globalAppData = null;
278
+ globalEnvironmentData = null;
279
+ };