@onairos/react-native 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +334 -0
- package/lib/commonjs/components/DataRequestModal.js +176 -0
- package/lib/commonjs/components/DataRequestModal.js.map +1 -0
- package/lib/commonjs/components/Notification.js +106 -0
- package/lib/commonjs/components/Notification.js.map +1 -0
- package/lib/commonjs/components/OnairosButton.js +575 -0
- package/lib/commonjs/components/OnairosButton.js.map +1 -0
- package/lib/commonjs/components/Overlay.js +818 -0
- package/lib/commonjs/components/Overlay.js.map +1 -0
- package/lib/commonjs/components/UniversalOnboarding.js +173 -0
- package/lib/commonjs/components/UniversalOnboarding.js.map +1 -0
- package/lib/commonjs/components/onboarding/OAuthWebView.js +137 -0
- package/lib/commonjs/components/onboarding/OAuthWebView.js.map +1 -0
- package/lib/commonjs/components/onboarding/OnboardingHeader.js +74 -0
- package/lib/commonjs/components/onboarding/OnboardingHeader.js.map +1 -0
- package/lib/commonjs/components/onboarding/PinInput.js +283 -0
- package/lib/commonjs/components/onboarding/PinInput.js.map +1 -0
- package/lib/commonjs/components/onboarding/PlatformConnector.js +244 -0
- package/lib/commonjs/components/onboarding/PlatformConnector.js.map +1 -0
- package/lib/commonjs/components/screens/ConnectorScreen.js +145 -0
- package/lib/commonjs/components/screens/ConnectorScreen.js.map +1 -0
- package/lib/commonjs/components/screens/LoadingScreen.js +91 -0
- package/lib/commonjs/components/screens/LoadingScreen.js.map +1 -0
- package/lib/commonjs/components/screens/PinCreationScreen.js +61 -0
- package/lib/commonjs/components/screens/PinCreationScreen.js.map +1 -0
- package/lib/commonjs/constants/index.js +78 -0
- package/lib/commonjs/constants/index.js.map +1 -0
- package/lib/commonjs/hooks/useConnections.js +89 -0
- package/lib/commonjs/hooks/useConnections.js.map +1 -0
- package/lib/commonjs/hooks/useCredentials.js +85 -0
- package/lib/commonjs/hooks/useCredentials.js.map +1 -0
- package/lib/commonjs/index.js +282 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/services/oauthService.js +362 -0
- package/lib/commonjs/services/oauthService.js.map +1 -0
- package/lib/commonjs/types/declarations.d.js +2 -0
- package/lib/commonjs/types/declarations.d.js.map +1 -0
- package/lib/commonjs/types/index.js +2 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/commonjs/utils/api.js +129 -0
- package/lib/commonjs/utils/api.js.map +1 -0
- package/lib/commonjs/utils/auth.js +111 -0
- package/lib/commonjs/utils/auth.js.map +1 -0
- package/lib/commonjs/utils/crypto.js +62 -0
- package/lib/commonjs/utils/crypto.js.map +1 -0
- package/lib/commonjs/utils/debugHelper.js +64 -0
- package/lib/commonjs/utils/debugHelper.js.map +1 -0
- package/lib/commonjs/utils/onairosApi.js +270 -0
- package/lib/commonjs/utils/onairosApi.js.map +1 -0
- package/lib/commonjs/utils/secureStorage.js +210 -0
- package/lib/commonjs/utils/secureStorage.js.map +1 -0
- package/lib/module/components/DataRequestModal.js +168 -0
- package/lib/module/components/DataRequestModal.js.map +1 -0
- package/lib/module/components/Notification.js +99 -0
- package/lib/module/components/Notification.js.map +1 -0
- package/lib/module/components/OnairosButton.js +550 -0
- package/lib/module/components/OnairosButton.js.map +1 -0
- package/lib/module/components/Overlay.js +825 -0
- package/lib/module/components/Overlay.js.map +1 -0
- package/lib/module/components/UniversalOnboarding.js +164 -0
- package/lib/module/components/UniversalOnboarding.js.map +1 -0
- package/lib/module/components/onboarding/OAuthWebView.js +128 -0
- package/lib/module/components/onboarding/OAuthWebView.js.map +1 -0
- package/lib/module/components/onboarding/OnboardingHeader.js +66 -0
- package/lib/module/components/onboarding/OnboardingHeader.js.map +1 -0
- package/lib/module/components/onboarding/PinInput.js +274 -0
- package/lib/module/components/onboarding/PinInput.js.map +1 -0
- package/lib/module/components/onboarding/PlatformConnector.js +235 -0
- package/lib/module/components/onboarding/PlatformConnector.js.map +1 -0
- package/lib/module/components/screens/ConnectorScreen.js +137 -0
- package/lib/module/components/screens/ConnectorScreen.js.map +1 -0
- package/lib/module/components/screens/LoadingScreen.js +83 -0
- package/lib/module/components/screens/LoadingScreen.js.map +1 -0
- package/lib/module/components/screens/PinCreationScreen.js +53 -0
- package/lib/module/components/screens/PinCreationScreen.js.map +1 -0
- package/lib/module/constants/index.js +72 -0
- package/lib/module/constants/index.js.map +1 -0
- package/lib/module/hooks/useConnections.js +81 -0
- package/lib/module/hooks/useConnections.js.map +1 -0
- package/lib/module/hooks/useCredentials.js +77 -0
- package/lib/module/hooks/useCredentials.js.map +1 -0
- package/lib/module/index.js +34 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/services/oauthService.js +352 -0
- package/lib/module/services/oauthService.js.map +1 -0
- package/lib/module/types/declarations.d.js +2 -0
- package/lib/module/types/declarations.d.js.map +1 -0
- package/lib/module/types/index.js +2 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/utils/api.js +117 -0
- package/lib/module/utils/api.js.map +1 -0
- package/lib/module/utils/auth.js +99 -0
- package/lib/module/utils/auth.js.map +1 -0
- package/lib/module/utils/crypto.js +54 -0
- package/lib/module/utils/crypto.js.map +1 -0
- package/lib/module/utils/debugHelper.js +54 -0
- package/lib/module/utils/debugHelper.js.map +1 -0
- package/lib/module/utils/onairosApi.js +256 -0
- package/lib/module/utils/onairosApi.js.map +1 -0
- package/lib/module/utils/secureStorage.js +196 -0
- package/lib/module/utils/secureStorage.js.map +1 -0
- package/package.json +115 -0
- package/src/components/DataRequestModal.tsx +187 -0
- package/src/components/Notification.js +101 -0
- package/src/components/OnairosButton.js +604 -0
- package/src/components/OnairosButton.tsx +182 -0
- package/src/components/Overlay.js +854 -0
- package/src/components/Overlay.tsx +272 -0
- package/src/components/UniversalOnboarding.tsx +184 -0
- package/src/components/onboarding/OAuthWebView.tsx +134 -0
- package/src/components/onboarding/OnboardingHeader.tsx +70 -0
- package/src/components/onboarding/PinInput.tsx +356 -0
- package/src/components/onboarding/PlatformConnector.tsx +297 -0
- package/src/components/screens/ConnectorScreen.tsx +152 -0
- package/src/components/screens/LoadingScreen.tsx +100 -0
- package/src/components/screens/PinCreationScreen.tsx +67 -0
- package/src/constants/index.ts +78 -0
- package/src/hooks/useConnections.ts +90 -0
- package/src/hooks/useCredentials.ts +83 -0
- package/src/index.js +14 -0
- package/src/index.ts +82 -0
- package/src/services/oauthService.ts +360 -0
- package/src/types/declarations.d.ts +26 -0
- package/src/types/index.ts +82 -0
- package/src/utils/api.js +112 -0
- package/src/utils/auth.js +104 -0
- package/src/utils/crypto.js +60 -0
- package/src/utils/debugHelper.ts +53 -0
- package/src/utils/onairosApi.ts +303 -0
- package/src/utils/secureStorage.ts +230 -0
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
import React, { useEffect, useState, useRef } from 'react';
|
|
2
|
+
import { TouchableOpacity, Text, View, Image, Platform, StyleSheet } from 'react-native';
|
|
3
|
+
import { Othent } from '@othent/kms-react-native';
|
|
4
|
+
import { rsaEncrypt } from '../utils/crypto';
|
|
5
|
+
import { getPin } from '../utils/auth';
|
|
6
|
+
import Overlay from './Overlay';
|
|
7
|
+
import { sha256 } from 'react-native-crypto-js';
|
|
8
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
9
|
+
import axios from 'axios';
|
|
10
|
+
const API_URL = 'https://api2.onairos.uk';
|
|
11
|
+
const OnairosButton = ({
|
|
12
|
+
requestData,
|
|
13
|
+
webpageName,
|
|
14
|
+
inferenceData = null,
|
|
15
|
+
onComplete = null,
|
|
16
|
+
autoFetch = true,
|
|
17
|
+
proofMode = false,
|
|
18
|
+
textLayout = 'below',
|
|
19
|
+
textColor = 'white',
|
|
20
|
+
login = false,
|
|
21
|
+
buttonType = 'pill',
|
|
22
|
+
loginReturn = null,
|
|
23
|
+
loginType = 'signIn',
|
|
24
|
+
visualType = 'full'
|
|
25
|
+
}) => {
|
|
26
|
+
const [userData, setUserData] = useState(null);
|
|
27
|
+
const [showOverlay, setShowOverlay] = useState(false);
|
|
28
|
+
const [activeModels, setActiveModels] = useState([]);
|
|
29
|
+
const [granted, setGranted] = useState(0);
|
|
30
|
+
const [selectedRequests, setSelectedRequests] = useState({});
|
|
31
|
+
const [avatar, setAvatar] = useState(false);
|
|
32
|
+
const [traits, setTraits] = useState(false);
|
|
33
|
+
const [othentUser, setOthentUser] = useState(false);
|
|
34
|
+
const [othentConnected, setOthentConnected] = useState(false);
|
|
35
|
+
const NoAccount = useRef(false);
|
|
36
|
+
const NoModel = useRef(false);
|
|
37
|
+
const [isAuthenticated, setIsAuthenticated] = useState(false);
|
|
38
|
+
const [authToken, setAuthToken] = useState(null);
|
|
39
|
+
const [loading, setLoading] = useState(true);
|
|
40
|
+
const [hashedOthentSub, setHashedOthentSub] = useState(null);
|
|
41
|
+
const [encryptedPin, setEncryptedPin] = useState(null);
|
|
42
|
+
const [accountInfo, setAccountInfo] = useState(null);
|
|
43
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
44
|
+
const [isProcessingAuth, setIsProcessingAuth] = useState(false);
|
|
45
|
+
const hasProcessedCallback = useRef(false);
|
|
46
|
+
const [authError, setAuthError] = useState(null);
|
|
47
|
+
const [notif, setNotif] = useState({
|
|
48
|
+
show: false,
|
|
49
|
+
color: null,
|
|
50
|
+
message: null
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// The Onairos public key for encryption
|
|
54
|
+
const OnairosPublicKey = `
|
|
55
|
+
-----BEGIN PUBLIC KEY-----
|
|
56
|
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4wkWvRPaJiY8CwQ5BoJI
|
|
57
|
+
amcGAYV91Bk8NrvWq4PXM+J/RJugfgTNCYKQ/c6g4xa1YES/tJEzFS7nf0Kdoqxm
|
|
58
|
+
5aav0ru5vS4fc4vCOLTI9W1T7nj02NY91rogsQm2/KMxUQ8DaLeTZKi+0Wjsa9YO
|
|
59
|
+
6XGGd1wh4azgQkj04MWW5J1EBCcBavKoY+C85oA9jkkklQ8nGWgbugmZs7eXHNQb
|
|
60
|
+
qH8/ZHcB9Kx1CZ6XjQuVd6YE/A+swV+DksbkXANcYjr6SY/2TbB8GfpcOMM3bkyN
|
|
61
|
+
Q8e0A51q5a8abfuAkDZXe67MwKMWu/626abwPZhJrKr5HhRZZDwPtnXlktYHhOK6
|
|
62
|
+
lQIDAQAB
|
|
63
|
+
-----END PUBLIC KEY-----
|
|
64
|
+
`;
|
|
65
|
+
|
|
66
|
+
// Find the largest data object based on hierarchy
|
|
67
|
+
const findLargestDataObject = arrayOfObjects => {
|
|
68
|
+
const hierarchy = {
|
|
69
|
+
'Small': 16,
|
|
70
|
+
'Medium': 32,
|
|
71
|
+
'Large': 64
|
|
72
|
+
};
|
|
73
|
+
let largestValue = 0;
|
|
74
|
+
arrayOfObjects.forEach(obj => {
|
|
75
|
+
const currentValue = hierarchy[obj.data];
|
|
76
|
+
if (currentValue > largestValue) {
|
|
77
|
+
largestValue = currentValue;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return largestValue;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
// Handle API response for auto-fetch
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (autoFetch && inferenceData && typeof onComplete === 'function') {
|
|
86
|
+
// In React Native, we'll handle this differently since we don't have window.addEventListener
|
|
87
|
+
// We'll use the sendDataRequest function to handle this
|
|
88
|
+
}
|
|
89
|
+
}, []);
|
|
90
|
+
|
|
91
|
+
// Handle connection selection
|
|
92
|
+
const handleConnectionSelection = (dataRequester, key, index, type, reward, isSelected) => {
|
|
93
|
+
setSelectedRequests(prev => ({
|
|
94
|
+
...prev,
|
|
95
|
+
[`${dataRequester}-${key}-${index}`]: {
|
|
96
|
+
type,
|
|
97
|
+
reward,
|
|
98
|
+
isSelected
|
|
99
|
+
}
|
|
100
|
+
}));
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// Change granted value
|
|
104
|
+
const changeGranted = value => {
|
|
105
|
+
setGranted(prev => Math.max(prev + value, 0));
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// Handle API request for mobile
|
|
109
|
+
const handleAPIRequestForMobile = async () => {
|
|
110
|
+
setShowOverlay(true);
|
|
111
|
+
return;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// Reject data request
|
|
115
|
+
const rejectDataRequest = () => {
|
|
116
|
+
setShowOverlay(false);
|
|
117
|
+
if (onComplete) {
|
|
118
|
+
onComplete('rejected');
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
// Make API call
|
|
123
|
+
const makeApiCall = async (approvedRequests, pin, othentSub) => {
|
|
124
|
+
const jsonData = {
|
|
125
|
+
Info: {
|
|
126
|
+
EncryptedUserPin: pin,
|
|
127
|
+
confirmations: approvedRequests,
|
|
128
|
+
web3Type: 'othent',
|
|
129
|
+
Domain: Platform.OS,
|
|
130
|
+
// Using platform instead of window.location
|
|
131
|
+
proofMode: false,
|
|
132
|
+
OthentSub: othentSub
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
try {
|
|
136
|
+
const response = await axios.post(`${API_URL}/getAPIurl`, jsonData);
|
|
137
|
+
const data = response.data;
|
|
138
|
+
if (autoFetch && onComplete) {
|
|
139
|
+
onComplete(data);
|
|
140
|
+
} else {
|
|
141
|
+
// In React Native, we'll handle this differently
|
|
142
|
+
// For now, just call onComplete with the data
|
|
143
|
+
if (onComplete) {
|
|
144
|
+
onComplete(data);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
} catch (error) {
|
|
148
|
+
console.error(error);
|
|
149
|
+
if (onComplete) {
|
|
150
|
+
onComplete(null, error);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// Send data request
|
|
156
|
+
const sendDataRequest = async () => {
|
|
157
|
+
if (granted <= 0) return;
|
|
158
|
+
try {
|
|
159
|
+
// Retrieve approved requests
|
|
160
|
+
const approvedRequests = Object.values(selectedRequests).filter(req => req.isSelected).map(req => ({
|
|
161
|
+
type: req.type,
|
|
162
|
+
reward: req.reward
|
|
163
|
+
}));
|
|
164
|
+
if (encryptedPin == null && othentUser && !othentConnected) {
|
|
165
|
+
const appInfo = {
|
|
166
|
+
name: 'Onairos',
|
|
167
|
+
version: '1.0.0',
|
|
168
|
+
env: 'production'
|
|
169
|
+
};
|
|
170
|
+
const othent = new Othent({
|
|
171
|
+
appInfo,
|
|
172
|
+
throwErrors: false
|
|
173
|
+
});
|
|
174
|
+
const userDetails = await othent.connect();
|
|
175
|
+
const hashedSub = sha256(userDetails.sub).toString();
|
|
176
|
+
setHashedOthentSub(hashedSub);
|
|
177
|
+
|
|
178
|
+
// Wait for the pin to be retrieved
|
|
179
|
+
const userOnairosDetails = await getPin(hashedSub);
|
|
180
|
+
const pin = userOnairosDetails.result;
|
|
181
|
+
setEncryptedPin(pin);
|
|
182
|
+
setOthentConnected(true);
|
|
183
|
+
|
|
184
|
+
// Make API call with newly retrieved data
|
|
185
|
+
await makeApiCall(approvedRequests, pin, hashedSub);
|
|
186
|
+
} else {
|
|
187
|
+
// Make API call with existing state
|
|
188
|
+
if (encryptedPin && hashedOthentSub) {
|
|
189
|
+
await makeApiCall(approvedRequests, encryptedPin, hashedOthentSub);
|
|
190
|
+
} else {
|
|
191
|
+
console.error('Missing required authentication data');
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
} catch (error) {
|
|
195
|
+
console.error('Error in sendDataRequest:', error);
|
|
196
|
+
} finally {
|
|
197
|
+
setShowOverlay(false);
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
// Validate request data
|
|
202
|
+
const validateRequestData = () => {
|
|
203
|
+
const validKeys = ['Small', 'Medium', 'Large'];
|
|
204
|
+
const requiredProperties = ['type', 'descriptions', 'reward'];
|
|
205
|
+
if (typeof webpageName !== 'string') {
|
|
206
|
+
throw new Error(`Property webpageName must be a String`);
|
|
207
|
+
}
|
|
208
|
+
for (const key of validKeys) {
|
|
209
|
+
if (!(key in requestData)) {
|
|
210
|
+
throw new Error(`Missing key '${key}' in requestData.`);
|
|
211
|
+
}
|
|
212
|
+
for (const prop of requiredProperties) {
|
|
213
|
+
if (!(prop in requestData[key])) {
|
|
214
|
+
throw new Error(`Missing property '${prop}' in requestData.${key}.`);
|
|
215
|
+
}
|
|
216
|
+
if (prop !== 'reward' && typeof requestData[key][prop] !== 'string') {
|
|
217
|
+
throw new Error(`Property '${prop}' in requestData.${key} must be a string.`);
|
|
218
|
+
}
|
|
219
|
+
if (prop !== 'reward' && requestData[key][prop].trim() === '') {
|
|
220
|
+
throw new Error(`Property '${prop}' in requestData.${key} cannot be empty.`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
// Validate domain
|
|
227
|
+
const validateDomain = async () => {
|
|
228
|
+
try {
|
|
229
|
+
const response = await axios.post(`${API_URL}/valid/validate-domain`);
|
|
230
|
+
return response.data;
|
|
231
|
+
} catch (error) {
|
|
232
|
+
console.error(error);
|
|
233
|
+
return {
|
|
234
|
+
status: false
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
// Connect to Onairos
|
|
240
|
+
const ConnectOnairos = async () => {
|
|
241
|
+
try {
|
|
242
|
+
const appInfo = {
|
|
243
|
+
name: "Onairos",
|
|
244
|
+
version: "1.0.0",
|
|
245
|
+
env: "production"
|
|
246
|
+
};
|
|
247
|
+
const othent = new Othent({
|
|
248
|
+
appInfo,
|
|
249
|
+
throwErrors: false
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
// Get User Othent Secure Details
|
|
253
|
+
const userDetails = await othent.connect();
|
|
254
|
+
const hashedOthentSub = sha256(userDetails.sub).toString();
|
|
255
|
+
const encryptedPinResponse = await getPin(hashedOthentSub);
|
|
256
|
+
|
|
257
|
+
// Check if user account exists
|
|
258
|
+
if (encryptedPinResponse.result === "No user account") {
|
|
259
|
+
// No user account found, trigger universal onboarding
|
|
260
|
+
console.log("No user account found, triggering universal onboarding");
|
|
261
|
+
|
|
262
|
+
// In React Native, we'll handle this differently
|
|
263
|
+
// For now, just show the overlay for onboarding
|
|
264
|
+
NoAccount.current = true;
|
|
265
|
+
setShowOverlay(true);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Convert to buffer and decrypt
|
|
270
|
+
const bufferPIN = Buffer.from(encryptedPinResponse.result, 'base64');
|
|
271
|
+
const userPin = await othent.decrypt(bufferPIN);
|
|
272
|
+
|
|
273
|
+
// RSA Encrypt the PIN
|
|
274
|
+
const encryptedData = await rsaEncrypt(OnairosPublicKey, userPin);
|
|
275
|
+
|
|
276
|
+
// In React Native, we'll handle this differently
|
|
277
|
+
// For now, just show the overlay with the data
|
|
278
|
+
setEncryptedPin(encryptedData);
|
|
279
|
+
setHashedOthentSub(hashedOthentSub);
|
|
280
|
+
setShowOverlay(true);
|
|
281
|
+
} catch (e) {
|
|
282
|
+
console.error("Error Connecting to Onairos: ", e);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
// Fetch account info
|
|
287
|
+
const fetchAccountInfo = async (identifier, isEmail = false) => {
|
|
288
|
+
try {
|
|
289
|
+
setIsLoading(true);
|
|
290
|
+
const jsonData = isEmail ? {
|
|
291
|
+
Info: {
|
|
292
|
+
identifier: identifier
|
|
293
|
+
}
|
|
294
|
+
} : {
|
|
295
|
+
Info: {
|
|
296
|
+
userName: identifier
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
const endpoint = isEmail ? '/getAccountInfo/email' : '/getAccountInfo';
|
|
300
|
+
const token = await AsyncStorage.getItem('onairosToken');
|
|
301
|
+
const response = await axios.post(`${API_URL}${endpoint}`, jsonData, {
|
|
302
|
+
headers: {
|
|
303
|
+
'Content-Type': 'application/json',
|
|
304
|
+
'Authorization': `Bearer ${token}`
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
const data = response.data;
|
|
308
|
+
if (data.AccountInfo === "No Account Found") {
|
|
309
|
+
NoAccount.current = true;
|
|
310
|
+
setAccountInfo(null);
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
setAccountInfo(data.AccountInfo);
|
|
314
|
+
if (data.AccountInfo.models) {
|
|
315
|
+
setActiveModels(data.AccountInfo.models);
|
|
316
|
+
} else {
|
|
317
|
+
NoModel.current = true;
|
|
318
|
+
}
|
|
319
|
+
if (data.AccountInfo.avatar) {
|
|
320
|
+
setAvatar(true);
|
|
321
|
+
}
|
|
322
|
+
if (data.AccountInfo.UserTraits) {
|
|
323
|
+
setTraits(true);
|
|
324
|
+
}
|
|
325
|
+
if (data.AccountInfo.othent) {
|
|
326
|
+
setOthentUser(true);
|
|
327
|
+
}
|
|
328
|
+
return data.AccountInfo;
|
|
329
|
+
} catch (error) {
|
|
330
|
+
console.error('Error fetching account info:', error);
|
|
331
|
+
throw error;
|
|
332
|
+
} finally {
|
|
333
|
+
setIsLoading(false);
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
// Check existing token
|
|
338
|
+
const checkExistingToken = async () => {
|
|
339
|
+
try {
|
|
340
|
+
const onairosToken = await AsyncStorage.getItem('onairosToken');
|
|
341
|
+
const legacyToken = await AsyncStorage.getItem('token');
|
|
342
|
+
const token = onairosToken || legacyToken;
|
|
343
|
+
if (token) {
|
|
344
|
+
const response = await axios.get(`${API_URL}/verifyToken`, {
|
|
345
|
+
headers: {
|
|
346
|
+
'Authorization': `Bearer ${token}`
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
if (response.status === 200) {
|
|
350
|
+
const data = response.data;
|
|
351
|
+
if (data.valid) {
|
|
352
|
+
setAuthToken(token);
|
|
353
|
+
setIsAuthenticated(true);
|
|
354
|
+
const username = await AsyncStorage.getItem('username');
|
|
355
|
+
await fetchAccountInfo(username);
|
|
356
|
+
} else {
|
|
357
|
+
await AsyncStorage.removeItem('onairosToken');
|
|
358
|
+
await AsyncStorage.removeItem('token');
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
} catch (error) {
|
|
363
|
+
console.error('Token verification failed:', error);
|
|
364
|
+
} finally {
|
|
365
|
+
setLoading(false);
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
|
|
369
|
+
// Check for existing token on mount
|
|
370
|
+
useEffect(() => {
|
|
371
|
+
checkExistingToken();
|
|
372
|
+
}, []);
|
|
373
|
+
|
|
374
|
+
// Handle close overlay
|
|
375
|
+
const handleCloseOverlay = () => {
|
|
376
|
+
setGranted(0);
|
|
377
|
+
setShowOverlay(false);
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
// Check for existing token and fetch account info on mount
|
|
381
|
+
useEffect(() => {
|
|
382
|
+
const checkStoredAuth = async () => {
|
|
383
|
+
const token = await AsyncStorage.getItem('onairosToken');
|
|
384
|
+
const username = await AsyncStorage.getItem('username');
|
|
385
|
+
const othentToken = await AsyncStorage.getItem('othentToken');
|
|
386
|
+
if (token) {
|
|
387
|
+
try {
|
|
388
|
+
// Verify token is still valid
|
|
389
|
+
const response = await axios.post(`${API_URL}/verifyToken`, {}, {
|
|
390
|
+
headers: {
|
|
391
|
+
'Content-Type': 'application/json',
|
|
392
|
+
'Authorization': `Bearer ${token}`
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
if (response.status === 200) {
|
|
396
|
+
setIsAuthenticated(true);
|
|
397
|
+
if (username) {
|
|
398
|
+
await fetchAccountInfo(username, false);
|
|
399
|
+
} else if (othentToken) {
|
|
400
|
+
// Handle Othent stored session
|
|
401
|
+
const userDetails = JSON.parse(othentToken);
|
|
402
|
+
await fetchAccountInfo(userDetails.email, true);
|
|
403
|
+
}
|
|
404
|
+
} else {
|
|
405
|
+
// Clear invalid tokens
|
|
406
|
+
await AsyncStorage.removeItem('onairosToken');
|
|
407
|
+
await AsyncStorage.removeItem('username');
|
|
408
|
+
await AsyncStorage.removeItem('othentToken');
|
|
409
|
+
}
|
|
410
|
+
} catch (error) {
|
|
411
|
+
console.error('Token verification failed:', error);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
checkStoredAuth();
|
|
416
|
+
}, []);
|
|
417
|
+
|
|
418
|
+
// Handle login success
|
|
419
|
+
const handleLoginSuccess = async (identifier, isEmail = false) => {
|
|
420
|
+
try {
|
|
421
|
+
const accountData = await fetchAccountInfo(identifier, isEmail);
|
|
422
|
+
// Update authentication first
|
|
423
|
+
setIsAuthenticated(true);
|
|
424
|
+
// Then update account info
|
|
425
|
+
setShowOverlay(true);
|
|
426
|
+
return accountData;
|
|
427
|
+
} catch (error) {
|
|
428
|
+
console.error('Login process failed:', error);
|
|
429
|
+
throw error;
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
// Get text based on login type
|
|
434
|
+
const getText = () => {
|
|
435
|
+
switch (loginType) {
|
|
436
|
+
case 'signUp':
|
|
437
|
+
return 'Sign Up with Onairos';
|
|
438
|
+
case 'signOut':
|
|
439
|
+
return 'Sign Out of Onairos';
|
|
440
|
+
default:
|
|
441
|
+
return 'Sign In with Onairos';
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
// Button press handler
|
|
446
|
+
const handleButtonPress = () => {
|
|
447
|
+
handleAPIRequestForMobile();
|
|
448
|
+
};
|
|
449
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
450
|
+
style: styles.container
|
|
451
|
+
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
452
|
+
style: [styles.button, buttonType === 'pill' ? styles.pillButton : styles.circleButton, login ? styles.loginButton : styles.transparentButton, {
|
|
453
|
+
flexDirection: textLayout === 'below' ? 'column' : 'row'
|
|
454
|
+
}],
|
|
455
|
+
onPress: handleButtonPress
|
|
456
|
+
}, (visualType === 'full' || visualType === 'icon') && /*#__PURE__*/React.createElement(Image, {
|
|
457
|
+
source: {
|
|
458
|
+
uri: login ? "https://onairos.sirv.com/Images/OnairosWhite.png" : "https://onairos.sirv.com/Images/OnairosBlack.png"
|
|
459
|
+
},
|
|
460
|
+
style: [styles.logo, buttonType === 'pill' ? styles.pillLogo : styles.circleLogo, visualType === 'full' ? styles.fullLogo : styles.iconOnlyLogo]
|
|
461
|
+
}), (visualType === 'full' || visualType === 'textOnly') && /*#__PURE__*/React.createElement(Text, {
|
|
462
|
+
style: [styles.buttonText, {
|
|
463
|
+
color: login ? 'black' : textColor === 'black' ? 'black' : 'white'
|
|
464
|
+
}, textLayout === 'right' ? styles.textRight : textLayout === 'left' ? styles.textLeft : styles.textBelow]
|
|
465
|
+
}, getText())), showOverlay && !isLoading && /*#__PURE__*/React.createElement(Overlay, {
|
|
466
|
+
setOthentConnected: setOthentConnected,
|
|
467
|
+
dataRequester: webpageName,
|
|
468
|
+
NoAccount: NoAccount,
|
|
469
|
+
NoModel: NoModel,
|
|
470
|
+
accountInfo: accountInfo,
|
|
471
|
+
activeModels: activeModels,
|
|
472
|
+
avatar: avatar,
|
|
473
|
+
traits: traits,
|
|
474
|
+
requestData: requestData,
|
|
475
|
+
handleConnectionSelection: handleConnectionSelection,
|
|
476
|
+
changeGranted: changeGranted,
|
|
477
|
+
granted: granted,
|
|
478
|
+
allowSubmit: granted > 0,
|
|
479
|
+
rejectDataRequest: rejectDataRequest,
|
|
480
|
+
sendDataRequest: sendDataRequest,
|
|
481
|
+
isAuthenticated: isAuthenticated,
|
|
482
|
+
onLoginSuccess: handleLoginSuccess,
|
|
483
|
+
onClose: handleCloseOverlay,
|
|
484
|
+
setOthentUser: setOthentUser,
|
|
485
|
+
setHashedOthentSub: setHashedOthentSub,
|
|
486
|
+
setEncryptedPin: setEncryptedPin
|
|
487
|
+
}));
|
|
488
|
+
};
|
|
489
|
+
const styles = StyleSheet.create({
|
|
490
|
+
container: {
|
|
491
|
+
alignItems: 'center',
|
|
492
|
+
justifyContent: 'center'
|
|
493
|
+
},
|
|
494
|
+
button: {
|
|
495
|
+
alignItems: 'center',
|
|
496
|
+
justifyContent: 'center',
|
|
497
|
+
borderRadius: 8
|
|
498
|
+
},
|
|
499
|
+
pillButton: {
|
|
500
|
+
paddingHorizontal: 16,
|
|
501
|
+
paddingVertical: 8,
|
|
502
|
+
borderRadius: 20
|
|
503
|
+
},
|
|
504
|
+
circleButton: {
|
|
505
|
+
width: 48,
|
|
506
|
+
height: 48,
|
|
507
|
+
borderRadius: 24
|
|
508
|
+
},
|
|
509
|
+
loginButton: {
|
|
510
|
+
backgroundColor: '#ffffff',
|
|
511
|
+
borderWidth: 1,
|
|
512
|
+
borderColor: '#dddddd'
|
|
513
|
+
},
|
|
514
|
+
transparentButton: {
|
|
515
|
+
backgroundColor: 'transparent',
|
|
516
|
+
borderWidth: 1,
|
|
517
|
+
borderColor: 'transparent'
|
|
518
|
+
},
|
|
519
|
+
logo: {
|
|
520
|
+
resizeMode: 'contain'
|
|
521
|
+
},
|
|
522
|
+
pillLogo: {
|
|
523
|
+
width: 24,
|
|
524
|
+
height: 24
|
|
525
|
+
},
|
|
526
|
+
circleLogo: {
|
|
527
|
+
width: 32,
|
|
528
|
+
height: 32
|
|
529
|
+
},
|
|
530
|
+
fullLogo: {
|
|
531
|
+
marginRight: 12
|
|
532
|
+
},
|
|
533
|
+
iconOnlyLogo: {
|
|
534
|
+
marginRight: 0
|
|
535
|
+
},
|
|
536
|
+
buttonText: {
|
|
537
|
+
fontWeight: 'bold'
|
|
538
|
+
},
|
|
539
|
+
textRight: {
|
|
540
|
+
marginLeft: 8
|
|
541
|
+
},
|
|
542
|
+
textLeft: {
|
|
543
|
+
marginRight: 8
|
|
544
|
+
},
|
|
545
|
+
textBelow: {
|
|
546
|
+
marginTop: 4
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
export default OnairosButton;
|
|
550
|
+
//# sourceMappingURL=OnairosButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","useRef","TouchableOpacity","Text","View","Image","Platform","StyleSheet","Othent","rsaEncrypt","getPin","Overlay","sha256","AsyncStorage","axios","API_URL","OnairosButton","requestData","webpageName","inferenceData","onComplete","autoFetch","proofMode","textLayout","textColor","login","buttonType","loginReturn","loginType","visualType","userData","setUserData","showOverlay","setShowOverlay","activeModels","setActiveModels","granted","setGranted","selectedRequests","setSelectedRequests","avatar","setAvatar","traits","setTraits","othentUser","setOthentUser","othentConnected","setOthentConnected","NoAccount","NoModel","isAuthenticated","setIsAuthenticated","authToken","setAuthToken","loading","setLoading","hashedOthentSub","setHashedOthentSub","encryptedPin","setEncryptedPin","accountInfo","setAccountInfo","isLoading","setIsLoading","isProcessingAuth","setIsProcessingAuth","hasProcessedCallback","authError","setAuthError","notif","setNotif","show","color","message","OnairosPublicKey","findLargestDataObject","arrayOfObjects","hierarchy","largestValue","forEach","obj","currentValue","data","handleConnectionSelection","dataRequester","key","index","type","reward","isSelected","prev","changeGranted","value","Math","max","handleAPIRequestForMobile","rejectDataRequest","makeApiCall","approvedRequests","pin","othentSub","jsonData","Info","EncryptedUserPin","confirmations","web3Type","Domain","OS","OthentSub","response","post","error","console","sendDataRequest","Object","values","filter","req","map","appInfo","name","version","env","othent","throwErrors","userDetails","connect","hashedSub","sub","toString","userOnairosDetails","result","validateRequestData","validKeys","requiredProperties","Error","prop","trim","validateDomain","status","ConnectOnairos","encryptedPinResponse","log","current","bufferPIN","Buffer","from","userPin","decrypt","encryptedData","e","fetchAccountInfo","identifier","isEmail","userName","endpoint","token","getItem","headers","AccountInfo","models","UserTraits","checkExistingToken","onairosToken","legacyToken","get","valid","username","removeItem","handleCloseOverlay","checkStoredAuth","othentToken","JSON","parse","email","handleLoginSuccess","accountData","getText","handleButtonPress","createElement","style","styles","container","button","pillButton","circleButton","loginButton","transparentButton","flexDirection","onPress","source","uri","logo","pillLogo","circleLogo","fullLogo","iconOnlyLogo","buttonText","textRight","textLeft","textBelow","allowSubmit","onLoginSuccess","onClose","create","alignItems","justifyContent","borderRadius","paddingHorizontal","paddingVertical","width","height","backgroundColor","borderWidth","borderColor","resizeMode","marginRight","fontWeight","marginLeft","marginTop"],"sourceRoot":"..\\..\\..\\src","sources":["components/OnairosButton.js"],"mappings":"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","ignoreList":[]}
|