@redzone/taunt-logins-ui-react 0.0.24 → 0.0.26

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.
@@ -80,32 +80,9 @@ function LoadingView() {
80
80
  });
81
81
  }
82
82
 
83
- const DefinitelyUndefined = ()=>Promise.resolve(undefined);
84
- const TauntContext = react.createContext({
85
- taunt: {},
86
- tauntServiceEndpoint: "",
87
- initialised: false,
88
- loggedIn: false,
89
- isLoading: false,
90
- tauntUser: undefined,
91
- loginDetails: undefined,
92
- setLoginDetails: DefinitelyUndefined,
93
- getMe: DefinitelyUndefined,
94
- metamaskLogin: DefinitelyUndefined,
95
- otpMagicLogin: DefinitelyUndefined,
96
- telegramLogin: DefinitelyUndefined,
97
- metaLogin: DefinitelyUndefined,
98
- coinbaseLogin: DefinitelyUndefined,
99
- refreshToken: DefinitelyUndefined,
100
- getClaimrToken: DefinitelyUndefined,
101
- getClaimrSkulls: DefinitelyUndefined,
102
- getClaimrReferralCode: DefinitelyUndefined,
103
- logout: ()=>{
104
- /* empty */ }
105
- });
83
+ const TauntContext = react.createContext(undefined);
106
84
  function useTaunt() {
107
85
  const ctx = react.useContext(TauntContext);
108
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
109
86
  if (!ctx) {
110
87
  throw new Error("useTaunt must be used within a TauntProvider");
111
88
  }
@@ -575,18 +552,21 @@ const TauntProvider = ({ children, tauntServiceEndpoint, magicKey })=>{
575
552
  if (!tauntServiceEndpoint) {
576
553
  throw new Error("TauntProvider: tauntServiceEndpoint is not provided");
577
554
  }
578
- console.log("🔧 Initializing TauntProvider with endpoint:", {
579
- tauntServiceEndpoint,
580
- magicKey
581
- });
582
555
  const [initialised, setInitialised] = react.useState(false);
583
556
  const [tauntUser, setTauntUser] = react.useState();
584
557
  const [loginDetails, setLoginDetails] = react.useState();
585
- const taunt = react.useMemo(()=>new tauntLogins.TauntApi(tauntServiceEndpoint, setLoginDetails), [
558
+ const taunt = react.useMemo(()=>new tauntLogins.TauntApi(tauntServiceEndpoint), [
586
559
  tauntServiceEndpoint
587
560
  ]);
588
561
  const [isLoading, setIsLoading] = react.useState(false);
589
562
  const loggedIn = !!tauntUser;
563
+ react.useEffect(()=>{
564
+ if (!tauntUser) {
565
+ setLoginDetails(undefined);
566
+ }
567
+ }, [
568
+ tauntUser
569
+ ]);
590
570
  const getMe = react.useCallback(async (force = false)=>{
591
571
  if (!force && !loggedIn) return undefined;
592
572
  return taunt.getLoggedInUser();
@@ -661,26 +641,35 @@ const TauntProvider = ({ children, tauntServiceEndpoint, magicKey })=>{
661
641
  return Promise.resolve(undefined);
662
642
  }, []);
663
643
  const logout = react.useCallback(()=>{
664
- void taunt.logout().then(()=>{
644
+ void taunt.logout().finally(()=>{
665
645
  setTauntUser(undefined);
666
646
  });
667
647
  }, [
668
648
  taunt
669
649
  ]);
670
- const refreshToken = react.useCallback(async (token)=>{
671
- if (!token) return;
650
+ const refreshToken = react.useCallback(async (token, autoLogoutOnError = true)=>{
651
+ if (!token) {
652
+ if (autoLogoutOnError) {
653
+ logout();
654
+ }
655
+ return;
656
+ }
672
657
  setIsLoading(true);
673
658
  try {
674
659
  await taunt.refresh(token);
675
660
  return await refreshUser();
676
661
  } catch (error) {
677
662
  console.error("Failed to refresh token:", error);
663
+ if (autoLogoutOnError) {
664
+ logout();
665
+ }
678
666
  } finally{
679
667
  setIsLoading(false);
680
668
  }
681
669
  }, [
670
+ taunt,
682
671
  refreshUser,
683
- taunt
672
+ logout
684
673
  ]);
685
674
  const withTaunt = react.useCallback(async (fn)=>{
686
675
  if (loggedIn) {
@@ -699,6 +688,25 @@ const TauntProvider = ({ children, tauntServiceEndpoint, magicKey })=>{
699
688
  const getClaimrReferralCode = react.useCallback(()=>withTaunt((taunt)=>taunt.getClaimrReferralCode()), [
700
689
  withTaunt
701
690
  ]);
691
+ const getAccessDetails = react.useCallback(async ()=>{
692
+ if (loginDetails) {
693
+ return loginDetails;
694
+ }
695
+ if (loggedIn) {
696
+ if (taunt.refreshToken) {
697
+ setLoginDetails(await refreshToken(taunt.refreshToken));
698
+ return loginDetails;
699
+ } else {
700
+ logout();
701
+ }
702
+ }
703
+ }, [
704
+ loggedIn,
705
+ loginDetails,
706
+ taunt.refreshToken,
707
+ refreshToken,
708
+ logout
709
+ ]);
702
710
  const safeSetLoginDetails = react.useCallback((props)=>loginWith(async ({ taunt })=>{
703
711
  await taunt.setLoginDetails(props);
704
712
  return props;
@@ -733,6 +741,7 @@ const TauntProvider = ({ children, tauntServiceEndpoint, magicKey })=>{
733
741
  loginDetails,
734
742
  tauntUser,
735
743
  setLoginDetails: safeSetLoginDetails,
744
+ getAccessDetails,
736
745
  getMe,
737
746
  getClaimrToken,
738
747
  getClaimrSkulls,
@@ -99,6 +99,7 @@ interface ContextProps {
99
99
  metaLogin: () => MaybeUser;
100
100
  coinbaseLogin: () => MaybeUser;
101
101
  getMe: () => MaybeUser;
102
+ getAccessDetails: () => Promise<TauntAccessDetails | undefined>;
102
103
  setLoginDetails: (props: TauntAccessDetails) => MaybeUser;
103
104
  refreshToken: (token: string) => MaybeUser;
104
105
  getClaimrToken: () => MaybeString;
@@ -106,7 +107,7 @@ interface ContextProps {
106
107
  getClaimrReferralCode: () => MaybeString;
107
108
  logout: () => void;
108
109
  }
109
- declare const TauntContext: react.Context<ContextProps>;
110
+ declare const TauntContext: react.Context<ContextProps | undefined>;
110
111
  declare function useTaunt(): ContextProps;
111
112
 
112
113
  declare const TauntProvider: ({ children, tauntServiceEndpoint, magicKey }: {
@@ -99,6 +99,7 @@ interface ContextProps {
99
99
  metaLogin: () => MaybeUser;
100
100
  coinbaseLogin: () => MaybeUser;
101
101
  getMe: () => MaybeUser;
102
+ getAccessDetails: () => Promise<TauntAccessDetails | undefined>;
102
103
  setLoginDetails: (props: TauntAccessDetails) => MaybeUser;
103
104
  refreshToken: (token: string) => MaybeUser;
104
105
  getClaimrToken: () => MaybeString;
@@ -106,7 +107,7 @@ interface ContextProps {
106
107
  getClaimrReferralCode: () => MaybeString;
107
108
  logout: () => void;
108
109
  }
109
- declare const TauntContext: react.Context<ContextProps>;
110
+ declare const TauntContext: react.Context<ContextProps | undefined>;
110
111
  declare function useTaunt(): ContextProps;
111
112
 
112
113
  declare const TauntProvider: ({ children, tauntServiceEndpoint, magicKey }: {
package/dist/es/index.js CHANGED
@@ -80,32 +80,9 @@ function LoadingView() {
80
80
  });
81
81
  }
82
82
 
83
- const DefinitelyUndefined = ()=>Promise.resolve(undefined);
84
- const TauntContext = createContext({
85
- taunt: {},
86
- tauntServiceEndpoint: "",
87
- initialised: false,
88
- loggedIn: false,
89
- isLoading: false,
90
- tauntUser: undefined,
91
- loginDetails: undefined,
92
- setLoginDetails: DefinitelyUndefined,
93
- getMe: DefinitelyUndefined,
94
- metamaskLogin: DefinitelyUndefined,
95
- otpMagicLogin: DefinitelyUndefined,
96
- telegramLogin: DefinitelyUndefined,
97
- metaLogin: DefinitelyUndefined,
98
- coinbaseLogin: DefinitelyUndefined,
99
- refreshToken: DefinitelyUndefined,
100
- getClaimrToken: DefinitelyUndefined,
101
- getClaimrSkulls: DefinitelyUndefined,
102
- getClaimrReferralCode: DefinitelyUndefined,
103
- logout: ()=>{
104
- /* empty */ }
105
- });
83
+ const TauntContext = createContext(undefined);
106
84
  function useTaunt() {
107
85
  const ctx = useContext(TauntContext);
108
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
109
86
  if (!ctx) {
110
87
  throw new Error("useTaunt must be used within a TauntProvider");
111
88
  }
@@ -575,18 +552,21 @@ const TauntProvider = ({ children, tauntServiceEndpoint, magicKey })=>{
575
552
  if (!tauntServiceEndpoint) {
576
553
  throw new Error("TauntProvider: tauntServiceEndpoint is not provided");
577
554
  }
578
- console.log("🔧 Initializing TauntProvider with endpoint:", {
579
- tauntServiceEndpoint,
580
- magicKey
581
- });
582
555
  const [initialised, setInitialised] = useState(false);
583
556
  const [tauntUser, setTauntUser] = useState();
584
557
  const [loginDetails, setLoginDetails] = useState();
585
- const taunt = useMemo(()=>new TauntApi(tauntServiceEndpoint, setLoginDetails), [
558
+ const taunt = useMemo(()=>new TauntApi(tauntServiceEndpoint), [
586
559
  tauntServiceEndpoint
587
560
  ]);
588
561
  const [isLoading, setIsLoading] = useState(false);
589
562
  const loggedIn = !!tauntUser;
563
+ useEffect(()=>{
564
+ if (!tauntUser) {
565
+ setLoginDetails(undefined);
566
+ }
567
+ }, [
568
+ tauntUser
569
+ ]);
590
570
  const getMe = useCallback(async (force = false)=>{
591
571
  if (!force && !loggedIn) return undefined;
592
572
  return taunt.getLoggedInUser();
@@ -661,26 +641,35 @@ const TauntProvider = ({ children, tauntServiceEndpoint, magicKey })=>{
661
641
  return Promise.resolve(undefined);
662
642
  }, []);
663
643
  const logout = useCallback(()=>{
664
- void taunt.logout().then(()=>{
644
+ void taunt.logout().finally(()=>{
665
645
  setTauntUser(undefined);
666
646
  });
667
647
  }, [
668
648
  taunt
669
649
  ]);
670
- const refreshToken = useCallback(async (token)=>{
671
- if (!token) return;
650
+ const refreshToken = useCallback(async (token, autoLogoutOnError = true)=>{
651
+ if (!token) {
652
+ if (autoLogoutOnError) {
653
+ logout();
654
+ }
655
+ return;
656
+ }
672
657
  setIsLoading(true);
673
658
  try {
674
659
  await taunt.refresh(token);
675
660
  return await refreshUser();
676
661
  } catch (error) {
677
662
  console.error("Failed to refresh token:", error);
663
+ if (autoLogoutOnError) {
664
+ logout();
665
+ }
678
666
  } finally{
679
667
  setIsLoading(false);
680
668
  }
681
669
  }, [
670
+ taunt,
682
671
  refreshUser,
683
- taunt
672
+ logout
684
673
  ]);
685
674
  const withTaunt = useCallback(async (fn)=>{
686
675
  if (loggedIn) {
@@ -699,6 +688,25 @@ const TauntProvider = ({ children, tauntServiceEndpoint, magicKey })=>{
699
688
  const getClaimrReferralCode = useCallback(()=>withTaunt((taunt)=>taunt.getClaimrReferralCode()), [
700
689
  withTaunt
701
690
  ]);
691
+ const getAccessDetails = useCallback(async ()=>{
692
+ if (loginDetails) {
693
+ return loginDetails;
694
+ }
695
+ if (loggedIn) {
696
+ if (taunt.refreshToken) {
697
+ setLoginDetails(await refreshToken(taunt.refreshToken));
698
+ return loginDetails;
699
+ } else {
700
+ logout();
701
+ }
702
+ }
703
+ }, [
704
+ loggedIn,
705
+ loginDetails,
706
+ taunt.refreshToken,
707
+ refreshToken,
708
+ logout
709
+ ]);
702
710
  const safeSetLoginDetails = useCallback((props)=>loginWith(async ({ taunt })=>{
703
711
  await taunt.setLoginDetails(props);
704
712
  return props;
@@ -733,6 +741,7 @@ const TauntProvider = ({ children, tauntServiceEndpoint, magicKey })=>{
733
741
  loginDetails,
734
742
  tauntUser,
735
743
  setLoginDetails: safeSetLoginDetails,
744
+ getAccessDetails,
736
745
  getMe,
737
746
  getClaimrToken,
738
747
  getClaimrSkulls,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redzone/taunt-logins-ui-react",
3
- "version": "0.0.24",
3
+ "version": "0.0.26",
4
4
  "type": "module",
5
5
  "main": "./dist/es/index.js",
6
6
  "module": "./dist/es/index.js",
@@ -30,6 +30,7 @@
30
30
  "postbuild": "npm run copy:styles",
31
31
  "clean": "rm -rf dist",
32
32
  "lint": "eslint .",
33
+ "npm:login": "npm login",
33
34
  "prenpm:publish": "npm run build",
34
35
  "npm:publish": "npm publish --access public",
35
36
  "fb:login": "firebase login --reauth",