@23blocks/react 14.5.0 → 14.6.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.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,34 @@
|
|
|
1
|
+
## 14.6.0 (2026-03-14)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **@23blocks/react:** rebuild with jarvis barrel exports ([08ce412](https://github.com/23blocks-OS/frontend-sdk/commit/08ce412))
|
|
6
|
+
|
|
7
|
+
### 🧱 Updated Dependencies
|
|
8
|
+
|
|
9
|
+
- Updated @23blocks/block-jarvis to 5.2.0
|
|
10
|
+
|
|
11
|
+
### ❤️ Thank You
|
|
12
|
+
|
|
13
|
+
- Claude Opus 4.6
|
|
14
|
+
- Juan Pelaez
|
|
15
|
+
|
|
16
|
+
## 14.5.1 (2026-03-14)
|
|
17
|
+
|
|
18
|
+
### 🩹 Fixes
|
|
19
|
+
|
|
20
|
+
- **@23blocks/react:** add managed verifyMagicLink/acceptInvitation and stabilize memo deps ([ee811ee](https://github.com/23blocks-OS/frontend-sdk/commit/ee811ee))
|
|
21
|
+
- **@23blocks/react:** fix lifecycle circular retry, late-subscriber, and signUp ([31b18a9](https://github.com/23blocks-OS/frontend-sdk/commit/31b18a9))
|
|
22
|
+
|
|
23
|
+
### 📖 Documentation
|
|
24
|
+
|
|
25
|
+
- update llms.txt and JSDoc for token lifecycle across all packages ([74d8319](https://github.com/23blocks-OS/frontend-sdk/commit/74d8319))
|
|
26
|
+
|
|
27
|
+
### ❤️ Thank You
|
|
28
|
+
|
|
29
|
+
- Claude Opus 4.6
|
|
30
|
+
- Juan Pelaez
|
|
31
|
+
|
|
1
32
|
## 14.5.0 (2026-03-14)
|
|
2
33
|
|
|
3
34
|
### 🚀 Features
|
package/dist/index.esm.js
CHANGED
|
@@ -189,6 +189,10 @@ let MemoryStorage = class MemoryStorage {
|
|
|
189
189
|
}
|
|
190
190
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
191
191
|
// Token Lifecycle Helpers
|
|
192
|
+
// CANONICAL SOURCE: packages/sdk/src/lib/token-lifecycle.ts
|
|
193
|
+
// These are inlined here to avoid adding @23blocks/sdk as a dependency
|
|
194
|
+
// (which would change ng-packagr and consumer dependency requirements).
|
|
195
|
+
// When fixing bugs, update all three copies: sdk, react, angular.
|
|
192
196
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
193
197
|
function decodeJwtExp(token) {
|
|
194
198
|
try {
|
|
@@ -281,6 +285,8 @@ function createLifecycleManager(tokenManager, refreshFn, config = {}) {
|
|
|
281
285
|
const rt = tokenManager.getRefreshToken();
|
|
282
286
|
if (!rt) throw new Error('No refresh token');
|
|
283
287
|
const result = await refreshFn(rt);
|
|
288
|
+
// Guard: don't store tokens if lifecycle was stopped/destroyed during the async call
|
|
289
|
+
if (!running || destroyed) return result.accessToken;
|
|
284
290
|
tokenManager.setTokens(result.accessToken, result.refreshToken);
|
|
285
291
|
scheduleRefresh();
|
|
286
292
|
notify('TOKEN_REFRESHED');
|
|
@@ -306,11 +312,13 @@ function createLifecycleManager(tokenManager, refreshFn, config = {}) {
|
|
|
306
312
|
visibilityHandler = handleVisibilityChange;
|
|
307
313
|
document.addEventListener('visibilitychange', visibilityHandler);
|
|
308
314
|
}
|
|
315
|
+
notify('SIGNED_IN');
|
|
309
316
|
},
|
|
310
317
|
stop () {
|
|
311
318
|
running = false;
|
|
312
319
|
clearTimer();
|
|
313
320
|
refreshPromise = null;
|
|
321
|
+
notify('SIGNED_OUT');
|
|
314
322
|
},
|
|
315
323
|
onAuthStateChanged (listener) {
|
|
316
324
|
listeners.add(listener);
|
|
@@ -458,7 +466,17 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
458
466
|
const [isReady, setIsReady] = useState(!customStorage);
|
|
459
467
|
const tokenManagerRef = useRef(null);
|
|
460
468
|
const lifecycleRef = useRef(null);
|
|
469
|
+
// Buffer listeners registered before lifecycle is initialized
|
|
470
|
+
const pendingListenersRef = useRef(new Set());
|
|
461
471
|
const lifecycleEnabled = authMode === 'token' && lifecycleConfig !== false;
|
|
472
|
+
// Stabilize object props to prevent cascading memo invalidation
|
|
473
|
+
// when consumers pass inline objects (e.g., headers={{}} or tokenLifecycle={{}})
|
|
474
|
+
const headersJson = JSON.stringify(staticHeaders);
|
|
475
|
+
const headersRef = useRef(staticHeaders);
|
|
476
|
+
headersRef.current = staticHeaders;
|
|
477
|
+
const lifecycleConfigJson = typeof lifecycleConfig === 'object' ? JSON.stringify(lifecycleConfig) : String(lifecycleConfig);
|
|
478
|
+
const lifecycleConfigRef = useRef(lifecycleConfig);
|
|
479
|
+
lifecycleConfigRef.current = lifecycleConfig;
|
|
462
480
|
// Create token manager (memoized) with scoped storage keys
|
|
463
481
|
const tokenManager = useMemo(()=>{
|
|
464
482
|
if (authMode !== 'token') {
|
|
@@ -491,7 +509,7 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
491
509
|
timeout,
|
|
492
510
|
credentials: authMode === 'cookie' ? 'include' : undefined,
|
|
493
511
|
headers: ()=>{
|
|
494
|
-
const headers = _({},
|
|
512
|
+
const headers = _({}, headersRef.current, {
|
|
495
513
|
'x-api-key': apiKey
|
|
496
514
|
});
|
|
497
515
|
if (tenantId) {
|
|
@@ -506,11 +524,12 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
506
524
|
return headers;
|
|
507
525
|
}
|
|
508
526
|
});
|
|
527
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
509
528
|
}, [
|
|
510
529
|
apiKey,
|
|
511
530
|
tenantId,
|
|
512
531
|
authMode,
|
|
513
|
-
|
|
532
|
+
headersJson,
|
|
514
533
|
timeout
|
|
515
534
|
]);
|
|
516
535
|
// Factory to create transport with optional 401 retry
|
|
@@ -719,9 +738,11 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
719
738
|
lifecycleRef.current = null;
|
|
720
739
|
return;
|
|
721
740
|
}
|
|
722
|
-
|
|
741
|
+
// Dedicated transport for refresh calls — NOT wrapped with retry to avoid circular 401 handling
|
|
742
|
+
const refreshTransport = createBaseTransport(urls.authentication);
|
|
743
|
+
const refreshAuthBlock = createAuthenticationBlock(refreshTransport, blockConfig);
|
|
723
744
|
const refreshFn = async (refreshToken)=>{
|
|
724
|
-
const response = await
|
|
745
|
+
const response = await refreshAuthBlock.auth.refreshToken({
|
|
725
746
|
refreshToken
|
|
726
747
|
});
|
|
727
748
|
return {
|
|
@@ -730,8 +751,14 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
730
751
|
expiresIn: response.expiresIn
|
|
731
752
|
};
|
|
732
753
|
};
|
|
733
|
-
const
|
|
754
|
+
const lcConfig = typeof lifecycleConfigRef.current === 'object' ? lifecycleConfigRef.current : {};
|
|
755
|
+
const lc = createLifecycleManager(tokenManager, refreshFn, lcConfig);
|
|
734
756
|
lifecycleRef.current = lc;
|
|
757
|
+
// Replay any listeners that were registered before lifecycle was ready
|
|
758
|
+
pendingListenersRef.current.forEach((listener)=>{
|
|
759
|
+
lc.onAuthStateChanged(listener);
|
|
760
|
+
});
|
|
761
|
+
pendingListenersRef.current.clear();
|
|
735
762
|
// Auto-start if tokens already exist (page reload)
|
|
736
763
|
if (tokenManager.getAccessToken() && tokenManager.getRefreshToken()) {
|
|
737
764
|
lc.start();
|
|
@@ -740,12 +767,14 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
740
767
|
lc.destroy();
|
|
741
768
|
lifecycleRef.current = null;
|
|
742
769
|
};
|
|
770
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
743
771
|
}, [
|
|
744
772
|
lifecycleEnabled,
|
|
745
773
|
tokenManager,
|
|
746
|
-
|
|
774
|
+
createBaseTransport,
|
|
775
|
+
blockConfig,
|
|
747
776
|
urls.authentication,
|
|
748
|
-
|
|
777
|
+
lifecycleConfigJson
|
|
749
778
|
]);
|
|
750
779
|
// Check if authentication is configured for auth methods
|
|
751
780
|
const isAuthConfigured = !!urls.authentication;
|
|
@@ -773,7 +802,9 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
773
802
|
}
|
|
774
803
|
const response = await authentication.auth.signUp(request);
|
|
775
804
|
if (authMode === 'token' && tokenManager && response.accessToken) {
|
|
805
|
+
var _lifecycleRef_current;
|
|
776
806
|
tokenManager.setTokens(response.accessToken);
|
|
807
|
+
(_lifecycleRef_current = lifecycleRef.current) == null ? void 0 : _lifecycleRef_current.start();
|
|
777
808
|
}
|
|
778
809
|
return response;
|
|
779
810
|
}, [
|
|
@@ -798,6 +829,40 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
798
829
|
tokenManager,
|
|
799
830
|
isAuthConfigured
|
|
800
831
|
]);
|
|
832
|
+
const verifyMagicLink = useCallback(async (request)=>{
|
|
833
|
+
if (!isAuthConfigured) {
|
|
834
|
+
throw new Error('[23blocks] Cannot call verifyMagicLink: The authentication service URL is not configured. ' + "Add 'urls.authentication' to your Provider configuration.");
|
|
835
|
+
}
|
|
836
|
+
const response = await authentication.auth.verifyMagicLink(request);
|
|
837
|
+
if (authMode === 'token' && tokenManager && response.accessToken) {
|
|
838
|
+
var _lifecycleRef_current;
|
|
839
|
+
tokenManager.setTokens(response.accessToken, response.refreshToken);
|
|
840
|
+
(_lifecycleRef_current = lifecycleRef.current) == null ? void 0 : _lifecycleRef_current.start();
|
|
841
|
+
}
|
|
842
|
+
return response;
|
|
843
|
+
}, [
|
|
844
|
+
authentication,
|
|
845
|
+
authMode,
|
|
846
|
+
tokenManager,
|
|
847
|
+
isAuthConfigured
|
|
848
|
+
]);
|
|
849
|
+
const acceptInvitation = useCallback(async (request)=>{
|
|
850
|
+
if (!isAuthConfigured) {
|
|
851
|
+
throw new Error('[23blocks] Cannot call acceptInvitation: The authentication service URL is not configured. ' + "Add 'urls.authentication' to your Provider configuration.");
|
|
852
|
+
}
|
|
853
|
+
const response = await authentication.auth.acceptInvitation(request);
|
|
854
|
+
if (authMode === 'token' && tokenManager && response.accessToken) {
|
|
855
|
+
var _lifecycleRef_current;
|
|
856
|
+
tokenManager.setTokens(response.accessToken, response.refreshToken);
|
|
857
|
+
(_lifecycleRef_current = lifecycleRef.current) == null ? void 0 : _lifecycleRef_current.start();
|
|
858
|
+
}
|
|
859
|
+
return response;
|
|
860
|
+
}, [
|
|
861
|
+
authentication,
|
|
862
|
+
authMode,
|
|
863
|
+
tokenManager,
|
|
864
|
+
isAuthConfigured
|
|
865
|
+
]);
|
|
801
866
|
// Token utilities
|
|
802
867
|
const getAccessToken = useCallback(()=>{
|
|
803
868
|
var _tokenManager_getAccessToken;
|
|
@@ -833,9 +898,15 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
833
898
|
tokenManager
|
|
834
899
|
]);
|
|
835
900
|
const onAuthStateChanged = useCallback((listener)=>{
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
901
|
+
const lc = lifecycleRef.current;
|
|
902
|
+
if (lc) {
|
|
903
|
+
return lc.onAuthStateChanged(listener);
|
|
904
|
+
}
|
|
905
|
+
// Lifecycle not ready yet — buffer the listener for replay when it initializes
|
|
906
|
+
pendingListenersRef.current.add(listener);
|
|
907
|
+
return ()=>{
|
|
908
|
+
pendingListenersRef.current.delete(listener);
|
|
909
|
+
};
|
|
839
910
|
}, []);
|
|
840
911
|
const refreshSession = useCallback(async ()=>{
|
|
841
912
|
const lc = lifecycleRef.current;
|
|
@@ -868,6 +939,8 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
868
939
|
signIn,
|
|
869
940
|
signUp,
|
|
870
941
|
signOut,
|
|
942
|
+
verifyMagicLink,
|
|
943
|
+
acceptInvitation,
|
|
871
944
|
// Token utilities
|
|
872
945
|
getAccessToken,
|
|
873
946
|
getRefreshToken,
|
|
@@ -903,6 +976,8 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
903
976
|
signIn,
|
|
904
977
|
signUp,
|
|
905
978
|
signOut,
|
|
979
|
+
verifyMagicLink,
|
|
980
|
+
acceptInvitation,
|
|
906
981
|
getAccessToken,
|
|
907
982
|
getRefreshToken,
|
|
908
983
|
setTokens,
|
|
@@ -1017,12 +1092,12 @@ const Blocks23Context = /*#__PURE__*/ createContext(null);
|
|
|
1017
1092
|
updatePassword: (...args)=>getAuth().updatePassword(...args),
|
|
1018
1093
|
// Token refresh
|
|
1019
1094
|
refreshToken: (...args)=>getAuth().refreshToken(...args),
|
|
1020
|
-
// Magic link (passwordless)
|
|
1095
|
+
// Magic link (passwordless) — verifyMagicLink uses managed wrapper with token storage
|
|
1021
1096
|
requestMagicLink: (...args)=>getAuth().requestMagicLink(...args),
|
|
1022
|
-
verifyMagicLink:
|
|
1023
|
-
// Invitations
|
|
1097
|
+
verifyMagicLink: context.verifyMagicLink,
|
|
1098
|
+
// Invitations — acceptInvitation uses managed wrapper with token storage
|
|
1024
1099
|
sendInvitation: (...args)=>getAuth().sendInvitation(...args),
|
|
1025
|
-
acceptInvitation:
|
|
1100
|
+
acceptInvitation: context.acceptInvitation,
|
|
1026
1101
|
resendInvitation: (...args)=>getAuth().resendInvitation(...args),
|
|
1027
1102
|
// Email confirmation
|
|
1028
1103
|
confirmEmail: (...args)=>getAuth().confirmEmail(...args),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
-
import { type AuthenticationBlock, type SignInRequest, type SignInResponse, type SignUpRequest, type SignUpResponse, type User, type UpdateProfileRequest } from '@23blocks/block-authentication';
|
|
2
|
+
import { type AuthenticationBlock, type SignInRequest, type SignInResponse, type SignUpRequest, type SignUpResponse, type MagicLinkVerifyRequest, type AcceptInvitationRequest, type User, type UpdateProfileRequest } from '@23blocks/block-authentication';
|
|
3
3
|
import { type SearchBlock } from '@23blocks/block-search';
|
|
4
4
|
import { type ProductsBlock } from '@23blocks/block-products';
|
|
5
5
|
import { type CrmBlock } from '@23blocks/block-crm';
|
|
@@ -236,6 +236,10 @@ export interface ClientContext {
|
|
|
236
236
|
signIn: (request: SignInRequest) => Promise<SignInResponse>;
|
|
237
237
|
signUp: (request: SignUpRequest) => Promise<SignUpResponse>;
|
|
238
238
|
signOut: () => Promise<void>;
|
|
239
|
+
/** Verify magic link and store tokens. Starts lifecycle for proactive refresh. */
|
|
240
|
+
verifyMagicLink: (request: MagicLinkVerifyRequest) => Promise<SignInResponse>;
|
|
241
|
+
/** Accept invitation and store tokens. Starts lifecycle for proactive refresh. */
|
|
242
|
+
acceptInvitation: (request: AcceptInvitationRequest) => Promise<SignInResponse>;
|
|
239
243
|
getAccessToken: () => string | null;
|
|
240
244
|
getRefreshToken: () => string | null;
|
|
241
245
|
setTokens: (accessToken: string, refreshToken?: string) => void;
|
|
@@ -428,9 +432,9 @@ export declare function useAuth(): {
|
|
|
428
432
|
updatePassword: (request: import("@23blocks/block-authentication").PasswordUpdateRequest) => Promise<void>;
|
|
429
433
|
refreshToken: (request: import("@23blocks/block-authentication").RefreshTokenRequest) => Promise<import("@23blocks/block-authentication").RefreshTokenResponse>;
|
|
430
434
|
requestMagicLink: (request: import("@23blocks/block-authentication").MagicLinkRequest) => Promise<void>;
|
|
431
|
-
verifyMagicLink: (request:
|
|
435
|
+
verifyMagicLink: (request: MagicLinkVerifyRequest) => Promise<SignInResponse>;
|
|
432
436
|
sendInvitation: (request: import("@23blocks/block-authentication").InvitationRequest) => Promise<void>;
|
|
433
|
-
acceptInvitation: (request:
|
|
437
|
+
acceptInvitation: (request: AcceptInvitationRequest) => Promise<SignInResponse>;
|
|
434
438
|
resendInvitation: (request: import("@23blocks/block-authentication").ResendInvitationRequest) => Promise<User>;
|
|
435
439
|
confirmEmail: (token: string) => Promise<User>;
|
|
436
440
|
resendConfirmation: (request: import("@23blocks/block-authentication").ResendConfirmationRequest) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-provider.d.ts","sourceRoot":"","sources":["../../../src/lib/simple-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrH,OAAO,EAA6B,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,IAAI,EAAE,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"simple-provider.d.ts","sourceRoot":"","sources":["../../../src/lib/simple-provider.tsx"],"names":[],"mappings":"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"}
|