@onairos/react-native 2.0.5 → 2.0.6
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/lib/commonjs/hooks/useConnections.js +37 -13
- package/lib/commonjs/hooks/useConnections.js.map +1 -1
- package/lib/commonjs/hooks/useCredentials.js +16 -6
- package/lib/commonjs/hooks/useCredentials.js.map +1 -1
- package/lib/module/hooks/useConnections.js +38 -14
- package/lib/module/hooks/useConnections.js.map +1 -1
- package/lib/module/hooks/useCredentials.js +16 -6
- package/lib/module/hooks/useCredentials.js.map +1 -1
- package/lib/module/index.js +9 -11
- package/lib/module/index.js.map +1 -1
- package/package.json +1 -1
- package/src/hooks/useConnections.ts +37 -14
- package/src/hooks/useCredentials.ts +18 -5
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useConnections = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
8
9
|
var Keychain = _interopRequireWildcard(require("react-native-keychain"));
|
|
9
10
|
var _constants = require("../constants");
|
|
10
11
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -12,7 +13,9 @@ const useConnections = () => {
|
|
|
12
13
|
const [isConnecting, setIsConnecting] = (0, _react.useState)(false);
|
|
13
14
|
const getConnectionStatus = (0, _react.useCallback)(async () => {
|
|
14
15
|
try {
|
|
15
|
-
const stored = await Keychain.getGenericPassword(
|
|
16
|
+
const stored = await Keychain.getGenericPassword({
|
|
17
|
+
service: _constants.STORAGE_KEYS.connections
|
|
18
|
+
});
|
|
16
19
|
if (stored) {
|
|
17
20
|
return JSON.parse(stored.password);
|
|
18
21
|
}
|
|
@@ -32,23 +35,43 @@ const useConnections = () => {
|
|
|
32
35
|
const connectPlatform = (0, _react.useCallback)(async platform => {
|
|
33
36
|
setIsConnecting(true);
|
|
34
37
|
try {
|
|
35
|
-
|
|
36
|
-
console.log(`OAuth integration temporarily disabled for ${platform}`);
|
|
38
|
+
console.log(`[OAuth] Starting connection for ${platform}`);
|
|
37
39
|
|
|
38
|
-
//
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
40
|
+
// Get OAuth URL from API
|
|
41
|
+
const oauthEndpoint = _constants.API_ENDPOINTS.oauth[platform];
|
|
42
|
+
if (!oauthEndpoint) {
|
|
43
|
+
throw new Error(`No OAuth endpoint configured for ${platform}`);
|
|
44
|
+
}
|
|
45
|
+
const apiUrl = `${_constants.API_ENDPOINTS.base}${oauthEndpoint}`;
|
|
46
|
+
console.log(`[OAuth] Fetching URL from: ${apiUrl}`);
|
|
47
|
+
const response = await fetch(apiUrl);
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
throw new Error(`API request failed with status ${response.status}`);
|
|
50
|
+
}
|
|
51
|
+
const {
|
|
52
|
+
url
|
|
53
|
+
} = await response.json();
|
|
54
|
+
if (!url) {
|
|
55
|
+
throw new Error('No OAuth URL received from API');
|
|
56
|
+
}
|
|
57
|
+
console.log(`[OAuth] Opening URL: ${url}`);
|
|
58
|
+
|
|
59
|
+
// Check if URL can be opened
|
|
60
|
+
const canOpen = await _reactNative.Linking.canOpenURL(url);
|
|
61
|
+
if (!canOpen) {
|
|
62
|
+
throw new Error(`Cannot open URL: ${url}`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Open OAuth URL
|
|
66
|
+
await _reactNative.Linking.openURL(url);
|
|
67
|
+
console.log(`[OAuth] URL opened successfully`);
|
|
45
68
|
} catch (error) {
|
|
46
|
-
console.error(`Error connecting to ${platform}:`, error);
|
|
69
|
+
console.error(`[OAuth] Error connecting to ${platform}:`, error);
|
|
47
70
|
throw error;
|
|
48
71
|
} finally {
|
|
49
72
|
setIsConnecting(false);
|
|
50
73
|
}
|
|
51
|
-
}, [
|
|
74
|
+
}, []);
|
|
52
75
|
const disconnectPlatform = (0, _react.useCallback)(async platform => {
|
|
53
76
|
try {
|
|
54
77
|
const status = await getConnectionStatus();
|
|
@@ -61,9 +84,10 @@ const useConnections = () => {
|
|
|
61
84
|
}, [getConnectionStatus, saveConnectionStatus]);
|
|
62
85
|
const handleOAuthCallback = (0, _react.useCallback)(async (platform, data) => {
|
|
63
86
|
try {
|
|
87
|
+
console.log(`[OAuth] Handling callback for ${platform}:`, data);
|
|
64
88
|
const status = await getConnectionStatus();
|
|
65
89
|
status[platform] = {
|
|
66
|
-
userName: data.userName || `
|
|
90
|
+
userName: data.userName || `User (${platform})`,
|
|
67
91
|
connected: true
|
|
68
92
|
};
|
|
69
93
|
await saveConnectionStatus(status);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","Keychain","_interopRequireWildcard","_constants","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useConnections","isConnecting","setIsConnecting","useState","getConnectionStatus","useCallback","stored","getGenericPassword","STORAGE_KEYS","connections","JSON","parse","password","error","console","saveConnectionStatus","status","setGenericPassword","stringify","connectPlatform","platform","log","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","Keychain","_interopRequireWildcard","_constants","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useConnections","isConnecting","setIsConnecting","useState","getConnectionStatus","useCallback","stored","getGenericPassword","service","STORAGE_KEYS","connections","JSON","parse","password","error","console","saveConnectionStatus","status","setGenericPassword","stringify","connectPlatform","platform","log","oauthEndpoint","API_ENDPOINTS","oauth","Error","apiUrl","base","response","fetch","ok","url","json","canOpen","Linking","canOpenURL","openURL","disconnectPlatform","handleOAuthCallback","data","userName","connected","exports"],"sourceRoot":"..\\..\\..\\src","sources":["hooks/useConnections.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,7 +11,9 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
11
11
|
const useCredentials = () => {
|
|
12
12
|
const hasCredentials = (0, _react.useCallback)(async () => {
|
|
13
13
|
try {
|
|
14
|
-
const credentials = await Keychain.getGenericPassword(
|
|
14
|
+
const credentials = await Keychain.getGenericPassword({
|
|
15
|
+
service: _constants.STORAGE_KEYS.credentials
|
|
16
|
+
});
|
|
15
17
|
return !!credentials;
|
|
16
18
|
} catch (error) {
|
|
17
19
|
console.error('Error checking credentials:', error);
|
|
@@ -20,7 +22,9 @@ const useCredentials = () => {
|
|
|
20
22
|
}, []);
|
|
21
23
|
const getCredentials = (0, _react.useCallback)(async () => {
|
|
22
24
|
try {
|
|
23
|
-
const credentials = await Keychain.getGenericPassword(
|
|
25
|
+
const credentials = await Keychain.getGenericPassword({
|
|
26
|
+
service: _constants.STORAGE_KEYS.credentials
|
|
27
|
+
});
|
|
24
28
|
if (credentials) {
|
|
25
29
|
return JSON.parse(credentials.password);
|
|
26
30
|
}
|
|
@@ -32,11 +36,15 @@ const useCredentials = () => {
|
|
|
32
36
|
}, []);
|
|
33
37
|
const storeCredentials = (0, _react.useCallback)(async (username, userPin, accessToken) => {
|
|
34
38
|
try {
|
|
35
|
-
|
|
36
|
-
|
|
39
|
+
const options = {
|
|
40
|
+
accessControl: Keychain.ACCESS_CONTROL.BIOMETRY_ANY,
|
|
41
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
42
|
+
service: _constants.STORAGE_KEYS.credentials
|
|
43
|
+
};
|
|
44
|
+
await Keychain.setGenericPassword(username, JSON.stringify({
|
|
37
45
|
userPin,
|
|
38
46
|
accessToken
|
|
39
|
-
}));
|
|
47
|
+
}), options);
|
|
40
48
|
return true;
|
|
41
49
|
} catch (error) {
|
|
42
50
|
console.error('Error storing credentials:', error);
|
|
@@ -45,7 +53,9 @@ const useCredentials = () => {
|
|
|
45
53
|
}, []);
|
|
46
54
|
const clearCredentials = (0, _react.useCallback)(async () => {
|
|
47
55
|
try {
|
|
48
|
-
await Keychain.resetGenericPassword(
|
|
56
|
+
await Keychain.resetGenericPassword({
|
|
57
|
+
service: _constants.STORAGE_KEYS.credentials
|
|
58
|
+
});
|
|
49
59
|
} catch (error) {
|
|
50
60
|
console.error('Error clearing credentials:', error);
|
|
51
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","Keychain","_interopRequireWildcard","_constants","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useCredentials","hasCredentials","useCallback","credentials","getGenericPassword","STORAGE_KEYS","error","console","getCredentials","JSON","parse","password","storeCredentials","username","userPin","accessToken","setGenericPassword","stringify","clearCredentials","resetGenericPassword","validateCredentials","response","fetch","method","headers","body","data","json","isValid","valid","exports"],"sourceRoot":"..\\..\\..\\src","sources":["hooks/useCredentials.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAA4C,SAAAE,wBAAAE,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAJ,uBAAA,YAAAA,CAAAE,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAGrC,MAAMkB,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMC,cAAc,GAAG,IAAAC,kBAAW,EAAC,YAA8B;IAC/D,IAAI;MACF,MAAMC,WAAW,GAAG,MAAMzB,QAAQ,CAAC0B,kBAAkB,
|
|
1
|
+
{"version":3,"names":["_react","require","Keychain","_interopRequireWildcard","_constants","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useCredentials","hasCredentials","useCallback","credentials","getGenericPassword","service","STORAGE_KEYS","error","console","getCredentials","JSON","parse","password","storeCredentials","username","userPin","accessToken","options","accessControl","ACCESS_CONTROL","BIOMETRY_ANY","accessible","ACCESSIBLE","WHEN_UNLOCKED","setGenericPassword","stringify","clearCredentials","resetGenericPassword","validateCredentials","response","fetch","method","headers","body","data","json","isValid","valid","exports"],"sourceRoot":"..\\..\\..\\src","sources":["hooks/useCredentials.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { useState, useCallback } from 'react';
|
|
2
|
+
import { Linking } from 'react-native';
|
|
2
3
|
import * as Keychain from 'react-native-keychain';
|
|
3
|
-
import { STORAGE_KEYS } from '../constants';
|
|
4
|
+
import { API_ENDPOINTS, STORAGE_KEYS } from '../constants';
|
|
4
5
|
export const useConnections = () => {
|
|
5
6
|
const [isConnecting, setIsConnecting] = useState(false);
|
|
6
7
|
const getConnectionStatus = useCallback(async () => {
|
|
7
8
|
try {
|
|
8
|
-
const stored = await Keychain.getGenericPassword(
|
|
9
|
+
const stored = await Keychain.getGenericPassword({
|
|
10
|
+
service: STORAGE_KEYS.connections
|
|
11
|
+
});
|
|
9
12
|
if (stored) {
|
|
10
13
|
return JSON.parse(stored.password);
|
|
11
14
|
}
|
|
@@ -25,23 +28,43 @@ export const useConnections = () => {
|
|
|
25
28
|
const connectPlatform = useCallback(async platform => {
|
|
26
29
|
setIsConnecting(true);
|
|
27
30
|
try {
|
|
28
|
-
|
|
29
|
-
console.log(`OAuth integration temporarily disabled for ${platform}`);
|
|
31
|
+
console.log(`[OAuth] Starting connection for ${platform}`);
|
|
30
32
|
|
|
31
|
-
//
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
33
|
+
// Get OAuth URL from API
|
|
34
|
+
const oauthEndpoint = API_ENDPOINTS.oauth[platform];
|
|
35
|
+
if (!oauthEndpoint) {
|
|
36
|
+
throw new Error(`No OAuth endpoint configured for ${platform}`);
|
|
37
|
+
}
|
|
38
|
+
const apiUrl = `${API_ENDPOINTS.base}${oauthEndpoint}`;
|
|
39
|
+
console.log(`[OAuth] Fetching URL from: ${apiUrl}`);
|
|
40
|
+
const response = await fetch(apiUrl);
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
throw new Error(`API request failed with status ${response.status}`);
|
|
43
|
+
}
|
|
44
|
+
const {
|
|
45
|
+
url
|
|
46
|
+
} = await response.json();
|
|
47
|
+
if (!url) {
|
|
48
|
+
throw new Error('No OAuth URL received from API');
|
|
49
|
+
}
|
|
50
|
+
console.log(`[OAuth] Opening URL: ${url}`);
|
|
51
|
+
|
|
52
|
+
// Check if URL can be opened
|
|
53
|
+
const canOpen = await Linking.canOpenURL(url);
|
|
54
|
+
if (!canOpen) {
|
|
55
|
+
throw new Error(`Cannot open URL: ${url}`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Open OAuth URL
|
|
59
|
+
await Linking.openURL(url);
|
|
60
|
+
console.log(`[OAuth] URL opened successfully`);
|
|
38
61
|
} catch (error) {
|
|
39
|
-
console.error(`Error connecting to ${platform}:`, error);
|
|
62
|
+
console.error(`[OAuth] Error connecting to ${platform}:`, error);
|
|
40
63
|
throw error;
|
|
41
64
|
} finally {
|
|
42
65
|
setIsConnecting(false);
|
|
43
66
|
}
|
|
44
|
-
}, [
|
|
67
|
+
}, []);
|
|
45
68
|
const disconnectPlatform = useCallback(async platform => {
|
|
46
69
|
try {
|
|
47
70
|
const status = await getConnectionStatus();
|
|
@@ -54,9 +77,10 @@ export const useConnections = () => {
|
|
|
54
77
|
}, [getConnectionStatus, saveConnectionStatus]);
|
|
55
78
|
const handleOAuthCallback = useCallback(async (platform, data) => {
|
|
56
79
|
try {
|
|
80
|
+
console.log(`[OAuth] Handling callback for ${platform}:`, data);
|
|
57
81
|
const status = await getConnectionStatus();
|
|
58
82
|
status[platform] = {
|
|
59
|
-
userName: data.userName || `
|
|
83
|
+
userName: data.userName || `User (${platform})`,
|
|
60
84
|
connected: true
|
|
61
85
|
};
|
|
62
86
|
await saveConnectionStatus(status);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useState","useCallback","Keychain","STORAGE_KEYS","useConnections","isConnecting","setIsConnecting","getConnectionStatus","stored","getGenericPassword","connections","JSON","parse","password","error","console","saveConnectionStatus","status","setGenericPassword","stringify","connectPlatform","platform","log","
|
|
1
|
+
{"version":3,"names":["useState","useCallback","Linking","Keychain","API_ENDPOINTS","STORAGE_KEYS","useConnections","isConnecting","setIsConnecting","getConnectionStatus","stored","getGenericPassword","service","connections","JSON","parse","password","error","console","saveConnectionStatus","status","setGenericPassword","stringify","connectPlatform","platform","log","oauthEndpoint","oauth","Error","apiUrl","base","response","fetch","ok","url","json","canOpen","canOpenURL","openURL","disconnectPlatform","handleOAuthCallback","data","userName","connected"],"sourceRoot":"..\\..\\..\\src","sources":["hooks/useConnections.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,7 +4,9 @@ import { STORAGE_KEYS } from '../constants';
|
|
|
4
4
|
export const useCredentials = () => {
|
|
5
5
|
const hasCredentials = useCallback(async () => {
|
|
6
6
|
try {
|
|
7
|
-
const credentials = await Keychain.getGenericPassword(
|
|
7
|
+
const credentials = await Keychain.getGenericPassword({
|
|
8
|
+
service: STORAGE_KEYS.credentials
|
|
9
|
+
});
|
|
8
10
|
return !!credentials;
|
|
9
11
|
} catch (error) {
|
|
10
12
|
console.error('Error checking credentials:', error);
|
|
@@ -13,7 +15,9 @@ export const useCredentials = () => {
|
|
|
13
15
|
}, []);
|
|
14
16
|
const getCredentials = useCallback(async () => {
|
|
15
17
|
try {
|
|
16
|
-
const credentials = await Keychain.getGenericPassword(
|
|
18
|
+
const credentials = await Keychain.getGenericPassword({
|
|
19
|
+
service: STORAGE_KEYS.credentials
|
|
20
|
+
});
|
|
17
21
|
if (credentials) {
|
|
18
22
|
return JSON.parse(credentials.password);
|
|
19
23
|
}
|
|
@@ -25,11 +29,15 @@ export const useCredentials = () => {
|
|
|
25
29
|
}, []);
|
|
26
30
|
const storeCredentials = useCallback(async (username, userPin, accessToken) => {
|
|
27
31
|
try {
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
const options = {
|
|
33
|
+
accessControl: Keychain.ACCESS_CONTROL.BIOMETRY_ANY,
|
|
34
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
35
|
+
service: STORAGE_KEYS.credentials
|
|
36
|
+
};
|
|
37
|
+
await Keychain.setGenericPassword(username, JSON.stringify({
|
|
30
38
|
userPin,
|
|
31
39
|
accessToken
|
|
32
|
-
}));
|
|
40
|
+
}), options);
|
|
33
41
|
return true;
|
|
34
42
|
} catch (error) {
|
|
35
43
|
console.error('Error storing credentials:', error);
|
|
@@ -38,7 +46,9 @@ export const useCredentials = () => {
|
|
|
38
46
|
}, []);
|
|
39
47
|
const clearCredentials = useCallback(async () => {
|
|
40
48
|
try {
|
|
41
|
-
await Keychain.resetGenericPassword(
|
|
49
|
+
await Keychain.resetGenericPassword({
|
|
50
|
+
service: STORAGE_KEYS.credentials
|
|
51
|
+
});
|
|
42
52
|
} catch (error) {
|
|
43
53
|
console.error('Error clearing credentials:', error);
|
|
44
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","Keychain","STORAGE_KEYS","useCredentials","hasCredentials","credentials","getGenericPassword","error","console","getCredentials","JSON","parse","password","storeCredentials","username","userPin","accessToken","setGenericPassword","stringify","clearCredentials","resetGenericPassword","validateCredentials","response","fetch","method","headers","body","data","json","isValid","valid"],"sourceRoot":"..\\..\\..\\src","sources":["hooks/useCredentials.ts"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,OAAO,KAAKC,QAAQ,MAAM,uBAAuB;AACjD,SAASC,YAAY,QAAQ,cAAc;AAG3C,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,MAAMC,cAAc,GAAGJ,WAAW,CAAC,YAA8B;IAC/D,IAAI;MACF,MAAMK,WAAW,GAAG,MAAMJ,QAAQ,CAACK,kBAAkB,
|
|
1
|
+
{"version":3,"names":["useCallback","Keychain","STORAGE_KEYS","useCredentials","hasCredentials","credentials","getGenericPassword","service","error","console","getCredentials","JSON","parse","password","storeCredentials","username","userPin","accessToken","options","accessControl","ACCESS_CONTROL","BIOMETRY_ANY","accessible","ACCESSIBLE","WHEN_UNLOCKED","setGenericPassword","stringify","clearCredentials","resetGenericPassword","validateCredentials","response","fetch","method","headers","body","data","json","isValid","valid"],"sourceRoot":"..\\..\\..\\src","sources":["hooks/useCredentials.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
//
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export { AuthUtils, CryptoUtils, ApiUtils };
|
|
11
|
-
//# sourceMappingURL=index.js.mapxport { LoadingScreen } from './components/screens/LoadingScreen';
|
|
1
|
+
// Components
|
|
2
|
+
export { OnairosButton } from './components/OnairosButton';
|
|
3
|
+
export { UniversalOnboarding } from './components/UniversalOnboarding';
|
|
4
|
+
export { Overlay } from './components/Overlay';
|
|
5
|
+
|
|
6
|
+
// Screen Components
|
|
7
|
+
export { ConnectorScreen } from './components/screens/ConnectorScreen';
|
|
8
|
+
export { PinCreationScreen } from './components/screens/PinCreationScreen';
|
|
9
|
+
export { LoadingScreen } from './components/screens/LoadingScreen';
|
|
12
10
|
|
|
13
11
|
// Onboarding Components
|
|
14
12
|
export { OAuthWebView } from './components/onboarding/OAuthWebView';
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["OnairosButton","
|
|
1
|
+
{"version":3,"names":["OnairosButton","UniversalOnboarding","Overlay","ConnectorScreen","PinCreationScreen","LoadingScreen","OAuthWebView","PlatformConnector","OnboardingHeader","PinInput","useConnections","useCredentials","storeCredentials","getCredentials","hasCredentials","deleteCredentials","updateCredentials","generateDeviceUsername","verifyCredentials","validateCredentials","createAccount","authenticate","refreshToken","getPlatformData","getUserProfile","updatePlatformConnections","rsaEncrypt","sha256","base64ToBuffer","logDebug","logError","isDebugMode","connectPlatform","disconnectPlatform","initializeOAuthService","cleanupOAuthService","storePlatformConnection","COLORS","PLATFORMS","API_ENDPOINTS","STORAGE_KEYS","PIN_REQUIREMENTS","DEEP_LINK_CONFIG"],"sourceRoot":"..\\..\\src","sources":["index.ts"],"mappings":"AAAA;AACA,SAASA,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,mBAAmB,QAAQ,kCAAkC;AACtE,SAASC,OAAO,QAAQ,sBAAsB;;AAE9C;AACA,SAASC,eAAe,QAAQ,sCAAsC;AACtE,SAASC,iBAAiB,QAAQ,wCAAwC;AAC1E,SAASC,aAAa,QAAQ,oCAAoC;;AAElE;AACA,SAASC,YAAY,QAAQ,sCAAsC;AACnE,SAASC,iBAAiB,QAAQ,2CAA2C;AAC7E,SAASC,gBAAgB,QAAQ,0CAA0C;AAC3E,SAASC,QAAQ,QAAQ,kCAAkC;;AAE3D;AACA,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,cAAc,QAAQ,wBAAwB;;AAEvD;AACA,SACEC,gBAAgB,EAChBC,cAAc,EACdC,cAAc,EACdC,iBAAiB,EACjBC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,QACZ,uBAAuB;AAE9B,SACEC,mBAAmB,EACnBC,aAAa,EACbC,YAAY,EACZC,YAAY,EACZC,eAAe,EACfC,cAAc,EACdC,yBAAyB,QACpB,oBAAoB;AAE3B,SACEC,UAAU,EACVC,MAAM,EACNC,cAAc,QACT,gBAAgB;AAEvB,SACEC,QAAQ,EACRC,QAAQ,EACRC,WAAW,QACN,qBAAqB;;AAE5B;AACA,SACEC,eAAe,EACfC,kBAAkB,EAClBC,sBAAsB,EACtBC,mBAAmB,EACnBC,uBAAuB,QAClB,yBAAyB;;AAEhC;;AAkBA;AACA,SAASC,MAAM,EAAEC,SAAS,EAAEC,aAAa,EAAEC,YAAY,EAAEC,gBAAgB,EAAEC,gBAAgB,QAAQ,aAAa","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState, useCallback } from 'react';
|
|
2
|
-
import { Linking } from 'react-native';
|
|
2
|
+
import { Linking, Platform } from 'react-native';
|
|
3
3
|
import * as Keychain from 'react-native-keychain';
|
|
4
4
|
import { API_ENDPOINTS, STORAGE_KEYS } from '../constants';
|
|
5
5
|
import type { ConnectionStatus } from '../types';
|
|
@@ -9,7 +9,7 @@ export const useConnections = () => {
|
|
|
9
9
|
|
|
10
10
|
const getConnectionStatus = useCallback(async (): Promise<ConnectionStatus> => {
|
|
11
11
|
try {
|
|
12
|
-
const stored = await Keychain.getGenericPassword(STORAGE_KEYS.connections);
|
|
12
|
+
const stored = await Keychain.getGenericPassword({ service: STORAGE_KEYS.connections });
|
|
13
13
|
if (stored) {
|
|
14
14
|
return JSON.parse(stored.password);
|
|
15
15
|
}
|
|
@@ -34,24 +34,46 @@ export const useConnections = () => {
|
|
|
34
34
|
const connectPlatform = useCallback(async (platform: string) => {
|
|
35
35
|
setIsConnecting(true);
|
|
36
36
|
try {
|
|
37
|
-
|
|
38
|
-
console.log(`OAuth integration temporarily disabled for ${platform}`);
|
|
37
|
+
console.log(`[OAuth] Starting connection for ${platform}`);
|
|
39
38
|
|
|
40
|
-
//
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
// Get OAuth URL from API
|
|
40
|
+
const oauthEndpoint = API_ENDPOINTS.oauth[platform as keyof typeof API_ENDPOINTS.oauth];
|
|
41
|
+
if (!oauthEndpoint) {
|
|
42
|
+
throw new Error(`No OAuth endpoint configured for ${platform}`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const apiUrl = `${API_ENDPOINTS.base}${oauthEndpoint}`;
|
|
46
|
+
console.log(`[OAuth] Fetching URL from: ${apiUrl}`);
|
|
47
|
+
|
|
48
|
+
const response = await fetch(apiUrl);
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
throw new Error(`API request failed with status ${response.status}`);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const { url } = await response.json();
|
|
54
|
+
if (!url) {
|
|
55
|
+
throw new Error('No OAuth URL received from API');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
console.log(`[OAuth] Opening URL: ${url}`);
|
|
47
59
|
|
|
60
|
+
// Check if URL can be opened
|
|
61
|
+
const canOpen = await Linking.canOpenURL(url);
|
|
62
|
+
if (!canOpen) {
|
|
63
|
+
throw new Error(`Cannot open URL: ${url}`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Open OAuth URL
|
|
67
|
+
await Linking.openURL(url);
|
|
68
|
+
console.log(`[OAuth] URL opened successfully`);
|
|
69
|
+
|
|
48
70
|
} catch (error) {
|
|
49
|
-
console.error(`Error connecting to ${platform}:`, error);
|
|
71
|
+
console.error(`[OAuth] Error connecting to ${platform}:`, error);
|
|
50
72
|
throw error;
|
|
51
73
|
} finally {
|
|
52
74
|
setIsConnecting(false);
|
|
53
75
|
}
|
|
54
|
-
}, [
|
|
76
|
+
}, []);
|
|
55
77
|
|
|
56
78
|
const disconnectPlatform = useCallback(async (platform: string) => {
|
|
57
79
|
try {
|
|
@@ -66,9 +88,10 @@ export const useConnections = () => {
|
|
|
66
88
|
|
|
67
89
|
const handleOAuthCallback = useCallback(async (platform: string, data: any) => {
|
|
68
90
|
try {
|
|
91
|
+
console.log(`[OAuth] Handling callback for ${platform}:`, data);
|
|
69
92
|
const status = await getConnectionStatus();
|
|
70
93
|
status[platform as keyof ConnectionStatus] = {
|
|
71
|
-
userName: data.userName || `
|
|
94
|
+
userName: data.userName || `User (${platform})`,
|
|
72
95
|
connected: true
|
|
73
96
|
};
|
|
74
97
|
await saveConnectionStatus(status);
|
|
@@ -6,7 +6,9 @@ import type { CredentialsResult } from '../types';
|
|
|
6
6
|
export const useCredentials = () => {
|
|
7
7
|
const hasCredentials = useCallback(async (): Promise<boolean> => {
|
|
8
8
|
try {
|
|
9
|
-
const credentials = await Keychain.getGenericPassword(
|
|
9
|
+
const credentials = await Keychain.getGenericPassword({
|
|
10
|
+
service: STORAGE_KEYS.credentials
|
|
11
|
+
});
|
|
10
12
|
return !!credentials;
|
|
11
13
|
} catch (error) {
|
|
12
14
|
console.error('Error checking credentials:', error);
|
|
@@ -16,7 +18,9 @@ export const useCredentials = () => {
|
|
|
16
18
|
|
|
17
19
|
const getCredentials = useCallback(async () => {
|
|
18
20
|
try {
|
|
19
|
-
const credentials = await Keychain.getGenericPassword(
|
|
21
|
+
const credentials = await Keychain.getGenericPassword({
|
|
22
|
+
service: STORAGE_KEYS.credentials
|
|
23
|
+
});
|
|
20
24
|
if (credentials) {
|
|
21
25
|
return JSON.parse(credentials.password);
|
|
22
26
|
}
|
|
@@ -33,9 +37,16 @@ export const useCredentials = () => {
|
|
|
33
37
|
accessToken: string
|
|
34
38
|
): Promise<boolean> => {
|
|
35
39
|
try {
|
|
40
|
+
const options: Keychain.Options = {
|
|
41
|
+
accessControl: Keychain.ACCESS_CONTROL.BIOMETRY_ANY,
|
|
42
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
43
|
+
service: STORAGE_KEYS.credentials
|
|
44
|
+
};
|
|
45
|
+
|
|
36
46
|
await Keychain.setGenericPassword(
|
|
37
|
-
|
|
38
|
-
JSON.stringify({
|
|
47
|
+
username,
|
|
48
|
+
JSON.stringify({ userPin, accessToken }),
|
|
49
|
+
options
|
|
39
50
|
);
|
|
40
51
|
return true;
|
|
41
52
|
} catch (error) {
|
|
@@ -46,7 +57,9 @@ export const useCredentials = () => {
|
|
|
46
57
|
|
|
47
58
|
const clearCredentials = useCallback(async (): Promise<void> => {
|
|
48
59
|
try {
|
|
49
|
-
await Keychain.resetGenericPassword(
|
|
60
|
+
await Keychain.resetGenericPassword({
|
|
61
|
+
service: STORAGE_KEYS.credentials
|
|
62
|
+
});
|
|
50
63
|
} catch (error) {
|
|
51
64
|
console.error('Error clearing credentials:', error);
|
|
52
65
|
}
|