@onairos/react-native 3.1.16 → 3.1.18
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 +404 -0
- package/lib/commonjs/assets/images/Checkbox.svg +3 -3
- package/lib/commonjs/assets/images/EnochE.svg +19 -19
- package/lib/commonjs/assets/images/Personalityprofile.svg +3 -3
- package/lib/commonjs/assets/images/Personalitytraits.svg +3 -3
- package/lib/commonjs/assets/images/Userpreferences.svg +3 -3
- package/lib/commonjs/assets/images/arrow.svg +20 -20
- package/lib/commonjs/assets/images/basicproficon.svg +43 -43
- package/lib/commonjs/assets/images/basicprofile.svg +3 -3
- package/lib/commonjs/assets/images/checkmark.svg +4 -4
- package/lib/commonjs/assets/images/contentanalysis.svg +3 -3
- package/lib/commonjs/assets/images/contenticon.svg +23 -23
- package/lib/commonjs/assets/images/personalityicon.svg +18 -18
- package/lib/commonjs/assets/images/x-close.svg +3 -3
- package/lib/commonjs/components/ModalSheet.js +8 -2
- package/lib/commonjs/components/ModalSheet.js.map +1 -1
- package/lib/commonjs/components/OnairosButton.js +290 -0
- package/lib/commonjs/components/OnairosButton.js.map +1 -0
- package/lib/commonjs/components/OnairosSignInButton.js +32 -8
- package/lib/commonjs/components/OnairosSignInButton.js.map +1 -1
- package/lib/commonjs/components/UniversalOnboarding.js +4 -4
- package/lib/commonjs/components/WelcomeScreen.js +29 -13
- package/lib/commonjs/components/WelcomeScreen.js.map +1 -1
- package/lib/commonjs/config/api.js +2 -2
- package/lib/commonjs/hooks/useConnections.js +6 -6
- package/lib/commonjs/hooks/useUserConnections.js +10 -10
- package/lib/commonjs/index.js +13 -6
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/services/apiClient.js +35 -35
- package/lib/commonjs/services/apiKeyService.js +99 -99
- package/lib/commonjs/services/authService.js +82 -82
- package/lib/commonjs/services/biometricPinService.js +10 -10
- package/lib/commonjs/services/connectedAccountsService.js +32 -32
- package/lib/commonjs/services/googleAuthService.js +15 -15
- package/lib/commonjs/services/imageCompressionService.js +15 -15
- package/lib/commonjs/services/jwtStorageService.js +59 -59
- package/lib/commonjs/services/mobileTrainingService.js +14 -14
- package/lib/commonjs/services/pinEncryptionService.js +10 -10
- package/lib/commonjs/services/pinStorageUtils.js +15 -15
- package/lib/commonjs/services/platformAuthService.js +47 -47
- package/lib/commonjs/services/storageService.js +31 -31
- package/lib/commonjs/services/trainingApiHelpers.js +33 -33
- package/lib/commonjs/services/userConnectionsService.js +24 -24
- package/lib/commonjs/utils/Portal.js +4 -4
- package/lib/commonjs/utils/api.js +24 -24
- package/lib/commonjs/utils/auth.js +18 -18
- package/lib/commonjs/utils/crypto.js +13 -13
- package/lib/commonjs/utils/encryption.js +12 -12
- package/lib/commonjs/utils/eventUtils.js +52 -52
- package/lib/commonjs/utils/programmaticFlow.js +16 -16
- package/lib/commonjs/utils/retryHelper.js +27 -27
- package/lib/module/assets/images/Checkbox.svg +3 -3
- package/lib/module/assets/images/EnochE.svg +19 -19
- package/lib/module/assets/images/Personalityprofile.svg +3 -3
- package/lib/module/assets/images/Personalitytraits.svg +3 -3
- package/lib/module/assets/images/Userpreferences.svg +3 -3
- package/lib/module/assets/images/arrow.svg +20 -20
- package/lib/module/assets/images/basicproficon.svg +43 -43
- package/lib/module/assets/images/basicprofile.svg +3 -3
- package/lib/module/assets/images/checkmark.svg +4 -4
- package/lib/module/assets/images/contentanalysis.svg +3 -3
- package/lib/module/assets/images/contenticon.svg +23 -23
- package/lib/module/assets/images/personalityicon.svg +18 -18
- package/lib/module/assets/images/x-close.svg +3 -3
- package/lib/module/components/ModalSheet.js +7 -2
- package/lib/module/components/ModalSheet.js.map +1 -1
- package/lib/module/components/OnairosButton.js +282 -0
- package/lib/module/components/OnairosButton.js.map +1 -0
- package/lib/module/components/OnairosSignInButton.js +32 -8
- package/lib/module/components/OnairosSignInButton.js.map +1 -1
- package/lib/module/components/UniversalOnboarding.js +4 -4
- package/lib/module/components/WelcomeScreen.js +25 -10
- package/lib/module/components/WelcomeScreen.js.map +1 -1
- package/lib/module/config/api.js +2 -2
- package/lib/module/hooks/useConnections.js +6 -6
- package/lib/module/hooks/useUserConnections.js +10 -10
- package/lib/module/index.js +11 -11
- package/lib/module/index.js.map +1 -1
- package/lib/module/services/apiClient.js +35 -35
- package/lib/module/services/apiKeyService.js +99 -99
- package/lib/module/services/authService.js +82 -82
- package/lib/module/services/biometricPinService.js +10 -10
- package/lib/module/services/connectedAccountsService.js +32 -32
- package/lib/module/services/googleAuthService.js +15 -15
- package/lib/module/services/imageCompressionService.js +15 -15
- package/lib/module/services/jwtStorageService.js +59 -59
- package/lib/module/services/mobileTrainingService.js +14 -14
- package/lib/module/services/pinEncryptionService.js +10 -10
- package/lib/module/services/pinStorageUtils.js +15 -15
- package/lib/module/services/platformAuthService.js +47 -47
- package/lib/module/services/storageService.js +31 -31
- package/lib/module/services/trainingApiHelpers.js +33 -33
- package/lib/module/services/userConnectionsService.js +24 -24
- package/lib/module/utils/Portal.js +4 -4
- package/lib/module/utils/api.js +24 -24
- package/lib/module/utils/auth.js +18 -18
- package/lib/module/utils/crypto.js +13 -13
- package/lib/module/utils/encryption.js +12 -12
- package/lib/module/utils/eventUtils.js +52 -52
- package/lib/module/utils/programmaticFlow.js +16 -16
- package/lib/module/utils/retryHelper.js +27 -27
- package/lib/typescript/components/ModalSheet.d.ts.map +1 -1
- package/lib/typescript/components/OnairosButton.d.ts +37 -0
- package/lib/typescript/components/OnairosButton.d.ts.map +1 -0
- package/lib/typescript/components/OnairosSignInButton.d.ts.map +1 -1
- package/lib/typescript/components/WelcomeScreen.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +3 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +145 -163
- package/src/api/index.ts +151 -151
- package/src/assets/images/Checkbox.svg +3 -3
- package/src/assets/images/EnochE.svg +19 -19
- package/src/assets/images/Personalityprofile.svg +3 -3
- package/src/assets/images/Personalitytraits.svg +3 -3
- package/src/assets/images/Userpreferences.svg +3 -3
- package/src/assets/images/arrow.svg +20 -20
- package/src/assets/images/basicproficon.svg +43 -43
- package/src/assets/images/basicprofile.svg +3 -3
- package/src/assets/images/checkmark.svg +4 -4
- package/src/assets/images/contentanalysis.svg +3 -3
- package/src/assets/images/contenticon.svg +23 -23
- package/src/assets/images/personalityicon.svg +18 -18
- package/src/assets/images/x-close.svg +3 -3
- package/src/components/BodyText.tsx +33 -33
- package/src/components/BrandMark.tsx +62 -62
- package/src/components/CodeInput.tsx +32 -32
- package/src/components/DataRequestScreen.tsx +355 -355
- package/src/components/EmailInput.tsx +31 -31
- package/src/components/EmailVerificationModal.tsx +363 -363
- package/src/components/ExistingUserDataConfirmation.tsx +506 -506
- package/src/components/GoogleButton.tsx +55 -55
- package/src/components/HeadingGroup.tsx +49 -49
- package/src/components/ModalHeader.tsx +125 -125
- package/src/components/ModalSheet.tsx +59 -57
- package/src/components/Onairos.tsx +422 -422
- package/src/components/OnairosButton.tsx +339 -0
- package/src/components/OnairosSignInButton.tsx +31 -9
- package/src/components/Overlay.tsx +506 -506
- package/src/components/PersonaImage.tsx +79 -79
- package/src/components/PersonaLoadingScreen.tsx +201 -201
- package/src/components/PersonalizationConsentScreen.tsx +410 -410
- package/src/components/PinCreationScreen.tsx +492 -492
- package/src/components/PinInput.tsx +555 -555
- package/src/components/PlatformConnectorsStep.tsx +891 -891
- package/src/components/PlatformList.tsx +144 -144
- package/src/components/PlatformToggle.tsx +226 -226
- package/src/components/PrimaryButton.tsx +213 -213
- package/src/components/SignInMatchAnimation.tsx +225 -225
- package/src/components/SignInStep.tsx +217 -217
- package/src/components/TrainingModal.tsx +1047 -1047
- package/src/components/UniversalOnboarding.tsx +2887 -2887
- package/src/components/VerificationStep.tsx +198 -198
- package/src/components/WelcomeScreen.tsx +490 -473
- package/src/components/icons/Basicproficon.tsx +30 -30
- package/src/components/icons/Basicprofile.tsx +17 -17
- package/src/components/icons/Checkbox.tsx +17 -17
- package/src/components/icons/Checkmark.tsx +24 -24
- package/src/components/icons/Contentanalysis.tsx +17 -17
- package/src/components/icons/Contenticon.tsx +30 -30
- package/src/components/icons/EnochE.tsx +39 -39
- package/src/components/icons/Personalityicon.tsx +22 -22
- package/src/components/icons/Personalityprofile.tsx +17 -17
- package/src/components/icons/Personalitytraits.tsx +17 -17
- package/src/components/icons/Userpreferences.tsx +17 -17
- package/src/components/icons/index.ts +12 -12
- package/src/components/onboarding/OAuthWebView.tsx +232 -232
- package/src/config/api.ts +25 -25
- package/src/context/AuthContext.tsx +393 -393
- package/src/hooks/useConnectedAccounts.ts +138 -138
- package/src/hooks/useConnections.ts +161 -161
- package/src/hooks/useCredentials.ts +174 -174
- package/src/hooks/useUserConnections.ts +165 -165
- package/src/index.js +14 -0
- package/src/index.ts +99 -96
- package/src/services/apiClient.ts +336 -336
- package/src/services/apiKeyService.ts +919 -919
- package/src/services/authService.ts +1008 -1008
- package/src/services/biometricPinService.ts +192 -192
- package/src/services/connectedAccountsService.ts +289 -289
- package/src/services/googleAuthService.ts +279 -279
- package/src/services/imageCompressionService.ts +302 -302
- package/src/services/jwtStorageService.ts +256 -256
- package/src/services/mobileTrainingService.ts +203 -203
- package/src/services/pinEncryptionService.ts +75 -75
- package/src/services/pinStorageUtils.ts +96 -96
- package/src/services/platformAuthService.ts +1346 -1346
- package/src/services/storageService.ts +451 -451
- package/src/services/trainingApiHelpers.ts +66 -66
- package/src/services/userConnectionsService.ts +556 -556
- package/src/services/youtubeMigrationService.ts +453 -453
- package/src/theme/index.ts +239 -239
- package/src/types/ambient.d.ts +28 -28
- package/src/types/index.ts +265 -265
- package/src/types/node-fix.d.ts +18 -18
- package/src/types/node-override.d.ts +23 -23
- package/src/types/opacity.d.ts +15 -15
- package/src/types/types.d.ts +17 -17
- package/src/utils/Portal.tsx +82 -82
- package/src/utils/api.js +111 -111
- package/src/utils/auth.js +103 -103
- package/src/utils/crypto.js +59 -59
- package/src/utils/encryption.ts +68 -68
- package/src/utils/eventUtils.ts +302 -302
- package/src/utils/haptics.ts +58 -58
- package/src/utils/imagePreloader.ts +2 -2
- package/src/utils/programmaticFlow.ts +112 -112
- package/src/utils/retryHelper.ts +274 -274
package/src/types/types.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
declare module '@onairos/react-native' {
|
|
2
|
-
import { Component } from 'react';
|
|
3
|
-
import { ViewStyle } from 'react-native';
|
|
4
|
-
|
|
5
|
-
// Re-export all the types from our index.ts
|
|
6
|
-
export * from '../types';
|
|
7
|
-
|
|
8
|
-
// Components
|
|
9
|
-
export class Onairos extends Component<any> {}
|
|
10
|
-
export class OnairosButton extends Component<import('../types').OnairosButtonProps> {}
|
|
11
|
-
export class OnairosOverlay extends Component<import('../types').OverlayProps> {}
|
|
12
|
-
export class UniversalOnboarding extends Component<import('../types').UniversalOnboardingProps> {}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// Fix for Node.js type conflicts by providing empty declarations
|
|
16
|
-
declare module 'node:https' {}
|
|
17
|
-
declare module 'node:http' {}
|
|
1
|
+
declare module '@onairos/react-native' {
|
|
2
|
+
import { Component } from 'react';
|
|
3
|
+
import { ViewStyle } from 'react-native';
|
|
4
|
+
|
|
5
|
+
// Re-export all the types from our index.ts
|
|
6
|
+
export * from '../types';
|
|
7
|
+
|
|
8
|
+
// Components
|
|
9
|
+
export class Onairos extends Component<any> {}
|
|
10
|
+
export class OnairosButton extends Component<import('../types').OnairosButtonProps> {}
|
|
11
|
+
export class OnairosOverlay extends Component<import('../types').OverlayProps> {}
|
|
12
|
+
export class UniversalOnboarding extends Component<import('../types').UniversalOnboardingProps> {}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Fix for Node.js type conflicts by providing empty declarations
|
|
16
|
+
declare module 'node:https' {}
|
|
17
|
+
declare module 'node:http' {}
|
|
18
18
|
declare module 'node:crypto' {}
|
package/src/utils/Portal.tsx
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
|
2
|
-
import { View } from 'react-native';
|
|
3
|
-
|
|
4
|
-
// Store for portal instances
|
|
5
|
-
const portalRefs: {[key: string]: React.ReactNode} = {};
|
|
6
|
-
let portalId = 0;
|
|
7
|
-
|
|
8
|
-
// Context to pass portal host state
|
|
9
|
-
const PortalContext = React.createContext<{
|
|
10
|
-
mount: (children: React.ReactNode) => number;
|
|
11
|
-
update: (key: number, children: React.ReactNode) => void;
|
|
12
|
-
unmount: (key: number) => void;
|
|
13
|
-
}>({
|
|
14
|
-
mount: () => 0,
|
|
15
|
-
update: () => {},
|
|
16
|
-
unmount: () => {},
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Portal Host component - place this at the root of your app
|
|
21
|
-
*/
|
|
22
|
-
export const PortalHost: React.FC<{children?: React.ReactNode}> = ({ children }) => {
|
|
23
|
-
const [portals, setPortals] = useState<{[key: number]: React.ReactNode}>({});
|
|
24
|
-
|
|
25
|
-
const mount = (children: React.ReactNode) => {
|
|
26
|
-
const key = ++portalId;
|
|
27
|
-
setPortals(state => ({
|
|
28
|
-
...state,
|
|
29
|
-
[key]: children,
|
|
30
|
-
}));
|
|
31
|
-
return key;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const update = (key: number, children: React.ReactNode) => {
|
|
35
|
-
setPortals(state => ({
|
|
36
|
-
...state,
|
|
37
|
-
[key]: children,
|
|
38
|
-
}));
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const unmount = (key: number) => {
|
|
42
|
-
setPortals(state => {
|
|
43
|
-
const newState = { ...state };
|
|
44
|
-
delete newState[key];
|
|
45
|
-
return newState;
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
return (
|
|
50
|
-
<PortalContext.Provider value={{ mount, update, unmount }}>
|
|
51
|
-
{children}
|
|
52
|
-
{Object.keys(portals).map(key => (
|
|
53
|
-
<View key={key} style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, zIndex: 9999 }}>
|
|
54
|
-
{portals[Number(key)]}
|
|
55
|
-
</View>
|
|
56
|
-
))}
|
|
57
|
-
</PortalContext.Provider>
|
|
58
|
-
);
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Portal component - renders children into the PortalHost
|
|
63
|
-
*/
|
|
64
|
-
export const Portal: React.FC<{children: React.ReactNode}> = ({ children }) => {
|
|
65
|
-
const { mount, update, unmount } = React.useContext(PortalContext);
|
|
66
|
-
const [portalId, setPortalId] = useState<number | null>(null);
|
|
67
|
-
|
|
68
|
-
useEffect(() => {
|
|
69
|
-
const id = mount(children);
|
|
70
|
-
setPortalId(id);
|
|
71
|
-
return () => {
|
|
72
|
-
if (portalId) unmount(portalId);
|
|
73
|
-
};
|
|
74
|
-
}, []);
|
|
75
|
-
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
if (portalId !== null) {
|
|
78
|
-
update(portalId, children);
|
|
79
|
-
}
|
|
80
|
-
}, [children, portalId]);
|
|
81
|
-
|
|
82
|
-
return null;
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
// Store for portal instances
|
|
5
|
+
const portalRefs: {[key: string]: React.ReactNode} = {};
|
|
6
|
+
let portalId = 0;
|
|
7
|
+
|
|
8
|
+
// Context to pass portal host state
|
|
9
|
+
const PortalContext = React.createContext<{
|
|
10
|
+
mount: (children: React.ReactNode) => number;
|
|
11
|
+
update: (key: number, children: React.ReactNode) => void;
|
|
12
|
+
unmount: (key: number) => void;
|
|
13
|
+
}>({
|
|
14
|
+
mount: () => 0,
|
|
15
|
+
update: () => {},
|
|
16
|
+
unmount: () => {},
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Portal Host component - place this at the root of your app
|
|
21
|
+
*/
|
|
22
|
+
export const PortalHost: React.FC<{children?: React.ReactNode}> = ({ children }) => {
|
|
23
|
+
const [portals, setPortals] = useState<{[key: number]: React.ReactNode}>({});
|
|
24
|
+
|
|
25
|
+
const mount = (children: React.ReactNode) => {
|
|
26
|
+
const key = ++portalId;
|
|
27
|
+
setPortals(state => ({
|
|
28
|
+
...state,
|
|
29
|
+
[key]: children,
|
|
30
|
+
}));
|
|
31
|
+
return key;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const update = (key: number, children: React.ReactNode) => {
|
|
35
|
+
setPortals(state => ({
|
|
36
|
+
...state,
|
|
37
|
+
[key]: children,
|
|
38
|
+
}));
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const unmount = (key: number) => {
|
|
42
|
+
setPortals(state => {
|
|
43
|
+
const newState = { ...state };
|
|
44
|
+
delete newState[key];
|
|
45
|
+
return newState;
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<PortalContext.Provider value={{ mount, update, unmount }}>
|
|
51
|
+
{children}
|
|
52
|
+
{Object.keys(portals).map(key => (
|
|
53
|
+
<View key={key} style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, zIndex: 9999 }}>
|
|
54
|
+
{portals[Number(key)]}
|
|
55
|
+
</View>
|
|
56
|
+
))}
|
|
57
|
+
</PortalContext.Provider>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Portal component - renders children into the PortalHost
|
|
63
|
+
*/
|
|
64
|
+
export const Portal: React.FC<{children: React.ReactNode}> = ({ children }) => {
|
|
65
|
+
const { mount, update, unmount } = React.useContext(PortalContext);
|
|
66
|
+
const [portalId, setPortalId] = useState<number | null>(null);
|
|
67
|
+
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
const id = mount(children);
|
|
70
|
+
setPortalId(id);
|
|
71
|
+
return () => {
|
|
72
|
+
if (portalId) unmount(portalId);
|
|
73
|
+
};
|
|
74
|
+
}, []);
|
|
75
|
+
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (portalId !== null) {
|
|
78
|
+
update(portalId, children);
|
|
79
|
+
}
|
|
80
|
+
}, [children, portalId]);
|
|
81
|
+
|
|
82
|
+
return null;
|
|
83
83
|
};
|
package/src/utils/api.js
CHANGED
|
@@ -1,112 +1,112 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
3
|
-
|
|
4
|
-
const API_URL = 'https://api2.onairos.uk';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Create an API instance with authorization headers
|
|
8
|
-
* @returns {Promise<Object>} - The axios instance
|
|
9
|
-
*/
|
|
10
|
-
export const createApiInstance = async () => {
|
|
11
|
-
const token = await AsyncStorage.getItem('onairosToken');
|
|
12
|
-
|
|
13
|
-
return axios.create({
|
|
14
|
-
baseURL: API_URL,
|
|
15
|
-
headers: {
|
|
16
|
-
'Content-Type': 'application/json',
|
|
17
|
-
...(token ? { 'Authorization': `Bearer ${token}` } : {})
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Validate the domain with the Onairos API
|
|
24
|
-
* @returns {Promise<Object>} - The validation response
|
|
25
|
-
*/
|
|
26
|
-
export const validateDomain = async () => {
|
|
27
|
-
try {
|
|
28
|
-
const api = await createApiInstance();
|
|
29
|
-
const response = await api.post('/valid/validate-domain');
|
|
30
|
-
return response.data;
|
|
31
|
-
} catch (error) {
|
|
32
|
-
console.error('Error validating domain:', error);
|
|
33
|
-
return { status: false };
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Fetch account information
|
|
39
|
-
* @param {string} identifier - The username or email
|
|
40
|
-
* @param {boolean} isEmail - Whether the identifier is an email
|
|
41
|
-
* @returns {Promise<Object>} - The account information
|
|
42
|
-
*/
|
|
43
|
-
export const fetchAccountInfo = async (identifier, isEmail = false) => {
|
|
44
|
-
try {
|
|
45
|
-
const api = await createApiInstance();
|
|
46
|
-
const jsonData = isEmail
|
|
47
|
-
? { Info: { identifier } }
|
|
48
|
-
: { Info: { userName: identifier } };
|
|
49
|
-
|
|
50
|
-
const endpoint = isEmail ? '/getAccountInfo/email' : '/getAccountInfo';
|
|
51
|
-
const response = await api.post(endpoint, jsonData);
|
|
52
|
-
|
|
53
|
-
return response.data;
|
|
54
|
-
} catch (error) {
|
|
55
|
-
console.error('Error fetching account info:', error);
|
|
56
|
-
throw error;
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Get API URL for data requests
|
|
62
|
-
* @param {Array} approvedRequests - The approved data requests
|
|
63
|
-
* @param {string} pin - The encrypted PIN
|
|
64
|
-
* @param {string} othentSub - The hashed Othent sub
|
|
65
|
-
* @returns {Promise<Object>} - The API URL response
|
|
66
|
-
*/
|
|
67
|
-
export const getApiUrl = async (approvedRequests, pin, othentSub) => {
|
|
68
|
-
try {
|
|
69
|
-
const api = await createApiInstance();
|
|
70
|
-
const jsonData = {
|
|
71
|
-
Info: {
|
|
72
|
-
EncryptedUserPin: pin,
|
|
73
|
-
confirmations: approvedRequests,
|
|
74
|
-
web3Type: 'othent',
|
|
75
|
-
Domain: Platform.OS,
|
|
76
|
-
proofMode: false,
|
|
77
|
-
OthentSub: othentSub,
|
|
78
|
-
},
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
const response = await api.post('/getAPIurl', jsonData);
|
|
82
|
-
return response.data;
|
|
83
|
-
} catch (error) {
|
|
84
|
-
console.error('Error getting API URL:', error);
|
|
85
|
-
throw error;
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Create a new user account
|
|
91
|
-
* @param {string} othentSub - The hashed Othent sub
|
|
92
|
-
* @param {string} pin - The PIN
|
|
93
|
-
* @param {Array} socialAccounts - The selected social accounts
|
|
94
|
-
* @param {string} email - The user's email
|
|
95
|
-
* @returns {Promise<Object>} - The account creation response
|
|
96
|
-
*/
|
|
97
|
-
export const createAccount = async (othentSub, pin, socialAccounts, email) => {
|
|
98
|
-
try {
|
|
99
|
-
const api = await createApiInstance();
|
|
100
|
-
const response = await api.post('/createAccount', {
|
|
101
|
-
othentSub,
|
|
102
|
-
pin,
|
|
103
|
-
socialAccounts,
|
|
104
|
-
email
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
return response.data;
|
|
108
|
-
} catch (error) {
|
|
109
|
-
console.error('Error creating account:', error);
|
|
110
|
-
throw error;
|
|
111
|
-
}
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
3
|
+
|
|
4
|
+
const API_URL = 'https://api2.onairos.uk';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Create an API instance with authorization headers
|
|
8
|
+
* @returns {Promise<Object>} - The axios instance
|
|
9
|
+
*/
|
|
10
|
+
export const createApiInstance = async () => {
|
|
11
|
+
const token = await AsyncStorage.getItem('onairosToken');
|
|
12
|
+
|
|
13
|
+
return axios.create({
|
|
14
|
+
baseURL: API_URL,
|
|
15
|
+
headers: {
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
...(token ? { 'Authorization': `Bearer ${token}` } : {})
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Validate the domain with the Onairos API
|
|
24
|
+
* @returns {Promise<Object>} - The validation response
|
|
25
|
+
*/
|
|
26
|
+
export const validateDomain = async () => {
|
|
27
|
+
try {
|
|
28
|
+
const api = await createApiInstance();
|
|
29
|
+
const response = await api.post('/valid/validate-domain');
|
|
30
|
+
return response.data;
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error('Error validating domain:', error);
|
|
33
|
+
return { status: false };
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Fetch account information
|
|
39
|
+
* @param {string} identifier - The username or email
|
|
40
|
+
* @param {boolean} isEmail - Whether the identifier is an email
|
|
41
|
+
* @returns {Promise<Object>} - The account information
|
|
42
|
+
*/
|
|
43
|
+
export const fetchAccountInfo = async (identifier, isEmail = false) => {
|
|
44
|
+
try {
|
|
45
|
+
const api = await createApiInstance();
|
|
46
|
+
const jsonData = isEmail
|
|
47
|
+
? { Info: { identifier } }
|
|
48
|
+
: { Info: { userName: identifier } };
|
|
49
|
+
|
|
50
|
+
const endpoint = isEmail ? '/getAccountInfo/email' : '/getAccountInfo';
|
|
51
|
+
const response = await api.post(endpoint, jsonData);
|
|
52
|
+
|
|
53
|
+
return response.data;
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.error('Error fetching account info:', error);
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Get API URL for data requests
|
|
62
|
+
* @param {Array} approvedRequests - The approved data requests
|
|
63
|
+
* @param {string} pin - The encrypted PIN
|
|
64
|
+
* @param {string} othentSub - The hashed Othent sub
|
|
65
|
+
* @returns {Promise<Object>} - The API URL response
|
|
66
|
+
*/
|
|
67
|
+
export const getApiUrl = async (approvedRequests, pin, othentSub) => {
|
|
68
|
+
try {
|
|
69
|
+
const api = await createApiInstance();
|
|
70
|
+
const jsonData = {
|
|
71
|
+
Info: {
|
|
72
|
+
EncryptedUserPin: pin,
|
|
73
|
+
confirmations: approvedRequests,
|
|
74
|
+
web3Type: 'othent',
|
|
75
|
+
Domain: Platform.OS,
|
|
76
|
+
proofMode: false,
|
|
77
|
+
OthentSub: othentSub,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const response = await api.post('/getAPIurl', jsonData);
|
|
82
|
+
return response.data;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.error('Error getting API URL:', error);
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Create a new user account
|
|
91
|
+
* @param {string} othentSub - The hashed Othent sub
|
|
92
|
+
* @param {string} pin - The PIN
|
|
93
|
+
* @param {Array} socialAccounts - The selected social accounts
|
|
94
|
+
* @param {string} email - The user's email
|
|
95
|
+
* @returns {Promise<Object>} - The account creation response
|
|
96
|
+
*/
|
|
97
|
+
export const createAccount = async (othentSub, pin, socialAccounts, email) => {
|
|
98
|
+
try {
|
|
99
|
+
const api = await createApiInstance();
|
|
100
|
+
const response = await api.post('/createAccount', {
|
|
101
|
+
othentSub,
|
|
102
|
+
pin,
|
|
103
|
+
socialAccounts,
|
|
104
|
+
email
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
return response.data;
|
|
108
|
+
} catch (error) {
|
|
109
|
+
console.error('Error creating account:', error);
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
112
|
};
|
package/src/utils/auth.js
CHANGED
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
3
|
-
|
|
4
|
-
const API_URL = 'https://api2.onairos.uk';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Get the encrypted PIN for a user
|
|
8
|
-
* @param {string} hashedOthentSub - The hashed Othent sub
|
|
9
|
-
* @returns {Promise<Object>} - The response containing the encrypted PIN
|
|
10
|
-
*/
|
|
11
|
-
export const getPin = async (hashedOthentSub) => {
|
|
12
|
-
try {
|
|
13
|
-
const response = await axios.post(`${API_URL}/getPin`, {
|
|
14
|
-
hashedOthentSub
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
return response.data;
|
|
18
|
-
} catch (error) {
|
|
19
|
-
console.error('Error getting PIN:', error);
|
|
20
|
-
throw error;
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Verify a token with the Onairos API
|
|
26
|
-
* @param {string} token - The token to verify
|
|
27
|
-
* @returns {Promise<boolean>} - Whether the token is valid
|
|
28
|
-
*/
|
|
29
|
-
export const verifyToken = async (token) => {
|
|
30
|
-
try {
|
|
31
|
-
const response = await axios.post(`${API_URL}/verifyToken`, {}, {
|
|
32
|
-
headers: {
|
|
33
|
-
'Authorization': `Bearer ${token}`
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
return response.data.valid;
|
|
38
|
-
} catch (error) {
|
|
39
|
-
console.error('Error verifying token:', error);
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Store authentication data
|
|
46
|
-
* @param {string} token - The authentication token
|
|
47
|
-
* @param {string} username - The username
|
|
48
|
-
* @param {Object} othentData - The Othent user data
|
|
49
|
-
*/
|
|
50
|
-
export const storeAuthData = async (token, username = null, othentData = null) => {
|
|
51
|
-
try {
|
|
52
|
-
await AsyncStorage.setItem('onairosToken', token);
|
|
53
|
-
|
|
54
|
-
if (username) {
|
|
55
|
-
await AsyncStorage.setItem('username', username);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (othentData) {
|
|
59
|
-
await AsyncStorage.setItem('othentToken', JSON.stringify(othentData));
|
|
60
|
-
}
|
|
61
|
-
} catch (error) {
|
|
62
|
-
console.error('Error storing auth data:', error);
|
|
63
|
-
throw error;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Clear authentication data
|
|
69
|
-
*/
|
|
70
|
-
export const clearAuthData = async () => {
|
|
71
|
-
try {
|
|
72
|
-
await AsyncStorage.removeItem('onairosToken');
|
|
73
|
-
await AsyncStorage.removeItem('username');
|
|
74
|
-
await AsyncStorage.removeItem('othentToken');
|
|
75
|
-
} catch (error) {
|
|
76
|
-
console.error('Error clearing auth data:', error);
|
|
77
|
-
throw error;
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Get stored authentication data
|
|
83
|
-
* @returns {Promise<Object>} - The stored authentication data
|
|
84
|
-
*/
|
|
85
|
-
export const getStoredAuthData = async () => {
|
|
86
|
-
try {
|
|
87
|
-
const token = await AsyncStorage.getItem('onairosToken');
|
|
88
|
-
const username = await AsyncStorage.getItem('username');
|
|
89
|
-
const othentToken = await AsyncStorage.getItem('othentToken');
|
|
90
|
-
|
|
91
|
-
return {
|
|
92
|
-
token,
|
|
93
|
-
username,
|
|
94
|
-
othentToken: othentToken ? JSON.parse(othentToken) : null
|
|
95
|
-
};
|
|
96
|
-
} catch (error) {
|
|
97
|
-
console.error('Error getting stored auth data:', error);
|
|
98
|
-
return {
|
|
99
|
-
token: null,
|
|
100
|
-
username: null,
|
|
101
|
-
othentToken: null
|
|
102
|
-
};
|
|
103
|
-
}
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
3
|
+
|
|
4
|
+
const API_URL = 'https://api2.onairos.uk';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Get the encrypted PIN for a user
|
|
8
|
+
* @param {string} hashedOthentSub - The hashed Othent sub
|
|
9
|
+
* @returns {Promise<Object>} - The response containing the encrypted PIN
|
|
10
|
+
*/
|
|
11
|
+
export const getPin = async (hashedOthentSub) => {
|
|
12
|
+
try {
|
|
13
|
+
const response = await axios.post(`${API_URL}/getPin`, {
|
|
14
|
+
hashedOthentSub
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
return response.data;
|
|
18
|
+
} catch (error) {
|
|
19
|
+
console.error('Error getting PIN:', error);
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Verify a token with the Onairos API
|
|
26
|
+
* @param {string} token - The token to verify
|
|
27
|
+
* @returns {Promise<boolean>} - Whether the token is valid
|
|
28
|
+
*/
|
|
29
|
+
export const verifyToken = async (token) => {
|
|
30
|
+
try {
|
|
31
|
+
const response = await axios.post(`${API_URL}/verifyToken`, {}, {
|
|
32
|
+
headers: {
|
|
33
|
+
'Authorization': `Bearer ${token}`
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
return response.data.valid;
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.error('Error verifying token:', error);
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Store authentication data
|
|
46
|
+
* @param {string} token - The authentication token
|
|
47
|
+
* @param {string} username - The username
|
|
48
|
+
* @param {Object} othentData - The Othent user data
|
|
49
|
+
*/
|
|
50
|
+
export const storeAuthData = async (token, username = null, othentData = null) => {
|
|
51
|
+
try {
|
|
52
|
+
await AsyncStorage.setItem('onairosToken', token);
|
|
53
|
+
|
|
54
|
+
if (username) {
|
|
55
|
+
await AsyncStorage.setItem('username', username);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (othentData) {
|
|
59
|
+
await AsyncStorage.setItem('othentToken', JSON.stringify(othentData));
|
|
60
|
+
}
|
|
61
|
+
} catch (error) {
|
|
62
|
+
console.error('Error storing auth data:', error);
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Clear authentication data
|
|
69
|
+
*/
|
|
70
|
+
export const clearAuthData = async () => {
|
|
71
|
+
try {
|
|
72
|
+
await AsyncStorage.removeItem('onairosToken');
|
|
73
|
+
await AsyncStorage.removeItem('username');
|
|
74
|
+
await AsyncStorage.removeItem('othentToken');
|
|
75
|
+
} catch (error) {
|
|
76
|
+
console.error('Error clearing auth data:', error);
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Get stored authentication data
|
|
83
|
+
* @returns {Promise<Object>} - The stored authentication data
|
|
84
|
+
*/
|
|
85
|
+
export const getStoredAuthData = async () => {
|
|
86
|
+
try {
|
|
87
|
+
const token = await AsyncStorage.getItem('onairosToken');
|
|
88
|
+
const username = await AsyncStorage.getItem('username');
|
|
89
|
+
const othentToken = await AsyncStorage.getItem('othentToken');
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
token,
|
|
93
|
+
username,
|
|
94
|
+
othentToken: othentToken ? JSON.parse(othentToken) : null
|
|
95
|
+
};
|
|
96
|
+
} catch (error) {
|
|
97
|
+
console.error('Error getting stored auth data:', error);
|
|
98
|
+
return {
|
|
99
|
+
token: null,
|
|
100
|
+
username: null,
|
|
101
|
+
othentToken: null
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
104
|
};
|