@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.
Files changed (130) hide show
  1. package/README.md +334 -0
  2. package/lib/commonjs/components/DataRequestModal.js +176 -0
  3. package/lib/commonjs/components/DataRequestModal.js.map +1 -0
  4. package/lib/commonjs/components/Notification.js +106 -0
  5. package/lib/commonjs/components/Notification.js.map +1 -0
  6. package/lib/commonjs/components/OnairosButton.js +575 -0
  7. package/lib/commonjs/components/OnairosButton.js.map +1 -0
  8. package/lib/commonjs/components/Overlay.js +818 -0
  9. package/lib/commonjs/components/Overlay.js.map +1 -0
  10. package/lib/commonjs/components/UniversalOnboarding.js +173 -0
  11. package/lib/commonjs/components/UniversalOnboarding.js.map +1 -0
  12. package/lib/commonjs/components/onboarding/OAuthWebView.js +137 -0
  13. package/lib/commonjs/components/onboarding/OAuthWebView.js.map +1 -0
  14. package/lib/commonjs/components/onboarding/OnboardingHeader.js +74 -0
  15. package/lib/commonjs/components/onboarding/OnboardingHeader.js.map +1 -0
  16. package/lib/commonjs/components/onboarding/PinInput.js +283 -0
  17. package/lib/commonjs/components/onboarding/PinInput.js.map +1 -0
  18. package/lib/commonjs/components/onboarding/PlatformConnector.js +244 -0
  19. package/lib/commonjs/components/onboarding/PlatformConnector.js.map +1 -0
  20. package/lib/commonjs/components/screens/ConnectorScreen.js +145 -0
  21. package/lib/commonjs/components/screens/ConnectorScreen.js.map +1 -0
  22. package/lib/commonjs/components/screens/LoadingScreen.js +91 -0
  23. package/lib/commonjs/components/screens/LoadingScreen.js.map +1 -0
  24. package/lib/commonjs/components/screens/PinCreationScreen.js +61 -0
  25. package/lib/commonjs/components/screens/PinCreationScreen.js.map +1 -0
  26. package/lib/commonjs/constants/index.js +78 -0
  27. package/lib/commonjs/constants/index.js.map +1 -0
  28. package/lib/commonjs/hooks/useConnections.js +89 -0
  29. package/lib/commonjs/hooks/useConnections.js.map +1 -0
  30. package/lib/commonjs/hooks/useCredentials.js +85 -0
  31. package/lib/commonjs/hooks/useCredentials.js.map +1 -0
  32. package/lib/commonjs/index.js +282 -0
  33. package/lib/commonjs/index.js.map +1 -0
  34. package/lib/commonjs/services/oauthService.js +362 -0
  35. package/lib/commonjs/services/oauthService.js.map +1 -0
  36. package/lib/commonjs/types/declarations.d.js +2 -0
  37. package/lib/commonjs/types/declarations.d.js.map +1 -0
  38. package/lib/commonjs/types/index.js +2 -0
  39. package/lib/commonjs/types/index.js.map +1 -0
  40. package/lib/commonjs/utils/api.js +129 -0
  41. package/lib/commonjs/utils/api.js.map +1 -0
  42. package/lib/commonjs/utils/auth.js +111 -0
  43. package/lib/commonjs/utils/auth.js.map +1 -0
  44. package/lib/commonjs/utils/crypto.js +62 -0
  45. package/lib/commonjs/utils/crypto.js.map +1 -0
  46. package/lib/commonjs/utils/debugHelper.js +64 -0
  47. package/lib/commonjs/utils/debugHelper.js.map +1 -0
  48. package/lib/commonjs/utils/onairosApi.js +270 -0
  49. package/lib/commonjs/utils/onairosApi.js.map +1 -0
  50. package/lib/commonjs/utils/secureStorage.js +210 -0
  51. package/lib/commonjs/utils/secureStorage.js.map +1 -0
  52. package/lib/module/components/DataRequestModal.js +168 -0
  53. package/lib/module/components/DataRequestModal.js.map +1 -0
  54. package/lib/module/components/Notification.js +99 -0
  55. package/lib/module/components/Notification.js.map +1 -0
  56. package/lib/module/components/OnairosButton.js +550 -0
  57. package/lib/module/components/OnairosButton.js.map +1 -0
  58. package/lib/module/components/Overlay.js +825 -0
  59. package/lib/module/components/Overlay.js.map +1 -0
  60. package/lib/module/components/UniversalOnboarding.js +164 -0
  61. package/lib/module/components/UniversalOnboarding.js.map +1 -0
  62. package/lib/module/components/onboarding/OAuthWebView.js +128 -0
  63. package/lib/module/components/onboarding/OAuthWebView.js.map +1 -0
  64. package/lib/module/components/onboarding/OnboardingHeader.js +66 -0
  65. package/lib/module/components/onboarding/OnboardingHeader.js.map +1 -0
  66. package/lib/module/components/onboarding/PinInput.js +274 -0
  67. package/lib/module/components/onboarding/PinInput.js.map +1 -0
  68. package/lib/module/components/onboarding/PlatformConnector.js +235 -0
  69. package/lib/module/components/onboarding/PlatformConnector.js.map +1 -0
  70. package/lib/module/components/screens/ConnectorScreen.js +137 -0
  71. package/lib/module/components/screens/ConnectorScreen.js.map +1 -0
  72. package/lib/module/components/screens/LoadingScreen.js +83 -0
  73. package/lib/module/components/screens/LoadingScreen.js.map +1 -0
  74. package/lib/module/components/screens/PinCreationScreen.js +53 -0
  75. package/lib/module/components/screens/PinCreationScreen.js.map +1 -0
  76. package/lib/module/constants/index.js +72 -0
  77. package/lib/module/constants/index.js.map +1 -0
  78. package/lib/module/hooks/useConnections.js +81 -0
  79. package/lib/module/hooks/useConnections.js.map +1 -0
  80. package/lib/module/hooks/useCredentials.js +77 -0
  81. package/lib/module/hooks/useCredentials.js.map +1 -0
  82. package/lib/module/index.js +34 -0
  83. package/lib/module/index.js.map +1 -0
  84. package/lib/module/services/oauthService.js +352 -0
  85. package/lib/module/services/oauthService.js.map +1 -0
  86. package/lib/module/types/declarations.d.js +2 -0
  87. package/lib/module/types/declarations.d.js.map +1 -0
  88. package/lib/module/types/index.js +2 -0
  89. package/lib/module/types/index.js.map +1 -0
  90. package/lib/module/utils/api.js +117 -0
  91. package/lib/module/utils/api.js.map +1 -0
  92. package/lib/module/utils/auth.js +99 -0
  93. package/lib/module/utils/auth.js.map +1 -0
  94. package/lib/module/utils/crypto.js +54 -0
  95. package/lib/module/utils/crypto.js.map +1 -0
  96. package/lib/module/utils/debugHelper.js +54 -0
  97. package/lib/module/utils/debugHelper.js.map +1 -0
  98. package/lib/module/utils/onairosApi.js +256 -0
  99. package/lib/module/utils/onairosApi.js.map +1 -0
  100. package/lib/module/utils/secureStorage.js +196 -0
  101. package/lib/module/utils/secureStorage.js.map +1 -0
  102. package/package.json +115 -0
  103. package/src/components/DataRequestModal.tsx +187 -0
  104. package/src/components/Notification.js +101 -0
  105. package/src/components/OnairosButton.js +604 -0
  106. package/src/components/OnairosButton.tsx +182 -0
  107. package/src/components/Overlay.js +854 -0
  108. package/src/components/Overlay.tsx +272 -0
  109. package/src/components/UniversalOnboarding.tsx +184 -0
  110. package/src/components/onboarding/OAuthWebView.tsx +134 -0
  111. package/src/components/onboarding/OnboardingHeader.tsx +70 -0
  112. package/src/components/onboarding/PinInput.tsx +356 -0
  113. package/src/components/onboarding/PlatformConnector.tsx +297 -0
  114. package/src/components/screens/ConnectorScreen.tsx +152 -0
  115. package/src/components/screens/LoadingScreen.tsx +100 -0
  116. package/src/components/screens/PinCreationScreen.tsx +67 -0
  117. package/src/constants/index.ts +78 -0
  118. package/src/hooks/useConnections.ts +90 -0
  119. package/src/hooks/useCredentials.ts +83 -0
  120. package/src/index.js +14 -0
  121. package/src/index.ts +82 -0
  122. package/src/services/oauthService.ts +360 -0
  123. package/src/types/declarations.d.ts +26 -0
  124. package/src/types/index.ts +82 -0
  125. package/src/utils/api.js +112 -0
  126. package/src/utils/auth.js +104 -0
  127. package/src/utils/crypto.js +60 -0
  128. package/src/utils/debugHelper.ts +53 -0
  129. package/src/utils/onairosApi.ts +303 -0
  130. package/src/utils/secureStorage.ts +230 -0
@@ -0,0 +1,182 @@
1
+ import React, { useCallback, useEffect, useState } from 'react';
2
+ import {
3
+ TouchableOpacity,
4
+ StyleSheet,
5
+ View,
6
+ Text,
7
+ Platform,
8
+ Linking,
9
+ Modal,
10
+ } from 'react-native';
11
+ import Icon from 'react-native-vector-icons/MaterialIcons';
12
+ import * as Keychain from 'react-native-keychain';
13
+ import { UniversalOnboarding } from './UniversalOnboarding';
14
+ import { DataRequestModal } from './DataRequestModal';
15
+ import { useCredentials } from '../hooks/useCredentials';
16
+ import { validateCredentials } from '../utils/auth';
17
+ import { COLORS } from '../constants';
18
+ import type { OnairosButtonProps } from '../types';
19
+
20
+ export const OnairosButton: React.FC<OnairosButtonProps> = ({
21
+ AppName,
22
+ requestData,
23
+ returnLink,
24
+ embedd = false,
25
+ color = '#00BFA5',
26
+ icon = 'auto_awesome',
27
+ onResolved,
28
+ login = false,
29
+ buttonType = 'circle',
30
+ debug = false,
31
+ test = false,
32
+ }) => {
33
+ const [showOnboarding, setShowOnboarding] = useState(false);
34
+ const [showDataRequest, setShowDataRequest] = useState(false);
35
+ const { hasCredentials, getCredentials, validateCredentials } = useCredentials();
36
+ const [loading, setLoading] = useState(false);
37
+
38
+ const handlePress = useCallback(async () => {
39
+ setLoading(true);
40
+ try {
41
+ const hasExisting = await hasCredentials();
42
+
43
+ if (!hasExisting) {
44
+ setShowOnboarding(true);
45
+ return;
46
+ }
47
+
48
+ const credentials = await getCredentials();
49
+ if (!credentials) {
50
+ setShowOnboarding(true);
51
+ return;
52
+ }
53
+
54
+ const validationResult = await validateCredentials(credentials.username);
55
+ if (!validationResult.isValid) {
56
+ setShowOnboarding(true);
57
+ return;
58
+ }
59
+
60
+ // If we have valid credentials, show data request modal
61
+ setShowDataRequest(true);
62
+ } catch (error) {
63
+ console.error('Error in button press:', error);
64
+ setShowOnboarding(true);
65
+ } finally {
66
+ setLoading(false);
67
+ }
68
+ }, [hasCredentials, getCredentials, validateCredentials]);
69
+
70
+ const handleDataRequestAccept = useCallback(async () => {
71
+ try {
72
+ const credentials = await getCredentials();
73
+ if (credentials) {
74
+ onResolved(
75
+ 'https://api2.onairos.uk',
76
+ credentials.accessToken,
77
+ credentials
78
+ );
79
+ }
80
+ setShowDataRequest(false);
81
+ } catch (error) {
82
+ console.error('Error handling data request accept:', error);
83
+ }
84
+ }, [getCredentials, onResolved]);
85
+
86
+ useEffect(() => {
87
+ // Setup deep linking
88
+ const handleDeepLink = ({ url }: { url: string }) => {
89
+ if (url.includes('onairosreact://authenticate')) {
90
+ // Handle authentication callback
91
+ const params = new URL(url).searchParams;
92
+ const nonce = params.get('nonce');
93
+ const callback = params.get('callback');
94
+
95
+ if (nonce && callback) {
96
+ // Process authentication
97
+ setShowOnboarding(false);
98
+ }
99
+ }
100
+ };
101
+
102
+ Linking.addEventListener('url', handleDeepLink);
103
+
104
+ return () => {
105
+ // Cleanup deep linking
106
+ // Note: Remove event listener based on RN version
107
+ if (Platform.OS === 'android') {
108
+ Linking.removeEventListener('url', handleDeepLink);
109
+ }
110
+ };
111
+ }, []);
112
+
113
+ const buttonStyles = [
114
+ styles.button,
115
+ buttonType === 'pill' ? styles.pillButton : styles.circleButton,
116
+ { backgroundColor: color },
117
+ ];
118
+
119
+ return (
120
+ <>
121
+ <TouchableOpacity
122
+ style={buttonStyles}
123
+ onPress={handlePress}
124
+ disabled={loading}
125
+ >
126
+ <Icon name={icon} size={24} color="white" />
127
+ {buttonType === 'pill' && (
128
+ <Text style={styles.buttonText}>Connect with Onairos</Text>
129
+ )}
130
+ </TouchableOpacity>
131
+
132
+ <UniversalOnboarding
133
+ visible={showOnboarding}
134
+ onClose={() => setShowOnboarding(false)}
135
+ AppName={AppName}
136
+ requestData={requestData}
137
+ returnLink={returnLink}
138
+ onComplete={onResolved}
139
+ embedd={embedd}
140
+ debug={debug}
141
+ test={test}
142
+ />
143
+
144
+ <DataRequestModal
145
+ visible={showDataRequest}
146
+ onClose={() => setShowDataRequest(false)}
147
+ onAccept={handleDataRequestAccept}
148
+ requestData={requestData}
149
+ AppName={AppName}
150
+ />
151
+ </>
152
+ );
153
+ };
154
+
155
+ const styles = StyleSheet.create({
156
+ button: {
157
+ alignItems: 'center',
158
+ justifyContent: 'center',
159
+ elevation: 3,
160
+ shadowColor: '#000',
161
+ shadowOffset: { width: 0, height: 2 },
162
+ shadowOpacity: 0.25,
163
+ shadowRadius: 3.84,
164
+ },
165
+ circleButton: {
166
+ width: 60,
167
+ height: 60,
168
+ borderRadius: 30,
169
+ },
170
+ pillButton: {
171
+ flexDirection: 'row',
172
+ paddingHorizontal: 16,
173
+ paddingVertical: 12,
174
+ borderRadius: 25,
175
+ },
176
+ buttonText: {
177
+ color: 'white',
178
+ marginLeft: 8,
179
+ fontSize: 16,
180
+ fontWeight: '600',
181
+ },
182
+ });