@proveanything/smartlinks-auth-ui 0.1.6 → 0.1.8
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/dist/api.d.ts.map +1 -1
- package/dist/components/SmartlinksAuthUI.d.ts.map +1 -1
- package/dist/index.esm.js +69 -7
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +69 -7
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExE;;;GAGG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAOjE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAI7D,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IASnD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIvD,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAIvE,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC;IAIlB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQxG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAIlH,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAIzG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IASzH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAIhF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAStH,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExE;;;GAGG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAOjE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAI7D,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IASnD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIvD,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAIvE,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC;IAIlB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQxG,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAIlH,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAIzG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IASzH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAIhF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAStH,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;IAuBpC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAOjG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAGlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmartlinksAuthUI.d.ts","sourceRoot":"","sources":["../../src/components/SmartlinksAuthUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAUnD,OAAO,KAAK,EAAE,qBAAqB,EAAyC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"SmartlinksAuthUI.d.ts","sourceRoot":"","sources":["../../src/components/SmartlinksAuthUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAUnD,OAAO,KAAK,EAAE,qBAAqB,EAAyC,MAAM,UAAU,CAAC;AAkD7F,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAu6B5D,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -10653,11 +10653,15 @@ class AuthAPI {
|
|
|
10653
10653
|
});
|
|
10654
10654
|
}
|
|
10655
10655
|
async fetchConfig() {
|
|
10656
|
+
console.log('[AuthAPI] fetchConfig called with clientId:', this.clientId);
|
|
10656
10657
|
try {
|
|
10657
|
-
|
|
10658
|
+
console.log('[AuthAPI] Calling smartlinks.authKit.load...');
|
|
10659
|
+
const result = await smartlinks.authKit.load(this.clientId);
|
|
10660
|
+
console.log('[AuthAPI] smartlinks.authKit.load returned:', result);
|
|
10661
|
+
return result;
|
|
10658
10662
|
}
|
|
10659
10663
|
catch (error) {
|
|
10660
|
-
console.warn('Failed to fetch UI config, using defaults:', error);
|
|
10664
|
+
console.warn('[AuthAPI] Failed to fetch UI config, using defaults:', error);
|
|
10661
10665
|
return {
|
|
10662
10666
|
branding: {
|
|
10663
10667
|
title: 'Smartlinks Auth',
|
|
@@ -11428,10 +11432,37 @@ const DEFAULT_AUTH_CONFIG = {
|
|
|
11428
11432
|
emailDisplayMode: 'button',
|
|
11429
11433
|
googleOAuthFlow: 'oneTap'
|
|
11430
11434
|
};
|
|
11431
|
-
|
|
11435
|
+
// Helper to dynamically load Google Identity Services if not already loaded
|
|
11436
|
+
const loadGoogleIdentityServices = () => {
|
|
11437
|
+
return new Promise((resolve, reject) => {
|
|
11438
|
+
// Check if already loaded
|
|
11439
|
+
if (window.google?.accounts) {
|
|
11440
|
+
resolve();
|
|
11441
|
+
return;
|
|
11442
|
+
}
|
|
11443
|
+
// Check if script is already being loaded
|
|
11444
|
+
const existingScript = document.querySelector('script[src="https://accounts.google.com/gsi/client"]');
|
|
11445
|
+
if (existingScript) {
|
|
11446
|
+
// Wait for existing script to load
|
|
11447
|
+
existingScript.addEventListener('load', () => resolve());
|
|
11448
|
+
existingScript.addEventListener('error', () => reject(new Error('Failed to load Google Identity Services')));
|
|
11449
|
+
return;
|
|
11450
|
+
}
|
|
11451
|
+
// Dynamically inject the script
|
|
11452
|
+
const script = document.createElement('script');
|
|
11453
|
+
script.src = 'https://accounts.google.com/gsi/client';
|
|
11454
|
+
script.async = true;
|
|
11455
|
+
script.defer = true;
|
|
11456
|
+
script.onload = () => resolve();
|
|
11457
|
+
script.onerror = () => reject(new Error('Failed to load Google Identity Services'));
|
|
11458
|
+
document.head.appendChild(script);
|
|
11459
|
+
});
|
|
11460
|
+
};
|
|
11461
|
+
const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAuthSuccess, onAuthError, enabledProviders = ['email', 'google', 'phone'], initialMode = 'login', redirectUrl, theme = 'auto', className, customization, skipConfigFetch = false, minimal = false, }) => {
|
|
11432
11462
|
const [mode, setMode] = useState(initialMode);
|
|
11433
11463
|
const [loading, setLoading] = useState(false);
|
|
11434
11464
|
const [error, setError] = useState();
|
|
11465
|
+
const [resolvedTheme, setResolvedTheme] = useState('light');
|
|
11435
11466
|
const [resetSuccess, setResetSuccess] = useState(false);
|
|
11436
11467
|
const [authSuccess, setAuthSuccess] = useState(false);
|
|
11437
11468
|
const [successMessage, setSuccessMessage] = useState();
|
|
@@ -11445,11 +11476,26 @@ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAu
|
|
|
11445
11476
|
const [showEmailForm, setShowEmailForm] = useState(false); // Track if email form should be shown when emailDisplayMode is 'button'
|
|
11446
11477
|
const api = new AuthAPI(apiEndpoint, clientId, clientName);
|
|
11447
11478
|
const auth = useAuth();
|
|
11479
|
+
// Dark mode detection and theme management
|
|
11480
|
+
useEffect(() => {
|
|
11481
|
+
if (theme !== 'auto') {
|
|
11482
|
+
setResolvedTheme(theme);
|
|
11483
|
+
return;
|
|
11484
|
+
}
|
|
11485
|
+
// Auto-detect system theme preference
|
|
11486
|
+
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
11487
|
+
const updateTheme = () => setResolvedTheme(mediaQuery.matches ? 'dark' : 'light');
|
|
11488
|
+
updateTheme();
|
|
11489
|
+
mediaQuery.addEventListener('change', updateTheme);
|
|
11490
|
+
return () => mediaQuery.removeEventListener('change', updateTheme);
|
|
11491
|
+
}, [theme]);
|
|
11448
11492
|
// Reinitialize Smartlinks SDK when apiEndpoint changes (for test/dev scenarios)
|
|
11449
11493
|
// IMPORTANT: Preserve bearer token during reinitialization
|
|
11450
11494
|
useEffect(() => {
|
|
11495
|
+
console.log('[SmartlinksAuthUI] SDK reinitialize useEffect triggered', { apiEndpoint });
|
|
11451
11496
|
const reinitializeWithToken = async () => {
|
|
11452
11497
|
if (apiEndpoint) {
|
|
11498
|
+
console.log('[SmartlinksAuthUI] Reinitializing SDK with baseURL:', apiEndpoint);
|
|
11453
11499
|
// Get current token before reinitializing
|
|
11454
11500
|
const currentToken = await auth.getToken();
|
|
11455
11501
|
smartlinks.initializeApi({
|
|
@@ -11464,6 +11510,9 @@ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAu
|
|
|
11464
11510
|
});
|
|
11465
11511
|
}
|
|
11466
11512
|
}
|
|
11513
|
+
else {
|
|
11514
|
+
console.log('[SmartlinksAuthUI] No apiEndpoint, skipping SDK reinitialize');
|
|
11515
|
+
}
|
|
11467
11516
|
};
|
|
11468
11517
|
reinitializeWithToken();
|
|
11469
11518
|
}, [apiEndpoint, auth]);
|
|
@@ -11478,13 +11527,22 @@ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAu
|
|
|
11478
11527
|
};
|
|
11479
11528
|
// Fetch UI configuration
|
|
11480
11529
|
useEffect(() => {
|
|
11530
|
+
console.log('[SmartlinksAuthUI] Config fetch useEffect triggered', {
|
|
11531
|
+
skipConfigFetch,
|
|
11532
|
+
clientId,
|
|
11533
|
+
clientIdType: typeof clientId,
|
|
11534
|
+
clientIdTruthy: !!clientId,
|
|
11535
|
+
apiEndpoint
|
|
11536
|
+
});
|
|
11481
11537
|
if (skipConfigFetch) {
|
|
11538
|
+
console.log('[SmartlinksAuthUI] Skipping config fetch - skipConfigFetch is true');
|
|
11482
11539
|
setConfig(customization || {});
|
|
11483
11540
|
return;
|
|
11484
11541
|
}
|
|
11485
11542
|
const fetchConfig = async () => {
|
|
11486
11543
|
// If no clientId provided, use default config immediately without API call
|
|
11487
11544
|
if (!clientId) {
|
|
11545
|
+
console.log('[SmartlinksAuthUI] No clientId provided, using default config');
|
|
11488
11546
|
const defaultConfig = {
|
|
11489
11547
|
...DEFAULT_AUTH_CONFIG,
|
|
11490
11548
|
enabledProviders: enabledProviders || ['email', 'google', 'phone']
|
|
@@ -11515,7 +11573,9 @@ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAu
|
|
|
11515
11573
|
}
|
|
11516
11574
|
}
|
|
11517
11575
|
// Fetch from API
|
|
11576
|
+
console.log('[SmartlinksAuthUI] Fetching config from API for clientId:', clientId);
|
|
11518
11577
|
const fetchedConfig = await api.fetchConfig();
|
|
11578
|
+
console.log('[SmartlinksAuthUI] Received config:', fetchedConfig);
|
|
11519
11579
|
// Merge with customization props (props take precedence)
|
|
11520
11580
|
const mergedConfig = { ...fetchedConfig, ...customization };
|
|
11521
11581
|
setConfig(mergedConfig);
|
|
@@ -11813,9 +11873,11 @@ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAu
|
|
|
11813
11873
|
setLoading(true);
|
|
11814
11874
|
setError(undefined);
|
|
11815
11875
|
try {
|
|
11876
|
+
// Dynamically load Google Identity Services if not already loaded
|
|
11877
|
+
await loadGoogleIdentityServices();
|
|
11816
11878
|
const google = window.google;
|
|
11817
|
-
if (!google) {
|
|
11818
|
-
throw new Error('Google Identity Services
|
|
11879
|
+
if (!google?.accounts) {
|
|
11880
|
+
throw new Error('Google Identity Services failed to initialize');
|
|
11819
11881
|
}
|
|
11820
11882
|
if (oauthFlow === 'popup') {
|
|
11821
11883
|
// Use OAuth2 popup flow (works in iframes but requires popup permission)
|
|
@@ -11985,9 +12047,9 @@ const SmartlinksAuthUI = ({ apiEndpoint, clientId, clientName, accountData, onAu
|
|
|
11985
12047
|
}
|
|
11986
12048
|
};
|
|
11987
12049
|
if (configLoading) {
|
|
11988
|
-
return (jsx(AuthContainer, { theme:
|
|
12050
|
+
return (jsx(AuthContainer, { theme: resolvedTheme, className: className, minimal: minimal || config?.branding?.minimal || false, children: jsx("div", { style: { textAlign: 'center', padding: '2rem' }, children: jsx("div", { className: "auth-spinner" }) }) }));
|
|
11989
12051
|
}
|
|
11990
|
-
return (jsx(AuthContainer, { theme:
|
|
12052
|
+
return (jsx(AuthContainer, { theme: resolvedTheme, className: className, config: config, minimal: minimal || config?.branding?.minimal || false, children: authSuccess ? (jsxs("div", { style: { textAlign: 'center', padding: '2rem' }, children: [jsx("div", { style: {
|
|
11991
12053
|
color: 'var(--auth-primary-color, #4F46E5)',
|
|
11992
12054
|
fontSize: '3rem',
|
|
11993
12055
|
marginBottom: '1rem'
|