@onairos/react-native 3.0.9 → 3.0.11

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 (29) hide show
  1. package/lib/commonjs/assets/images/onairos_logo.png +0 -0
  2. package/lib/commonjs/components/Onairos.js +206 -60
  3. package/lib/commonjs/components/Onairos.js.map +1 -1
  4. package/lib/commonjs/components/OnairosButton.js +97 -42
  5. package/lib/commonjs/components/OnairosButton.js.map +1 -1
  6. package/lib/commonjs/components/UniversalOnboarding.js +98 -26
  7. package/lib/commonjs/components/UniversalOnboarding.js.map +1 -1
  8. package/lib/module/assets/images/onairos_logo.png +0 -0
  9. package/lib/module/components/Onairos.js +209 -62
  10. package/lib/module/components/Onairos.js.map +1 -1
  11. package/lib/module/components/OnairosButton.js +99 -44
  12. package/lib/module/components/OnairosButton.js.map +1 -1
  13. package/lib/module/components/UniversalOnboarding.js +100 -28
  14. package/lib/module/components/UniversalOnboarding.js.map +1 -1
  15. package/lib/module/index.js +10 -9
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/typescript/components/Onairos.d.ts +26 -24
  18. package/lib/typescript/components/Onairos.d.ts.map +1 -1
  19. package/lib/typescript/components/OnairosButton.d.ts +5 -1
  20. package/lib/typescript/components/OnairosButton.d.ts.map +1 -1
  21. package/lib/typescript/components/UniversalOnboarding.d.ts.map +1 -1
  22. package/lib/typescript/types.d.ts +2 -1
  23. package/lib/typescript/types.d.ts.map +1 -1
  24. package/package.json +4 -3
  25. package/src/assets/images/onairos_logo.png +0 -0
  26. package/src/components/Onairos.tsx +273 -88
  27. package/src/components/OnairosButton.tsx +102 -46
  28. package/src/components/UniversalOnboarding.tsx +105 -28
  29. package/src/types.ts +2 -1
@@ -1,29 +1,31 @@
1
1
  import React from 'react';
2
- import type { OnairosButtonProps } from '../types';
3
- export interface OnairosProps extends Omit<OnairosButtonProps, 'onResolved' | 'onRejection'> {
4
- /**
5
- * Callback function called when the Onairos flow completes successfully
6
- * @param apiUrl The API URL for accessing the data
7
- * @param token The authentication token
8
- * @param userData The user data returned by the server
9
- */
10
- onResolved?: (apiUrl: string, token: string, userData: any) => void;
11
- /**
12
- * Callback function called when the Onairos flow is rejected or fails
13
- * @param error Optional error message
14
- */
2
+ import { DataTier } from '../types';
3
+ interface OnairosProps {
4
+ returnLink?: string;
5
+ prefillUrl?: string;
6
+ AppName: string;
7
+ buttonType?: 'normal' | 'pill';
8
+ requestData?: {
9
+ [key: string]: DataTier;
10
+ };
11
+ buttonWidth?: number;
12
+ buttonHeight?: number;
13
+ hasStroke?: boolean;
14
+ enabled?: boolean;
15
+ buttonForm?: 'default' | 'connect';
15
16
  onRejection?: (error?: string) => void;
16
- /**
17
- * Optional test mode flag - simplifies flows for testing
18
- */
17
+ onResolved?: (apiUrl: string, token: string, userData: any) => void;
18
+ preCheck?: () => Promise<boolean>;
19
+ color?: string;
20
+ debug?: boolean;
21
+ darkMode?: boolean;
22
+ preferredPlatform?: string;
19
23
  testMode?: boolean;
20
- /**
21
- * Optional style for the container
22
- */
23
- containerStyle?: any;
24
24
  }
25
- /**
26
- * Main Onairos component - wraps OnairosButton with additional state management and logic
27
- */
28
- export declare const Onairos: React.FC<OnairosProps>;
25
+ export interface OnairosRef {
26
+ trigger: () => Promise<void>;
27
+ reset: () => Promise<void>;
28
+ }
29
+ export declare const Onairos: React.ForwardRefExoticComponent<OnairosProps & React.RefAttributes<OnairosRef>>;
30
+ export {};
29
31
  //# sourceMappingURL=Onairos.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Onairos.d.ts","sourceRoot":"","sources":["../../../src/components/Onairos.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAGhE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,aAAa,CAAC;IAC1F;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IAEpE;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAiF1C,CAAC"}
1
+ {"version":3,"file":"Onairos.d.ts","sourceRoot":"","sources":["../../../src/components/Onairos.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiE,MAAM,OAAO,CAAC;AAiBtF,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC;KACzB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,OAAO,iFAgOlB,CAAC"}
@@ -1,7 +1,11 @@
1
1
  import React from 'react';
2
2
  import type { OnairosButtonProps } from '../types';
3
+ export interface OnairosButtonRef {
4
+ trigger: () => Promise<void>;
5
+ reset: () => Promise<void>;
6
+ }
3
7
  /**
4
8
  * OnairosButton Component - A sign-in button similar to Google/Apple sign-in
5
9
  */
6
- export declare const OnairosButton: React.FC<OnairosButtonProps>;
10
+ export declare const OnairosButton: React.ForwardRefExoticComponent<OnairosButtonProps & React.RefAttributes<OnairosButtonRef>>;
7
11
  //# sourceMappingURL=OnairosButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OnairosButton.d.ts","sourceRoot":"","sources":["../../../src/components/OnairosButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAerD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAKnD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAmLtD,CAAC"}
1
+ {"version":3,"file":"OnairosButton.d.ts","sourceRoot":"","sources":["../../../src/components/OnairosButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiE,MAAM,OAAO,CAAC;AActF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAKnD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,6FA0OxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UniversalOnboarding.d.ts","sourceRoot":"","sources":["../../../src/components/UniversalOnboarding.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAiBjF,OAAO,KAAK,EAAE,wBAAwB,EAAoB,MAAM,UAAU,CAAC;AAI3E,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAqKlE,CAAC"}
1
+ {"version":3,"file":"UniversalOnboarding.d.ts","sourceRoot":"","sources":["../../../src/components/UniversalOnboarding.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAoBhE,OAAO,KAAK,EAAE,wBAAwB,EAAoB,MAAM,UAAU,CAAC;AAI3E,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAuNlE,CAAC"}
@@ -41,13 +41,14 @@ export interface OnairosButtonProps {
41
41
  buttonHeight?: number;
42
42
  hasStroke?: boolean;
43
43
  enabled?: boolean;
44
- buttonForm?: 'default' | 'login' | 'signup';
44
+ buttonForm?: 'default' | 'login' | 'signup' | 'connect';
45
45
  onRejection?: (error?: string) => void;
46
46
  onResolved?: (apiUrl: string, token: string, userData: any) => void;
47
47
  preCheck?: () => Promise<boolean>;
48
48
  color?: string;
49
49
  swerv?: boolean;
50
50
  debug?: boolean;
51
+ darkMode?: boolean;
51
52
  preferredPlatform?: string;
52
53
  testMode?: boolean;
53
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE;QACX,KAAK,EAAE,QAAQ,CAAC;QAChB,MAAM,EAAE,QAAQ,CAAC;QACjB,KAAK,EAAE,QAAQ,CAAC;KACjB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,QAAQ,CAAC;QAChB,MAAM,EAAE,QAAQ,CAAC;QACjB,KAAK,EAAE,QAAQ,CAAC;KACjB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxD,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,IAAI,EAAE,MAAM,CAAC;YACb,YAAY,EAAE,MAAM,CAAC;YACrB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;CAC7B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onairos/react-native",
3
- "version": "3.0.9",
3
+ "version": "3.0.11",
4
4
  "description": "Onairos React Native SDK for social media authentication and AI model training",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -63,7 +63,6 @@
63
63
  "registry": "https://registry.npmjs.org/"
64
64
  },
65
65
  "dependencies": {
66
- "@gorhom/bottom-sheet": "^4",
67
66
  "@react-native-community/netinfo": "^9.0.0",
68
67
  "axios": "^1.6.2",
69
68
  "react-native-crypto-js": "^1.0.0",
@@ -122,7 +121,9 @@
122
121
  "typescript",
123
122
  {
124
123
  "project": "tsconfig.build.json",
125
- "tscFlags": ["--skipLibCheck"]
124
+ "tscFlags": [
125
+ "--skipLibCheck"
126
+ ]
126
127
  }
127
128
  ]
128
129
  ]
@@ -1,117 +1,302 @@
1
- import React, { useState, useCallback, useEffect } from 'react';
2
- import { Platform, View } from 'react-native';
3
- import { OnairosButton } from './OnairosButton';
4
- import type { OnairosButtonProps } from '../types';
5
- import { hasCredentials, getCredentials } from '../utils/secureStorage';
1
+ import React, { forwardRef, useImperativeHandle, useState, useCallback } from 'react';
2
+ import {
3
+ StyleSheet,
4
+ View,
5
+ TouchableOpacity,
6
+ Text,
7
+ ViewStyle,
8
+ TextStyle,
9
+ Platform,
10
+ Image,
11
+ } from 'react-native';
12
+ import { UniversalOnboarding } from './UniversalOnboarding';
13
+ import { Overlay } from './Overlay';
14
+ import { COLORS } from '../constants';
15
+ import { hasCredentials, getCredentials, deleteCredentials } from '../utils/secureStorage';
16
+ import { onairosApi } from '../api';
17
+ import { Portal } from '../utils/Portal';
18
+ import { DataTier } from '../types';
6
19
 
7
- export interface OnairosProps extends Omit<OnairosButtonProps, 'onResolved' | 'onRejection'> {
8
- /**
9
- * Callback function called when the Onairos flow completes successfully
10
- * @param apiUrl The API URL for accessing the data
11
- * @param token The authentication token
12
- * @param userData The user data returned by the server
13
- */
14
- onResolved?: (apiUrl: string, token: string, userData: any) => void;
15
-
16
- /**
17
- * Callback function called when the Onairos flow is rejected or fails
18
- * @param error Optional error message
19
- */
20
+ interface OnairosProps {
21
+ returnLink?: string;
22
+ prefillUrl?: string;
23
+ AppName: string;
24
+ buttonType?: 'normal' | 'pill';
25
+ requestData?: {
26
+ [key: string]: DataTier;
27
+ };
28
+ buttonWidth?: number;
29
+ buttonHeight?: number;
30
+ hasStroke?: boolean;
31
+ enabled?: boolean;
32
+ buttonForm?: 'default' | 'connect';
20
33
  onRejection?: (error?: string) => void;
21
-
22
- /**
23
- * Optional test mode flag - simplifies flows for testing
24
- */
34
+ onResolved?: (apiUrl: string, token: string, userData: any) => void;
35
+ preCheck?: () => Promise<boolean>;
36
+ color?: string;
37
+ debug?: boolean;
38
+ darkMode?: boolean;
39
+ preferredPlatform?: string;
25
40
  testMode?: boolean;
26
-
27
- /**
28
- * Optional style for the container
29
- */
30
- containerStyle?: any;
31
41
  }
32
42
 
33
- /**
34
- * Main Onairos component - wraps OnairosButton with additional state management and logic
35
- */
36
- export const Onairos: React.FC<OnairosProps> = ({
37
- AppName,
43
+ export interface OnairosRef {
44
+ trigger: () => Promise<void>;
45
+ reset: () => Promise<void>;
46
+ }
47
+
48
+ export const Onairos = forwardRef<OnairosRef, OnairosProps>(({
38
49
  returnLink,
39
- requestData,
50
+ prefillUrl,
51
+ AppName,
40
52
  buttonType = 'normal',
41
- buttonForm = 'default',
42
- buttonWidth,
53
+ requestData,
54
+ buttonWidth = 180,
43
55
  buttonHeight,
56
+ hasStroke = false,
57
+ enabled = true,
58
+ buttonForm = 'default',
59
+ onRejection,
60
+ onResolved,
61
+ preCheck,
44
62
  color,
45
- hasStroke,
63
+ debug = false,
64
+ darkMode = false,
46
65
  preferredPlatform,
47
- onResolved,
48
- onRejection,
49
66
  testMode = false,
50
- containerStyle,
51
- }) => {
52
- const [isInitialized, setIsInitialized] = useState(false);
53
- const [hasExistingCredentials, setHasExistingCredentials] = useState(false);
67
+ }, ref) => {
68
+ const [showOnboarding, setShowOnboarding] = useState(false);
69
+ const [showOverlay, setShowOverlay] = useState(false);
70
+ const [storedCredentials, setStoredCredentials] = useState<any>(null);
71
+ const [isLoading, setIsLoading] = useState(false);
72
+ const [isPressed, setIsPressed] = useState(false);
73
+
74
+ // Expose methods for external control
75
+ useImperativeHandle(ref, () => ({
76
+ trigger: async () => {
77
+ await handlePress();
78
+ },
79
+ reset: async () => {
80
+ await deleteCredentials();
81
+ }
82
+ }));
83
+
84
+ // Compute button text based on buttonForm
85
+ const getButtonText = () => {
86
+ if (buttonForm === 'connect') {
87
+ return 'Connect with Onairos';
88
+ } else {
89
+ return 'Sign in with Onairos';
90
+ }
91
+ };
92
+
93
+ // Calculate background color based on props and state
94
+ const getBackgroundColor = (): string => {
95
+ if (!enabled) {
96
+ return darkMode ? '#3A3A3A' : '#e0e0e0';
97
+ }
98
+
99
+ if (isPressed) {
100
+ return color ?
101
+ (typeof color === 'string' ? `${color}80` : color) :
102
+ (darkMode ? '#32323280' : '#f5f5f580');
103
+ }
104
+
105
+ return color || (darkMode ? '#2A2A2A' : '#ffffff');
106
+ };
107
+
108
+ // Calculate text color based on background luminance
109
+ const getTextColor = (): string => {
110
+ if (!enabled) {
111
+ return darkMode ? '#777777' : '#AAAAAA';
112
+ }
113
+
114
+ if (darkMode) {
115
+ return '#FFFFFF';
116
+ }
117
+
118
+ const bgColor = getBackgroundColor();
119
+ // Simple luminance check - in a real app, this would use a proper algorithm
120
+ return bgColor === '#ffffff' || bgColor === '#f5f5f580' || bgColor.includes('#f') ? '#000000' : '#FFFFFF';
121
+ };
54
122
 
55
- const initialize = useCallback(async () => {
123
+ const handlePress = async () => {
124
+ if (!enabled || isLoading) return;
125
+
126
+ setIsLoading(true);
127
+
56
128
  try {
57
- // Check for existing credentials
58
- const credentialsExist = await hasCredentials();
59
- setHasExistingCredentials(credentialsExist);
129
+ if (preCheck) {
130
+ const shouldProceed = await preCheck();
131
+ if (!shouldProceed) {
132
+ onRejection?.('Precheck validation failed');
133
+ setIsLoading(false);
134
+ return;
135
+ }
136
+ }
137
+
138
+ // Check if credentials exist
139
+ const hasStoredCreds = await hasCredentials();
60
140
 
61
- if (credentialsExist) {
62
- // Load credentials to verify they are valid
141
+ if (hasStoredCreds) {
142
+ // If credentials exist, fetch them and verify
63
143
  const credentials = await getCredentials();
64
- if (!credentials || !credentials.username || !credentials.userPin) {
65
- setHasExistingCredentials(false);
144
+
145
+ if (!credentials || !credentials.username) {
146
+ // Invalid credentials, clear and start fresh
147
+ await deleteCredentials();
148
+ setShowOnboarding(true);
149
+ setIsLoading(false);
150
+ return;
66
151
  }
152
+
153
+ try {
154
+ // Validate credentials with server
155
+ const isValid = await onairosApi.validateCredentials(credentials.username);
156
+
157
+ if (!isValid) {
158
+ // Clear invalid credentials
159
+ await deleteCredentials();
160
+ setShowOnboarding(true);
161
+ setIsLoading(false);
162
+ return;
163
+ }
164
+
165
+ // Store and display overlay with valid credentials
166
+ setStoredCredentials(credentials);
167
+ setShowOverlay(true);
168
+ } catch (validationError) {
169
+ console.warn('Validation error, proceeding to onboarding:', validationError);
170
+ setShowOnboarding(true);
171
+ }
172
+ } else {
173
+ // If no credentials, show onboarding
174
+ setShowOnboarding(true);
67
175
  }
68
176
  } catch (error) {
69
- console.error('Error initializing Onairos:', error);
177
+ console.error('Error during button press flow:', error);
178
+ // Fall back to onboarding on error
179
+ setShowOnboarding(true);
180
+ onRejection?.(error instanceof Error ? error.message : 'Unknown error');
70
181
  } finally {
71
- setIsInitialized(true);
182
+ setIsLoading(false);
72
183
  }
73
- }, []);
74
-
75
- useEffect(() => {
76
- initialize();
77
- }, [initialize]);
184
+ };
78
185
 
79
- const handleResolved = useCallback((apiUrl: string, token: string, userData: any) => {
186
+ const handleOnboardingComplete = useCallback((apiUrl: string, token: string, data: any) => {
187
+ setShowOnboarding(false);
80
188
  if (onResolved) {
81
- onResolved(apiUrl, token, userData);
189
+ onResolved(apiUrl, token, data);
82
190
  }
83
191
  }, [onResolved]);
84
-
85
- const handleRejection = useCallback((error?: string) => {
86
- if (onRejection) {
87
- onRejection(error);
192
+
193
+ const handleOverlayResolved = useCallback((apiUrl: string, token: string, data: any) => {
194
+ setShowOverlay(false);
195
+ if (onResolved) {
196
+ onResolved(apiUrl, token, data);
88
197
  }
89
- }, [onRejection]);
198
+ }, [onResolved]);
199
+
200
+ // Apply custom styling based on props
201
+ const buttonStyle: ViewStyle[] = [
202
+ styles.button,
203
+ {
204
+ width: buttonWidth,
205
+ height: buttonHeight || 48,
206
+ backgroundColor: getBackgroundColor(),
207
+ borderWidth: hasStroke ? 1 : 0,
208
+ borderColor: darkMode ? '#555555' : '#000000',
209
+ borderRadius: buttonType === 'pill' ? 24 : 8,
210
+ },
211
+ ];
90
212
 
91
- if (!isInitialized) {
92
- // Could render a loading state here if needed
93
- return null;
94
- }
213
+ const textStyle: TextStyle = {
214
+ ...styles.buttonText,
215
+ color: getTextColor(),
216
+ opacity: enabled ? 1 : 0.7,
217
+ };
95
218
 
96
219
  return (
97
- <View style={containerStyle}>
98
- <OnairosButton
99
- AppName={AppName}
100
- returnLink={returnLink}
101
- requestData={requestData}
102
- buttonType={buttonType}
103
- buttonForm={buttonForm}
104
- buttonWidth={buttonWidth}
105
- buttonHeight={buttonHeight}
106
- color={color}
107
- hasStroke={hasStroke}
108
- enabled={true}
109
- preferredPlatform={preferredPlatform}
110
- onResolved={handleResolved}
111
- onRejection={handleRejection}
112
- preCheck={async () => true}
113
- testMode={testMode}
114
- />
115
- </View>
220
+ <>
221
+ <TouchableOpacity
222
+ style={buttonStyle}
223
+ onPress={handlePress}
224
+ disabled={!enabled || isLoading}
225
+ accessibilityLabel="Sign in with Onairos"
226
+ onPressIn={() => setIsPressed(true)}
227
+ onPressOut={() => setIsPressed(false)}
228
+ >
229
+ <View style={styles.buttonContent}>
230
+ <Image
231
+ source={require('../assets/images/onairos_logo.png')}
232
+ style={styles.logo}
233
+ resizeMode="contain"
234
+ />
235
+ <Text style={textStyle}>{getButtonText()}</Text>
236
+ </View>
237
+ </TouchableOpacity>
238
+
239
+ {/* Overlay and Onboarding components rendered outside the button */}
240
+ {showOnboarding && (
241
+ <UniversalOnboarding
242
+ visible={showOnboarding}
243
+ onClose={() => {
244
+ setShowOnboarding(false);
245
+ onRejection?.('User closed onboarding');
246
+ }}
247
+ AppName={AppName}
248
+ requestData={requestData as any}
249
+ returnLink={returnLink || ''}
250
+ onComplete={handleOnboardingComplete}
251
+ debug={debug}
252
+ test={testMode}
253
+ preferredPlatform={preferredPlatform}
254
+ />
255
+ )}
256
+
257
+ {/* Overlay rendered through Portal to ensure it appears at root level */}
258
+ {showOverlay && storedCredentials && (
259
+ <Portal>
260
+ <Overlay
261
+ data={requestData || {}}
262
+ username={storedCredentials.username}
263
+ modelKey={storedCredentials.userPin || ''}
264
+ onResolved={handleOverlayResolved}
265
+ appName={AppName}
266
+ darkMode={darkMode}
267
+ />
268
+ </Portal>
269
+ )}
270
+ </>
116
271
  );
117
- };
272
+ });
273
+
274
+ const styles = StyleSheet.create({
275
+ button: {
276
+ flexDirection: 'row',
277
+ alignItems: 'center',
278
+ justifyContent: 'center',
279
+ paddingVertical: 12,
280
+ paddingHorizontal: 16,
281
+ shadowColor: '#000',
282
+ shadowOffset: { width: 0, height: 2 },
283
+ shadowOpacity: 0.1,
284
+ shadowRadius: 4,
285
+ elevation: 2,
286
+ },
287
+ buttonContent: {
288
+ flexDirection: 'row',
289
+ alignItems: 'center',
290
+ justifyContent: 'center',
291
+ },
292
+ logo: {
293
+ width: 24,
294
+ height: 24,
295
+ marginRight: 8,
296
+ },
297
+ buttonText: {
298
+ fontSize: 16,
299
+ fontWeight: '600',
300
+ textAlign: 'center',
301
+ },
302
+ });