banking_dcb_sdk_react_native 0.1.9

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 (100) hide show
  1. package/LICENSE +20 -0
  2. package/PartnerReactNativeSdk.podspec +31 -0
  3. package/README.md +14 -0
  4. package/android/build.gradle +100 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/src/main/AndroidManifest.xml +3 -0
  7. package/android/src/main/AndroidManifestNew.xml +2 -0
  8. package/android/src/main/java/com/partnerreactnativesdk/PartnerReactNativeSdkModule.kt +23 -0
  9. package/android/src/main/java/com/partnerreactnativesdk/PartnerReactNativeSdkPackage.kt +33 -0
  10. package/ios/PartnerReactNativeSdk.h +6 -0
  11. package/ios/PartnerReactNativeSdk.mm +29 -0
  12. package/lib/module/helpers/ServiceNames.js +135 -0
  13. package/lib/module/helpers/ServiceNames.js.map +1 -0
  14. package/lib/module/helpers/analytics/analytics_event_model.js +37 -0
  15. package/lib/module/helpers/analytics/analytics_event_model.js.map +1 -0
  16. package/lib/module/helpers/analytics/analytics_logger.js +73 -0
  17. package/lib/module/helpers/analytics/analytics_logger.js.map +1 -0
  18. package/lib/module/helpers/analytics/event_storage.js +35 -0
  19. package/lib/module/helpers/analytics/event_storage.js.map +1 -0
  20. package/lib/module/helpers/banking_dcb_react_native.js +297 -0
  21. package/lib/module/helpers/banking_dcb_react_native.js.map +1 -0
  22. package/lib/module/helpers/helper.js +4 -0
  23. package/lib/module/helpers/helper.js.map +1 -0
  24. package/lib/module/helpers/network/APICall.js +111 -0
  25. package/lib/module/helpers/network/APICall.js.map +1 -0
  26. package/lib/module/helpers/network/Encryption.js +148 -0
  27. package/lib/module/helpers/network/Encryption.js.map +1 -0
  28. package/lib/module/helpers/network/network_manager.js +112 -0
  29. package/lib/module/helpers/network/network_manager.js.map +1 -0
  30. package/lib/module/helpers/utils/Constants.js +12 -0
  31. package/lib/module/helpers/utils/Constants.js.map +1 -0
  32. package/lib/module/helpers/utils/LibraryConstants.js +115 -0
  33. package/lib/module/helpers/utils/LibraryConstants.js.map +1 -0
  34. package/lib/module/helpers/utils/deviceInfoManager.js +39 -0
  35. package/lib/module/helpers/utils/deviceInfoManager.js.map +1 -0
  36. package/lib/module/helpers/utils/headerManager.js +21 -0
  37. package/lib/module/helpers/utils/headerManager.js.map +1 -0
  38. package/lib/module/helpers/utils/themeManager.js +40 -0
  39. package/lib/module/helpers/utils/themeManager.js.map +1 -0
  40. package/lib/module/helpers/utils/webviewCallback.js +20 -0
  41. package/lib/module/helpers/utils/webviewCallback.js.map +1 -0
  42. package/lib/module/helpers/webview.js +314 -0
  43. package/lib/module/helpers/webview.js.map +1 -0
  44. package/lib/module/index.js +5 -0
  45. package/lib/module/index.js.map +1 -0
  46. package/lib/module/package.json +1 -0
  47. package/lib/typescript/package.json +1 -0
  48. package/lib/typescript/src/helpers/ServiceNames.d.ts +51 -0
  49. package/lib/typescript/src/helpers/ServiceNames.d.ts.map +1 -0
  50. package/lib/typescript/src/helpers/analytics/analytics_event_model.d.ts +16 -0
  51. package/lib/typescript/src/helpers/analytics/analytics_event_model.d.ts.map +1 -0
  52. package/lib/typescript/src/helpers/analytics/analytics_logger.d.ts +17 -0
  53. package/lib/typescript/src/helpers/analytics/analytics_logger.d.ts.map +1 -0
  54. package/lib/typescript/src/helpers/analytics/event_storage.d.ts +8 -0
  55. package/lib/typescript/src/helpers/analytics/event_storage.d.ts.map +1 -0
  56. package/lib/typescript/src/helpers/banking_dcb_react_native.d.ts +33 -0
  57. package/lib/typescript/src/helpers/banking_dcb_react_native.d.ts.map +1 -0
  58. package/lib/typescript/src/helpers/helper.d.ts +1 -0
  59. package/lib/typescript/src/helpers/helper.d.ts.map +1 -0
  60. package/lib/typescript/src/helpers/network/APICall.d.ts +13 -0
  61. package/lib/typescript/src/helpers/network/APICall.d.ts.map +1 -0
  62. package/lib/typescript/src/helpers/network/Encryption.d.ts +24 -0
  63. package/lib/typescript/src/helpers/network/Encryption.d.ts.map +1 -0
  64. package/lib/typescript/src/helpers/network/network_manager.d.ts +21 -0
  65. package/lib/typescript/src/helpers/network/network_manager.d.ts.map +1 -0
  66. package/lib/typescript/src/helpers/utils/Constants.d.ts +10 -0
  67. package/lib/typescript/src/helpers/utils/Constants.d.ts.map +1 -0
  68. package/lib/typescript/src/helpers/utils/LibraryConstants.d.ts +24 -0
  69. package/lib/typescript/src/helpers/utils/LibraryConstants.d.ts.map +1 -0
  70. package/lib/typescript/src/helpers/utils/deviceInfoManager.d.ts +4 -0
  71. package/lib/typescript/src/helpers/utils/deviceInfoManager.d.ts.map +1 -0
  72. package/lib/typescript/src/helpers/utils/headerManager.d.ts +5 -0
  73. package/lib/typescript/src/helpers/utils/headerManager.d.ts.map +1 -0
  74. package/lib/typescript/src/helpers/utils/themeManager.d.ts +12 -0
  75. package/lib/typescript/src/helpers/utils/themeManager.d.ts.map +1 -0
  76. package/lib/typescript/src/helpers/utils/webviewCallback.d.ts +13 -0
  77. package/lib/typescript/src/helpers/utils/webviewCallback.d.ts.map +1 -0
  78. package/lib/typescript/src/helpers/webview.d.ts +21 -0
  79. package/lib/typescript/src/helpers/webview.d.ts.map +1 -0
  80. package/lib/typescript/src/index.d.ts +5 -0
  81. package/lib/typescript/src/index.d.ts.map +1 -0
  82. package/package.json +170 -0
  83. package/react-native.config.js +12 -0
  84. package/src/helpers/ServiceNames.tsx +170 -0
  85. package/src/helpers/analytics/analytics_event_model.tsx +47 -0
  86. package/src/helpers/analytics/analytics_logger.tsx +91 -0
  87. package/src/helpers/analytics/event_storage.tsx +44 -0
  88. package/src/helpers/banking_dcb_react_native.tsx +413 -0
  89. package/src/helpers/helper.tsx +1 -0
  90. package/src/helpers/network/APICall.tsx +154 -0
  91. package/src/helpers/network/Encryption.tsx +179 -0
  92. package/src/helpers/network/network_manager.tsx +122 -0
  93. package/src/helpers/utils/Constants.tsx +10 -0
  94. package/src/helpers/utils/LibraryConstants.tsx +133 -0
  95. package/src/helpers/utils/deviceInfoManager.tsx +37 -0
  96. package/src/helpers/utils/headerManager.tsx +22 -0
  97. package/src/helpers/utils/themeManager.tsx +51 -0
  98. package/src/helpers/utils/webviewCallback.tsx +25 -0
  99. package/src/helpers/webview.tsx +410 -0
  100. package/src/index.tsx +5 -0
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+
3
+ import { APICall } from "./network/APICall.js";
4
+ import { DeviceInfoManager } from "./utils/deviceInfoManager.js";
5
+ import { LibraryConstants } from "./utils/LibraryConstants.js";
6
+ import { ServiceNames } from "./ServiceNames.js";
7
+ import { Constants } from "./utils/Constants.js";
8
+ import { WebView } from "./webview.js";
9
+ import { SafeAreaView } from 'react-native-safe-area-context';
10
+ import { StatusBar } from 'react-native';
11
+ import { AnalyticsLogger } from "./analytics/analytics_logger.js";
12
+ import * as base64js from 'base64-js';
13
+
14
+ // Extend the global type to include base64FromArrayBuffer
15
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
16
+ export class BankingDcbReactNative {
17
+ static instance = null;
18
+ static intialized = false;
19
+ _apiCall = new APICall();
20
+ constructor() {}
21
+ static getInstance() {
22
+ if (!BankingDcbReactNative.instance) {
23
+ BankingDcbReactNative.instance = new BankingDcbReactNative();
24
+ }
25
+ return BankingDcbReactNative.instance;
26
+ }
27
+ static async init(hostName, options = {
28
+ whitelistedDomains: [],
29
+ deviceBindingEnabled: false
30
+ }) {
31
+ // console.log("PartnerLibrary.init - initialized:", PartnerLibrary.intialized);
32
+ if (BankingDcbReactNative.intialized) return;
33
+ try {
34
+ if (!global.base64FromArrayBuffer) {
35
+ global.base64FromArrayBuffer = arrayBuffer => {
36
+ return base64js.fromByteArray(new Uint8Array(arrayBuffer));
37
+ };
38
+ }
39
+
40
+ // Ensure instance exists before setup
41
+ if (!BankingDcbReactNative.instance) {
42
+ // console.log("PartnerLibrary.init - creating new instance");
43
+ BankingDcbReactNative.instance = new BankingDcbReactNative();
44
+ }
45
+ await BankingDcbReactNative.instance._setup(hostName, options.whitelistedDomains, options.deviceBindingEnabled);
46
+ BankingDcbReactNative.intialized = true;
47
+ } catch (error) {
48
+ console.error('Initialization failed: ', error);
49
+ throw new Error('Initialization failed');
50
+ }
51
+ }
52
+ async _setup(hostName, whitelistedDomains, deviceBindingEnabled) {
53
+ LibraryConstants.init({
54
+ host: hostName,
55
+ whitelistedDomains: whitelistedDomains,
56
+ deviceBinding: deviceBindingEnabled
57
+ });
58
+ this._analyticsLogger = new AnalyticsLogger();
59
+ // this._analyticsLogger.logEvent({ event: 'REACT_NATIVE_INTIALIZED' });
60
+ }
61
+ async open(module, token, WebViewCallbackFunction) {
62
+ // this._analyticsLogger.logEvent({ event: 'REACT_NATIVE_OPEN_FN_CALLED' });
63
+
64
+ if (!BankingDcbReactNative.intialized) {
65
+ throw new Error('PartnerLibrary not initialized. Call init() first.');
66
+ }
67
+ try {
68
+ let bank = '';
69
+ if (module.includes('banking/')) {
70
+ const startIndex = module.indexOf('banking/') + 'banking/'.length;
71
+ const temp = module.substring(startIndex);
72
+ const endIndex = temp.indexOf('/');
73
+ bank = endIndex === -1 ? temp : temp.substring(0, endIndex);
74
+ }
75
+ return this._loginAndNavigateToWebView(module, bank, token, WebViewCallbackFunction);
76
+ } catch (e) {
77
+ console.error('Error opening webview:', e);
78
+ throw e;
79
+ }
80
+ }
81
+ async _checkDeviceBinding(bank, url, WebViewCallbackFunction) {
82
+ // this._analyticsLogger.logEvent({
83
+ // event: 'REACT_NATIVE_DEVICE_BINDING_CALLED',
84
+ // });
85
+
86
+ console.log('SDK:LOG: entered in check device binding');
87
+ if (LibraryConstants.deviceBindingEnabled) {
88
+ // TODO: Build the device binding flow
89
+ return Promise.resolve(/*#__PURE__*/_jsx(_Fragment, {}));
90
+ } else {
91
+ console.log('SDK:LOG: calling setup device session');
92
+ return this._setupDeviceSession(bank, url, WebViewCallbackFunction);
93
+ }
94
+ }
95
+ async _loginAndNavigateToWebView(module, bank, token, WebViewCallbackFunction) {
96
+ // console.log("PartnerLibrary._loginAndNavigateToWebView - LibraryConstants.hostName:", LibraryConstants.hostName);
97
+ try {
98
+ // this._analyticsLogger.logEvent({ event: 'REACT_NATIVE_LOGIN_FN_CALLED' });
99
+ let tokenResponse;
100
+ const url = ServiceNames.LOGIN_URL;
101
+ console.log('SDK:LOG: ', url);
102
+ console.log('SDK:LOG: Token is : ', token);
103
+ tokenResponse = await this._apiCall.callAPI('POST', ServiceNames.LOGIN_URL, {
104
+ body: {
105
+ token: token
106
+ }
107
+ });
108
+ console.log('SDK:LOG Token response is : ', tokenResponse);
109
+ // this._analyticsLogger.logEvent({
110
+ // event: 'REACT_NATIVE_LOGIN_FN_RESPONSE :',
111
+ // response: tokenResponse,
112
+ // });
113
+
114
+ if (tokenResponse?.data?.code === 'USER_TOKEN_EXPIRED') {
115
+ console.log('SDK:LOG Token expired');
116
+ return Promise.resolve(/*#__PURE__*/_jsx(_Fragment, {}));
117
+ }
118
+ if (tokenResponse && tokenResponse.data && typeof tokenResponse.data === 'object' && tokenResponse.data !== null && 'RATE_LIMIT_USER' in tokenResponse.data) {
119
+ console.log('SDK:LOG: rate limit user');
120
+ }
121
+
122
+ // console.log("Checking login success condition:", {
123
+ // statusCode: tokenResponse?.statusCode,
124
+ // code: tokenResponse?.data?.code
125
+ // });
126
+
127
+ if (tokenResponse?.data?.code === 'USER_LOGIN_SUCCESS') {
128
+ console.log('SDK:LOG: User login success');
129
+ this.fetchAndSetTheme();
130
+ return this._checkDeviceBinding(bank, module, WebViewCallbackFunction);
131
+ } else {
132
+ console.log('SDK:LOG: Login not successful. Token Response:', tokenResponse);
133
+ return Promise.resolve(/*#__PURE__*/_jsx(_Fragment, {}));
134
+ }
135
+ } catch (e) {
136
+ console.error('SDK:LOG: Error during login:', e);
137
+ throw e;
138
+ }
139
+ }
140
+ async _setupDeviceSession(bank, url, WebViewCallbackFunction) {
141
+ try {
142
+ console.log('SDK:LOG: in setup device session');
143
+ const deviceInfo = await DeviceInfoManager.getDeviceInfo();
144
+ const appVersion = deviceInfo['app_version'] || 'unknown';
145
+ if (__DEV__) {
146
+ console.log('Device Info:', deviceInfo);
147
+ console.log('App Version:', appVersion);
148
+ }
149
+ console.log('SDK:LOG device uuid is ');
150
+ const response = await this._apiCall.callAPI('POST', ServiceNames.DEVICE_SESSION.params({
151
+ partner: bank
152
+ }), {
153
+ body: {
154
+ [Constants.MANUFACTURER]: deviceInfo[Constants.MANUFACTURER],
155
+ [Constants.MODEL]: deviceInfo[Constants.MODEL],
156
+ [Constants.DEVICE_UUID]: deviceInfo[Constants.DEVICE_UUID],
157
+ [Constants.OS]: deviceInfo[Constants.OS],
158
+ [Constants.OS_VERSION]: deviceInfo[Constants.OS_VERSION],
159
+ [Constants.APP_VERSION]: appVersion
160
+ }
161
+ });
162
+ //console.log("response from setup device session is : ", response)
163
+ if (response && response.data && typeof response.data === 'object' && response.data !== null && 'RATE_LIMIT_USER' in response.data) {
164
+ console.log('SDK:LOG: rate limit user');
165
+ }
166
+ if (response?.status === 200) {
167
+ return this._openWebView(url, WebViewCallbackFunction);
168
+ } else {
169
+ console.warn('SDK:LOG: Error setting up device session:', response);
170
+ return this._openWebView(url, WebViewCallbackFunction);
171
+ }
172
+ } catch (e) {
173
+ console.error('SDK:LOG: Error setting up device session:', e);
174
+ throw e;
175
+ }
176
+ }
177
+ async _openWebView(url, WebViewCallbackFunction) {
178
+ console.log('SDK:LOG: entered in open web view');
179
+ console.log('SDK:LOG: url is : ', LibraryConstants.hostName + url);
180
+ // this._analyticsLogger.logEvent({
181
+ // event: 'REACT_NATIVE_WEBVIEW_OPEN_CALLED',
182
+ // });
183
+
184
+ return /*#__PURE__*/_jsx(SafeAreaView, {
185
+ style: {
186
+ flex: 1
187
+ },
188
+ children: /*#__PURE__*/_jsx(WebView, {
189
+ url: LibraryConstants.hostName + url,
190
+ onCallback: WebViewCallbackFunction,
191
+ whitelistedUrls: LibraryConstants.whitelistedDomains,
192
+ hostName: LibraryConstants.hostName,
193
+ onPageFinished: () => console.log('SDK:LOG: WebView page finished loading')
194
+ })
195
+ });
196
+ }
197
+ async fetchAndSetTheme() {
198
+ try {
199
+ console.log('SDK:LOG: Fetching theme from API');
200
+ const themeResponse = await this._apiCall.callAPI('GET', ServiceNames.THEME_URL);
201
+ const theme = themeResponse?.data;
202
+ console.log('SDK:LOG: Theme response:', theme);
203
+ if (theme && theme['--color-primary-500']) {
204
+ const rgbValues = theme['--color-primary-500'].split(' ').map(Number);
205
+ if (rgbValues.length === 3) {
206
+ const [r, g, b] = rgbValues;
207
+
208
+ // Update LibraryConstants color
209
+ LibraryConstants.setPrimaryColorFromRGB(r, g, b);
210
+
211
+ // Set status bar color
212
+
213
+ StatusBar.setBackgroundColor(LibraryConstants.primaryColor);
214
+ StatusBar.setBarStyle('light-content');
215
+ console.log('SDK:LOG: Theme color set successfully:', LibraryConstants.primaryColor);
216
+ } else {
217
+ console.warn('Invalid RGB values in theme response');
218
+ }
219
+ } else {
220
+ console.warn('--color-primary-500 not found in theme response');
221
+ }
222
+ } catch (e) {
223
+ console.error('Error Fetching theme: ', e);
224
+ throw e;
225
+ }
226
+ }
227
+ async publicapi(method, apiUrl, options) {
228
+ return this._apiCall.callAPI(method, apiUrl, options);
229
+ }
230
+ async sdkLogin(token, partner) {
231
+ try {
232
+ // 1) LOGIN
233
+ console.log('SDK:LOG: ', ServiceNames.LOGIN_URL);
234
+ console.log('SDK:LOG: Token is: ', token);
235
+ const loginResp = await this._apiCall.callAPI('POST', ServiceNames.LOGIN_URL, {
236
+ body: {
237
+ token
238
+ }
239
+ });
240
+
241
+ // Normalize to a JSON object
242
+ const loginData = loginResp?.data && typeof loginResp.data === 'object' ? {
243
+ ...loginResp.data
244
+ } : {};
245
+ const isSuccess = loginResp?.status === 200 && loginData?.code === 'USER_LOGIN_SUCCESS';
246
+ if (!isSuccess) {
247
+ // Not a successful login → return login JSON as-is
248
+ return loginData;
249
+ }
250
+
251
+ // 2) DEVICE SESSION
252
+ try {
253
+ console.log('SDK:LOG: in device-session');
254
+ const deviceInfo = await DeviceInfoManager.getDeviceInfo();
255
+ const appVersion = deviceInfo['app_version'] || 'unknown';
256
+ if (__DEV__) {
257
+ console.log('Device Info:', deviceInfo);
258
+ console.log('App Version:', appVersion);
259
+ }
260
+ const deviceResp = await this._apiCall.callAPI('POST', ServiceNames.DEVICE_SESSION.params({
261
+ partner
262
+ }), {
263
+ body: {
264
+ [Constants.MANUFACTURER]: deviceInfo[Constants.MANUFACTURER],
265
+ [Constants.MODEL]: deviceInfo[Constants.MODEL],
266
+ [Constants.DEVICE_UUID]: deviceInfo[Constants.DEVICE_UUID],
267
+ [Constants.OS]: deviceInfo[Constants.OS],
268
+ // "Android"/"iOS" from your manager
269
+ [Constants.OS_VERSION]: deviceInfo[Constants.OS_VERSION],
270
+ [Constants.APP_VERSION]: appVersion
271
+ }
272
+ });
273
+
274
+ // Nest device-session response into the same login JSON
275
+ loginData.device = deviceResp?.data && typeof deviceResp.data === 'object' ? deviceResp.data : {
276
+ success: false,
277
+ message: 'device session null'
278
+ };
279
+ return loginData;
280
+ } catch (err) {
281
+ // Keep shape stable if device session fails
282
+ loginData.device = {
283
+ success: false,
284
+ message: String(err?.message || err)
285
+ };
286
+ return loginData;
287
+ }
288
+ } catch (err) {
289
+ // Absolute fallback: minimal error shape
290
+ return {
291
+ success: false,
292
+ message: `sdkLogin failed: ${String(err?.message || err)}`
293
+ };
294
+ }
295
+ }
296
+ }
297
+ //# sourceMappingURL=banking_dcb_react_native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["APICall","DeviceInfoManager","LibraryConstants","ServiceNames","Constants","WebView","SafeAreaView","StatusBar","AnalyticsLogger","base64js","Fragment","_Fragment","jsx","_jsx","BankingDcbReactNative","instance","intialized","_apiCall","constructor","getInstance","init","hostName","options","whitelistedDomains","deviceBindingEnabled","global","base64FromArrayBuffer","arrayBuffer","fromByteArray","Uint8Array","_setup","error","console","Error","host","deviceBinding","_analyticsLogger","open","module","token","WebViewCallbackFunction","bank","includes","startIndex","indexOf","length","temp","substring","endIndex","_loginAndNavigateToWebView","e","_checkDeviceBinding","url","log","Promise","resolve","_setupDeviceSession","tokenResponse","LOGIN_URL","callAPI","body","data","code","fetchAndSetTheme","deviceInfo","getDeviceInfo","appVersion","__DEV__","response","DEVICE_SESSION","params","partner","MANUFACTURER","MODEL","DEVICE_UUID","OS","OS_VERSION","APP_VERSION","status","_openWebView","warn","style","flex","children","onCallback","whitelistedUrls","onPageFinished","themeResponse","THEME_URL","theme","rgbValues","split","map","Number","r","g","b","setPrimaryColorFromRGB","setBackgroundColor","primaryColor","setBarStyle","publicapi","method","apiUrl","sdkLogin","loginResp","loginData","isSuccess","deviceResp","device","success","message","err","String"],"sourceRoot":"../../../src","sources":["helpers/banking_dcb_react_native.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ console.log("Helper file loaded");
4
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["console","log"],"sourceRoot":"../../../src","sources":["helpers/helper.tsx"],"mappings":";;AAAAA,OAAO,CAACC,GAAG,CAAC,oBAAoB,CAAC","ignoreList":[]}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ import NetworkManager from "./network_manager.js";
4
+ import { HeaderManager } from "../utils/headerManager.js";
5
+ import { generateAESKey, exportAESKeyBase64, encryptAESKeyWithRSA, encryptAES, decryptAES, getWebsiteKey } from "./Encryption.js";
6
+ export class APICall {
7
+ networkManager = new NetworkManager();
8
+ headerManager = new HeaderManager();
9
+ async callAPI(method, apiUrl, options) {
10
+ const {
11
+ body,
12
+ headers,
13
+ encrypted = true
14
+ } = options || {};
15
+ try {
16
+ const response = encrypted ? await this._callAPIEncrypt(method, apiUrl, body, headers) : await this._callAPIRaw(method, apiUrl, body, headers);
17
+ return response;
18
+ } catch (error) {
19
+ console.log('Error in callAPI:', error);
20
+ throw error;
21
+ }
22
+ }
23
+ async _callAPIRaw(method, apiUrl, body, headers) {
24
+ const mergedHeaders = {
25
+ ...(await this.headerManager.generateHeaders()),
26
+ ...(headers || {})
27
+ };
28
+ return this.networkManager.request({
29
+ url: apiUrl,
30
+ method: method,
31
+ body: body,
32
+ headers: mergedHeaders
33
+ });
34
+ }
35
+ // ----------------- ENCRYPTED CALL (quick-crypto) -----------------
36
+ async _callAPIEncrypt(method, apiUrl, body, headers) {
37
+ // 1) Generate ephemeral AES-256 key (Uint8Array)
38
+ const aesKey = generateAESKey(); // Uint8Array (32 bytes)
39
+
40
+ // 2) Export AES key bytes -> Base64 (for RSA input)
41
+ const aesKeyBase64 = exportAESKeyBase64(aesKey); // string
42
+
43
+ // 3) Fetch server public key (cached) and RSA-wrap the AES key
44
+ const websiteKey = await getWebsiteKey(); // { kid, public, expiry }
45
+ const rsaEncryptedKey = encryptAESKeyWithRSA(aesKeyBase64, websiteKey.public); // string
46
+
47
+ // 4) Encrypt payload with AES-GCM -> Base64(IV||CT||TAG)
48
+ const encryptedPayload = encryptAES(JSON.stringify(body ?? {}), aesKey); // string
49
+
50
+ // 5) Merge headers (stringify all values)
51
+ const baseHeaders = await this.headerManager.generateHeaders();
52
+ const mergedHeaders = {
53
+ ...Object.fromEntries(Object.entries(baseHeaders).map(([k, v]) => [k, String(v)])),
54
+ ...(headers ? Object.fromEntries(Object.entries(headers).map(([k, v]) => [k, String(v)])) : {})
55
+ };
56
+
57
+ // 6) Add encryption headers
58
+ const encryptedHeaders = {
59
+ 'Content-Type': 'application/json;charset=utf-8',
60
+ 'Accept': 'application/json',
61
+ ...mergedHeaders,
62
+ 'encryption_kid': websiteKey.kid ?? '',
63
+ 'key': rsaEncryptedKey ?? ''
64
+ };
65
+
66
+ // 7) Make the encrypted request with { encrypted: "<blob>" }
67
+ const response = await this.networkManager.request({
68
+ url: apiUrl,
69
+ method,
70
+ body: {
71
+ encrypted: encryptedPayload
72
+ },
73
+ headers: encryptedHeaders
74
+ });
75
+
76
+ // 8) Decrypt response if it has { encrypted }
77
+ const decrypted = APICall.handleDecryptedResponse(response, aesKey);
78
+ if (decrypted != null) {
79
+ response.data = decrypted;
80
+ }
81
+ return response;
82
+ }
83
+
84
+ // ----------------- RESPONSE DECRYPT (quick-crypto) -----------------
85
+ static handleDecryptedResponse(response, aesKey) {
86
+ try {
87
+ if (!response) return null;
88
+ const raw = response.data;
89
+ // Accept string or object
90
+ const data = typeof raw === 'string' ? JSON.parse(raw) : raw;
91
+ if (!data || typeof data !== 'object' || !('encrypted' in data)) {
92
+ // no encrypted field, return null to signal "not decrypted"
93
+ return null;
94
+ }
95
+ const encryptedPayload = String(data.encrypted ?? '');
96
+ if (!encryptedPayload) return null;
97
+ const decryptedJson = decryptAES(encryptedPayload, aesKey); // sync
98
+
99
+ try {
100
+ const obj = JSON.parse(decryptedJson);
101
+ return obj && typeof obj === 'object' ? obj : null;
102
+ } catch {
103
+ // decrypted payload wasn't valid JSON
104
+ return null;
105
+ }
106
+ } catch {
107
+ return null;
108
+ }
109
+ }
110
+ }
111
+ //# sourceMappingURL=APICall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NetworkManager","HeaderManager","generateAESKey","exportAESKeyBase64","encryptAESKeyWithRSA","encryptAES","decryptAES","getWebsiteKey","APICall","networkManager","headerManager","callAPI","method","apiUrl","options","body","headers","encrypted","response","_callAPIEncrypt","_callAPIRaw","error","console","log","mergedHeaders","generateHeaders","request","url","aesKey","aesKeyBase64","websiteKey","rsaEncryptedKey","public","encryptedPayload","JSON","stringify","baseHeaders","Object","fromEntries","entries","map","k","v","String","encryptedHeaders","kid","decrypted","handleDecryptedResponse","data","raw","parse","decryptedJson","obj"],"sourceRoot":"../../../../src","sources":["helpers/network/APICall.tsx"],"mappings":";;AAAA,OAAOA,cAAc,MAAM,sBAAmB;AAC9C,SAASC,aAAa,QAAQ,2BAAwB;AAEtD,SACEC,cAAc,EACdC,kBAAkB,EAClBC,oBAAoB,EACpBC,UAAU,EACVC,UAAU,EACVC,aAAa,QACR,iBAAc;AAErB,OAAO,MAAMC,OAAO,CAAC;EACXC,cAAc,GAAmB,IAAIT,cAAc,CAAC,CAAC;EACrDU,aAAa,GAAkB,IAAIT,aAAa,CAAC,CAAC;EAE1D,MAAMU,OAAOA,CACXC,MAAc,EACdC,MAAc,EACdC,OAIC,EACa;IACd,MAAM;MAAEC,IAAI;MAAEC,OAAO;MAAEC,SAAS,GAAG;IAAK,CAAC,GAAGH,OAAO,IAAI,CAAC,CAAC;IACzD,IAAI;MACF,MAAMI,QAAQ,GAAGD,SAAS,GACtB,MAAM,IAAI,CAACE,eAAe,CAACP,MAAM,EAAEC,MAAM,EAAEE,IAAI,EAAEC,OAAO,CAAC,GACzD,MAAM,IAAI,CAACI,WAAW,CAACR,MAAM,EAAEC,MAAM,EAAEE,IAAI,EAAEC,OAAO,CAAC;MAEzD,OAAOE,QAAQ;IACjB,CAAC,CAAC,OAAOG,KAAK,EAAE;MACdC,OAAO,CAACC,GAAG,CAAC,mBAAmB,EAAEF,KAAK,CAAC;MACvC,MAAMA,KAAK;IACb;EACF;EAEA,MAAcD,WAAWA,CACvBR,MAAc,EACdC,MAAc,EACdE,IAA0B,EAC1BC,OAA6B,EACf;IACd,MAAMQ,aAAa,GAAG;MACpB,IAAI,MAAM,IAAI,CAACd,aAAa,CAACe,eAAe,CAAC,CAAC,CAAC;MAC/C,IAAIT,OAAO,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAACP,cAAc,CAACiB,OAAO,CAAC;MACjCC,GAAG,EAAEd,MAAM;MACXD,MAAM,EAAEA,MAAM;MACdG,IAAI,EAAEA,IAAI;MACVC,OAAO,EAAEQ;IACX,CAAC,CAAC;EACJ;EACA;EACA,MAAcL,eAAeA,CAC3BP,MAAc,EACdC,MAAc,EACdE,IAA0B,EAC1BC,OAA6B,EACf;IACd;IACA,MAAMY,MAAM,GAAG1B,cAAc,CAAC,CAAC,CAAC,CAAC;;IAEjC;IACA,MAAM2B,YAAY,GAAG1B,kBAAkB,CAACyB,MAAM,CAAC,CAAC,CAAC;;IAEjD;IACA,MAAME,UAAU,GAAG,MAAMvB,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAMwB,eAAe,GAAG3B,oBAAoB,CAC1CyB,YAAY,EACZC,UAAU,CAACE,MACb,CAAC,CAAC,CAAC;;IAEH;IACA,MAAMC,gBAAgB,GAAG5B,UAAU,CAAC6B,IAAI,CAACC,SAAS,CAACpB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAEa,MAAM,CAAC,CAAC,CAAC;;IAEzE;IACA,MAAMQ,WAAW,GAAG,MAAM,IAAI,CAAC1B,aAAa,CAACe,eAAe,CAAC,CAAC;IAC9D,MAAMD,aAAqC,GAAG;MAC5C,GAAGa,MAAM,CAACC,WAAW,CACnBD,MAAM,CAACE,OAAO,CAACH,WAAW,CAAC,CAACI,GAAG,CAAC,CAAC,CAACC,CAAC,EAAEC,CAAC,CAAC,KAAK,CAACD,CAAC,EAAEE,MAAM,CAACD,CAAC,CAAC,CAAC,CAC5D,CAAC;MACD,IAAI1B,OAAO,GACPqB,MAAM,CAACC,WAAW,CAChBD,MAAM,CAACE,OAAO,CAACvB,OAAO,CAAC,CAACwB,GAAG,CAAC,CAAC,CAACC,CAAC,EAAEC,CAAC,CAAC,KAAK,CAACD,CAAC,EAAEE,MAAM,CAACD,CAAC,CAAC,CAAC,CACxD,CAAC,GACD,CAAC,CAAC;IACR,CAAC;;IAED;IACA,MAAME,gBAAwC,GAAG;MAC/C,cAAc,EAAE,gCAAgC;MAChD,QAAQ,EAAE,kBAAkB;MAC5B,GAAGpB,aAAa;MAChB,gBAAgB,EAAEM,UAAU,CAACe,GAAG,IAAI,EAAE;MACtC,KAAK,EAAEd,eAAe,IAAI;IAC5B,CAAC;;IAED;IACA,MAAMb,QAAQ,GAAG,MAAM,IAAI,CAACT,cAAc,CAACiB,OAAO,CAAC;MACjDC,GAAG,EAAEd,MAAM;MACXD,MAAM;MACNG,IAAI,EAAE;QAAEE,SAAS,EAAEgB;MAAiB,CAAC;MACrCjB,OAAO,EAAE4B;IACX,CAAC,CAAC;;IAEF;IACA,MAAME,SAAS,GAAGtC,OAAO,CAACuC,uBAAuB,CAAC7B,QAAQ,EAAEU,MAAM,CAAC;IACnE,IAAIkB,SAAS,IAAI,IAAI,EAAE;MACrB5B,QAAQ,CAAE8B,IAAI,GAAGF,SAAS;IAC5B;IACA,OAAO5B,QAAQ;EACjB;;EAEA;EACA,OAAO6B,uBAAuBA,CAC5B7B,QAAa,EACbU,MAAkB,EACU;IAC5B,IAAI;MACF,IAAI,CAACV,QAAQ,EAAE,OAAO,IAAI;MAE1B,MAAM+B,GAAG,GAAG/B,QAAQ,CAAC8B,IAAI;MACzB;MACA,MAAMA,IAAyB,GAC7B,OAAOC,GAAG,KAAK,QAAQ,GAAGf,IAAI,CAACgB,KAAK,CAACD,GAAG,CAAC,GAAIA,GAAW;MAE1D,IAAI,CAACD,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI,EAAE,WAAW,IAAIA,IAAI,CAAC,EAAE;QAC/D;QACA,OAAO,IAAI;MACb;MAEA,MAAMf,gBAAgB,GAAGU,MAAM,CAACK,IAAI,CAAC/B,SAAS,IAAI,EAAE,CAAC;MACrD,IAAI,CAACgB,gBAAgB,EAAE,OAAO,IAAI;MAElC,MAAMkB,aAAa,GAAG7C,UAAU,CAAC2B,gBAAgB,EAAEL,MAAM,CAAC,CAAC,CAAC;;MAE5D,IAAI;QACF,MAAMwB,GAAG,GAAGlB,IAAI,CAACgB,KAAK,CAACC,aAAa,CAAC;QACrC,OAAOC,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,GAChCA,GAAG,GACJ,IAAI;MACV,CAAC,CAAC,MAAM;QACN;QACA,OAAO,IAAI;MACb;IACF,CAAC,CAAC,MAAM;MACN,OAAO,IAAI;IACb;EACF;AACF","ignoreList":[]}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+
3
+ // Encryption.ts
4
+ import AsyncStorage from '@react-native-async-storage/async-storage';
5
+ import * as base64js from 'base64-js';
6
+ import { ServiceNames } from "../ServiceNames.js";
7
+ import crypto from 'react-native-quick-crypto';
8
+ import { Buffer } from '@craftzdog/react-native-buffer';
9
+ const {
10
+ randomBytes,
11
+ createCipheriv,
12
+ createDecipheriv,
13
+ publicEncrypt,
14
+ constants,
15
+ createPublicKey
16
+ } = crypto;
17
+ const KEY_WEB = 'KEY_WEB';
18
+ const KEY_WEB_EXPIRY = 'KEY_WEB_EXPIRY';
19
+ const GCM_NONCE_LEN = 12; // 12-byte IV
20
+ const GCM_TAG_LEN = 16; // 16-byte tag
21
+ const AES_KEY_LEN_BYTES = 32; // 256 bits
22
+
23
+ // --- small utils ---
24
+ const bytesToB64 = u8 => base64js.fromByteArray(u8);
25
+ const b64ToBytes = b64 => base64js.toByteArray(b64);
26
+
27
+ // ---------- AES-256-GCM ----------
28
+
29
+ /** Generate random 32-byte AES key */
30
+ export function generateAESKey() {
31
+ return new Uint8Array(randomBytes(AES_KEY_LEN_BYTES));
32
+ }
33
+
34
+ /** Export AES key bytes -> Base64 (for RSA input) */
35
+ export function exportAESKeyBase64(keyBytes) {
36
+ return bytesToB64(keyBytes);
37
+ }
38
+
39
+ /** Encrypt plaintext -> Base64( IV || ciphertext || tag ) */
40
+ export function encryptAES(plaintext, keyBytes) {
41
+ const iv = new Uint8Array(randomBytes(GCM_NONCE_LEN));
42
+ const cipher = createCipheriv('aes-256-gcm', Buffer.from(keyBytes), Buffer.from(iv));
43
+ const ct1 = cipher.update(plaintext, 'utf8');
44
+ const ct2 = cipher.final();
45
+ const ciphertext = Buffer.concat([ct1, ct2]);
46
+ const tag = cipher.getAuthTag(); // 16 bytes
47
+
48
+ const out = new Uint8Array(iv.length + ciphertext.length + tag.length);
49
+ out.set(iv, 0);
50
+ out.set(ciphertext, iv.length);
51
+ out.set(tag, iv.length + ciphertext.length);
52
+ return bytesToB64(out);
53
+ }
54
+
55
+ /** Decrypt Base64( IV || ciphertext || tag ) -> plaintext */
56
+ export function decryptAES(b64Data, keyBytes) {
57
+ const data = b64ToBytes(b64Data);
58
+ if (data.length < GCM_NONCE_LEN + GCM_TAG_LEN + 1) {
59
+ throw new Error('Invalid GCM payload length');
60
+ }
61
+ const iv = data.slice(0, GCM_NONCE_LEN);
62
+ const tag = data.slice(data.length - GCM_TAG_LEN);
63
+ const ct = data.slice(GCM_NONCE_LEN, data.length - GCM_TAG_LEN);
64
+ const decipher = createDecipheriv('aes-256-gcm', Buffer.from(keyBytes), Buffer.from(iv));
65
+ decipher.setAuthTag(Buffer.from(tag));
66
+ const pt1 = decipher.update(Buffer.from(ct));
67
+ const pt2 = decipher.final();
68
+ return Buffer.concat([pt1, pt2]).toString('utf8');
69
+ }
70
+
71
+ // ---------- RSA-OAEP (SHA-256) ----------
72
+
73
+ /** RSA-OAEP(SHA-256) encrypt UTF-8 bytes of Base64(AES key) -> Base64 ciphertext */
74
+ export function encryptAESKeyWithRSA(aesKeyBase64, publicKeyPem) {
75
+ const buf = Buffer.from(aesKeyBase64, 'utf8');
76
+ const enc = publicEncrypt({
77
+ key: publicKeyPem,
78
+ padding: constants.RSA_PKCS1_OAEP_PADDING,
79
+ oaepHash: 'sha256'
80
+ }, buf);
81
+ return enc.toString('base64');
82
+ }
83
+
84
+ // ---------- Website key fetch / cache ----------
85
+
86
+ export async function getWebsiteKey() {
87
+ // const cachedJson = await AsyncStorage.getItem(KEY_WEB);
88
+ // const cachedExpiry = await AsyncStorage.getItem(KEY_WEB_EXPIRY);
89
+ // if (cachedJson && cachedExpiry) {
90
+ // try {
91
+ // if (new Date() < new Date(cachedExpiry)) {
92
+ // return JSON.parse(cachedJson) as WebsiteKey;
93
+ // }
94
+ // } catch {
95
+ // /* ignore */
96
+ // }
97
+ // }
98
+
99
+ // const txnId = uuidv4();
100
+ const resp = await fetch(ServiceNames.WEBSITE_KEYS, {
101
+ method: 'GET'
102
+ // headers: { 'X-Txn-ID': txnId },
103
+ });
104
+ if (!resp.ok) throw new Error(`Website keys fetch failed: ${resp.status}`);
105
+ const raw = await resp.json();
106
+ console.log('Website keys response:', raw);
107
+ let obj;
108
+ if (raw && typeof raw === 'object' && !(Object.prototype.hasOwnProperty.call(raw, 'kid') && (Object.prototype.hasOwnProperty.call(raw, 'public') || Object.prototype.hasOwnProperty.call(raw, 'public_key')))) {
109
+ const values = Object.values(raw);
110
+ if (!values.length || typeof values[0] !== 'object') {
111
+ throw new Error('Unexpected keyset response shape');
112
+ }
113
+ obj = values[0];
114
+ } else {
115
+ obj = raw;
116
+ }
117
+ const kid = obj.kid ?? obj.KID;
118
+ const publicKey = obj.public ?? obj.public_key;
119
+ const expiry = obj.expiry ?? obj.exp ?? obj.expiresAt;
120
+ if (!kid || !publicKey || !expiry) throw new Error('Missing kid/public/expiry');
121
+ const normalized = {
122
+ kid,
123
+ public: publicKey,
124
+ expiry
125
+ };
126
+ await AsyncStorage.setItem(KEY_WEB, JSON.stringify(normalized));
127
+ await AsyncStorage.setItem(KEY_WEB_EXPIRY, expiry);
128
+ return normalized;
129
+ }
130
+
131
+ // ---------- Optional: one-liners ----------
132
+
133
+ export async function encryptHybrid(plaintext) {
134
+ const {
135
+ kid,
136
+ public: publicPem
137
+ } = await getWebsiteKey();
138
+ const aesKey = generateAESKey();
139
+ const cipherData = encryptAES(plaintext, aesKey);
140
+ const aesKeyB64 = exportAESKeyBase64(aesKey);
141
+ const rsaWrappedAESKey = encryptAESKeyWithRSA(aesKeyB64, publicPem);
142
+ return {
143
+ kid,
144
+ rsaWrappedAESKey,
145
+ cipherData
146
+ };
147
+ }
148
+ //# sourceMappingURL=Encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AsyncStorage","base64js","ServiceNames","crypto","Buffer","randomBytes","createCipheriv","createDecipheriv","publicEncrypt","constants","createPublicKey","KEY_WEB","KEY_WEB_EXPIRY","GCM_NONCE_LEN","GCM_TAG_LEN","AES_KEY_LEN_BYTES","bytesToB64","u8","fromByteArray","b64ToBytes","b64","toByteArray","generateAESKey","Uint8Array","exportAESKeyBase64","keyBytes","encryptAES","plaintext","iv","cipher","from","ct1","update","ct2","final","ciphertext","concat","tag","getAuthTag","out","length","set","decryptAES","b64Data","data","Error","slice","ct","decipher","setAuthTag","pt1","pt2","toString","encryptAESKeyWithRSA","aesKeyBase64","publicKeyPem","buf","enc","key","padding","RSA_PKCS1_OAEP_PADDING","oaepHash","getWebsiteKey","resp","fetch","WEBSITE_KEYS","method","ok","status","raw","json","console","log","obj","Object","prototype","hasOwnProperty","call","values","kid","KID","publicKey","public","public_key","expiry","exp","expiresAt","normalized","setItem","JSON","stringify","encryptHybrid","publicPem","aesKey","cipherData","aesKeyB64","rsaWrappedAESKey"],"sourceRoot":"../../../../src","sources":["helpers/network/Encryption.tsx"],"mappings":"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","ignoreList":[]}