@ollaid/native-sso 2.5.0 → 2.7.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 (40) hide show
  1. package/dist/components/AvatarCropModal.d.ts +1 -1
  2. package/dist/components/DebugPanel.d.ts +1 -1
  3. package/dist/components/LoginModal.d.ts +1 -1
  4. package/dist/components/NativeSSOPage.d.ts +4 -2
  5. package/dist/components/OnboardingModal.d.ts +1 -1
  6. package/dist/components/PasswordRecoveryModal.d.ts +1 -1
  7. package/dist/components/SignupModal.d.ts +1 -1
  8. package/dist/components/ui.d.ts +1 -1
  9. package/dist/hooks/useLogout.d.ts +1 -1
  10. package/dist/hooks/useMobilePassword.d.ts +1 -1
  11. package/dist/hooks/useMobileRegistration.d.ts +2 -2
  12. package/dist/hooks/useNativeAuth.d.ts +8 -5
  13. package/dist/hooks/useTokenHealthCheck.d.ts +1 -1
  14. package/dist/index-Bpixveaz.js +489 -0
  15. package/dist/index-Bpixveaz.js.map +1 -0
  16. package/dist/index-DDOXM37y.cjs +488 -0
  17. package/dist/index-DDOXM37y.cjs.map +1 -0
  18. package/dist/index.cjs +7118 -184
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.ts +4 -3
  21. package/dist/index.js +7118 -184
  22. package/dist/index.js.map +1 -1
  23. package/dist/provider.d.ts +4 -1
  24. package/dist/services/api.d.ts +52 -10
  25. package/dist/services/debugLogger.d.ts +1 -1
  26. package/dist/services/iamAccount.d.ts +1 -1
  27. package/dist/services/mobilePassword.d.ts +1 -1
  28. package/dist/services/mobileRegistration.d.ts +1 -1
  29. package/dist/services/nativeAuth.d.ts +1 -1
  30. package/dist/services/profile.d.ts +1 -1
  31. package/dist/services/profileChange.d.ts +1 -1
  32. package/dist/services/profileMedia.d.ts +1 -1
  33. package/dist/types/mobile.d.ts +1 -1
  34. package/dist/types/native.d.ts +1 -1
  35. package/dist/web-BQDVoI6q.cjs +146 -0
  36. package/dist/web-BQDVoI6q.cjs.map +1 -0
  37. package/dist/web-DPmAPlXS.js +146 -0
  38. package/dist/web-DPmAPlXS.js.map +1 -0
  39. package/package.json +10 -3
  40. package/README.md +0 -2503
@@ -2,9 +2,10 @@
2
2
  * NativeSSOProvider — React Context pour @ollaid/native-sso
3
3
  * Centralise la configuration pour les hooks et composants individuels
4
4
  *
5
- * @version 2.5.0
5
+ * @version 2.7.0
6
6
  */
7
7
  import { type ReactNode } from 'react';
8
+ import { type NativeStorageAdapter } from './services/api';
8
9
  export interface NativeSSOConfig {
9
10
  /** URL du Backend SaaS (ex: https://mon-saas.com/api) */
10
11
  saasApiUrl: string;
@@ -14,6 +15,8 @@ export interface NativeSSOConfig {
14
15
  timeout?: number;
15
16
  /** Mode debug (logs console) */
16
17
  debug?: boolean;
18
+ /** Stockage injectable pour les apps natives / Capacitor */
19
+ storage?: NativeStorageAdapter;
17
20
  }
18
21
  export interface NativeSSOProviderProps {
19
22
  config: NativeSSOConfig;
@@ -2,7 +2,7 @@
2
2
  * Client API pour @ollaid/native-sso
3
3
  * Gestion des requêtes HTTP avec timeout, device ID, token storage
4
4
  *
5
- * @version 2.5.0
5
+ * @version 2.7.0
6
6
  */
7
7
  export type ApiErrorType = 'network' | 'timeout' | 'server' | 'validation' | 'auth' | 'unknown';
8
8
  export declare class ApiError extends Error {
@@ -28,7 +28,21 @@ export interface NativeAuthConfig {
28
28
  * Ex: 'iam', 'iam_vendor', 'iam_client', 'iam_admin'
29
29
  */
30
30
  configPrefix?: string;
31
+ /**
32
+ * Stockage session injectable.
33
+ * Défaut: localStorage en navigateur, mémoire en fallback.
34
+ * Utile pour Capacitor ou des wrappers secure-storage côté app consommatrice.
35
+ */
36
+ storage?: NativeStorageAdapter;
37
+ }
38
+ export interface NativeStorageAdapter {
39
+ getItem(key: string): string | null;
40
+ setItem(key: string, value: string): void;
41
+ removeItem(key: string): void;
42
+ clear(): void;
31
43
  }
44
+ export declare function setNativeStorage(adapter?: NativeStorageAdapter): void;
45
+ export declare function getNativeStorage(): NativeStorageAdapter;
32
46
  export declare const setNativeAuthConfig: (newConfig: Partial<NativeAuthConfig>) => void;
33
47
  export declare const getNativeAuthConfig: () => NativeAuthConfig;
34
48
  export declare const isDebugMode: () => boolean;
@@ -42,22 +56,48 @@ export declare const getDeviceId: () => string;
42
56
  * and to help backends implement multi-session behavior safely.
43
57
  */
44
58
  export declare const getSessionUuid: () => string;
59
+ export interface NativeDeviceContext {
60
+ deviceName?: string | null;
61
+ deviceModel?: string | null;
62
+ deviceManufacturer?: string | null;
63
+ operatingSystem?: string | null;
64
+ osVersion?: string | null;
65
+ platform?: string | null;
66
+ browser?: string | null;
67
+ language?: string | null;
68
+ webviewVersion?: string | null;
69
+ isNative?: boolean | null;
70
+ label?: string | null;
71
+ }
72
+ export declare function ensureDeviceContext(): Promise<NativeDeviceContext | null>;
45
73
  declare const STORAGE: {
46
- readonly AUTH_TOKEN: "auth_token";
47
- readonly TOKEN: "token";
48
- readonly USER: "user";
49
- readonly ACCOUNT_TYPE: "account_type";
50
- readonly ALIAS_REFERENCE: "alias_reference";
51
- readonly APP_ACCESS_TOKEN_REF: "app_access_token_ref";
52
- readonly REFRESH_TOKEN: "refresh_token";
53
- readonly TOKEN_EXPIRES_AT: "token_expires_at";
54
- readonly REFRESH_EXPIRES_AT: "refresh_expires_at";
74
+ readonly AUTH_TOKEN: "sso_auth_token";
75
+ readonly TOKEN: "sso_token";
76
+ readonly USER: "sso_user";
77
+ readonly ACCOUNT_TYPE: "sso_account_type";
78
+ readonly ALIAS_REFERENCE: "sso_alias_reference";
79
+ readonly APP_ACCESS_TOKEN_REF: "sso_app_access_token_ref";
80
+ readonly REFRESH_TOKEN: "sso_refresh_token";
81
+ readonly TOKEN_EXPIRES_AT: "sso_token_expires_at";
82
+ readonly REFRESH_EXPIRES_AT: "sso_refresh_expires_at";
55
83
  };
56
84
  declare const PROFILE_STORAGE: {
57
85
  readonly IMAGE_LAST_STATUS: "sso_image_last_status";
58
86
  readonly IMAGE_LAST_CHECK: "sso_image_last_check";
59
87
  readonly IMAGE_RECHECK_AT: "sso_image_recheck_at";
60
88
  };
89
+ export interface SsoSessionSnapshot<TUser = unknown> {
90
+ authToken: string | null;
91
+ refreshToken: string | null;
92
+ refreshExpiresAt: string | null;
93
+ tokenExpiresAt: string | null;
94
+ appAccessTokenRef: string | null;
95
+ aliasReference: string | null;
96
+ accountType: string | null;
97
+ deviceId: string | null;
98
+ sessionUuid: string | null;
99
+ user: TUser | null;
100
+ }
61
101
  export declare const setAuthToken: (token: string) => void;
62
102
  export declare const getAuthToken: () => string | null;
63
103
  /**
@@ -90,6 +130,8 @@ export declare const setAuthUser: (user: unknown) => void;
90
130
  export declare const getAuthUser: <T>() => T | null;
91
131
  export declare const setAccountType: (type: string) => void;
92
132
  export declare const getAccountType: () => string | null;
133
+ export declare function getSsoSessionSnapshot<TUser = unknown>(): SsoSessionSnapshot<TUser>;
134
+ export declare function hasSsoSession(): boolean;
93
135
  export { STORAGE as STORAGE_KEYS };
94
136
  export { PROFILE_STORAGE as PROFILE_PROMPT_KEYS };
95
137
  export interface ProfilePromptState {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Debug Logger pour @ollaid/native-sso
3
3
  * Stocke l'historique des appels API en mémoire pour le DebugPanel
4
- * @version 2.5.0
4
+ * @version 2.7.0
5
5
  */
6
6
  export interface ApiCallLog {
7
7
  id: string;
@@ -8,7 +8,7 @@
8
8
  * Ne JAMAIS appeler ces méthodes depuis du code frontend/navigateur car la
9
9
  * secret_key serait exposée dans les DevTools réseau.
10
10
  *
11
- * @version 2.5.0
11
+ * @version 2.7.0
12
12
  */
13
13
  import type { LinkPhoneRequest, LinkPhoneResponse, LinkEmailRequest, LinkEmailResponse, RefreshUserInfoSingleRequest, RefreshUserInfoSingleResponse, RefreshUserInfoBulkRequest, RefreshUserInfoBulkResponse, UpdateAvatarRequest, UpdateAvatarResponse, ResetAvatarRequest, ResetAvatarResponse } from '../types/native';
14
14
  export declare const iamAccountService: {
@@ -2,7 +2,7 @@
2
2
  * Service de récupération de mot de passe v1.0
3
3
  * Architecture Frontend-First : Appels directs à l'IAM
4
4
  *
5
- * @version 2.5.0
5
+ * @version 2.7.0
6
6
  */
7
7
  import { ApiError } from './api';
8
8
  import type { MobilePasswordInitResponse, MobilePasswordSelectMethodResponse, MobilePasswordResetResponse, MobilePasswordResendResponse } from '../types/mobile';
@@ -2,7 +2,7 @@
2
2
  * Service d'inscription Mobile SSO v1.0
3
3
  * Architecture Frontend-First : Appels directs à l'IAM via nativeAuth
4
4
  *
5
- * @version 2.5.0
5
+ * @version 2.7.0
6
6
  */
7
7
  import type { MobileRegistrationFormData, MobileVerifyOtpResponse, MobileRegistrationCompleteResponse, MobileResendOtpResponse } from '../types/mobile';
8
8
  import type { NativeInitResponse } from '../types/native';
@@ -2,7 +2,7 @@
2
2
  * Service d'authentification Native Mobile SSO v1.0
3
3
  * Architecture Frontend-First : Direct IAM après encryption
4
4
  *
5
- * @version 2.5.0
5
+ * @version 2.7.0
6
6
  */
7
7
  import type { NativeAuthType, NativeEncryptRequest, NativeEncryptResponse, NativeInitResponse, NativeValidateResponse, NativeGrantAccessResponse, NativeResendOtpResponse, NativeExchangeResponse, NativeCredentials, NativeRefreshResponse } from '../types/native';
8
8
  export declare const nativeAuthService: {
@@ -2,7 +2,7 @@
2
2
  * Profile service for @ollaid/native-sso
3
3
  * Updates the authenticated profile fields via IAM.
4
4
  *
5
- * @version 2.5.0
5
+ * @version 2.7.0
6
6
  */
7
7
  import type { UserInfos } from '../types/native';
8
8
  export interface ProfileUpdateRequest {
@@ -2,7 +2,7 @@
2
2
  * Profile change service for @ollaid/native-sso
3
3
  * Uses authenticated IAM endpoints for email / phone change with OTP confirmation.
4
4
  *
5
- * @version 2.5.0
5
+ * @version 2.7.0
6
6
  */
7
7
  export type ProfileChangeKind = 'email' | 'phone';
8
8
  export type ProfileChangeMethod = 'email' | 'phone';
@@ -2,7 +2,7 @@
2
2
  * Profile media service for @ollaid/native-sso
3
3
  * Uploads the cropped avatar to the IAM authenticated profile endpoint.
4
4
  *
5
- * @version 2.5.0
5
+ * @version 2.7.0
6
6
  */
7
7
  import type { UserInfos } from '../types/native';
8
8
  export interface ProfileImageUploadResponse {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Types pour le password recovery et registration Mobile SSO v1.0
3
3
  *
4
- * @version 2.5.0
4
+ * @version 2.7.0
5
5
  */
6
6
  export type MobilePasswordStatus = 'idle' | 'choice_required' | 'pending_otp' | 'pending_password' | 'completed';
7
7
  export interface MobilePasswordState {
@@ -2,7 +2,7 @@
2
2
  * Types pour l'authentification Native SSO v1.0
3
3
  * Architecture Frontend-First avec encryption directe
4
4
  *
5
- * @version 2.5.0
5
+ * @version 2.7.0
6
6
  */
7
7
  export type NativeAuthType = 'login_email' | 'login_phone' | 'login_access_otp' | 'register' | 'recovery_password';
8
8
  export type AccountType = 'email' | 'phone-only';
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const index = require("./index-DDOXM37y.cjs");
4
+ class DeviceWeb extends index.WebPlugin {
5
+ async getId() {
6
+ return {
7
+ identifier: this.getUid()
8
+ };
9
+ }
10
+ async getInfo() {
11
+ if (typeof navigator === "undefined" || !navigator.userAgent) {
12
+ throw this.unavailable("Device API not available in this browser");
13
+ }
14
+ const ua = navigator.userAgent;
15
+ const uaFields = this.parseUa(ua);
16
+ return {
17
+ model: uaFields.model,
18
+ platform: "web",
19
+ operatingSystem: uaFields.operatingSystem,
20
+ osVersion: uaFields.osVersion,
21
+ manufacturer: navigator.vendor,
22
+ isVirtual: false,
23
+ webViewVersion: uaFields.browserVersion
24
+ };
25
+ }
26
+ async getBatteryInfo() {
27
+ if (typeof navigator === "undefined" || !navigator.getBattery) {
28
+ throw this.unavailable("Device API not available in this browser");
29
+ }
30
+ let battery = {};
31
+ try {
32
+ battery = await navigator.getBattery();
33
+ } catch (e) {
34
+ }
35
+ return {
36
+ batteryLevel: battery.level,
37
+ isCharging: battery.charging
38
+ };
39
+ }
40
+ async getLanguageCode() {
41
+ return {
42
+ value: navigator.language.split("-")[0].toLowerCase()
43
+ };
44
+ }
45
+ async getLanguageTag() {
46
+ return {
47
+ value: navigator.language
48
+ };
49
+ }
50
+ parseUa(ua) {
51
+ const uaFields = {};
52
+ const start = ua.indexOf("(") + 1;
53
+ let end = ua.indexOf(") AppleWebKit");
54
+ if (ua.indexOf(") Gecko") !== -1) {
55
+ end = ua.indexOf(") Gecko");
56
+ }
57
+ const fields = ua.substring(start, end);
58
+ if (ua.indexOf("Android") !== -1) {
59
+ const tmpFields = fields.replace("; wv", "").split("; ").pop();
60
+ if (tmpFields) {
61
+ uaFields.model = tmpFields.split(" Build")[0];
62
+ }
63
+ uaFields.osVersion = fields.split("; ")[1];
64
+ } else {
65
+ uaFields.model = fields.split("; ")[0];
66
+ if (typeof navigator !== "undefined" && navigator.oscpu) {
67
+ uaFields.osVersion = navigator.oscpu;
68
+ } else {
69
+ if (ua.indexOf("Windows") !== -1) {
70
+ uaFields.osVersion = fields;
71
+ } else {
72
+ const tmpFields = fields.split("; ").pop();
73
+ if (tmpFields) {
74
+ const lastParts = tmpFields.replace(" like Mac OS X", "").split(" ");
75
+ uaFields.osVersion = lastParts[lastParts.length - 1].replace(/_/g, ".");
76
+ }
77
+ }
78
+ }
79
+ }
80
+ if (/android/i.test(ua)) {
81
+ uaFields.operatingSystem = "android";
82
+ } else if (/iPad|iPhone|iPod/.test(ua) && !window.MSStream) {
83
+ uaFields.operatingSystem = "ios";
84
+ } else if (/Win/.test(ua)) {
85
+ uaFields.operatingSystem = "windows";
86
+ } else if (/Mac/i.test(ua)) {
87
+ uaFields.operatingSystem = "mac";
88
+ } else {
89
+ uaFields.operatingSystem = "unknown";
90
+ }
91
+ const isSafari = !!window.ApplePaySession;
92
+ const isChrome = !!window.chrome;
93
+ const isFirefox = /Firefox/.test(ua);
94
+ const isEdge = /Edg/.test(ua);
95
+ const isFirefoxIOS = /FxiOS/.test(ua);
96
+ const isChromeIOS = /CriOS/.test(ua);
97
+ const isEdgeIOS = /EdgiOS/.test(ua);
98
+ if (isSafari || isChrome && !isEdge || isFirefoxIOS || isChromeIOS || isEdgeIOS) {
99
+ let searchWord;
100
+ if (isFirefoxIOS) {
101
+ searchWord = "FxiOS";
102
+ } else if (isChromeIOS) {
103
+ searchWord = "CriOS";
104
+ } else if (isEdgeIOS) {
105
+ searchWord = "EdgiOS";
106
+ } else if (isSafari) {
107
+ searchWord = "Version";
108
+ } else {
109
+ searchWord = "Chrome";
110
+ }
111
+ const words = ua.split(" ");
112
+ for (const word of words) {
113
+ if (word.includes(searchWord)) {
114
+ const version = word.split("/")[1];
115
+ uaFields.browserVersion = version;
116
+ }
117
+ }
118
+ } else if (isFirefox || isEdge) {
119
+ const reverseUA = ua.split("").reverse().join("");
120
+ const reverseVersion = reverseUA.split("/")[0];
121
+ const version = reverseVersion.split("").reverse().join("");
122
+ uaFields.browserVersion = version;
123
+ }
124
+ return uaFields;
125
+ }
126
+ getUid() {
127
+ if (typeof window !== "undefined" && window.localStorage) {
128
+ let uid = window.localStorage.getItem("_capuid");
129
+ if (uid) {
130
+ return uid;
131
+ }
132
+ uid = this.uuid4();
133
+ window.localStorage.setItem("_capuid", uid);
134
+ return uid;
135
+ }
136
+ return this.uuid4();
137
+ }
138
+ uuid4() {
139
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
140
+ const r = Math.random() * 16 | 0, v = c === "x" ? r : r & 3 | 8;
141
+ return v.toString(16);
142
+ });
143
+ }
144
+ }
145
+ exports.DeviceWeb = DeviceWeb;
146
+ //# sourceMappingURL=web-BQDVoI6q.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-BQDVoI6q.cjs","sources":["../../../node_modules/@capacitor/device/dist/esm/web.js"],"sourcesContent":["import { WebPlugin } from '@capacitor/core';\nexport class DeviceWeb extends WebPlugin {\n async getId() {\n return {\n identifier: this.getUid(),\n };\n }\n async getInfo() {\n if (typeof navigator === 'undefined' || !navigator.userAgent) {\n throw this.unavailable('Device API not available in this browser');\n }\n const ua = navigator.userAgent;\n const uaFields = this.parseUa(ua);\n return {\n model: uaFields.model,\n platform: 'web',\n operatingSystem: uaFields.operatingSystem,\n osVersion: uaFields.osVersion,\n manufacturer: navigator.vendor,\n isVirtual: false,\n webViewVersion: uaFields.browserVersion,\n };\n }\n async getBatteryInfo() {\n if (typeof navigator === 'undefined' || !navigator.getBattery) {\n throw this.unavailable('Device API not available in this browser');\n }\n let battery = {};\n try {\n battery = await navigator.getBattery();\n }\n catch (e) {\n // Let it fail, we don't care\n }\n return {\n batteryLevel: battery.level,\n isCharging: battery.charging,\n };\n }\n async getLanguageCode() {\n return {\n value: navigator.language.split('-')[0].toLowerCase(),\n };\n }\n async getLanguageTag() {\n return {\n value: navigator.language,\n };\n }\n parseUa(ua) {\n const uaFields = {};\n const start = ua.indexOf('(') + 1;\n let end = ua.indexOf(') AppleWebKit');\n if (ua.indexOf(') Gecko') !== -1) {\n end = ua.indexOf(') Gecko');\n }\n const fields = ua.substring(start, end);\n if (ua.indexOf('Android') !== -1) {\n const tmpFields = fields.replace('; wv', '').split('; ').pop();\n if (tmpFields) {\n uaFields.model = tmpFields.split(' Build')[0];\n }\n uaFields.osVersion = fields.split('; ')[1];\n }\n else {\n uaFields.model = fields.split('; ')[0];\n if (typeof navigator !== 'undefined' && navigator.oscpu) {\n uaFields.osVersion = navigator.oscpu;\n }\n else {\n if (ua.indexOf('Windows') !== -1) {\n uaFields.osVersion = fields;\n }\n else {\n const tmpFields = fields.split('; ').pop();\n if (tmpFields) {\n const lastParts = tmpFields\n .replace(' like Mac OS X', '')\n .split(' ');\n uaFields.osVersion = lastParts[lastParts.length - 1].replace(/_/g, '.');\n }\n }\n }\n }\n if (/android/i.test(ua)) {\n uaFields.operatingSystem = 'android';\n }\n else if (/iPad|iPhone|iPod/.test(ua) && !window.MSStream) {\n uaFields.operatingSystem = 'ios';\n }\n else if (/Win/.test(ua)) {\n uaFields.operatingSystem = 'windows';\n }\n else if (/Mac/i.test(ua)) {\n uaFields.operatingSystem = 'mac';\n }\n else {\n uaFields.operatingSystem = 'unknown';\n }\n // Check for browsers based on non-standard javascript apis, only not user agent\n const isSafari = !!window.ApplePaySession;\n const isChrome = !!window.chrome;\n const isFirefox = /Firefox/.test(ua);\n const isEdge = /Edg/.test(ua);\n const isFirefoxIOS = /FxiOS/.test(ua);\n const isChromeIOS = /CriOS/.test(ua);\n const isEdgeIOS = /EdgiOS/.test(ua);\n // FF and Edge User Agents both end with \"/MAJOR.MINOR\"\n if (isSafari ||\n (isChrome && !isEdge) ||\n isFirefoxIOS ||\n isChromeIOS ||\n isEdgeIOS) {\n // Safari version comes as \"... Version/MAJOR.MINOR ...\"\n // Chrome version comes as \"... Chrome/MAJOR.MINOR ...\"\n // FirefoxIOS version comes as \"... FxiOS/MAJOR.MINOR ...\"\n // ChromeIOS version comes as \"... CriOS/MAJOR.MINOR ...\"\n let searchWord;\n if (isFirefoxIOS) {\n searchWord = 'FxiOS';\n }\n else if (isChromeIOS) {\n searchWord = 'CriOS';\n }\n else if (isEdgeIOS) {\n searchWord = 'EdgiOS';\n }\n else if (isSafari) {\n searchWord = 'Version';\n }\n else {\n searchWord = 'Chrome';\n }\n const words = ua.split(' ');\n for (const word of words) {\n if (word.includes(searchWord)) {\n const version = word.split('/')[1];\n uaFields.browserVersion = version;\n }\n }\n }\n else if (isFirefox || isEdge) {\n const reverseUA = ua.split('').reverse().join('');\n const reverseVersion = reverseUA.split('/')[0];\n const version = reverseVersion.split('').reverse().join('');\n uaFields.browserVersion = version;\n }\n return uaFields;\n }\n getUid() {\n if (typeof window !== 'undefined' && window.localStorage) {\n let uid = window.localStorage.getItem('_capuid');\n if (uid) {\n return uid;\n }\n uid = this.uuid4();\n window.localStorage.setItem('_capuid', uid);\n return uid;\n }\n return this.uuid4();\n }\n uuid4() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["WebPlugin"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,146 @@
1
+ import { W as WebPlugin } from "./index-Bpixveaz.js";
2
+ class DeviceWeb extends WebPlugin {
3
+ async getId() {
4
+ return {
5
+ identifier: this.getUid()
6
+ };
7
+ }
8
+ async getInfo() {
9
+ if (typeof navigator === "undefined" || !navigator.userAgent) {
10
+ throw this.unavailable("Device API not available in this browser");
11
+ }
12
+ const ua = navigator.userAgent;
13
+ const uaFields = this.parseUa(ua);
14
+ return {
15
+ model: uaFields.model,
16
+ platform: "web",
17
+ operatingSystem: uaFields.operatingSystem,
18
+ osVersion: uaFields.osVersion,
19
+ manufacturer: navigator.vendor,
20
+ isVirtual: false,
21
+ webViewVersion: uaFields.browserVersion
22
+ };
23
+ }
24
+ async getBatteryInfo() {
25
+ if (typeof navigator === "undefined" || !navigator.getBattery) {
26
+ throw this.unavailable("Device API not available in this browser");
27
+ }
28
+ let battery = {};
29
+ try {
30
+ battery = await navigator.getBattery();
31
+ } catch (e) {
32
+ }
33
+ return {
34
+ batteryLevel: battery.level,
35
+ isCharging: battery.charging
36
+ };
37
+ }
38
+ async getLanguageCode() {
39
+ return {
40
+ value: navigator.language.split("-")[0].toLowerCase()
41
+ };
42
+ }
43
+ async getLanguageTag() {
44
+ return {
45
+ value: navigator.language
46
+ };
47
+ }
48
+ parseUa(ua) {
49
+ const uaFields = {};
50
+ const start = ua.indexOf("(") + 1;
51
+ let end = ua.indexOf(") AppleWebKit");
52
+ if (ua.indexOf(") Gecko") !== -1) {
53
+ end = ua.indexOf(") Gecko");
54
+ }
55
+ const fields = ua.substring(start, end);
56
+ if (ua.indexOf("Android") !== -1) {
57
+ const tmpFields = fields.replace("; wv", "").split("; ").pop();
58
+ if (tmpFields) {
59
+ uaFields.model = tmpFields.split(" Build")[0];
60
+ }
61
+ uaFields.osVersion = fields.split("; ")[1];
62
+ } else {
63
+ uaFields.model = fields.split("; ")[0];
64
+ if (typeof navigator !== "undefined" && navigator.oscpu) {
65
+ uaFields.osVersion = navigator.oscpu;
66
+ } else {
67
+ if (ua.indexOf("Windows") !== -1) {
68
+ uaFields.osVersion = fields;
69
+ } else {
70
+ const tmpFields = fields.split("; ").pop();
71
+ if (tmpFields) {
72
+ const lastParts = tmpFields.replace(" like Mac OS X", "").split(" ");
73
+ uaFields.osVersion = lastParts[lastParts.length - 1].replace(/_/g, ".");
74
+ }
75
+ }
76
+ }
77
+ }
78
+ if (/android/i.test(ua)) {
79
+ uaFields.operatingSystem = "android";
80
+ } else if (/iPad|iPhone|iPod/.test(ua) && !window.MSStream) {
81
+ uaFields.operatingSystem = "ios";
82
+ } else if (/Win/.test(ua)) {
83
+ uaFields.operatingSystem = "windows";
84
+ } else if (/Mac/i.test(ua)) {
85
+ uaFields.operatingSystem = "mac";
86
+ } else {
87
+ uaFields.operatingSystem = "unknown";
88
+ }
89
+ const isSafari = !!window.ApplePaySession;
90
+ const isChrome = !!window.chrome;
91
+ const isFirefox = /Firefox/.test(ua);
92
+ const isEdge = /Edg/.test(ua);
93
+ const isFirefoxIOS = /FxiOS/.test(ua);
94
+ const isChromeIOS = /CriOS/.test(ua);
95
+ const isEdgeIOS = /EdgiOS/.test(ua);
96
+ if (isSafari || isChrome && !isEdge || isFirefoxIOS || isChromeIOS || isEdgeIOS) {
97
+ let searchWord;
98
+ if (isFirefoxIOS) {
99
+ searchWord = "FxiOS";
100
+ } else if (isChromeIOS) {
101
+ searchWord = "CriOS";
102
+ } else if (isEdgeIOS) {
103
+ searchWord = "EdgiOS";
104
+ } else if (isSafari) {
105
+ searchWord = "Version";
106
+ } else {
107
+ searchWord = "Chrome";
108
+ }
109
+ const words = ua.split(" ");
110
+ for (const word of words) {
111
+ if (word.includes(searchWord)) {
112
+ const version = word.split("/")[1];
113
+ uaFields.browserVersion = version;
114
+ }
115
+ }
116
+ } else if (isFirefox || isEdge) {
117
+ const reverseUA = ua.split("").reverse().join("");
118
+ const reverseVersion = reverseUA.split("/")[0];
119
+ const version = reverseVersion.split("").reverse().join("");
120
+ uaFields.browserVersion = version;
121
+ }
122
+ return uaFields;
123
+ }
124
+ getUid() {
125
+ if (typeof window !== "undefined" && window.localStorage) {
126
+ let uid = window.localStorage.getItem("_capuid");
127
+ if (uid) {
128
+ return uid;
129
+ }
130
+ uid = this.uuid4();
131
+ window.localStorage.setItem("_capuid", uid);
132
+ return uid;
133
+ }
134
+ return this.uuid4();
135
+ }
136
+ uuid4() {
137
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
138
+ const r = Math.random() * 16 | 0, v = c === "x" ? r : r & 3 | 8;
139
+ return v.toString(16);
140
+ });
141
+ }
142
+ }
143
+ export {
144
+ DeviceWeb
145
+ };
146
+ //# sourceMappingURL=web-DPmAPlXS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-DPmAPlXS.js","sources":["../../../node_modules/@capacitor/device/dist/esm/web.js"],"sourcesContent":["import { WebPlugin } from '@capacitor/core';\nexport class DeviceWeb extends WebPlugin {\n async getId() {\n return {\n identifier: this.getUid(),\n };\n }\n async getInfo() {\n if (typeof navigator === 'undefined' || !navigator.userAgent) {\n throw this.unavailable('Device API not available in this browser');\n }\n const ua = navigator.userAgent;\n const uaFields = this.parseUa(ua);\n return {\n model: uaFields.model,\n platform: 'web',\n operatingSystem: uaFields.operatingSystem,\n osVersion: uaFields.osVersion,\n manufacturer: navigator.vendor,\n isVirtual: false,\n webViewVersion: uaFields.browserVersion,\n };\n }\n async getBatteryInfo() {\n if (typeof navigator === 'undefined' || !navigator.getBattery) {\n throw this.unavailable('Device API not available in this browser');\n }\n let battery = {};\n try {\n battery = await navigator.getBattery();\n }\n catch (e) {\n // Let it fail, we don't care\n }\n return {\n batteryLevel: battery.level,\n isCharging: battery.charging,\n };\n }\n async getLanguageCode() {\n return {\n value: navigator.language.split('-')[0].toLowerCase(),\n };\n }\n async getLanguageTag() {\n return {\n value: navigator.language,\n };\n }\n parseUa(ua) {\n const uaFields = {};\n const start = ua.indexOf('(') + 1;\n let end = ua.indexOf(') AppleWebKit');\n if (ua.indexOf(') Gecko') !== -1) {\n end = ua.indexOf(') Gecko');\n }\n const fields = ua.substring(start, end);\n if (ua.indexOf('Android') !== -1) {\n const tmpFields = fields.replace('; wv', '').split('; ').pop();\n if (tmpFields) {\n uaFields.model = tmpFields.split(' Build')[0];\n }\n uaFields.osVersion = fields.split('; ')[1];\n }\n else {\n uaFields.model = fields.split('; ')[0];\n if (typeof navigator !== 'undefined' && navigator.oscpu) {\n uaFields.osVersion = navigator.oscpu;\n }\n else {\n if (ua.indexOf('Windows') !== -1) {\n uaFields.osVersion = fields;\n }\n else {\n const tmpFields = fields.split('; ').pop();\n if (tmpFields) {\n const lastParts = tmpFields\n .replace(' like Mac OS X', '')\n .split(' ');\n uaFields.osVersion = lastParts[lastParts.length - 1].replace(/_/g, '.');\n }\n }\n }\n }\n if (/android/i.test(ua)) {\n uaFields.operatingSystem = 'android';\n }\n else if (/iPad|iPhone|iPod/.test(ua) && !window.MSStream) {\n uaFields.operatingSystem = 'ios';\n }\n else if (/Win/.test(ua)) {\n uaFields.operatingSystem = 'windows';\n }\n else if (/Mac/i.test(ua)) {\n uaFields.operatingSystem = 'mac';\n }\n else {\n uaFields.operatingSystem = 'unknown';\n }\n // Check for browsers based on non-standard javascript apis, only not user agent\n const isSafari = !!window.ApplePaySession;\n const isChrome = !!window.chrome;\n const isFirefox = /Firefox/.test(ua);\n const isEdge = /Edg/.test(ua);\n const isFirefoxIOS = /FxiOS/.test(ua);\n const isChromeIOS = /CriOS/.test(ua);\n const isEdgeIOS = /EdgiOS/.test(ua);\n // FF and Edge User Agents both end with \"/MAJOR.MINOR\"\n if (isSafari ||\n (isChrome && !isEdge) ||\n isFirefoxIOS ||\n isChromeIOS ||\n isEdgeIOS) {\n // Safari version comes as \"... Version/MAJOR.MINOR ...\"\n // Chrome version comes as \"... Chrome/MAJOR.MINOR ...\"\n // FirefoxIOS version comes as \"... FxiOS/MAJOR.MINOR ...\"\n // ChromeIOS version comes as \"... CriOS/MAJOR.MINOR ...\"\n let searchWord;\n if (isFirefoxIOS) {\n searchWord = 'FxiOS';\n }\n else if (isChromeIOS) {\n searchWord = 'CriOS';\n }\n else if (isEdgeIOS) {\n searchWord = 'EdgiOS';\n }\n else if (isSafari) {\n searchWord = 'Version';\n }\n else {\n searchWord = 'Chrome';\n }\n const words = ua.split(' ');\n for (const word of words) {\n if (word.includes(searchWord)) {\n const version = word.split('/')[1];\n uaFields.browserVersion = version;\n }\n }\n }\n else if (isFirefox || isEdge) {\n const reverseUA = ua.split('').reverse().join('');\n const reverseVersion = reverseUA.split('/')[0];\n const version = reverseVersion.split('').reverse().join('');\n uaFields.browserVersion = version;\n }\n return uaFields;\n }\n getUid() {\n if (typeof window !== 'undefined' && window.localStorage) {\n let uid = window.localStorage.getItem('_capuid');\n if (uid) {\n return uid;\n }\n uid = this.uuid4();\n window.localStorage.setItem('_capuid', uid);\n return uid;\n }\n return this.uuid4();\n }\n uuid4() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ollaid/native-sso",
3
- "version": "2.5.0",
3
+ "version": "2.7.0",
4
4
  "description": "Package NPM fullstack pour l'authentification Native SSO Ollaid - Frontend-First (Link APIs & Refresh support)",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -21,18 +21,25 @@
21
21
  "dev": "vite build --watch"
22
22
  },
23
23
  "peerDependencies": {
24
+ "@capacitor/device": "^7.0.0 || ^8.0.0",
24
25
  "react": "^18.0.0 || ^19.0.0",
25
26
  "react-dom": "^18.0.0 || ^19.0.0"
26
27
  },
28
+ "peerDependenciesMeta": {
29
+ "@capacitor/device": {
30
+ "optional": true
31
+ }
32
+ },
27
33
  "dependencies": {
34
+ "crypto-js": "^4.2.0",
28
35
  "lucide-react": "^0.400.0"
29
36
  },
30
37
  "devDependencies": {
31
38
  "@types/react": "^18.3.0",
32
39
  "@types/react-dom": "^18.3.0",
40
+ "@vitejs/plugin-react-swc": "^3.7.0",
33
41
  "typescript": "^5.5.0",
34
- "vite": "^5.4.0",
35
- "@vitejs/plugin-react-swc": "^3.7.0"
42
+ "vite": "^5.4.0"
36
43
  },
37
44
  "keywords": [
38
45
  "ollaid",