@ollaid/native-sso 1.0.0 → 1.0.3

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 CHANGED
@@ -60,6 +60,7 @@ function App() {
60
60
  <NativeSSOPage
61
61
  saasApiUrl="https://mon-saas.com/api"
62
62
  iamApiUrl="https://identityam.ollaid.com/api"
63
+ accountType="user"
63
64
  onLoginSuccess={(token, user) => {
64
65
  console.log('Connecté !', user.name);
65
66
  navigate('/dashboard');
@@ -95,15 +96,220 @@ La page `/auth/sso` gère automatiquement :
95
96
  |------|------|--------|-------------|
96
97
  | `saasApiUrl` | `string` | ✅ | URL du backend SaaS (ex: `https://mon-saas.com/api`) |
97
98
  | `iamApiUrl` | `string` | ✅ | URL du backend IAM (ex: `https://identityam.ollaid.com/api`) |
99
+ | `accountType` | `'user' \| 'client'` | ❌ | Type de compte à persister dans localStorage (défaut: `'user'`). Utile si vous avez plusieurs pages SSO avec des rôles différents. |
100
+ | `configPrefix` | `string` | ❌ | **Multi-tenant** : préfixe de configuration IAM côté backend (défaut: `'iam'`). Permet à un même backend SaaS de gérer N applications IAM. Voir [Multi-Tenant](#multi-tenant-plusieurs-applications-sur-le-même-backend). |
98
101
  | `onLoginSuccess` | `(token: string, user: UserInfos) => void` | ❌ | Callback après connexion réussie |
99
102
  | `onLogout` | `() => void` | ❌ | Callback après déconnexion |
100
- | `debug` | `boolean` | ❌ | Active les logs console |
101
103
  | `title` | `string` | ❌ | Titre personnalisé (défaut: "Un compte, plusieurs accès") |
102
104
  | `description` | `string` | ❌ | Description personnalisée |
103
105
  | `logoUrl` | `string` | ❌ | URL du logo (remplace le slider) |
104
106
  | `hideFooter` | `boolean` | ❌ | Masquer "Propulsé par iam.ollaid.com" |
105
107
  | `onOnboardingComplete` | `(data: { image_url?: string; ccphone?: string; phone?: string }) => void` | ❌ | Callback après complétion de l'onboarding |
106
108
 
109
+ > **Note :** Le mode `debug` est contrôlé **uniquement** par le backend via la variable d'environnement `IAM_DEBUG` dans le `.env` du SaaS. Il n'y a plus de prop `debug` à passer au composant. Le `DebugPanel` est **réactif** : il apparaît automatiquement après le chargement des credentials si `debug: true` est retourné par le backend.
110
+
111
+ ---
112
+
113
+ ## Multi-Tenant (plusieurs applications sur le même backend)
114
+
115
+ Le package supporte N applications IAM sur le même backend SaaS via le prop `configPrefix`. C'est dynamique : vous pouvez ajouter autant d'applications que nécessaire sans modifier le code du package.
116
+
117
+ ### Principe
118
+
119
+ Le frontend envoie un header `X-IAM-Config-Prefix` dans tous les appels au SaaS. Le backend utilise ce préfixe pour résoudre dynamiquement le bon bloc de configuration.
120
+
121
+ ```
122
+ Frontend (configPrefix="iam_vendor")
123
+ → GET /api/native/config [Header: X-IAM-Config-Prefix: iam_vendor]
124
+
125
+ Backend SaaS:
126
+ $prefix = $request->header('X-IAM-Config-Prefix', 'iam');
127
+ $appKey = config("services.{$prefix}.app_key"); // ← résolution dynamique
128
+ ```
129
+
130
+ ### Côté Frontend
131
+
132
+ ```tsx
133
+ {/* Page login principale */}
134
+ <NativeSSOPage
135
+ saasApiUrl="https://votre-saas.com/api"
136
+ iamApiUrl="https://identityam.ollaid.com/api"
137
+ configPrefix="iam"
138
+ accountType="user"
139
+ />
140
+
141
+ {/* Page login espace vendeur */}
142
+ <NativeSSOPage
143
+ saasApiUrl="https://votre-saas.com/api"
144
+ iamApiUrl="https://identityam.ollaid.com/api"
145
+ configPrefix="iam_vendor"
146
+ accountType="client"
147
+ />
148
+
149
+ {/* Page login admin — même backend, app IAM différente */}
150
+ <NativeSSOPage
151
+ saasApiUrl="https://votre-saas.com/api"
152
+ iamApiUrl="https://identityam.ollaid.com/api"
153
+ configPrefix="iam_admin"
154
+ accountType="user"
155
+ />
156
+ ```
157
+
158
+ ### Côté Backend SaaS — `.env`
159
+
160
+ Le préfixe `.env` correspond au `configPrefix` en UPPER_CASE. Ajoutez autant de blocs que nécessaire :
161
+
162
+ ```env
163
+ # ===== Serveur IAM (partagé) =====
164
+ IAM_API_URL=https://identityam.ollaid.com/api
165
+ IAM_AUTH_URL=https://iam.ollaid.com
166
+
167
+ # ===== Préfixe "iam" (application principale) =====
168
+ IAM_APP_KEY=oiam_ak_xxx
169
+ IAM_PUBLIC_KEY=oiam_pk_xxx
170
+ IAM_SECRET_KEY=oiam_sk_xxx
171
+ IAM_WEBHOOK_SECRET=oiam_whsec_xxx
172
+ IAM_DEBUG=true
173
+
174
+ # ===== Préfixe "iam_vendor" (espace vendeur/shop) =====
175
+ IAM_VENDOR_APP_KEY=oiam_ak_yyy
176
+ IAM_VENDOR_PUBLIC_KEY=oiam_pk_yyy
177
+ IAM_VENDOR_SECRET_KEY=oiam_sk_yyy
178
+ IAM_VENDOR_WEBHOOK_SECRET=oiam_whsec_yyy
179
+ IAM_VENDOR_DEBUG=false
180
+
181
+ # ===== Préfixe "iam_client" (espace client) =====
182
+ IAM_CLIENT_APP_KEY=oiam_ak_zzz
183
+ IAM_CLIENT_SECRET_KEY=oiam_sk_zzz
184
+ IAM_CLIENT_DEBUG=true
185
+
186
+ # ===== Préfixe "iam_admin" (back-office) =====
187
+ IAM_ADMIN_APP_KEY=oiam_ak_aaa
188
+ IAM_ADMIN_SECRET_KEY=oiam_sk_aaa
189
+ IAM_ADMIN_DEBUG=true
190
+ ```
191
+
192
+ ### Côté Backend SaaS — `config/services.php`
193
+
194
+ ```php
195
+ return [
196
+ 'iam' => [
197
+ 'api_url' => env('IAM_API_URL', 'https://identityam.ollaid.com/api'),
198
+ 'app_key' => env('IAM_APP_KEY'),
199
+ 'public_key' => env('IAM_PUBLIC_KEY'),
200
+ 'secret_key' => env('IAM_SECRET_KEY'),
201
+ 'debug' => env('IAM_DEBUG', false),
202
+ ],
203
+ 'iam_vendor' => [
204
+ 'api_url' => env('IAM_API_URL'),
205
+ 'app_key' => env('IAM_VENDOR_APP_KEY'),
206
+ 'public_key' => env('IAM_VENDOR_PUBLIC_KEY'),
207
+ 'secret_key' => env('IAM_VENDOR_SECRET_KEY'),
208
+ 'debug' => env('IAM_VENDOR_DEBUG', false),
209
+ ],
210
+ 'iam_client' => [
211
+ 'api_url' => env('IAM_API_URL'),
212
+ 'app_key' => env('IAM_CLIENT_APP_KEY'),
213
+ 'secret_key' => env('IAM_CLIENT_SECRET_KEY'),
214
+ 'debug' => env('IAM_CLIENT_DEBUG', false),
215
+ ],
216
+ 'iam_admin' => [
217
+ 'api_url' => env('IAM_API_URL'),
218
+ 'app_key' => env('IAM_ADMIN_APP_KEY'),
219
+ 'secret_key' => env('IAM_ADMIN_SECRET_KEY'),
220
+ 'debug' => env('IAM_ADMIN_DEBUG', false),
221
+ ],
222
+ // Ajoutez d'autres blocs selon vos besoins...
223
+ ];
224
+ ```
225
+
226
+ ### Côté Backend SaaS — Controller multi-tenant
227
+
228
+ Tous les controllers Native (`config`, `exchange`, `check-token`, `logout`) doivent lire le header :
229
+
230
+ ```php
231
+ class NativeConfigController extends Controller
232
+ {
233
+ public function getConfig(Request $request): JsonResponse
234
+ {
235
+ // Multi-tenant : résolution dynamique du préfixe
236
+ $prefix = $request->header('X-IAM-Config-Prefix', 'iam');
237
+
238
+ // Sécurité : valider que le préfixe commence par "iam"
239
+ if (!str_starts_with($prefix, 'iam')) {
240
+ return response()->json(['success' => false, 'message' => 'Invalid config prefix'], 400);
241
+ }
242
+
243
+ $appKey = config("services.{$prefix}.app_key");
244
+ $secretKey = config("services.{$prefix}.secret_key");
245
+ $debug = (bool) config("services.{$prefix}.debug", false);
246
+
247
+ if (!$appKey || !$secretKey) {
248
+ return response()->json([
249
+ 'success' => false,
250
+ 'message' => "Configuration '{$prefix}' non trouvée",
251
+ ], 404);
252
+ }
253
+
254
+ // Chiffrement Opaque Token (AES-256-CBC)
255
+ $payload = json_encode(['secret_key' => $secretKey, 'ts' => time()]);
256
+ $key = hash('sha256', $secretKey, true);
257
+ $iv = random_bytes(16);
258
+ $encrypted = openssl_encrypt($payload, 'AES-256-CBC', $key, 0, $iv);
259
+ $encryptedCredentials = base64_encode($iv . '::' . $encrypted);
260
+
261
+ return response()->json([
262
+ 'success' => true,
263
+ 'app_key' => $appKey,
264
+ 'encrypted_credentials' => $encryptedCredentials,
265
+ 'credentials_ttl' => 300,
266
+ 'debug' => $debug,
267
+ ]);
268
+ }
269
+ }
270
+ ```
271
+
272
+ > **⚠️ Important** : Appliquez la même logique `X-IAM-Config-Prefix` dans `exchange`, `check-token` et `logout`.
273
+
274
+ ---
275
+
276
+ ## Debug Mode — Troubleshooting
277
+
278
+ Le debug est **piloté par le backend** : le package n'a aucun prop `debug`.
279
+
280
+ ### Comment ça marche
281
+
282
+ 1. Le backend lit `IAM_DEBUG` (ou `IAM_VENDOR_DEBUG`, etc.) depuis `.env`
283
+ 2. `GET /api/native/config` retourne `"debug": true`
284
+ 3. Le package active les logs console + le `DebugPanel`
285
+ 4. Le `DebugPanel` est **réactif** : il apparaît automatiquement après le chargement des credentials
286
+
287
+ ### Checklist de troubleshooting
288
+
289
+ | Problème | Solution |
290
+ |----------|----------|
291
+ | `DebugPanel` n'apparaît pas | Vérifier que `GET /api/native/config` retourne `"debug": true` dans la réponse JSON |
292
+ | La valeur est toujours `false` | Vérifier le `.env` : pas de typo ! (`IAM_DEBUG` et non `IAM_DEBUGL`) |
293
+ | Changement non pris en compte | Lancer `php artisan config:clear && php artisan config:cache` |
294
+ | Debug actif en production | Mettre `IAM_DEBUG=false` dans le `.env` de production |
295
+ | Debug marche pour main mais pas vendor | Vérifier `IAM_VENDOR_DEBUG=true` dans `.env` + `config/services.php` |
296
+
297
+ ### ⚠️ Erreur fréquente : typo dans `.env`
298
+
299
+ ```env
300
+ # ❌ MAUVAIS (typo "DEBUGL" avec un L en trop)
301
+ IAM_DEBUGL=true
302
+
303
+ # ✅ CORRECT
304
+ IAM_DEBUG=true
305
+ ```
306
+
307
+ Après correction, n'oubliez pas :
308
+ ```bash
309
+ php artisan config:clear
310
+ php artisan config:cache
311
+ ```
312
+
107
313
  ---
108
314
 
109
315
  ## Usage avancé (composants individuels)
@@ -227,6 +433,11 @@ $secretKey = $payload['secret_key'];
227
433
 
228
434
  ### `POST /api/native/exchange`
229
435
 
436
+ > ⚠️ **IMPORTANT — Route PUBLIQUE obligatoire**
437
+ > Cette route **NE DOIT PAS** être derrière le middleware `auth:sanctum`.
438
+ > Si vous la placez dans un groupe `Route::middleware('auth:sanctum')`, le frontend recevra une **erreur 401 Unauthenticated** systématique car l'utilisateur n'a pas encore de token Sanctum à ce stade du flux.
439
+ > Assurez-vous que `/api/native/config` et `/api/native/exchange` sont **en dehors** de tout groupe authentifié.
440
+
230
441
  Échange le `callback_token` reçu de l'IAM contre un token Sanctum local.
231
442
 
232
443
  **Headers requis :** `Content-Type: application/json`
@@ -665,14 +876,19 @@ class NativeAuthController extends Controller
665
876
 
666
877
  ### Routes `routes/api.php`
667
878
 
879
+ > ⚠️ **Attention au placement des routes !**
880
+ > `config` et `exchange` doivent être **publiques** (pas de middleware auth).
881
+ > `check-token` et `logout` doivent être **protégées** par `auth:sanctum`.
882
+ > Si `exchange` est derrière `auth:sanctum`, le frontend recevra un **401 Unauthenticated**.
883
+
668
884
  ```php
669
885
  use App\Http\Controllers\Api\NativeAuthController;
670
886
 
671
- // Routes SSO Native (pas d'auth requise)
887
+ // Routes PUBLIQUES (pas d'auth requise — l'utilisateur n'a pas encore de token)
672
888
  Route::get('/native/config', [NativeAuthController::class, 'config']);
673
889
  Route::post('/native/exchange', [NativeAuthController::class, 'exchange']);
674
890
 
675
- // Routes SSO Native (auth Sanctum requise)
891
+ // 🔒 Routes PROTÉGÉES (auth Sanctum requise — l'utilisateur a un token)
676
892
  Route::middleware('auth:sanctum')->group(function () {
677
893
  Route::post('/native/check-token', [NativeAuthController::class, 'checkToken']);
678
894
  Route::post('/native/logout', [NativeAuthController::class, 'logout']);
@@ -1370,20 +1586,27 @@ Toutes les APIs IAM retournent le même objet `user_infos` avec exactement **9 c
1370
1586
 
1371
1587
  ## Session & localStorage
1372
1588
 
1373
- Le package utilise **4 clés** dans `localStorage` pour persister la session :
1589
+ Le package utilise **5 clés** dans `localStorage` pour persister la session :
1374
1590
 
1375
1591
  | Clé | Contenu | Source | Valeurs possibles |
1376
1592
  |-----|---------|--------|-------------------|
1377
1593
  | `token` | Token Sanctum (bearer) | Réponse de `/api/native/exchange` | Chaîne `"1\|abc123..."` |
1378
1594
  | `auth_token` | Copie du token (compatibilité) | Même source que `token` | Idem |
1379
- | `user` | Objet `user_infos` sérialisé en JSON | Réponse de `/api/native/exchange` ou mise à jour via health check | `{"name":"...","email":"...",...}` |
1595
+ | `user` | Objet utilisateur enrichi sérialisé en JSON | Réponse de `/api/native/exchange` ou mise à jour via health check | `{"iam_reference":"USR-XXX","alias_reference":"ALI-XXX","name":"...","email":"...",...}` |
1380
1596
  | `account_type` | Type de compte | Déterminé lors du `exchange` selon le mode d'inscription | `"user"` (défaut) ou `"client"` (inscription phone-only) |
1597
+ | `alias_reference` | Référence alias utilisée lors de la connexion | Réponse de `/api/native/exchange` (champ `user.alias_reference`) | `"ALI-XXXXXXXX"` |
1598
+
1599
+ > **Note :** `account_type` et `alias_reference` sont stockés **séparément** de l'objet `user` en plus d'être inclus dans le JSON de la clé `user`.
1600
+
1601
+ #### Champs enrichis dans l'objet `user`
1381
1602
 
1382
- > **Note :** `account_type` est stocké **séparément** de l'objet `user` il n'est pas inclus dans le JSON de la clé `user`.
1603
+ L'objet `user` stocké en localStorage contient deux champs ajoutés automatiquement par le package :
1604
+ - `iam_reference` : la référence IAM de l'utilisateur (`USR-XXXXXXXX`), extraite de `user.reference`
1605
+ - `alias_reference` : la référence de l'alias utilisé lors de la connexion (`ALI-XXXXXXXX`), extraite de `user.alias_reference`
1383
1606
 
1384
1607
  ### Nettoyage
1385
1608
 
1386
- Lors du `logout()`, les 4 clés sont supprimées via `clearAuthToken()`.
1609
+ Lors du `logout()`, les 5 clés sont supprimées via `clearAuthToken()`.
1387
1610
 
1388
1611
  ### Accès programmatique
1389
1612
 
@@ -1391,8 +1614,9 @@ Lors du `logout()`, les 4 clés sont supprimées via `clearAuthToken()`.
1391
1614
  import { getAuthToken, getAuthUser, getAccountType } from '@ollaid/native-sso';
1392
1615
 
1393
1616
  const token = getAuthToken(); // string | null
1394
- const user = getAuthUser<UserInfos>(); // UserInfos | null
1617
+ const user = getAuthUser<UserInfos>(); // UserInfos | null — contient iam_reference et alias_reference
1395
1618
  const type = getAccountType(); // string | null
1619
+ const aliasRef = localStorage.getItem('alias_reference'); // string | null
1396
1620
  ```
1397
1621
 
1398
1622
  ---
@@ -4,6 +4,7 @@
4
4
  interface AppsLogoSliderProps {
5
5
  speed?: 'slow' | 'normal' | 'fast';
6
6
  className?: string;
7
+ iamApiUrl?: string;
7
8
  }
8
- export declare function AppsLogoSlider({ speed, className }: AppsLogoSliderProps): import("react/jsx-runtime").JSX.Element | null;
9
+ export declare function AppsLogoSlider({ speed, className, iamApiUrl: iamApiUrlProp }: AppsLogoSliderProps): import("react/jsx-runtime").JSX.Element | null;
9
10
  export default AppsLogoSlider;
@@ -14,7 +14,8 @@ export interface LoginModalProps {
14
14
  iamApiUrl: string;
15
15
  loading?: boolean;
16
16
  showSwitchToSignup?: boolean;
17
- debug?: boolean;
17
+ /** Type de compte par défaut à persister dans localStorage */
18
+ defaultAccountType?: 'user' | 'client';
18
19
  }
19
- export declare function LoginModal({ open, onOpenChange, onSwitchToSignup, onLoginSuccess, saasApiUrl, iamApiUrl, loading, showSwitchToSignup, debug, }: LoginModalProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function LoginModal({ open, onOpenChange, onSwitchToSignup, onLoginSuccess, saasApiUrl, iamApiUrl, loading, showSwitchToSignup, defaultAccountType, }: LoginModalProps): import("react/jsx-runtime").JSX.Element;
20
21
  export default LoginModal;
@@ -20,8 +20,13 @@ export interface NativeSSOPageProps {
20
20
  ccphone?: string;
21
21
  phone?: string;
22
22
  }) => void;
23
- /** Mode debug */
24
- debug?: boolean;
23
+ /** Type de compte à persister dans localStorage (défaut: 'user') */
24
+ accountType?: 'user' | 'client';
25
+ /**
26
+ * Préfixe de configuration IAM côté backend (défaut: 'iam').
27
+ * Permet le multi-tenant : 'iam', 'iam_vendor', 'iam_client', 'iam_admin', etc.
28
+ */
29
+ configPrefix?: string;
25
30
  /** Titre personnalisé */
26
31
  title?: string;
27
32
  /** Description personnalisée */
@@ -31,5 +36,5 @@ export interface NativeSSOPageProps {
31
36
  /** Masquer le footer "Propulsé par" */
32
37
  hideFooter?: boolean;
33
38
  }
34
- export declare function NativeSSOPage({ saasApiUrl, iamApiUrl, onLoginSuccess, onLogout, onOnboardingComplete, debug, title, description, logoUrl, hideFooter, }: NativeSSOPageProps): import("react/jsx-runtime").JSX.Element;
39
+ export declare function NativeSSOPage({ saasApiUrl, iamApiUrl, onLoginSuccess, onLogout, onOnboardingComplete, accountType, configPrefix, title, description, logoUrl, hideFooter, }: NativeSSOPageProps): import("react/jsx-runtime").JSX.Element;
35
40
  export default NativeSSOPage;
@@ -11,7 +11,6 @@ export interface PasswordRecoveryModalProps {
11
11
  onSuccess: () => void;
12
12
  saasApiUrl: string;
13
13
  iamApiUrl: string;
14
- debug?: boolean;
15
14
  }
16
- export declare function PasswordRecoveryModal({ open, onOpenChange, onSuccess, saasApiUrl, iamApiUrl, debug }: PasswordRecoveryModalProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function PasswordRecoveryModal({ open, onOpenChange, onSuccess, saasApiUrl, iamApiUrl }: PasswordRecoveryModalProps): import("react/jsx-runtime").JSX.Element;
17
16
  export default PasswordRecoveryModal;
@@ -12,7 +12,8 @@ export interface SignupModalProps {
12
12
  onSignupSuccess: (token: string, user: UserInfos) => void;
13
13
  saasApiUrl: string;
14
14
  iamApiUrl: string;
15
- debug?: boolean;
15
+ /** Type de compte par défaut à persister dans localStorage */
16
+ defaultAccountType?: 'user' | 'client';
16
17
  }
17
- export declare function SignupModal({ open, onOpenChange, onSwitchToLogin, onSignupSuccess, saasApiUrl, iamApiUrl, debug }: SignupModalProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function SignupModal({ open, onOpenChange, onSwitchToLogin, onSignupSuccess, saasApiUrl, iamApiUrl, defaultAccountType }: SignupModalProps): import("react/jsx-runtime").JSX.Element;
18
19
  export default SignupModal;
@@ -8,7 +8,6 @@ export interface UseMobilePasswordOptions {
8
8
  saasApiUrl: string;
9
9
  iamApiUrl: string;
10
10
  autoLoadCredentials?: boolean;
11
- debug?: boolean;
12
11
  }
13
12
  export declare function useMobilePassword(options: UseMobilePasswordOptions): {
14
13
  credentialsLoaded: boolean;
@@ -19,7 +19,6 @@ interface RegistrationConflict {
19
19
  export interface UseMobileRegistrationOptions {
20
20
  saasApiUrl: string;
21
21
  iamApiUrl: string;
22
- debug?: boolean;
23
22
  }
24
23
  export declare function useMobileRegistration(options?: UseMobileRegistrationOptions): {
25
24
  processToken: string | null;
@@ -12,8 +12,13 @@ export interface UseNativeAuthOptions {
12
12
  iamApiUrl: string;
13
13
  /** Charger les credentials automatiquement au montage */
14
14
  autoLoadCredentials?: boolean;
15
- /** Mode debug */
16
- debug?: boolean;
15
+ /** Type de compte par défaut à persister (défaut: 'user') */
16
+ defaultAccountType?: 'user' | 'client';
17
+ /**
18
+ * Préfixe de configuration IAM côté backend (défaut: 'iam').
19
+ * Permet le multi-tenant dynamique : 'iam', 'iam_vendor', 'iam_client', etc.
20
+ */
21
+ configPrefix?: string;
17
22
  }
18
23
  export declare function useNativeAuth(options: UseNativeAuthOptions): {
19
24
  credentialsLoaded: boolean;
@@ -49,6 +54,8 @@ export declare function useNativeAuth(options: UseNativeAuthOptions): {
49
54
  error: string | null;
50
55
  errorType: string | null;
51
56
  isAuthenticated: boolean;
57
+ /** Debug réactif — mis à jour après loadCredentials */
58
+ isDebug: boolean;
52
59
  accountType: AccountType;
53
60
  isPhoneOnly: boolean;
54
61
  otpMethod: "email" | "sms" | null | undefined;
@@ -117,7 +124,22 @@ export declare function useNativeAuth(options: UseNativeAuthOptions): {
117
124
  error_type?: undefined;
118
125
  } | {
119
126
  success: boolean;
120
- user: import("..").NativeUser;
127
+ user: {
128
+ iam_reference: string;
129
+ alias_reference: any;
130
+ id?: number;
131
+ reference: string;
132
+ name: string;
133
+ email?: string | null;
134
+ phone?: string;
135
+ ccphone?: string;
136
+ image_url?: string;
137
+ account_type?: "user" | "client";
138
+ town?: string;
139
+ country?: string;
140
+ address?: string;
141
+ auth_2fa?: boolean;
142
+ };
121
143
  callback_token: string;
122
144
  error?: undefined;
123
145
  requires_2fa?: undefined;
@@ -157,7 +179,22 @@ export declare function useNativeAuth(options: UseNativeAuthOptions): {
157
179
  error_type?: undefined;
158
180
  } | {
159
181
  success: boolean;
160
- user: import("..").NativeUser;
182
+ user: {
183
+ iam_reference: string;
184
+ alias_reference: any;
185
+ id?: number;
186
+ reference: string;
187
+ name: string;
188
+ email?: string | null;
189
+ phone?: string;
190
+ ccphone?: string;
191
+ image_url?: string;
192
+ account_type?: "user" | "client";
193
+ town?: string;
194
+ country?: string;
195
+ address?: string;
196
+ auth_2fa?: boolean;
197
+ };
161
198
  callback_token: string;
162
199
  error?: undefined;
163
200
  status?: undefined;
@@ -184,7 +221,22 @@ export declare function useNativeAuth(options: UseNativeAuthOptions): {
184
221
  error_type?: undefined;
185
222
  } | {
186
223
  success: boolean;
187
- user: import("..").NativeUser;
224
+ user: {
225
+ iam_reference: string;
226
+ alias_reference: any;
227
+ id?: number;
228
+ reference: string;
229
+ name: string;
230
+ email?: string | null;
231
+ phone?: string;
232
+ ccphone?: string;
233
+ image_url?: string;
234
+ account_type?: "user" | "client";
235
+ town?: string;
236
+ country?: string;
237
+ address?: string;
238
+ auth_2fa?: boolean;
239
+ };
188
240
  error?: undefined;
189
241
  error_type?: undefined;
190
242
  } | {
@@ -201,7 +253,22 @@ export declare function useNativeAuth(options: UseNativeAuthOptions): {
201
253
  error_type?: undefined;
202
254
  } | {
203
255
  success: boolean;
204
- user: import("..").NativeUser;
256
+ user: {
257
+ iam_reference: string;
258
+ alias_reference: any;
259
+ id?: number;
260
+ reference: string;
261
+ name: string;
262
+ email?: string | null;
263
+ phone?: string;
264
+ ccphone?: string;
265
+ image_url?: string;
266
+ account_type?: "user" | "client";
267
+ town?: string;
268
+ country?: string;
269
+ address?: string;
270
+ auth_2fa?: boolean;
271
+ };
205
272
  callback_token: string;
206
273
  error?: undefined;
207
274
  error_type?: undefined;