@proveanything/smartlinks-auth-ui 0.1.17 → 0.1.18
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/context/AuthContext.d.ts.map +1 -1
- package/dist/index.esm.js +49 -15
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +49 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../src/context/AuthContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAKnG,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAElE,UAAU,gBAAgB;IACxB,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACxC,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrE,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,uBAAuB,KAAK,MAAM,IAAI,CAAC;CACtE;AAID,UAAU,iBAAiB;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../src/context/AuthContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAKnG,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAElE,UAAU,gBAAgB;IACxB,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACxC,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrE,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,uBAAuB,KAAK,MAAM,IAAI,CAAC;CACtE;AAID,UAAU,iBAAiB;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAmbpD,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -11225,6 +11225,9 @@ const AuthProvider = ({ children, proxyMode = false, accountCacheTTL = 5 * 60 *
|
|
|
11225
11225
|
const [accountInfo, setAccountInfo] = useState(null);
|
|
11226
11226
|
const [isLoading, setIsLoading] = useState(true);
|
|
11227
11227
|
const callbacksRef = useRef(new Set());
|
|
11228
|
+
// Initialization guards to prevent race conditions on hot reload
|
|
11229
|
+
const initializingRef = useRef(false);
|
|
11230
|
+
const initializedRef = useRef(false);
|
|
11228
11231
|
// Notify all subscribers of auth state changes
|
|
11229
11232
|
const notifyAuthStateChange = useCallback((type, currentUser, currentToken, currentAccountData, currentAccountInfo) => {
|
|
11230
11233
|
callbacksRef.current.forEach(callback => {
|
|
@@ -11244,6 +11247,13 @@ const AuthProvider = ({ children, proxyMode = false, accountCacheTTL = 5 * 60 *
|
|
|
11244
11247
|
}, []);
|
|
11245
11248
|
// Initialize auth state - different behavior for proxy mode vs standalone mode
|
|
11246
11249
|
useEffect(() => {
|
|
11250
|
+
// Prevent concurrent initialization (race condition fix)
|
|
11251
|
+
if (initializingRef.current || initializedRef.current) {
|
|
11252
|
+
console.log('[AuthContext] Skipping initialization - already in progress or completed');
|
|
11253
|
+
return;
|
|
11254
|
+
}
|
|
11255
|
+
let isMounted = true;
|
|
11256
|
+
initializingRef.current = true;
|
|
11247
11257
|
const initializeAuth = async () => {
|
|
11248
11258
|
try {
|
|
11249
11259
|
if (proxyMode) {
|
|
@@ -11255,7 +11265,7 @@ const AuthProvider = ({ children, proxyMode = false, accountCacheTTL = 5 * 60 *
|
|
|
11255
11265
|
// empty/undefined if no user is logged in
|
|
11256
11266
|
const accountAny = accountResponse;
|
|
11257
11267
|
const hasValidSession = accountAny?.uid && accountAny.uid.length > 0;
|
|
11258
|
-
if (hasValidSession) {
|
|
11268
|
+
if (hasValidSession && isMounted) {
|
|
11259
11269
|
// User is logged in with valid account
|
|
11260
11270
|
const userFromAccount = {
|
|
11261
11271
|
uid: accountAny.uid,
|
|
@@ -11269,14 +11279,18 @@ const AuthProvider = ({ children, proxyMode = false, accountCacheTTL = 5 * 60 *
|
|
|
11269
11279
|
console.log('[AuthContext] Proxy mode: initialized from parent account, uid:', accountAny.uid);
|
|
11270
11280
|
notifyAuthStateChange('LOGIN', userFromAccount, null, accountResponse, accountResponse);
|
|
11271
11281
|
}
|
|
11272
|
-
else {
|
|
11282
|
+
else if (isMounted) {
|
|
11273
11283
|
console.log('[AuthContext] Proxy mode: no valid session (no uid), awaiting login');
|
|
11274
11284
|
}
|
|
11275
11285
|
}
|
|
11276
11286
|
catch (error) {
|
|
11277
11287
|
console.log('[AuthContext] Proxy mode: auth.getAccount() failed, awaiting login:', error);
|
|
11278
11288
|
}
|
|
11279
|
-
|
|
11289
|
+
if (isMounted) {
|
|
11290
|
+
setIsLoading(false);
|
|
11291
|
+
initializedRef.current = true;
|
|
11292
|
+
initializingRef.current = false;
|
|
11293
|
+
}
|
|
11280
11294
|
return;
|
|
11281
11295
|
}
|
|
11282
11296
|
// STANDALONE MODE: Load from persistent storage
|
|
@@ -11284,28 +11298,48 @@ const AuthProvider = ({ children, proxyMode = false, accountCacheTTL = 5 * 60 *
|
|
|
11284
11298
|
const storedUser = await tokenStorage.getUser();
|
|
11285
11299
|
const storedAccountData = await tokenStorage.getAccountData();
|
|
11286
11300
|
if (storedToken && storedUser) {
|
|
11287
|
-
|
|
11288
|
-
|
|
11289
|
-
|
|
11290
|
-
|
|
11291
|
-
|
|
11292
|
-
|
|
11293
|
-
|
|
11301
|
+
// Verify token FIRST before setting state
|
|
11302
|
+
try {
|
|
11303
|
+
console.log('[AuthContext] Verifying stored token...');
|
|
11304
|
+
await smartlinks.auth.verifyToken(storedToken.token);
|
|
11305
|
+
// Only set state if verification succeeded and component still mounted
|
|
11306
|
+
if (isMounted) {
|
|
11307
|
+
setToken(storedToken.token);
|
|
11308
|
+
setUser(storedUser);
|
|
11309
|
+
setAccountData(storedAccountData);
|
|
11310
|
+
console.log('[AuthContext] Session restored successfully');
|
|
11311
|
+
}
|
|
11312
|
+
}
|
|
11313
|
+
catch (err) {
|
|
11314
|
+
console.warn('[AuthContext] Token verification failed, clearing stored credentials:', err);
|
|
11315
|
+
await tokenStorage.clearAll();
|
|
11316
|
+
// Don't set user state - leave as logged out
|
|
11317
|
+
}
|
|
11294
11318
|
}
|
|
11295
11319
|
// Load cached account info if available
|
|
11296
|
-
|
|
11297
|
-
|
|
11298
|
-
|
|
11320
|
+
if (isMounted) {
|
|
11321
|
+
const cachedAccountInfo = await tokenStorage.getAccountInfo();
|
|
11322
|
+
if (cachedAccountInfo && !cachedAccountInfo.isStale) {
|
|
11323
|
+
setAccountInfo(cachedAccountInfo.data);
|
|
11324
|
+
}
|
|
11299
11325
|
}
|
|
11300
11326
|
}
|
|
11301
11327
|
catch (error) {
|
|
11302
|
-
console.error('Failed to initialize auth from storage:', error);
|
|
11328
|
+
console.error('[AuthContext] Failed to initialize auth from storage:', error);
|
|
11303
11329
|
}
|
|
11304
11330
|
finally {
|
|
11305
|
-
|
|
11331
|
+
if (isMounted) {
|
|
11332
|
+
setIsLoading(false);
|
|
11333
|
+
initializedRef.current = true;
|
|
11334
|
+
initializingRef.current = false;
|
|
11335
|
+
}
|
|
11306
11336
|
}
|
|
11307
11337
|
};
|
|
11308
11338
|
initializeAuth();
|
|
11339
|
+
// Cleanup for hot reload
|
|
11340
|
+
return () => {
|
|
11341
|
+
isMounted = false;
|
|
11342
|
+
};
|
|
11309
11343
|
}, [proxyMode, notifyAuthStateChange]);
|
|
11310
11344
|
// Listen for parent auth state changes (proxy mode only)
|
|
11311
11345
|
useEffect(() => {
|