@proveanything/smartlinks-auth-ui 0.1.17 → 0.1.19
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 +46 -15
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +46 -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,CAgbpD,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -11225,6 +11225,8 @@ 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 guard to prevent concurrent runs (NOT persisted across remounts)
|
|
11229
|
+
const initializingRef = useRef(false);
|
|
11228
11230
|
// Notify all subscribers of auth state changes
|
|
11229
11231
|
const notifyAuthStateChange = useCallback((type, currentUser, currentToken, currentAccountData, currentAccountInfo) => {
|
|
11230
11232
|
callbacksRef.current.forEach(callback => {
|
|
@@ -11244,6 +11246,13 @@ const AuthProvider = ({ children, proxyMode = false, accountCacheTTL = 5 * 60 *
|
|
|
11244
11246
|
}, []);
|
|
11245
11247
|
// Initialize auth state - different behavior for proxy mode vs standalone mode
|
|
11246
11248
|
useEffect(() => {
|
|
11249
|
+
// Prevent concurrent initialization only
|
|
11250
|
+
if (initializingRef.current) {
|
|
11251
|
+
console.log('[AuthContext] Skipping initialization - already in progress');
|
|
11252
|
+
return;
|
|
11253
|
+
}
|
|
11254
|
+
let isMounted = true;
|
|
11255
|
+
initializingRef.current = true;
|
|
11247
11256
|
const initializeAuth = async () => {
|
|
11248
11257
|
try {
|
|
11249
11258
|
if (proxyMode) {
|
|
@@ -11255,7 +11264,7 @@ const AuthProvider = ({ children, proxyMode = false, accountCacheTTL = 5 * 60 *
|
|
|
11255
11264
|
// empty/undefined if no user is logged in
|
|
11256
11265
|
const accountAny = accountResponse;
|
|
11257
11266
|
const hasValidSession = accountAny?.uid && accountAny.uid.length > 0;
|
|
11258
|
-
if (hasValidSession) {
|
|
11267
|
+
if (hasValidSession && isMounted) {
|
|
11259
11268
|
// User is logged in with valid account
|
|
11260
11269
|
const userFromAccount = {
|
|
11261
11270
|
uid: accountAny.uid,
|
|
@@ -11269,14 +11278,17 @@ const AuthProvider = ({ children, proxyMode = false, accountCacheTTL = 5 * 60 *
|
|
|
11269
11278
|
console.log('[AuthContext] Proxy mode: initialized from parent account, uid:', accountAny.uid);
|
|
11270
11279
|
notifyAuthStateChange('LOGIN', userFromAccount, null, accountResponse, accountResponse);
|
|
11271
11280
|
}
|
|
11272
|
-
else {
|
|
11281
|
+
else if (isMounted) {
|
|
11273
11282
|
console.log('[AuthContext] Proxy mode: no valid session (no uid), awaiting login');
|
|
11274
11283
|
}
|
|
11275
11284
|
}
|
|
11276
11285
|
catch (error) {
|
|
11277
11286
|
console.log('[AuthContext] Proxy mode: auth.getAccount() failed, awaiting login:', error);
|
|
11278
11287
|
}
|
|
11279
|
-
|
|
11288
|
+
if (isMounted) {
|
|
11289
|
+
setIsLoading(false);
|
|
11290
|
+
initializingRef.current = false;
|
|
11291
|
+
}
|
|
11280
11292
|
return;
|
|
11281
11293
|
}
|
|
11282
11294
|
// STANDALONE MODE: Load from persistent storage
|
|
@@ -11284,28 +11296,47 @@ const AuthProvider = ({ children, proxyMode = false, accountCacheTTL = 5 * 60 *
|
|
|
11284
11296
|
const storedUser = await tokenStorage.getUser();
|
|
11285
11297
|
const storedAccountData = await tokenStorage.getAccountData();
|
|
11286
11298
|
if (storedToken && storedUser) {
|
|
11287
|
-
|
|
11288
|
-
|
|
11289
|
-
|
|
11290
|
-
|
|
11291
|
-
|
|
11292
|
-
|
|
11293
|
-
|
|
11299
|
+
// Verify token FIRST before setting state
|
|
11300
|
+
try {
|
|
11301
|
+
console.log('[AuthContext] Verifying stored token...');
|
|
11302
|
+
await smartlinks.auth.verifyToken(storedToken.token);
|
|
11303
|
+
// Only set state if verification succeeded and component still mounted
|
|
11304
|
+
if (isMounted) {
|
|
11305
|
+
setToken(storedToken.token);
|
|
11306
|
+
setUser(storedUser);
|
|
11307
|
+
setAccountData(storedAccountData);
|
|
11308
|
+
console.log('[AuthContext] Session restored successfully');
|
|
11309
|
+
}
|
|
11310
|
+
}
|
|
11311
|
+
catch (err) {
|
|
11312
|
+
console.warn('[AuthContext] Token verification failed, clearing stored credentials:', err);
|
|
11313
|
+
await tokenStorage.clearAll();
|
|
11314
|
+
// Don't set user state - leave as logged out
|
|
11315
|
+
}
|
|
11294
11316
|
}
|
|
11295
11317
|
// Load cached account info if available
|
|
11296
|
-
|
|
11297
|
-
|
|
11298
|
-
|
|
11318
|
+
if (isMounted) {
|
|
11319
|
+
const cachedAccountInfo = await tokenStorage.getAccountInfo();
|
|
11320
|
+
if (cachedAccountInfo && !cachedAccountInfo.isStale) {
|
|
11321
|
+
setAccountInfo(cachedAccountInfo.data);
|
|
11322
|
+
}
|
|
11299
11323
|
}
|
|
11300
11324
|
}
|
|
11301
11325
|
catch (error) {
|
|
11302
|
-
console.error('Failed to initialize auth from storage:', error);
|
|
11326
|
+
console.error('[AuthContext] Failed to initialize auth from storage:', error);
|
|
11303
11327
|
}
|
|
11304
11328
|
finally {
|
|
11305
|
-
|
|
11329
|
+
if (isMounted) {
|
|
11330
|
+
setIsLoading(false);
|
|
11331
|
+
initializingRef.current = false;
|
|
11332
|
+
}
|
|
11306
11333
|
}
|
|
11307
11334
|
};
|
|
11308
11335
|
initializeAuth();
|
|
11336
|
+
// Cleanup for hot reload
|
|
11337
|
+
return () => {
|
|
11338
|
+
isMounted = false;
|
|
11339
|
+
};
|
|
11309
11340
|
}, [proxyMode, notifyAuthStateChange]);
|
|
11310
11341
|
// Listen for parent auth state changes (proxy mode only)
|
|
11311
11342
|
useEffect(() => {
|