@tern-secure/react 1.2.0-canary.v20251008131428 → 1.2.0-canary.v20251019190011

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.
Files changed (54) hide show
  1. package/dist/ctx/AuthProvider.d.mts +3 -4
  2. package/dist/ctx/AuthProvider.d.ts +3 -4
  3. package/dist/ctx/AuthProvider.js +1 -1
  4. package/dist/ctx/AuthProvider.js.map +1 -1
  5. package/dist/ctx/AuthProvider.mjs +1 -1
  6. package/dist/ctx/AuthProvider.mjs.map +1 -1
  7. package/dist/ctx/SignInCtx.d.mts +23 -0
  8. package/dist/ctx/SignInCtx.d.ts +23 -0
  9. package/dist/ctx/SignInCtx.js +2 -0
  10. package/dist/ctx/SignInCtx.js.map +1 -0
  11. package/dist/ctx/SignInCtx.mjs +2 -0
  12. package/dist/ctx/SignInCtx.mjs.map +1 -0
  13. package/dist/ctx/TernSecureCtxProvider.d.mts +2 -2
  14. package/dist/ctx/TernSecureCtxProvider.d.ts +2 -2
  15. package/dist/ctx/TernSecureCtxProvider.js +1 -1
  16. package/dist/ctx/TernSecureCtxProvider.js.map +1 -1
  17. package/dist/ctx/TernSecureCtxProvider.mjs +1 -1
  18. package/dist/ctx/TernSecureCtxProvider.mjs.map +1 -1
  19. package/dist/hooks/useAuth.d.mts +2 -1
  20. package/dist/hooks/useAuth.d.ts +2 -1
  21. package/dist/hooks/useAuth.js +1 -1
  22. package/dist/hooks/useAuth.js.map +1 -1
  23. package/dist/hooks/useAuth.mjs +1 -1
  24. package/dist/hooks/useAuth.mjs.map +1 -1
  25. package/dist/hooks/useSession.d.mts +0 -1
  26. package/dist/hooks/useSession.d.ts +0 -1
  27. package/dist/hooks/useSession.js +1 -1
  28. package/dist/hooks/useSession.js.map +1 -1
  29. package/dist/hooks/useSession.mjs +1 -1
  30. package/dist/hooks/useSession.mjs.map +1 -1
  31. package/dist/hooks/useSignIn.d.mts +4 -4
  32. package/dist/hooks/useSignIn.d.ts +4 -4
  33. package/dist/hooks/useSignIn.js +1 -1
  34. package/dist/hooks/useSignIn.js.map +1 -1
  35. package/dist/hooks/useSignIn.mjs +1 -1
  36. package/dist/hooks/useSignIn.mjs.map +1 -1
  37. package/dist/index.d.mts +4 -1
  38. package/dist/index.d.ts +4 -1
  39. package/dist/index.js +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/index.mjs +1 -1
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/lib/isoTernSecureAuth.d.mts +15 -1
  44. package/dist/lib/isoTernSecureAuth.d.ts +15 -1
  45. package/dist/lib/isoTernSecureAuth.js +1 -1
  46. package/dist/lib/isoTernSecureAuth.js.map +1 -1
  47. package/dist/lib/isoTernSecureAuth.mjs +1 -1
  48. package/dist/lib/isoTernSecureAuth.mjs.map +1 -1
  49. package/dist/types.d.mts +6 -6
  50. package/dist/types.d.ts +6 -6
  51. package/dist/types.js +1 -1
  52. package/dist/types.js.map +1 -1
  53. package/dist/types.mjs.map +1 -1
  54. package/package.json +4 -4
@@ -1,11 +1,10 @@
1
1
  import * as React from 'react';
2
- import { TernSecureUser } from '@tern-secure/types';
2
+ import { DecodedIdToken, TernSecureUser } from '@tern-secure/types';
3
3
 
4
4
  type AuthProviderCtxValue = {
5
5
  userId: string | null | undefined;
6
- token: string | null;
7
- email: string | null;
8
- user?: TernSecureUser | null;
6
+ sessionClaims: DecodedIdToken | null | undefined;
7
+ user: TernSecureUser | null | undefined;
9
8
  };
10
9
  declare const AuthProviderCtx: React.Context<{
11
10
  value: AuthProviderCtxValue;
@@ -1,11 +1,10 @@
1
1
  import * as React from 'react';
2
- import { TernSecureUser } from '@tern-secure/types';
2
+ import { DecodedIdToken, TernSecureUser } from '@tern-secure/types';
3
3
 
4
4
  type AuthProviderCtxValue = {
5
5
  userId: string | null | undefined;
6
- token: string | null;
7
- email: string | null;
8
- user?: TernSecureUser | null;
6
+ sessionClaims: DecodedIdToken | null | undefined;
7
+ user: TernSecureUser | null | undefined;
9
8
  };
10
9
  declare const AuthProviderCtx: React.Context<{
11
10
  value: AuthProviderCtxValue;
@@ -1,2 +1,2 @@
1
- "use strict";var n=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var x=(r,e)=>{for(var u in e)n(r,u,{get:e[u],enumerable:!0})},p=(r,e,u,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of s(e))!d.call(r,t)&&t!==u&&n(r,t,{get:()=>e[t],enumerable:!(o=l(e,t))||o.enumerable});return r};var A=r=>p(n({},"__esModule",{value:!0}),r);var h={};x(h,{AuthProviderCtx:()=>C,useAuthProviderCtx:()=>c});module.exports=A(h);var i=require("@tern-secure/shared/react");const[C,c]=(0,i.createContextAndHook)("AuthProviderCtx");0&&(module.exports={AuthProviderCtx,useAuthProviderCtx});
1
+ "use strict";var d=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var x=(r,e)=>{for(var o in e)d(r,o,{get:e[o],enumerable:!0})},c=(r,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of s(e))!l.call(r,t)&&t!==o&&d(r,t,{get:()=>e[t],enumerable:!(n=i(e,t))||n.enumerable});return r};var p=r=>c(d({},"__esModule",{value:!0}),r);var f={};x(f,{AuthProviderCtx:()=>C,useAuthProviderCtx:()=>A});module.exports=p(f);var u=require("@tern-secure/shared/react");const[C,A]=(0,u.createContextAndHook)("AuthProviderCtx");0&&(module.exports={AuthProviderCtx,useAuthProviderCtx});
2
2
  //# sourceMappingURL=AuthProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ctx/AuthProvider.tsx"],"sourcesContent":["import { createContextAndHook } from \"@tern-secure/shared/react\";\nimport type { TernSecureUser } from \"@tern-secure/types\";\n\nexport type AuthProviderCtxValue = {\n userId: string | null | undefined;\n token: string | null;\n email: string | null;\n user?: TernSecureUser | null;\n};\n\nexport const [AuthProviderCtx, useAuthProviderCtx] =\n createContextAndHook<AuthProviderCtxValue>(\"AuthProviderCtx\");\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,uBAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAqC,qCAU9B,KAAM,CAACH,EAAiBC,CAAkB,KAC/C,wBAA2C,iBAAiB","names":["AuthProvider_exports","__export","AuthProviderCtx","useAuthProviderCtx","__toCommonJS","import_react"]}
1
+ {"version":3,"sources":["../../src/ctx/AuthProvider.tsx"],"sourcesContent":["import { createContextAndHook } from \"@tern-secure/shared/react\";\nimport type { DecodedIdToken,TernSecureUser } from \"@tern-secure/types\";\n\nexport type AuthProviderCtxValue = {\n userId: string | null | undefined;\n sessionClaims: DecodedIdToken | null | undefined;\n user: TernSecureUser | null | undefined;\n};\n\nexport const [AuthProviderCtx, useAuthProviderCtx] =\n createContextAndHook<AuthProviderCtxValue>(\"AuthProviderCtx\");\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,uBAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAqC,qCAS9B,KAAM,CAACH,EAAiBC,CAAkB,KAC/C,wBAA2C,iBAAiB","names":["AuthProvider_exports","__export","AuthProviderCtx","useAuthProviderCtx","__toCommonJS","import_react"]}
@@ -1,2 +1,2 @@
1
- import{createContextAndHook as e}from"@tern-secure/shared/react";const[t,u]=e("AuthProviderCtx");export{t as AuthProviderCtx,u as useAuthProviderCtx};
1
+ import{createContextAndHook as e}from"@tern-secure/shared/react";const[t,o]=e("AuthProviderCtx");export{t as AuthProviderCtx,o as useAuthProviderCtx};
2
2
  //# sourceMappingURL=AuthProvider.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ctx/AuthProvider.tsx"],"sourcesContent":["import { createContextAndHook } from \"@tern-secure/shared/react\";\nimport type { TernSecureUser } from \"@tern-secure/types\";\n\nexport type AuthProviderCtxValue = {\n userId: string | null | undefined;\n token: string | null;\n email: string | null;\n user?: TernSecureUser | null;\n};\n\nexport const [AuthProviderCtx, useAuthProviderCtx] =\n createContextAndHook<AuthProviderCtxValue>(\"AuthProviderCtx\");\n"],"mappings":"AAAA,OAAS,wBAAAA,MAA4B,4BAU9B,KAAM,CAACC,EAAiBC,CAAkB,EAC/CF,EAA2C,iBAAiB","names":["createContextAndHook","AuthProviderCtx","useAuthProviderCtx"]}
1
+ {"version":3,"sources":["../../src/ctx/AuthProvider.tsx"],"sourcesContent":["import { createContextAndHook } from \"@tern-secure/shared/react\";\nimport type { DecodedIdToken,TernSecureUser } from \"@tern-secure/types\";\n\nexport type AuthProviderCtxValue = {\n userId: string | null | undefined;\n sessionClaims: DecodedIdToken | null | undefined;\n user: TernSecureUser | null | undefined;\n};\n\nexport const [AuthProviderCtx, useAuthProviderCtx] =\n createContextAndHook<AuthProviderCtxValue>(\"AuthProviderCtx\");\n"],"mappings":"AAAA,OAAS,wBAAAA,MAA4B,4BAS9B,KAAM,CAACC,EAAiBC,CAAkB,EAC/CF,EAA2C,iBAAiB","names":["createContextAndHook","AuthProviderCtx","useAuthProviderCtx"]}
@@ -0,0 +1,23 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { SignInProps, SignInRedirectUrl, SignUpRedirectUrl, TernSecureUser, AuthErrorTree } from '@tern-secure/auth';
3
+ export { useTernSecure } from '@tern-secure/shared/react';
4
+ import { ReactNode } from 'react';
5
+
6
+ type SignInCtx = SignInProps & SignInRedirectUrl & SignUpRedirectUrl;
7
+ interface SignInContextType extends Omit<SignInCtx, 'forceRedirectUrl' | 'signInForceRedirectUrl'> {
8
+ handleSignInSuccess: (user?: TernSecureUser | null, options?: {
9
+ skipRedirect?: boolean;
10
+ }) => void;
11
+ handleSignInError: (error: AuthErrorTree) => void;
12
+ redirectAfterSignIn: () => void;
13
+ SignInUrl: string;
14
+ SignUpUrl: string;
15
+ checkRedirectResult: () => Promise<void>;
16
+ }
17
+ declare const useSignInContext: () => SignInContextType;
18
+ interface SignInProviderProps extends Partial<SignInCtx> {
19
+ children: ReactNode;
20
+ }
21
+ declare function SignInProvider({ children, onSuccess, forceRedirectUrl, signInForceRedirectUrl, signUpForceRedirectUrl, ...ctxProps }: SignInProviderProps): react_jsx_runtime.JSX.Element;
22
+
23
+ export { type SignInCtx, SignInProvider, useSignInContext };
@@ -0,0 +1,23 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { SignInProps, SignInRedirectUrl, SignUpRedirectUrl, TernSecureUser, AuthErrorTree } from '@tern-secure/auth';
3
+ export { useTernSecure } from '@tern-secure/shared/react';
4
+ import { ReactNode } from 'react';
5
+
6
+ type SignInCtx = SignInProps & SignInRedirectUrl & SignUpRedirectUrl;
7
+ interface SignInContextType extends Omit<SignInCtx, 'forceRedirectUrl' | 'signInForceRedirectUrl'> {
8
+ handleSignInSuccess: (user?: TernSecureUser | null, options?: {
9
+ skipRedirect?: boolean;
10
+ }) => void;
11
+ handleSignInError: (error: AuthErrorTree) => void;
12
+ redirectAfterSignIn: () => void;
13
+ SignInUrl: string;
14
+ SignUpUrl: string;
15
+ checkRedirectResult: () => Promise<void>;
16
+ }
17
+ declare const useSignInContext: () => SignInContextType;
18
+ interface SignInProviderProps extends Partial<SignInCtx> {
19
+ children: ReactNode;
20
+ }
21
+ declare function SignInProvider({ children, onSuccess, forceRedirectUrl, signInForceRedirectUrl, signUpForceRedirectUrl, ...ctxProps }: SignInProviderProps): react_jsx_runtime.JSX.Element;
22
+
23
+ export { type SignInCtx, SignInProvider, useSignInContext };
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var I=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var L=(t,e)=>{for(var s in e)I(t,s,{get:e[s],enumerable:!0})},O=(t,e,s,S)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of w(e))!F.call(t,o)&&o!==s&&I(t,o,{get:()=>e[o],enumerable:!(S=b(e,o))||S.enumerable});return t};var _=t=>O(I({},"__esModule",{value:!0}),t);var H={};L(H,{SignInProvider:()=>N,useSignInContext:()=>D,useTernSecure:()=>u.useTernSecure});module.exports=_(H);var P=require("react/jsx-runtime"),U=require("@tern-secure/auth"),u=require("@tern-secure/shared/react"),n=require("react");const x=(0,n.createContext)({handleSignInSuccess:()=>{},handleSignInError:()=>{},redirectAfterSignIn:()=>{},SignInUrl:"",SignUpUrl:"",checkRedirectResult:async()=>{}}),D=()=>(0,n.useContext)(x);function N({children:t,onSuccess:e,forceRedirectUrl:s,signInForceRedirectUrl:S,signUpForceRedirectUrl:o,...C}){const c=(0,u.useTernSecure)(),R=c._internal_getAllOptions(),h=(0,n.useMemo)(()=>typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams,[]),p=(0,n.useCallback)((r,i,v="AuthError",k)=>{const d=new Error(r);return d.name=v,d.code=i,d.response=k,d},[]),g=(0,n.useCallback)(()=>{c.redirectAfterSignIn()},[c]),l=(0,n.useCallback)((r,i)=>{e?.(r||null),i?.skipRedirect||g()},[e,g]),a=(0,n.useCallback)(r=>{console.error(r)},[]),f=(0,n.useCallback)(async()=>{try{const r=await c.getRedirectResult();if(r&&r.success)l(r.user);else if(r&&!r.success){const i=p(r.message||"Redirect sign-in failed",r.error||"REDIRECT_FAILED","RedirectError",r);a(i)}}catch(r){const i=p(r instanceof Error?r.message:"Failed to check redirect result","REDIRECT_CHECK_FAILED","RedirectError",r);a(i)}},[c,l,a,p]),A=C.path||R.signInUrl,T=R.signUpUrl,E=(0,U.buildURL)({base:A,searchParams:h},{stringify:!0,skipOrigin:!1}),m=(0,U.buildURL)({base:T,searchParams:h},{stringify:!0,skipOrigin:!1}),y=(0,n.useMemo)(()=>({handleSignInSuccess:l,handleSignInError:a,redirectAfterSignIn:g,checkRedirectResult:f,SignInUrl:E,SignUpUrl:m,onSuccess:e}),[l,a,g,f,E,m,e]);return(0,P.jsx)(x.Provider,{value:y,children:t})}0&&(module.exports={SignInProvider,useSignInContext,useTernSecure});
2
+ //# sourceMappingURL=SignInCtx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ctx/SignInCtx.tsx"],"sourcesContent":["'use client';\n\nimport type {\n AuthErrorTree,\n SignInProps,\n SignInRedirectUrl,\n SignUpRedirectUrl,\n TernSecureUser,\n} from '@tern-secure/auth';\nimport { buildURL } from '@tern-secure/auth';\nimport { useTernSecure } from '@tern-secure/shared/react';\nimport type { ReactNode } from 'react';\nimport { createContext, useCallback, useContext, useMemo } from 'react';\n\nexport type SignInCtx = SignInProps & SignInRedirectUrl & SignUpRedirectUrl;\n\ninterface SignInContextType extends Omit<SignInCtx, 'forceRedirectUrl' | 'signInForceRedirectUrl'> {\n handleSignInSuccess: (user?: TernSecureUser | null, options?: { skipRedirect?: boolean }) => void;\n handleSignInError: (error: AuthErrorTree) => void;\n redirectAfterSignIn: () => void;\n SignInUrl: string;\n SignUpUrl: string;\n checkRedirectResult: () => Promise<void>;\n}\n\nconst SignInContext = createContext<SignInContextType>({\n handleSignInSuccess: () => {},\n handleSignInError: () => {},\n redirectAfterSignIn: () => {},\n SignInUrl: '',\n SignUpUrl: '',\n checkRedirectResult: async () => {},\n});\n\nexport const useSignInContext = () => useContext(SignInContext);\n\ninterface SignInProviderProps extends Partial<SignInCtx> {\n children: ReactNode;\n}\n\nexport function SignInProvider({\n children,\n onSuccess,\n forceRedirectUrl,\n signInForceRedirectUrl,\n signUpForceRedirectUrl,\n ...ctxProps\n}: SignInProviderProps) {\n const ternSecure = useTernSecure();\n const ternSecureOptions = ternSecure._internal_getAllOptions();\n const currentParams = useMemo(() => {\n if (typeof window !== 'undefined') {\n return new URLSearchParams(window.location.search);\n }\n return new URLSearchParams();\n }, []);\n\n const createAuthError = useCallback(\n (message: string, code: string, name: string = 'AuthError', response?: any): AuthErrorTree => {\n const authError = new Error(message) as AuthErrorTree;\n authError.name = name;\n authError.code = code;\n authError.response = response;\n return authError;\n },\n [],\n );\n\n const redirectAfterSignIn = useCallback(() => {\n ternSecure.redirectAfterSignIn();\n }, [ternSecure]);\n\n const handleSignInSuccess = useCallback(\n (user?: TernSecureUser | null, options?: { skipRedirect?: boolean }) => {\n onSuccess?.(user || null);\n if (!options?.skipRedirect) {\n redirectAfterSignIn();\n }\n },\n [onSuccess, redirectAfterSignIn],\n );\n\n const handleSignInError = useCallback((authError: AuthErrorTree) => {\n console.error(authError);\n }, []);\n\n const checkRedirectResult = useCallback(async (): Promise<void> => {\n try {\n const result = await ternSecure.getRedirectResult();\n if (result && result.success) {\n handleSignInSuccess(result.user);\n } else if (result && !result.success) {\n const authError = createAuthError(\n result.message || 'Redirect sign-in failed',\n result.error || 'REDIRECT_FAILED',\n 'RedirectError',\n result,\n );\n handleSignInError(authError);\n }\n } catch (error) {\n const authError = createAuthError(\n error instanceof Error ? error.message : 'Failed to check redirect result',\n 'REDIRECT_CHECK_FAILED',\n 'RedirectError',\n error,\n );\n handleSignInError(authError);\n }\n }, [ternSecure, handleSignInSuccess, handleSignInError, createAuthError]);\n\n const baseSignInUrl = ctxProps.path || ternSecureOptions.signInUrl;\n const baseSignUpUrl = ternSecureOptions.signUpUrl;\n\n const SignInUrl = buildURL(\n {\n base: baseSignInUrl,\n searchParams: currentParams,\n },\n { stringify: true, skipOrigin: false },\n ) as string;\n\n const SignUpUrl = buildURL(\n {\n base: baseSignUpUrl,\n searchParams: currentParams,\n },\n { stringify: true, skipOrigin: false },\n ) as string;\n\n const contextValue: SignInContextType = useMemo(\n () => ({\n handleSignInSuccess,\n handleSignInError,\n redirectAfterSignIn,\n checkRedirectResult,\n SignInUrl,\n SignUpUrl,\n onSuccess,\n }),\n [\n handleSignInSuccess,\n handleSignInError,\n redirectAfterSignIn,\n checkRedirectResult,\n SignInUrl,\n SignUpUrl,\n onSuccess,\n ],\n );\n\n return <SignInContext.Provider value={contextValue}>{children}</SignInContext.Provider>;\n}\n\nexport { useTernSecure }"],"mappings":"sbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,EAAA,qBAAAC,EAAA,mDAAAC,EAAAJ,GAuJS,IAAAK,EAAA,6BA9ITC,EAAyB,6BACzBC,EAA8B,qCAE9BA,EAAgE,iBAahE,MAAMC,KAAgB,iBAAiC,CACrD,oBAAqB,IAAM,CAAC,EAC5B,kBAAmB,IAAM,CAAC,EAC1B,oBAAqB,IAAM,CAAC,EAC5B,UAAW,GACX,UAAW,GACX,oBAAqB,SAAY,CAAC,CACpC,CAAC,EAEYL,EAAmB,OAAM,cAAWK,CAAa,EAMvD,SAASN,EAAe,CAC7B,SAAAO,EACA,UAAAC,EACA,iBAAAC,EACA,uBAAAC,EACA,uBAAAC,EACA,GAAGC,CACL,EAAwB,CACtB,MAAMC,KAAa,iBAAc,EAC3BC,EAAoBD,EAAW,wBAAwB,EACvDE,KAAgB,WAAQ,IACxB,OAAO,OAAW,IACb,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAE5C,IAAI,gBACV,CAAC,CAAC,EAECC,KAAkB,eACtB,CAACC,EAAiBC,EAAcC,EAAe,YAAaC,IAAkC,CAC5F,MAAMC,EAAY,IAAI,MAAMJ,CAAO,EACnC,OAAAI,EAAU,KAAOF,EACjBE,EAAU,KAAOH,EACjBG,EAAU,SAAWD,EACdC,CACT,EACA,CAAC,CACH,EAEMC,KAAsB,eAAY,IAAM,CAC5CT,EAAW,oBAAoB,CACjC,EAAG,CAACA,CAAU,CAAC,EAETU,KAAsB,eAC1B,CAACC,EAA8BC,IAAyC,CACtEjB,IAAYgB,GAAQ,IAAI,EACnBC,GAAS,cACZH,EAAoB,CAExB,EACA,CAACd,EAAWc,CAAmB,CACjC,EAEMI,KAAoB,eAAaL,GAA6B,CAClE,QAAQ,MAAMA,CAAS,CACzB,EAAG,CAAC,CAAC,EAECM,KAAsB,eAAY,SAA2B,CACjE,GAAI,CACF,MAAMC,EAAS,MAAMf,EAAW,kBAAkB,EAClD,GAAIe,GAAUA,EAAO,QACnBL,EAAoBK,EAAO,IAAI,UACtBA,GAAU,CAACA,EAAO,QAAS,CACpC,MAAMP,EAAYL,EAChBY,EAAO,SAAW,0BAClBA,EAAO,OAAS,kBAChB,gBACAA,CACF,EACAF,EAAkBL,CAAS,CAC7B,CACF,OAASQ,EAAO,CACd,MAAMR,EAAYL,EAChBa,aAAiB,MAAQA,EAAM,QAAU,kCACzC,wBACA,gBACAA,CACF,EACAH,EAAkBL,CAAS,CAC7B,CACF,EAAG,CAACR,EAAYU,EAAqBG,EAAmBV,CAAe,CAAC,EAElEc,EAAgBlB,EAAS,MAAQE,EAAkB,UACnDiB,EAAgBjB,EAAkB,UAElCkB,KAAY,YAChB,CACE,KAAMF,EACN,aAAcf,CAChB,EACA,CAAE,UAAW,GAAM,WAAY,EAAM,CACvC,EAEMkB,KAAY,YAChB,CACE,KAAMF,EACN,aAAchB,CAChB,EACA,CAAE,UAAW,GAAM,WAAY,EAAM,CACvC,EAEMmB,KAAkC,WACtC,KAAO,CACL,oBAAAX,EACA,kBAAAG,EACA,oBAAAJ,EACA,oBAAAK,EACA,UAAAK,EACA,UAAAC,EACA,UAAAzB,CACF,GACA,CACEe,EACAG,EACAJ,EACAK,EACAK,EACAC,EACAzB,CACF,CACF,EAEA,SAAO,OAACF,EAAc,SAAd,CAAuB,MAAO4B,EAAe,SAAA3B,EAAS,CAChE","names":["SignInCtx_exports","__export","SignInProvider","useSignInContext","__toCommonJS","import_jsx_runtime","import_auth","import_react","SignInContext","children","onSuccess","forceRedirectUrl","signInForceRedirectUrl","signUpForceRedirectUrl","ctxProps","ternSecure","ternSecureOptions","currentParams","createAuthError","message","code","name","response","authError","redirectAfterSignIn","handleSignInSuccess","user","options","handleSignInError","checkRedirectResult","result","error","baseSignInUrl","baseSignUpUrl","SignInUrl","SignUpUrl","contextValue"]}
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as v}from"react/jsx-runtime";import{buildURL as I}from"@tern-secure/auth";import{useTernSecure as U}from"@tern-secure/shared/react";import{createContext as T,useCallback as i,useContext as y,useMemo as R}from"react";const h=T({handleSignInSuccess:()=>{},handleSignInError:()=>{},redirectAfterSignIn:()=>{},SignInUrl:"",SignUpUrl:"",checkRedirectResult:async()=>{}}),_=()=>y(h);function D({children:f,onSuccess:o,forceRedirectUrl:k,signInForceRedirectUrl:b,signUpForceRedirectUrl:w,...E}){const n=U(),l=n._internal_getAllOptions(),d=R(()=>typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams,[]),g=i((r,e,C="AuthError",A)=>{const a=new Error(r);return a.name=C,a.code=e,a.response=A,a},[]),s=i(()=>{n.redirectAfterSignIn()},[n]),c=i((r,e)=>{o?.(r||null),e?.skipRedirect||s()},[o,s]),t=i(r=>{console.error(r)},[]),u=i(async()=>{try{const r=await n.getRedirectResult();if(r&&r.success)c(r.user);else if(r&&!r.success){const e=g(r.message||"Redirect sign-in failed",r.error||"REDIRECT_FAILED","RedirectError",r);t(e)}}catch(r){const e=g(r instanceof Error?r.message:"Failed to check redirect result","REDIRECT_CHECK_FAILED","RedirectError",r);t(e)}},[n,c,t,g]),m=E.path||l.signInUrl,x=l.signUpUrl,S=I({base:m,searchParams:d},{stringify:!0,skipOrigin:!1}),p=I({base:x,searchParams:d},{stringify:!0,skipOrigin:!1}),P=R(()=>({handleSignInSuccess:c,handleSignInError:t,redirectAfterSignIn:s,checkRedirectResult:u,SignInUrl:S,SignUpUrl:p,onSuccess:o}),[c,t,s,u,S,p,o]);return v(h.Provider,{value:P,children:f})}export{D as SignInProvider,_ as useSignInContext,U as useTernSecure};
2
+ //# sourceMappingURL=SignInCtx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ctx/SignInCtx.tsx"],"sourcesContent":["'use client';\n\nimport type {\n AuthErrorTree,\n SignInProps,\n SignInRedirectUrl,\n SignUpRedirectUrl,\n TernSecureUser,\n} from '@tern-secure/auth';\nimport { buildURL } from '@tern-secure/auth';\nimport { useTernSecure } from '@tern-secure/shared/react';\nimport type { ReactNode } from 'react';\nimport { createContext, useCallback, useContext, useMemo } from 'react';\n\nexport type SignInCtx = SignInProps & SignInRedirectUrl & SignUpRedirectUrl;\n\ninterface SignInContextType extends Omit<SignInCtx, 'forceRedirectUrl' | 'signInForceRedirectUrl'> {\n handleSignInSuccess: (user?: TernSecureUser | null, options?: { skipRedirect?: boolean }) => void;\n handleSignInError: (error: AuthErrorTree) => void;\n redirectAfterSignIn: () => void;\n SignInUrl: string;\n SignUpUrl: string;\n checkRedirectResult: () => Promise<void>;\n}\n\nconst SignInContext = createContext<SignInContextType>({\n handleSignInSuccess: () => {},\n handleSignInError: () => {},\n redirectAfterSignIn: () => {},\n SignInUrl: '',\n SignUpUrl: '',\n checkRedirectResult: async () => {},\n});\n\nexport const useSignInContext = () => useContext(SignInContext);\n\ninterface SignInProviderProps extends Partial<SignInCtx> {\n children: ReactNode;\n}\n\nexport function SignInProvider({\n children,\n onSuccess,\n forceRedirectUrl,\n signInForceRedirectUrl,\n signUpForceRedirectUrl,\n ...ctxProps\n}: SignInProviderProps) {\n const ternSecure = useTernSecure();\n const ternSecureOptions = ternSecure._internal_getAllOptions();\n const currentParams = useMemo(() => {\n if (typeof window !== 'undefined') {\n return new URLSearchParams(window.location.search);\n }\n return new URLSearchParams();\n }, []);\n\n const createAuthError = useCallback(\n (message: string, code: string, name: string = 'AuthError', response?: any): AuthErrorTree => {\n const authError = new Error(message) as AuthErrorTree;\n authError.name = name;\n authError.code = code;\n authError.response = response;\n return authError;\n },\n [],\n );\n\n const redirectAfterSignIn = useCallback(() => {\n ternSecure.redirectAfterSignIn();\n }, [ternSecure]);\n\n const handleSignInSuccess = useCallback(\n (user?: TernSecureUser | null, options?: { skipRedirect?: boolean }) => {\n onSuccess?.(user || null);\n if (!options?.skipRedirect) {\n redirectAfterSignIn();\n }\n },\n [onSuccess, redirectAfterSignIn],\n );\n\n const handleSignInError = useCallback((authError: AuthErrorTree) => {\n console.error(authError);\n }, []);\n\n const checkRedirectResult = useCallback(async (): Promise<void> => {\n try {\n const result = await ternSecure.getRedirectResult();\n if (result && result.success) {\n handleSignInSuccess(result.user);\n } else if (result && !result.success) {\n const authError = createAuthError(\n result.message || 'Redirect sign-in failed',\n result.error || 'REDIRECT_FAILED',\n 'RedirectError',\n result,\n );\n handleSignInError(authError);\n }\n } catch (error) {\n const authError = createAuthError(\n error instanceof Error ? error.message : 'Failed to check redirect result',\n 'REDIRECT_CHECK_FAILED',\n 'RedirectError',\n error,\n );\n handleSignInError(authError);\n }\n }, [ternSecure, handleSignInSuccess, handleSignInError, createAuthError]);\n\n const baseSignInUrl = ctxProps.path || ternSecureOptions.signInUrl;\n const baseSignUpUrl = ternSecureOptions.signUpUrl;\n\n const SignInUrl = buildURL(\n {\n base: baseSignInUrl,\n searchParams: currentParams,\n },\n { stringify: true, skipOrigin: false },\n ) as string;\n\n const SignUpUrl = buildURL(\n {\n base: baseSignUpUrl,\n searchParams: currentParams,\n },\n { stringify: true, skipOrigin: false },\n ) as string;\n\n const contextValue: SignInContextType = useMemo(\n () => ({\n handleSignInSuccess,\n handleSignInError,\n redirectAfterSignIn,\n checkRedirectResult,\n SignInUrl,\n SignUpUrl,\n onSuccess,\n }),\n [\n handleSignInSuccess,\n handleSignInError,\n redirectAfterSignIn,\n checkRedirectResult,\n SignInUrl,\n SignUpUrl,\n onSuccess,\n ],\n );\n\n return <SignInContext.Provider value={contextValue}>{children}</SignInContext.Provider>;\n}\n\nexport { useTernSecure }"],"mappings":"aAuJS,cAAAA,MAAA,oBA9IT,OAAS,YAAAC,MAAgB,oBACzB,OAAS,iBAAAC,MAAqB,4BAE9B,OAAS,iBAAAC,EAAe,eAAAC,EAAa,cAAAC,EAAY,WAAAC,MAAe,QAahE,MAAMC,EAAgBJ,EAAiC,CACrD,oBAAqB,IAAM,CAAC,EAC5B,kBAAmB,IAAM,CAAC,EAC1B,oBAAqB,IAAM,CAAC,EAC5B,UAAW,GACX,UAAW,GACX,oBAAqB,SAAY,CAAC,CACpC,CAAC,EAEYK,EAAmB,IAAMH,EAAWE,CAAa,EAMvD,SAASE,EAAe,CAC7B,SAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,uBAAAC,EACA,uBAAAC,EACA,GAAGC,CACL,EAAwB,CACtB,MAAMC,EAAad,EAAc,EAC3Be,EAAoBD,EAAW,wBAAwB,EACvDE,EAAgBZ,EAAQ,IACxB,OAAO,OAAW,IACb,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAE5C,IAAI,gBACV,CAAC,CAAC,EAECa,EAAkBf,EACtB,CAACgB,EAAiBC,EAAcC,EAAe,YAAaC,IAAkC,CAC5F,MAAMC,EAAY,IAAI,MAAMJ,CAAO,EACnC,OAAAI,EAAU,KAAOF,EACjBE,EAAU,KAAOH,EACjBG,EAAU,SAAWD,EACdC,CACT,EACA,CAAC,CACH,EAEMC,EAAsBrB,EAAY,IAAM,CAC5CY,EAAW,oBAAoB,CACjC,EAAG,CAACA,CAAU,CAAC,EAETU,EAAsBtB,EAC1B,CAACuB,EAA8BC,IAAyC,CACtEjB,IAAYgB,GAAQ,IAAI,EACnBC,GAAS,cACZH,EAAoB,CAExB,EACA,CAACd,EAAWc,CAAmB,CACjC,EAEMI,EAAoBzB,EAAaoB,GAA6B,CAClE,QAAQ,MAAMA,CAAS,CACzB,EAAG,CAAC,CAAC,EAECM,EAAsB1B,EAAY,SAA2B,CACjE,GAAI,CACF,MAAM2B,EAAS,MAAMf,EAAW,kBAAkB,EAClD,GAAIe,GAAUA,EAAO,QACnBL,EAAoBK,EAAO,IAAI,UACtBA,GAAU,CAACA,EAAO,QAAS,CACpC,MAAMP,EAAYL,EAChBY,EAAO,SAAW,0BAClBA,EAAO,OAAS,kBAChB,gBACAA,CACF,EACAF,EAAkBL,CAAS,CAC7B,CACF,OAASQ,EAAO,CACd,MAAMR,EAAYL,EAChBa,aAAiB,MAAQA,EAAM,QAAU,kCACzC,wBACA,gBACAA,CACF,EACAH,EAAkBL,CAAS,CAC7B,CACF,EAAG,CAACR,EAAYU,EAAqBG,EAAmBV,CAAe,CAAC,EAElEc,EAAgBlB,EAAS,MAAQE,EAAkB,UACnDiB,EAAgBjB,EAAkB,UAElCkB,EAAYlC,EAChB,CACE,KAAMgC,EACN,aAAcf,CAChB,EACA,CAAE,UAAW,GAAM,WAAY,EAAM,CACvC,EAEMkB,EAAYnC,EAChB,CACE,KAAMiC,EACN,aAAchB,CAChB,EACA,CAAE,UAAW,GAAM,WAAY,EAAM,CACvC,EAEMmB,EAAkC/B,EACtC,KAAO,CACL,oBAAAoB,EACA,kBAAAG,EACA,oBAAAJ,EACA,oBAAAK,EACA,UAAAK,EACA,UAAAC,EACA,UAAAzB,CACF,GACA,CACEe,EACAG,EACAJ,EACAK,EACAK,EACAC,EACAzB,CACF,CACF,EAEA,OAAOX,EAACO,EAAc,SAAd,CAAuB,MAAO8B,EAAe,SAAA3B,EAAS,CAChE","names":["jsx","buildURL","useTernSecure","createContext","useCallback","useContext","useMemo","SignInContext","useSignInContext","SignInProvider","children","onSuccess","forceRedirectUrl","signInForceRedirectUrl","signUpForceRedirectUrl","ctxProps","ternSecure","ternSecureOptions","currentParams","createAuthError","message","code","name","response","authError","redirectAfterSignIn","handleSignInSuccess","user","options","handleSignInError","checkRedirectResult","result","error","baseSignInUrl","baseSignUpUrl","SignInUrl","SignUpUrl","contextValue"]}
@@ -1,12 +1,12 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { InitialState, TernSecureResources } from '@tern-secure/types';
2
+ import { TernSecureStateExtended, TernSecureResources } from '@tern-secure/types';
3
3
  import React__default from 'react';
4
4
  import { IsoTernSecureAuthOptions } from '../types.mjs';
5
5
 
6
6
  type TernSecureCtxProviderProps = {
7
7
  children: React__default.ReactNode;
8
8
  instanceOptions: IsoTernSecureAuthOptions;
9
- initialState: InitialState | undefined;
9
+ initialState: TernSecureStateExtended | undefined;
10
10
  };
11
11
  type TernSecureCtxProviderState = TernSecureResources;
12
12
  declare function TernSecureCtxProvider(props: TernSecureCtxProviderProps): react_jsx_runtime.JSX.Element;
@@ -1,12 +1,12 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { InitialState, TernSecureResources } from '@tern-secure/types';
2
+ import { TernSecureStateExtended, TernSecureResources } from '@tern-secure/types';
3
3
  import React__default from 'react';
4
4
  import { IsoTernSecureAuthOptions } from '../types.js';
5
5
 
6
6
  type TernSecureCtxProviderProps = {
7
7
  children: React__default.ReactNode;
8
8
  instanceOptions: IsoTernSecureAuthOptions;
9
- initialState: InitialState | undefined;
9
+ initialState: TernSecureStateExtended | undefined;
10
10
  };
11
11
  type TernSecureCtxProviderState = TernSecureResources;
12
12
  declare function TernSecureCtxProvider(props: TernSecureCtxProviderProps): react_jsx_runtime.JSX.Element;
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var y=Object.create;var i=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var L=(t,e)=>{for(var s in e)i(t,s,{get:e[s],enumerable:!0})},l=(t,e,s,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of R(e))!k.call(t,n)&&n!==s&&i(t,n,{get:()=>e[n],enumerable:!(u=O(e,n))||u.enumerable});return t};var g=(t,e,s)=>(s=t!=null?y(E(t)):{},l(e||!t||!t.__esModule?i(s,"default",{value:t,enumerable:!0}):s,t)),w=t=>l(i({},"__esModule",{value:!0}),t);var N={};L(N,{TernSecureCtxProvider:()=>z});module.exports=w(N);var a=require("react/jsx-runtime"),T=require("@tern-secure/shared/derivedAuthState"),r=g(require("react")),c=require("../lib/isoTernSecureAuth"),m=require("./AuthProvider"),f=require("./IsomorphicTernSecureCtx");function z(t){const{children:e,initialState:s,instanceOptions:u}=t,{isoTernSecureAuth:n,instanceStatus:o}=M(u),[A,I]=(0,r.useState)({user:n.user,session:n.currentSession});r.default.useEffect(()=>n.addListener(h=>I({...h})),[]);const P=(0,T.deriveAuthState)(A,s),{token:S,email:d,user:p,userId:v}=P,x=(0,r.useMemo)(()=>({value:{userId:v,token:S,email:d,user:p}}),[v,S,d,p]),C=(0,r.useMemo)(()=>({value:n,instanceStatus:o}),[n,o]);return(0,a.jsx)(f.IsoTernSecureAuthCtx.Provider,{value:C,children:(0,a.jsx)(m.AuthProviderCtx.Provider,{value:x,children:e})})}const M=t=>{const e=(0,r.useMemo)(()=>c.IsoTernSecureAuth.getOrCreateInstance(t),[]),[s,u]=(0,r.useState)(e.status);return(0,r.useEffect)(()=>(e.on("status",u),()=>e.off("status",u)),[e]),(0,r.useEffect)(()=>{const n=e.addListener(o=>{console.warn("[useInitTernSecureAuth] Event received:",o)});return()=>n()},[e]),(0,r.useEffect)(()=>{e.initialize()},[e]),(0,r.useEffect)(()=>()=>{c.IsoTernSecureAuth.clearInstance()},[]),{isoTernSecureAuth:e,instanceStatus:s}};0&&(module.exports={TernSecureCtxProvider});
1
+ "use strict";"use client";var I=Object.create;var o=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var g=(t,e)=>{for(var n in e)o(t,n,{get:e[n],enumerable:!0})},h=(t,e,n,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of O(e))!E.call(t,s)&&s!==n&&o(t,s,{get:()=>e[s],enumerable:!(u=y(e,s))||u.enumerable});return t};var z=(t,e,n)=>(n=t!=null?I(R(t)):{},h(e||!t||!t.__esModule?o(n,"default",{value:t,enumerable:!0}):n,t)),L=t=>h(o({},"__esModule",{value:!0}),t);var b={};g(b,{TernSecureCtxProvider:()=>M});module.exports=L(b);var c=require("react/jsx-runtime"),T=require("@tern-secure/shared/derivedAuthState"),r=z(require("react")),i=require("../lib/isoTernSecureAuth"),m=require("./AuthProvider"),f=require("./IsomorphicTernSecureCtx");function M(t){const{children:e,initialState:n,instanceOptions:u}=t,{isoTernSecureAuth:s,instanceStatus:a}=N(u),[l,x]=(0,r.useState)({user:s.user,session:s.currentSession});r.default.useEffect(()=>s.addListener(v=>x({...v})),[]);const A=(0,T.deriveAuthState)(s.isReady,l,n),{sessionClaims:S,user:d,userId:p}=A,C=(0,r.useMemo)(()=>({value:{userId:p,user:d,sessionClaims:S}}),[p,d,S]),P=(0,r.useMemo)(()=>({value:s,instanceStatus:a}),[s,a]);return(0,c.jsx)(f.IsoTernSecureAuthCtx.Provider,{value:P,children:(0,c.jsx)(m.AuthProviderCtx.Provider,{value:C,children:e})})}const N=t=>{const e=(0,r.useMemo)(()=>i.IsoTernSecureAuth.getOrCreateInstance(t),[]),[n,u]=(0,r.useState)(e.status);return(0,r.useEffect)(()=>(e.on("status",u),()=>e.off("status",u)),[e]),(0,r.useEffect)(()=>{e.initialize()},[e]),(0,r.useEffect)(()=>()=>{i.IsoTernSecureAuth.clearInstance()},[]),{isoTernSecureAuth:e,instanceStatus:n}};0&&(module.exports={TernSecureCtxProvider});
2
2
  //# sourceMappingURL=TernSecureCtxProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ctx/TernSecureCtxProvider.tsx"],"sourcesContent":["'use client';\n\nimport { deriveAuthState } from '@tern-secure/shared/derivedAuthState';\nimport { type InitialState, type TernSecureResources } from '@tern-secure/types';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { IsoTernSecureAuth } from '../lib/isoTernSecureAuth';\nimport type { IsoTernSecureAuthOptions } from '../types';\nimport { AuthProviderCtx } from './AuthProvider';\nimport { IsoTernSecureAuthCtx } from './IsomorphicTernSecureCtx';\n\ntype TernSecureCtxProviderProps = {\n children: React.ReactNode;\n instanceOptions: IsoTernSecureAuthOptions;\n initialState: InitialState | undefined;\n};\n\nexport type TernSecureCtxProviderState = TernSecureResources;\n\nexport function TernSecureCtxProvider(props: TernSecureCtxProviderProps) {\n const { children, initialState, instanceOptions } = props;\n\n const { isoTernSecureAuth: instance, instanceStatus } = useInitTernSecureAuth(instanceOptions);\n\n const [authState, setAuthState] = useState<TernSecureCtxProviderState>({\n user: instance.user,\n session: instance.currentSession,\n });\n\n React.useEffect(() => {\n return instance.addListener(e => setAuthState({ ...e }));\n }, []);\n\n const derivedState = deriveAuthState(authState, initialState);\n const { token, email, user, userId } = derivedState;\n\n const authCtx = useMemo(() => {\n const value = {\n userId: userId,\n token: token,\n email: email,\n user: user,\n };\n return { value };\n }, [userId, token, email, user]);\n\n const ternAuthCtx = useMemo(\n () => ({\n value: instance,\n instanceStatus,\n }),\n [instance, instanceStatus],\n );\n\n return (\n <IsoTernSecureAuthCtx.Provider value={ternAuthCtx}>\n <AuthProviderCtx.Provider value={authCtx}>{children}</AuthProviderCtx.Provider>\n </IsoTernSecureAuthCtx.Provider>\n );\n}\n\nconst useInitTernSecureAuth = (options: IsoTernSecureAuthOptions) => {\n const isoTernSecureAuth = useMemo(() => {\n return IsoTernSecureAuth.getOrCreateInstance(options);\n }, []);\n\n const [instanceStatus, setInstanceStatus] = useState(isoTernSecureAuth.status);\n\n useEffect(() => {\n void isoTernSecureAuth.on('status', setInstanceStatus);\n return () => isoTernSecureAuth.off('status', setInstanceStatus);\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n const un = isoTernSecureAuth.addListener(event => {\n console.warn('[useInitTernSecureAuth] Event received:', event);\n });\n return () => un();\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n isoTernSecureAuth.initialize();\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n return () => {\n IsoTernSecureAuth.clearInstance();\n };\n }, []);\n\n return {\n isoTernSecureAuth,\n instanceStatus,\n };\n};\n"],"mappings":"ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAwDM,IAAAI,EAAA,6BAtDNC,EAAgC,gDAEhCC,EAAoD,oBAEpDC,EAAkC,oCAElCC,EAAgC,0BAChCC,EAAqC,qCAU9B,SAASP,EAAsBQ,EAAmC,CACvE,KAAM,CAAE,SAAAC,EAAU,aAAAC,EAAc,gBAAAC,CAAgB,EAAIH,EAE9C,CAAE,kBAAmBI,EAAU,eAAAC,CAAe,EAAIC,EAAsBH,CAAe,EAEvF,CAACI,EAAWC,CAAY,KAAI,YAAqC,CACrE,KAAMJ,EAAS,KACf,QAASA,EAAS,cACpB,CAAC,EAED,EAAAK,QAAM,UAAU,IACPL,EAAS,YAAYM,GAAKF,EAAa,CAAE,GAAGE,CAAE,CAAC,CAAC,EACtD,CAAC,CAAC,EAEL,MAAMC,KAAe,mBAAgBJ,EAAWL,CAAY,EACtD,CAAE,MAAAU,EAAO,MAAAC,EAAO,KAAAC,EAAM,OAAAC,CAAO,EAAIJ,EAEjCK,KAAU,WAAQ,KAOf,CAAE,MANK,CACZ,OAAQD,EACR,MAAOH,EACP,MAAOC,EACP,KAAMC,CACR,CACe,GACd,CAACC,EAAQH,EAAOC,EAAOC,CAAI,CAAC,EAEzBG,KAAc,WAClB,KAAO,CACL,MAAOb,EACP,eAAAC,CACF,GACA,CAACD,EAAUC,CAAc,CAC3B,EAEA,SACE,OAAC,uBAAqB,SAArB,CAA8B,MAAOY,EACpC,mBAAC,kBAAgB,SAAhB,CAAyB,MAAOD,EAAU,SAAAf,EAAS,EACtD,CAEJ,CAEA,MAAMK,EAAyBY,GAAsC,CACnE,MAAMC,KAAoB,WAAQ,IACzB,oBAAkB,oBAAoBD,CAAO,EACnD,CAAC,CAAC,EAEC,CAACb,EAAgBe,CAAiB,KAAI,YAASD,EAAkB,MAAM,EAE7E,sBAAU,KACHA,EAAkB,GAAG,SAAUC,CAAiB,EAC9C,IAAMD,EAAkB,IAAI,SAAUC,CAAiB,GAC7D,CAACD,CAAiB,CAAC,KAEtB,aAAU,IAAM,CACd,MAAME,EAAKF,EAAkB,YAAYG,GAAS,CAChD,QAAQ,KAAK,0CAA2CA,CAAK,CAC/D,CAAC,EACD,MAAO,IAAMD,EAAG,CAClB,EAAG,CAACF,CAAiB,CAAC,KAEtB,aAAU,IAAM,CACdA,EAAkB,WAAW,CAC/B,EAAG,CAACA,CAAiB,CAAC,KAEtB,aAAU,IACD,IAAM,CACX,oBAAkB,cAAc,CAClC,EACC,CAAC,CAAC,EAEE,CACL,kBAAAA,EACA,eAAAd,CACF,CACF","names":["TernSecureCtxProvider_exports","__export","TernSecureCtxProvider","__toCommonJS","import_jsx_runtime","import_derivedAuthState","import_react","import_isoTernSecureAuth","import_AuthProvider","import_IsomorphicTernSecureCtx","props","children","initialState","instanceOptions","instance","instanceStatus","useInitTernSecureAuth","authState","setAuthState","React","e","derivedState","token","email","user","userId","authCtx","ternAuthCtx","options","isoTernSecureAuth","setInstanceStatus","un","event"]}
1
+ {"version":3,"sources":["../../src/ctx/TernSecureCtxProvider.tsx"],"sourcesContent":["'use client';\n\nimport { deriveAuthState } from '@tern-secure/shared/derivedAuthState';\nimport type { TernSecureResources, TernSecureStateExtended } from '@tern-secure/types';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { IsoTernSecureAuth } from '../lib/isoTernSecureAuth';\nimport type { IsoTernSecureAuthOptions } from '../types';\nimport { AuthProviderCtx } from './AuthProvider';\nimport { IsoTernSecureAuthCtx } from './IsomorphicTernSecureCtx';\n\ntype TernSecureCtxProviderProps = {\n children: React.ReactNode;\n instanceOptions: IsoTernSecureAuthOptions;\n initialState: TernSecureStateExtended | undefined;\n};\n\nexport type TernSecureCtxProviderState = TernSecureResources;\n\nexport function TernSecureCtxProvider(props: TernSecureCtxProviderProps) {\n const { children, initialState, instanceOptions } = props;\n\n const { isoTernSecureAuth: instance, instanceStatus } = useInitTernSecureAuth(instanceOptions);\n\n const [authState, setAuthState] = useState<TernSecureCtxProviderState>({\n user: instance.user,\n session: instance.currentSession,\n });\n\n React.useEffect(() => {\n return instance.addListener(e => setAuthState({ ...e }));\n }, []);\n\n const derivedState = deriveAuthState(instance.isReady, authState, initialState);\n const { sessionClaims, user, userId } = derivedState;\n\n const authCtx = useMemo(() => {\n const value = {\n userId: userId,\n user: user,\n sessionClaims: sessionClaims,\n };\n return { value };\n }, [userId, user, sessionClaims]);\n\n const ternAuthCtx = useMemo(\n () => ({\n value: instance,\n instanceStatus,\n }),\n [instance, instanceStatus],\n );\n\n return (\n <IsoTernSecureAuthCtx.Provider value={ternAuthCtx}>\n <AuthProviderCtx.Provider value={authCtx}>{children}</AuthProviderCtx.Provider>\n </IsoTernSecureAuthCtx.Provider>\n );\n}\n\nconst useInitTernSecureAuth = (options: IsoTernSecureAuthOptions) => {\n const isoTernSecureAuth = useMemo(() => {\n return IsoTernSecureAuth.getOrCreateInstance(options);\n }, []);\n\n const [instanceStatus, setInstanceStatus] = useState(isoTernSecureAuth.status);\n\n useEffect(() => {\n void isoTernSecureAuth.on('status', setInstanceStatus);\n return () => isoTernSecureAuth.off('status', setInstanceStatus);\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n isoTernSecureAuth.initialize();\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n return () => {\n IsoTernSecureAuth.clearInstance();\n };\n }, []);\n\n return {\n isoTernSecureAuth,\n instanceStatus,\n };\n};\n"],"mappings":"ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAuDM,IAAAI,EAAA,6BArDNC,EAAgC,gDAEhCC,EAAoD,oBAEpDC,EAAkC,oCAElCC,EAAgC,0BAChCC,EAAqC,qCAU9B,SAASP,EAAsBQ,EAAmC,CACvE,KAAM,CAAE,SAAAC,EAAU,aAAAC,EAAc,gBAAAC,CAAgB,EAAIH,EAE9C,CAAE,kBAAmBI,EAAU,eAAAC,CAAe,EAAIC,EAAsBH,CAAe,EAEvF,CAACI,EAAWC,CAAY,KAAI,YAAqC,CACrE,KAAMJ,EAAS,KACf,QAASA,EAAS,cACpB,CAAC,EAED,EAAAK,QAAM,UAAU,IACPL,EAAS,YAAYM,GAAKF,EAAa,CAAE,GAAGE,CAAE,CAAC,CAAC,EACtD,CAAC,CAAC,EAEL,MAAMC,KAAe,mBAAgBP,EAAS,QAASG,EAAWL,CAAY,EACxE,CAAE,cAAAU,EAAe,KAAAC,EAAM,OAAAC,CAAO,EAAIH,EAElCI,KAAU,WAAQ,KAMf,CAAE,MALK,CACZ,OAAQD,EACR,KAAMD,EACN,cAAeD,CACjB,CACe,GACd,CAACE,EAAQD,EAAMD,CAAa,CAAC,EAE1BI,KAAc,WAClB,KAAO,CACL,MAAOZ,EACP,eAAAC,CACF,GACA,CAACD,EAAUC,CAAc,CAC3B,EAEA,SACE,OAAC,uBAAqB,SAArB,CAA8B,MAAOW,EACpC,mBAAC,kBAAgB,SAAhB,CAAyB,MAAOD,EAAU,SAAAd,EAAS,EACtD,CAEJ,CAEA,MAAMK,EAAyBW,GAAsC,CACnE,MAAMC,KAAoB,WAAQ,IACzB,oBAAkB,oBAAoBD,CAAO,EACnD,CAAC,CAAC,EAEC,CAACZ,EAAgBc,CAAiB,KAAI,YAASD,EAAkB,MAAM,EAE7E,sBAAU,KACHA,EAAkB,GAAG,SAAUC,CAAiB,EAC9C,IAAMD,EAAkB,IAAI,SAAUC,CAAiB,GAC7D,CAACD,CAAiB,CAAC,KAEtB,aAAU,IAAM,CACdA,EAAkB,WAAW,CAC/B,EAAG,CAACA,CAAiB,CAAC,KAEtB,aAAU,IACD,IAAM,CACX,oBAAkB,cAAc,CAClC,EACC,CAAC,CAAC,EAEE,CACL,kBAAAA,EACA,eAAAb,CACF,CACF","names":["TernSecureCtxProvider_exports","__export","TernSecureCtxProvider","__toCommonJS","import_jsx_runtime","import_derivedAuthState","import_react","import_isoTernSecureAuth","import_AuthProvider","import_IsomorphicTernSecureCtx","props","children","initialState","instanceOptions","instance","instanceStatus","useInitTernSecureAuth","authState","setAuthState","React","e","derivedState","sessionClaims","user","userId","authCtx","ternAuthCtx","options","isoTernSecureAuth","setInstanceStatus"]}
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as l}from"react/jsx-runtime";import{deriveAuthState as P}from"@tern-secure/shared/derivedAuthState";import x,{useEffect as s,useMemo as i,useState as v}from"react";import{IsoTernSecureAuth as h}from"../lib/isoTernSecureAuth";import{AuthProviderCtx as C}from"./AuthProvider";import{IsoTernSecureAuthCtx as y}from"./IsomorphicTernSecureCtx";function z(u){const{children:e,initialState:o,instanceOptions:r}=u,{isoTernSecureAuth:t,instanceStatus:n}=O(r),[T,m]=v({user:t.user,session:t.currentSession});x.useEffect(()=>t.addListener(p=>m({...p})),[]);const f=P(T,o),{token:c,email:a,user:S,userId:d}=f,A=i(()=>({value:{userId:d,token:c,email:a,user:S}}),[d,c,a,S]),I=i(()=>({value:t,instanceStatus:n}),[t,n]);return l(y.Provider,{value:I,children:l(C.Provider,{value:A,children:e})})}const O=u=>{const e=i(()=>h.getOrCreateInstance(u),[]),[o,r]=v(e.status);return s(()=>(e.on("status",r),()=>e.off("status",r)),[e]),s(()=>{const t=e.addListener(n=>{console.warn("[useInitTernSecureAuth] Event received:",n)});return()=>t()},[e]),s(()=>{e.initialize()},[e]),s(()=>()=>{h.clearInstance()},[]),{isoTernSecureAuth:e,instanceStatus:o}};export{z as TernSecureCtxProvider};
1
+ "use client";import{jsx as h}from"react/jsx-runtime";import{deriveAuthState as A}from"@tern-secure/shared/derivedAuthState";import C,{useEffect as u,useMemo as o,useState as p}from"react";import{IsoTernSecureAuth as v}from"../lib/isoTernSecureAuth";import{AuthProviderCtx as P}from"./AuthProvider";import{IsoTernSecureAuthCtx as I}from"./IsomorphicTernSecureCtx";function L(n){const{children:e,initialState:s,instanceOptions:r}=n,{isoTernSecureAuth:t,instanceStatus:i}=y(r),[T,m]=p({user:t.user,session:t.currentSession});C.useEffect(()=>t.addListener(d=>m({...d})),[]);const f=A(t.isReady,T,s),{sessionClaims:c,user:a,userId:S}=f,l=o(()=>({value:{userId:S,user:a,sessionClaims:c}}),[S,a,c]),x=o(()=>({value:t,instanceStatus:i}),[t,i]);return h(I.Provider,{value:x,children:h(P.Provider,{value:l,children:e})})}const y=n=>{const e=o(()=>v.getOrCreateInstance(n),[]),[s,r]=p(e.status);return u(()=>(e.on("status",r),()=>e.off("status",r)),[e]),u(()=>{e.initialize()},[e]),u(()=>()=>{v.clearInstance()},[]),{isoTernSecureAuth:e,instanceStatus:s}};export{L as TernSecureCtxProvider};
2
2
  //# sourceMappingURL=TernSecureCtxProvider.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ctx/TernSecureCtxProvider.tsx"],"sourcesContent":["'use client';\n\nimport { deriveAuthState } from '@tern-secure/shared/derivedAuthState';\nimport { type InitialState, type TernSecureResources } from '@tern-secure/types';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { IsoTernSecureAuth } from '../lib/isoTernSecureAuth';\nimport type { IsoTernSecureAuthOptions } from '../types';\nimport { AuthProviderCtx } from './AuthProvider';\nimport { IsoTernSecureAuthCtx } from './IsomorphicTernSecureCtx';\n\ntype TernSecureCtxProviderProps = {\n children: React.ReactNode;\n instanceOptions: IsoTernSecureAuthOptions;\n initialState: InitialState | undefined;\n};\n\nexport type TernSecureCtxProviderState = TernSecureResources;\n\nexport function TernSecureCtxProvider(props: TernSecureCtxProviderProps) {\n const { children, initialState, instanceOptions } = props;\n\n const { isoTernSecureAuth: instance, instanceStatus } = useInitTernSecureAuth(instanceOptions);\n\n const [authState, setAuthState] = useState<TernSecureCtxProviderState>({\n user: instance.user,\n session: instance.currentSession,\n });\n\n React.useEffect(() => {\n return instance.addListener(e => setAuthState({ ...e }));\n }, []);\n\n const derivedState = deriveAuthState(authState, initialState);\n const { token, email, user, userId } = derivedState;\n\n const authCtx = useMemo(() => {\n const value = {\n userId: userId,\n token: token,\n email: email,\n user: user,\n };\n return { value };\n }, [userId, token, email, user]);\n\n const ternAuthCtx = useMemo(\n () => ({\n value: instance,\n instanceStatus,\n }),\n [instance, instanceStatus],\n );\n\n return (\n <IsoTernSecureAuthCtx.Provider value={ternAuthCtx}>\n <AuthProviderCtx.Provider value={authCtx}>{children}</AuthProviderCtx.Provider>\n </IsoTernSecureAuthCtx.Provider>\n );\n}\n\nconst useInitTernSecureAuth = (options: IsoTernSecureAuthOptions) => {\n const isoTernSecureAuth = useMemo(() => {\n return IsoTernSecureAuth.getOrCreateInstance(options);\n }, []);\n\n const [instanceStatus, setInstanceStatus] = useState(isoTernSecureAuth.status);\n\n useEffect(() => {\n void isoTernSecureAuth.on('status', setInstanceStatus);\n return () => isoTernSecureAuth.off('status', setInstanceStatus);\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n const un = isoTernSecureAuth.addListener(event => {\n console.warn('[useInitTernSecureAuth] Event received:', event);\n });\n return () => un();\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n isoTernSecureAuth.initialize();\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n return () => {\n IsoTernSecureAuth.clearInstance();\n };\n }, []);\n\n return {\n isoTernSecureAuth,\n instanceStatus,\n };\n};\n"],"mappings":"aAwDM,cAAAA,MAAA,oBAtDN,OAAS,mBAAAC,MAAuB,uCAEhC,OAAOC,GAAS,aAAAC,EAAW,WAAAC,EAAS,YAAAC,MAAgB,QAEpD,OAAS,qBAAAC,MAAyB,2BAElC,OAAS,mBAAAC,MAAuB,iBAChC,OAAS,wBAAAC,MAA4B,4BAU9B,SAASC,EAAsBC,EAAmC,CACvE,KAAM,CAAE,SAAAC,EAAU,aAAAC,EAAc,gBAAAC,CAAgB,EAAIH,EAE9C,CAAE,kBAAmBI,EAAU,eAAAC,CAAe,EAAIC,EAAsBH,CAAe,EAEvF,CAACI,EAAWC,CAAY,EAAIb,EAAqC,CACrE,KAAMS,EAAS,KACf,QAASA,EAAS,cACpB,CAAC,EAEDZ,EAAM,UAAU,IACPY,EAAS,YAAYK,GAAKD,EAAa,CAAE,GAAGC,CAAE,CAAC,CAAC,EACtD,CAAC,CAAC,EAEL,MAAMC,EAAenB,EAAgBgB,EAAWL,CAAY,EACtD,CAAE,MAAAS,EAAO,MAAAC,EAAO,KAAAC,EAAM,OAAAC,CAAO,EAAIJ,EAEjCK,EAAUrB,EAAQ,KAOf,CAAE,MANK,CACZ,OAAQoB,EACR,MAAOH,EACP,MAAOC,EACP,KAAMC,CACR,CACe,GACd,CAACC,EAAQH,EAAOC,EAAOC,CAAI,CAAC,EAEzBG,EAActB,EAClB,KAAO,CACL,MAAOU,EACP,eAAAC,CACF,GACA,CAACD,EAAUC,CAAc,CAC3B,EAEA,OACEf,EAACQ,EAAqB,SAArB,CAA8B,MAAOkB,EACpC,SAAA1B,EAACO,EAAgB,SAAhB,CAAyB,MAAOkB,EAAU,SAAAd,EAAS,EACtD,CAEJ,CAEA,MAAMK,EAAyBW,GAAsC,CACnE,MAAMC,EAAoBxB,EAAQ,IACzBE,EAAkB,oBAAoBqB,CAAO,EACnD,CAAC,CAAC,EAEC,CAACZ,EAAgBc,CAAiB,EAAIxB,EAASuB,EAAkB,MAAM,EAE7E,OAAAzB,EAAU,KACHyB,EAAkB,GAAG,SAAUC,CAAiB,EAC9C,IAAMD,EAAkB,IAAI,SAAUC,CAAiB,GAC7D,CAACD,CAAiB,CAAC,EAEtBzB,EAAU,IAAM,CACd,MAAM2B,EAAKF,EAAkB,YAAYG,GAAS,CAChD,QAAQ,KAAK,0CAA2CA,CAAK,CAC/D,CAAC,EACD,MAAO,IAAMD,EAAG,CAClB,EAAG,CAACF,CAAiB,CAAC,EAEtBzB,EAAU,IAAM,CACdyB,EAAkB,WAAW,CAC/B,EAAG,CAACA,CAAiB,CAAC,EAEtBzB,EAAU,IACD,IAAM,CACXG,EAAkB,cAAc,CAClC,EACC,CAAC,CAAC,EAEE,CACL,kBAAAsB,EACA,eAAAb,CACF,CACF","names":["jsx","deriveAuthState","React","useEffect","useMemo","useState","IsoTernSecureAuth","AuthProviderCtx","IsoTernSecureAuthCtx","TernSecureCtxProvider","props","children","initialState","instanceOptions","instance","instanceStatus","useInitTernSecureAuth","authState","setAuthState","e","derivedState","token","email","user","userId","authCtx","ternAuthCtx","options","isoTernSecureAuth","setInstanceStatus","un","event"]}
1
+ {"version":3,"sources":["../../src/ctx/TernSecureCtxProvider.tsx"],"sourcesContent":["'use client';\n\nimport { deriveAuthState } from '@tern-secure/shared/derivedAuthState';\nimport type { TernSecureResources, TernSecureStateExtended } from '@tern-secure/types';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { IsoTernSecureAuth } from '../lib/isoTernSecureAuth';\nimport type { IsoTernSecureAuthOptions } from '../types';\nimport { AuthProviderCtx } from './AuthProvider';\nimport { IsoTernSecureAuthCtx } from './IsomorphicTernSecureCtx';\n\ntype TernSecureCtxProviderProps = {\n children: React.ReactNode;\n instanceOptions: IsoTernSecureAuthOptions;\n initialState: TernSecureStateExtended | undefined;\n};\n\nexport type TernSecureCtxProviderState = TernSecureResources;\n\nexport function TernSecureCtxProvider(props: TernSecureCtxProviderProps) {\n const { children, initialState, instanceOptions } = props;\n\n const { isoTernSecureAuth: instance, instanceStatus } = useInitTernSecureAuth(instanceOptions);\n\n const [authState, setAuthState] = useState<TernSecureCtxProviderState>({\n user: instance.user,\n session: instance.currentSession,\n });\n\n React.useEffect(() => {\n return instance.addListener(e => setAuthState({ ...e }));\n }, []);\n\n const derivedState = deriveAuthState(instance.isReady, authState, initialState);\n const { sessionClaims, user, userId } = derivedState;\n\n const authCtx = useMemo(() => {\n const value = {\n userId: userId,\n user: user,\n sessionClaims: sessionClaims,\n };\n return { value };\n }, [userId, user, sessionClaims]);\n\n const ternAuthCtx = useMemo(\n () => ({\n value: instance,\n instanceStatus,\n }),\n [instance, instanceStatus],\n );\n\n return (\n <IsoTernSecureAuthCtx.Provider value={ternAuthCtx}>\n <AuthProviderCtx.Provider value={authCtx}>{children}</AuthProviderCtx.Provider>\n </IsoTernSecureAuthCtx.Provider>\n );\n}\n\nconst useInitTernSecureAuth = (options: IsoTernSecureAuthOptions) => {\n const isoTernSecureAuth = useMemo(() => {\n return IsoTernSecureAuth.getOrCreateInstance(options);\n }, []);\n\n const [instanceStatus, setInstanceStatus] = useState(isoTernSecureAuth.status);\n\n useEffect(() => {\n void isoTernSecureAuth.on('status', setInstanceStatus);\n return () => isoTernSecureAuth.off('status', setInstanceStatus);\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n isoTernSecureAuth.initialize();\n }, [isoTernSecureAuth]);\n\n useEffect(() => {\n return () => {\n IsoTernSecureAuth.clearInstance();\n };\n }, []);\n\n return {\n isoTernSecureAuth,\n instanceStatus,\n };\n};\n"],"mappings":"aAuDM,cAAAA,MAAA,oBArDN,OAAS,mBAAAC,MAAuB,uCAEhC,OAAOC,GAAS,aAAAC,EAAW,WAAAC,EAAS,YAAAC,MAAgB,QAEpD,OAAS,qBAAAC,MAAyB,2BAElC,OAAS,mBAAAC,MAAuB,iBAChC,OAAS,wBAAAC,MAA4B,4BAU9B,SAASC,EAAsBC,EAAmC,CACvE,KAAM,CAAE,SAAAC,EAAU,aAAAC,EAAc,gBAAAC,CAAgB,EAAIH,EAE9C,CAAE,kBAAmBI,EAAU,eAAAC,CAAe,EAAIC,EAAsBH,CAAe,EAEvF,CAACI,EAAWC,CAAY,EAAIb,EAAqC,CACrE,KAAMS,EAAS,KACf,QAASA,EAAS,cACpB,CAAC,EAEDZ,EAAM,UAAU,IACPY,EAAS,YAAYK,GAAKD,EAAa,CAAE,GAAGC,CAAE,CAAC,CAAC,EACtD,CAAC,CAAC,EAEL,MAAMC,EAAenB,EAAgBa,EAAS,QAASG,EAAWL,CAAY,EACxE,CAAE,cAAAS,EAAe,KAAAC,EAAM,OAAAC,CAAO,EAAIH,EAElCI,EAAUpB,EAAQ,KAMf,CAAE,MALK,CACZ,OAAQmB,EACR,KAAMD,EACN,cAAeD,CACjB,CACe,GACd,CAACE,EAAQD,EAAMD,CAAa,CAAC,EAE1BI,EAAcrB,EAClB,KAAO,CACL,MAAOU,EACP,eAAAC,CACF,GACA,CAACD,EAAUC,CAAc,CAC3B,EAEA,OACEf,EAACQ,EAAqB,SAArB,CAA8B,MAAOiB,EACpC,SAAAzB,EAACO,EAAgB,SAAhB,CAAyB,MAAOiB,EAAU,SAAAb,EAAS,EACtD,CAEJ,CAEA,MAAMK,EAAyBU,GAAsC,CACnE,MAAMC,EAAoBvB,EAAQ,IACzBE,EAAkB,oBAAoBoB,CAAO,EACnD,CAAC,CAAC,EAEC,CAACX,EAAgBa,CAAiB,EAAIvB,EAASsB,EAAkB,MAAM,EAE7E,OAAAxB,EAAU,KACHwB,EAAkB,GAAG,SAAUC,CAAiB,EAC9C,IAAMD,EAAkB,IAAI,SAAUC,CAAiB,GAC7D,CAACD,CAAiB,CAAC,EAEtBxB,EAAU,IAAM,CACdwB,EAAkB,WAAW,CAC/B,EAAG,CAACA,CAAiB,CAAC,EAEtBxB,EAAU,IACD,IAAM,CACXG,EAAkB,cAAc,CAClC,EACC,CAAC,CAAC,EAEE,CACL,kBAAAqB,EACA,eAAAZ,CACF,CACF","names":["jsx","deriveAuthState","React","useEffect","useMemo","useState","IsoTernSecureAuth","AuthProviderCtx","IsoTernSecureAuthCtx","TernSecureCtxProvider","props","children","initialState","instanceOptions","instance","instanceStatus","useInitTernSecureAuth","authState","setAuthState","e","derivedState","sessionClaims","user","userId","authCtx","ternAuthCtx","options","isoTernSecureAuth","setInstanceStatus"]}
@@ -1,5 +1,6 @@
1
1
  import { UseAuthReturn } from '@tern-secure/types';
2
2
 
3
3
  declare const useAuth: () => UseAuthReturn;
4
+ declare function useDeriveAuth(authObject: any): UseAuthReturn;
4
5
 
5
- export { useAuth };
6
+ export { useAuth, useDeriveAuth };
@@ -1,5 +1,6 @@
1
1
  import { UseAuthReturn } from '@tern-secure/types';
2
2
 
3
3
  declare const useAuth: () => UseAuthReturn;
4
+ declare function useDeriveAuth(authObject: any): UseAuthReturn;
4
5
 
5
- export { useAuth };
6
+ export { useAuth, useDeriveAuth };
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var s=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var m=(e,t)=>{for(var r in t)s(e,r,{get:t[r],enumerable:!0})},g=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let u of S(t))!l.call(e,u)&&u!==r&&s(e,u,{get:()=>t[u],enumerable:!(n=A(t,u))||n.enumerable});return e};var O=e=>g(s({},"__esModule",{value:!0}),e);var b={};m(b,{useAuth:()=>I});module.exports=O(b);var a=require("react"),c=require("../ctx/AuthProvider"),d=require("../ctx/IsomorphicTernSecureCtx"),f=require("./useAssertWrappedTernSecureProvider");const p=e=>async t=>{try{t?.onBeforeSignOut&&await t.onBeforeSignOut(),await e.signOut(t),t?.onAfterSignOut&&await t.onAfterSignOut()}catch(r){throw console.error("[useAuth] Sign out failed:",r),r}},I=()=>{(0,f.useAssertWrappedByTernSecureAuthProvider)("useAuth");const e=(0,c.useAuthProviderCtx)(),t=(0,d.useIsoTernSecureAuthCtx)(),r=(0,a.useCallback)(p(t),[t]),n=!!e.user||e.userId!==void 0,u=!!e.userId,i=!!e.user?.emailVerified,o=u&&i,h=y(n,o,i);return{userId:e.userId,email:e.email,token:e.token,user:e.user,isLoaded:n,isValid:u,isVerified:i,isAuthenticated:o,status:h,signOut:r}},y=(e,t,r)=>e?t?r?"authenticated":"unverified":"unauthenticated":"loading";0&&(module.exports={useAuth});
1
+ "use strict";"use client";var d=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var m=(u,e)=>{for(var t in e)d(u,t,{get:e[t],enumerable:!0})},b=(u,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of g(e))!p.call(u,r)&&r!==t&&d(u,r,{get:()=>e[r],enumerable:!(n=O(e,r))||n.enumerable});return u};var v=u=>b(d({},"__esModule",{value:!0}),u);var U={};m(U,{useAuth:()=>T,useDeriveAuth:()=>S});module.exports=v(U);var l=require("react"),f=require("../ctx/AuthProvider"),h=require("../ctx/IsomorphicTernSecureCtx"),A=require("./useAssertWrappedTernSecureProvider");const y=u=>async e=>{try{e?.onBeforeSignOut&&await e.onBeforeSignOut(),await u.signOut(e),e?.onAfterSignOut&&await e.onAfterSignOut()}catch(t){throw console.error("[useAuth] Sign out failed:",t),t}},T=()=>{(0,A.useAssertWrappedByTernSecureAuthProvider)("useAuth");let e=(0,f.useAuthProviderCtx)();e.user===void 0&&(e={...e,user:null});const t=(0,h.useIsoTernSecureAuthCtx)(),n=(0,l.useCallback)(y(t),[t]);return S({...e,signOut:n})};function S(u){const{signOut:e}=u??{},t=V({authObject:{...u,signOut:e}});if(!t)throw new Error("[useDeriveAuth] Unable to derive auth state.");return t}const c=(u,e,t)=>u?e?t?"authenticated":"unverified":"unauthenticated":"loading",V=({authObject:{userId:u,user:e,sessionClaims:t,signOut:n}})=>{if(t){const o=!!t.sub,i=t.email_verified||!1,s=o&&i,a=c(!0,s,i);return{isLoaded:!0,isVerified:i,isAuthenticated:s,isValid:o,user:e||null,userId:t.sub||u||null,sessionClaims:t,status:a,signOut:n}}if(!e)return{isLoaded:!1,isVerified:!1,isAuthenticated:!1,isValid:!1,user:null,userId:null,sessionClaims:null,status:"loading",signOut:n};if(e&&u){const i=e.emailVerified||!1,s=i,a=c(!0,s,i);return{isLoaded:!0,isValid:!0,user:e,userId:u,isAuthenticated:s,isVerified:i,status:a,sessionClaims:t,signOut:n}}};0&&(module.exports={useAuth,useDeriveAuth});
2
2
  //# sourceMappingURL=useAuth.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useAuth.ts"],"sourcesContent":["\"use client\";\r\n\r\nimport type { SignOut, SignOutOptions, UseAuthReturn } from \"@tern-secure/types\";\r\nimport { useCallback } from \"react\";\r\n\r\nimport { useAuthProviderCtx } from \"../ctx/AuthProvider\";\r\nimport { useIsoTernSecureAuthCtx } from \"../ctx/IsomorphicTernSecureCtx\";\r\nimport type { IsoTernSecureAuth } from \"../lib/isoTernSecureAuth\";\r\nimport { useAssertWrappedByTernSecureAuthProvider } from \"./useAssertWrappedTernSecureProvider\";\r\n\r\nconst handleSignOut = (instance: IsoTernSecureAuth) => {\r\n return async (options?: SignOutOptions) => {\r\n try {\r\n if (options?.onBeforeSignOut) {\r\n await options.onBeforeSignOut();\r\n }\r\n\r\n await instance.signOut(options);\r\n\r\n if (options?.onAfterSignOut) {\r\n await options.onAfterSignOut();\r\n }\r\n } catch (error) {\r\n console.error(\"[useAuth] Sign out failed:\", error);\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\nexport const useAuth = (): UseAuthReturn => {\r\n useAssertWrappedByTernSecureAuthProvider(\"useAuth\");\r\n\r\n const ctx = useAuthProviderCtx();\r\n const instance = useIsoTernSecureAuthCtx();\r\n const signOut: SignOut = useCallback(handleSignOut(instance), [instance]);\r\n\r\n const isLoaded = !!ctx.user || ctx.userId !== undefined;\r\n const isValid = !!ctx.userId;\r\n const isVerified = !!ctx.user?.emailVerified;\r\n const isAuthenticated = isValid && isVerified;\r\n const status = deriveAuthStatus(isLoaded, isAuthenticated, isVerified);\r\n\r\n return {\r\n userId: ctx.userId,\r\n email: ctx.email,\r\n token: ctx.token,\r\n user: ctx.user,\r\n isLoaded,\r\n isValid,\r\n isVerified,\r\n isAuthenticated,\r\n status,\r\n signOut,\r\n };\r\n};\r\n\r\nconst deriveAuthStatus = (\r\n isLoaded: boolean,\r\n isAuthenticated: boolean,\r\n isVerified: boolean\r\n): UseAuthReturn[\"status\"] => {\r\n if (!isLoaded) return \"loading\";\r\n if (!isAuthenticated) return \"unauthenticated\";\r\n if (!isVerified) return \"unverified\";\r\n return \"authenticated\";\r\n};\r\n"],"mappings":"sbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAGA,IAAAI,EAA4B,iBAE5BC,EAAmC,+BACnCC,EAAwC,0CAExCC,EAAyD,gDAEzD,MAAMC,EAAiBC,GACd,MAAOC,GAA6B,CACzC,GAAI,CACEA,GAAS,iBACX,MAAMA,EAAQ,gBAAgB,EAGhC,MAAMD,EAAS,QAAQC,CAAO,EAE1BA,GAAS,gBACX,MAAMA,EAAQ,eAAe,CAEjC,OAASC,EAAO,CACd,cAAQ,MAAM,6BAA8BA,CAAK,EAC3CA,CACR,CACF,EAGWT,EAAU,IAAqB,IAC1C,4CAAyC,SAAS,EAElD,MAAMU,KAAM,sBAAmB,EACzBH,KAAW,2BAAwB,EACnCI,KAAmB,eAAYL,EAAcC,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAElEK,EAAW,CAAC,CAACF,EAAI,MAAQA,EAAI,SAAW,OACxCG,EAAU,CAAC,CAACH,EAAI,OAChBI,EAAa,CAAC,CAACJ,EAAI,MAAM,cACzBK,EAAkBF,GAAWC,EAC7BE,EAASC,EAAiBL,EAAUG,EAAiBD,CAAU,EAErE,MAAO,CACL,OAAQJ,EAAI,OACZ,MAAOA,EAAI,MACX,MAAOA,EAAI,MACX,KAAMA,EAAI,KACV,SAAAE,EACA,QAAAC,EACA,WAAAC,EACA,gBAAAC,EACA,OAAAC,EACA,QAAAL,CACF,CACF,EAEMM,EAAmB,CACvBL,EACAG,EACAD,IAEKF,EACAG,EACAD,EACE,gBADiB,aADK,kBADP","names":["useAuth_exports","__export","useAuth","__toCommonJS","import_react","import_AuthProvider","import_IsomorphicTernSecureCtx","import_useAssertWrappedTernSecureProvider","handleSignOut","instance","options","error","ctx","signOut","isLoaded","isValid","isVerified","isAuthenticated","status","deriveAuthStatus"]}
1
+ {"version":3,"sources":["../../src/hooks/useAuth.ts"],"sourcesContent":["'use client';\r\n\r\nimport type {\r\n DecodedIdToken,\r\n SignOut,\r\n SignOutOptions,\r\n TernSecureUser,\r\n UseAuthReturn,\r\n} from '@tern-secure/types';\r\nimport { useCallback } from 'react';\r\n\r\nimport { useAuthProviderCtx } from '../ctx/AuthProvider';\r\nimport { useIsoTernSecureAuthCtx } from '../ctx/IsomorphicTernSecureCtx';\r\nimport type { IsoTernSecureAuth } from '../lib/isoTernSecureAuth';\r\nimport { useAssertWrappedByTernSecureAuthProvider } from './useAssertWrappedTernSecureProvider';\r\n\r\n\r\nconst handleSignOut = (instance: IsoTernSecureAuth) => {\r\n return async (options?: SignOutOptions) => {\r\n try {\r\n if (options?.onBeforeSignOut) {\r\n await options.onBeforeSignOut();\r\n }\r\n\r\n await instance.signOut(options);\r\n\r\n if (options?.onAfterSignOut) {\r\n await options.onAfterSignOut();\r\n }\r\n } catch (error) {\r\n console.error('[useAuth] Sign out failed:', error);\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\nexport const useAuth = (): UseAuthReturn => {\r\n useAssertWrappedByTernSecureAuthProvider('useAuth');\r\n\r\n const ctx = useAuthProviderCtx();\r\n let authCtx = ctx;\r\n\r\n if (authCtx.user === undefined) {\r\n authCtx = { ...authCtx, user: null };\r\n }\r\n\r\n const instance = useIsoTernSecureAuthCtx();\r\n const signOut: SignOut = useCallback(handleSignOut(instance), [instance]);\r\n\r\n return useDeriveAuth({ ...authCtx, signOut });\r\n};\r\n\r\nexport function useDeriveAuth(authObject: any): UseAuthReturn {\r\n const { signOut } = authObject ?? {};\r\n const payload = resolvedAuthState({ authObject: { ...authObject, signOut } });\r\n\r\n if (!payload) {\r\n throw new Error('[useDeriveAuth] Unable to derive auth state.');\r\n }\r\n return payload;\r\n}\r\n\r\nconst deriveAuthStatus = (\r\n isLoaded: boolean,\r\n isAuthenticated: boolean,\r\n isVerified: boolean,\r\n): UseAuthReturn['status'] => {\r\n if (!isLoaded) return 'loading';\r\n if (!isAuthenticated) return 'unauthenticated';\r\n if (!isVerified) return 'unverified';\r\n return 'authenticated';\r\n};\r\n\r\ntype AuthStateOptions = {\r\n authObject: {\r\n userId?: string | null;\r\n user?: TernSecureUser | null;\r\n sessionClaims?: DecodedIdToken | null;\r\n signOut: SignOut;\r\n };\r\n};\r\n\r\nconst resolvedAuthState = ({\r\n authObject: { userId, user, sessionClaims, signOut },\r\n}: AuthStateOptions): UseAuthReturn | undefined => {\r\n if (sessionClaims) {\r\n const isLoaded = true;\r\n const isValid = !!sessionClaims.sub;\r\n const isVerified = sessionClaims.email_verified || false;\r\n const isAuthenticated = isValid && isVerified;\r\n const status = deriveAuthStatus(isLoaded, isAuthenticated, isVerified);\r\n\r\n return {\r\n isLoaded,\r\n isVerified,\r\n isAuthenticated,\r\n isValid,\r\n user: user || null,\r\n userId: sessionClaims.sub || userId || null,\r\n sessionClaims,\r\n status,\r\n signOut,\r\n } as const;\r\n }\r\n if (!user) {\r\n return {\r\n isLoaded: false,\r\n isVerified: false,\r\n isAuthenticated: false,\r\n isValid: false,\r\n user: null,\r\n userId: null,\r\n sessionClaims: null,\r\n status: 'loading',\r\n signOut,\r\n } as const;\r\n }\r\n\r\n if (user && userId) {\r\n const isLoaded = true;\r\n const isValid = true;\r\n const isVerified = user.emailVerified || false;\r\n const isAuthenticated = isValid && isVerified;\r\n const status = deriveAuthStatus(isLoaded, isAuthenticated, isVerified);\r\n return {\r\n isLoaded,\r\n isValid,\r\n user,\r\n userId,\r\n isAuthenticated,\r\n isVerified,\r\n status,\r\n sessionClaims,\r\n signOut,\r\n } as const;\r\n }\r\n};\r\n"],"mappings":"sbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,kBAAAC,IAAA,eAAAC,EAAAJ,GASA,IAAAK,EAA4B,iBAE5BC,EAAmC,+BACnCC,EAAwC,0CAExCC,EAAyD,gDAGzD,MAAMC,EAAiBC,GACd,MAAOC,GAA6B,CACzC,GAAI,CACEA,GAAS,iBACX,MAAMA,EAAQ,gBAAgB,EAGhC,MAAMD,EAAS,QAAQC,CAAO,EAE1BA,GAAS,gBACX,MAAMA,EAAQ,eAAe,CAEjC,OAASC,EAAO,CACd,cAAQ,MAAM,6BAA8BA,CAAK,EAC3CA,CACR,CACF,EAGWV,EAAU,IAAqB,IAC1C,4CAAyC,SAAS,EAGlD,IAAIW,KADQ,sBAAmB,EAG3BA,EAAQ,OAAS,SACnBA,EAAU,CAAE,GAAGA,EAAS,KAAM,IAAK,GAGrC,MAAMH,KAAW,2BAAwB,EACnCI,KAAmB,eAAYL,EAAcC,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAExE,OAAOP,EAAc,CAAE,GAAGU,EAAS,QAAAC,CAAQ,CAAC,CAC9C,EAEO,SAASX,EAAcY,EAAgC,CAC5D,KAAM,CAAE,QAAAD,CAAQ,EAAIC,GAAc,CAAC,EAC7BC,EAAUC,EAAkB,CAAE,WAAY,CAAE,GAAGF,EAAY,QAAAD,CAAQ,CAAE,CAAC,EAE5E,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,8CAA8C,EAEhE,OAAOA,CACT,CAEA,MAAME,EAAmB,CACvBC,EACAC,EACAC,IAEKF,EACAC,EACAC,EACE,gBADiB,aADK,kBADP,UAelBJ,EAAoB,CAAC,CACzB,WAAY,CAAE,OAAAK,EAAQ,KAAAC,EAAM,cAAAC,EAAe,QAAAV,CAAQ,CACrD,IAAmD,CACjD,GAAIU,EAAe,CAEjB,MAAMC,EAAU,CAAC,CAACD,EAAc,IAC1BH,EAAaG,EAAc,gBAAkB,GAC7CJ,EAAkBK,GAAWJ,EAC7BK,EAASR,EAAiB,GAAUE,EAAiBC,CAAU,EAErE,MAAO,CACL,YACA,WAAAA,EACA,gBAAAD,EACA,QAAAK,EACA,KAAMF,GAAQ,KACd,OAAQC,EAAc,KAAOF,GAAU,KACvC,cAAAE,EACA,OAAAE,EACA,QAAAZ,CACF,CACF,CACA,GAAI,CAACS,EACH,MAAO,CACL,SAAU,GACV,WAAY,GACZ,gBAAiB,GACjB,QAAS,GACT,KAAM,KACN,OAAQ,KACR,cAAe,KACf,OAAQ,UACR,QAAAT,CACF,EAGF,GAAIS,GAAQD,EAAQ,CAGlB,MAAMD,EAAaE,EAAK,eAAiB,GACnCH,EAA6BC,EAC7BK,EAASR,EAAiB,GAAUE,EAAiBC,CAAU,EACrE,MAAO,CACL,YACA,WACA,KAAAE,EACA,OAAAD,EACA,gBAAAF,EACA,WAAAC,EACA,OAAAK,EACA,cAAAF,EACA,QAAAV,CACF,CACF,CACF","names":["useAuth_exports","__export","useAuth","useDeriveAuth","__toCommonJS","import_react","import_AuthProvider","import_IsomorphicTernSecureCtx","import_useAssertWrappedTernSecureProvider","handleSignOut","instance","options","error","authCtx","signOut","authObject","payload","resolvedAuthState","deriveAuthStatus","isLoaded","isAuthenticated","isVerified","userId","user","sessionClaims","isValid","status"]}
@@ -1,2 +1,2 @@
1
- "use client";import{useCallback as a}from"react";import{useAuthProviderCtx as c}from"../ctx/AuthProvider";import{useIsoTernSecureAuthCtx as d}from"../ctx/IsomorphicTernSecureCtx";import{useAssertWrappedByTernSecureAuthProvider as f}from"./useAssertWrappedTernSecureProvider";const h=e=>async t=>{try{t?.onBeforeSignOut&&await t.onBeforeSignOut(),await e.signOut(t),t?.onAfterSignOut&&await t.onAfterSignOut()}catch(r){throw console.error("[useAuth] Sign out failed:",r),r}},O=()=>{f("useAuth");const e=c(),t=d(),r=a(h(t),[t]),n=!!e.user||e.userId!==void 0,i=!!e.userId,u=!!e.user?.emailVerified,s=i&&u,o=A(n,s,u);return{userId:e.userId,email:e.email,token:e.token,user:e.user,isLoaded:n,isValid:i,isVerified:u,isAuthenticated:s,status:o,signOut:r}},A=(e,t,r)=>e?t?r?"authenticated":"unverified":"unauthenticated":"loading";export{O as useAuth};
1
+ "use client";import{useCallback as c}from"react";import{useAuthProviderCtx as l}from"../ctx/AuthProvider";import{useIsoTernSecureAuthCtx as f}from"../ctx/IsomorphicTernSecureCtx";import{useAssertWrappedByTernSecureAuthProvider as h}from"./useAssertWrappedTernSecureProvider";const A=u=>async e=>{try{e?.onBeforeSignOut&&await e.onBeforeSignOut(),await u.signOut(e),e?.onAfterSignOut&&await e.onAfterSignOut()}catch(t){throw console.error("[useAuth] Sign out failed:",t),t}},v=()=>{h("useAuth");let e=l();e.user===void 0&&(e={...e,user:null});const t=f(),r=c(A(t),[t]);return S({...e,signOut:r})};function S(u){const{signOut:e}=u??{},t=O({authObject:{...u,signOut:e}});if(!t)throw new Error("[useDeriveAuth] Unable to derive auth state.");return t}const a=(u,e,t)=>u?e?t?"authenticated":"unverified":"unauthenticated":"loading",O=({authObject:{userId:u,user:e,sessionClaims:t,signOut:r}})=>{if(t){const s=!!t.sub,n=t.email_verified||!1,i=s&&n,o=a(!0,i,n);return{isLoaded:!0,isVerified:n,isAuthenticated:i,isValid:s,user:e||null,userId:t.sub||u||null,sessionClaims:t,status:o,signOut:r}}if(!e)return{isLoaded:!1,isVerified:!1,isAuthenticated:!1,isValid:!1,user:null,userId:null,sessionClaims:null,status:"loading",signOut:r};if(e&&u){const n=e.emailVerified||!1,i=n,o=a(!0,i,n);return{isLoaded:!0,isValid:!0,user:e,userId:u,isAuthenticated:i,isVerified:n,status:o,sessionClaims:t,signOut:r}}};export{v as useAuth,S as useDeriveAuth};
2
2
  //# sourceMappingURL=useAuth.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useAuth.ts"],"sourcesContent":["\"use client\";\r\n\r\nimport type { SignOut, SignOutOptions, UseAuthReturn } from \"@tern-secure/types\";\r\nimport { useCallback } from \"react\";\r\n\r\nimport { useAuthProviderCtx } from \"../ctx/AuthProvider\";\r\nimport { useIsoTernSecureAuthCtx } from \"../ctx/IsomorphicTernSecureCtx\";\r\nimport type { IsoTernSecureAuth } from \"../lib/isoTernSecureAuth\";\r\nimport { useAssertWrappedByTernSecureAuthProvider } from \"./useAssertWrappedTernSecureProvider\";\r\n\r\nconst handleSignOut = (instance: IsoTernSecureAuth) => {\r\n return async (options?: SignOutOptions) => {\r\n try {\r\n if (options?.onBeforeSignOut) {\r\n await options.onBeforeSignOut();\r\n }\r\n\r\n await instance.signOut(options);\r\n\r\n if (options?.onAfterSignOut) {\r\n await options.onAfterSignOut();\r\n }\r\n } catch (error) {\r\n console.error(\"[useAuth] Sign out failed:\", error);\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\nexport const useAuth = (): UseAuthReturn => {\r\n useAssertWrappedByTernSecureAuthProvider(\"useAuth\");\r\n\r\n const ctx = useAuthProviderCtx();\r\n const instance = useIsoTernSecureAuthCtx();\r\n const signOut: SignOut = useCallback(handleSignOut(instance), [instance]);\r\n\r\n const isLoaded = !!ctx.user || ctx.userId !== undefined;\r\n const isValid = !!ctx.userId;\r\n const isVerified = !!ctx.user?.emailVerified;\r\n const isAuthenticated = isValid && isVerified;\r\n const status = deriveAuthStatus(isLoaded, isAuthenticated, isVerified);\r\n\r\n return {\r\n userId: ctx.userId,\r\n email: ctx.email,\r\n token: ctx.token,\r\n user: ctx.user,\r\n isLoaded,\r\n isValid,\r\n isVerified,\r\n isAuthenticated,\r\n status,\r\n signOut,\r\n };\r\n};\r\n\r\nconst deriveAuthStatus = (\r\n isLoaded: boolean,\r\n isAuthenticated: boolean,\r\n isVerified: boolean\r\n): UseAuthReturn[\"status\"] => {\r\n if (!isLoaded) return \"loading\";\r\n if (!isAuthenticated) return \"unauthenticated\";\r\n if (!isVerified) return \"unverified\";\r\n return \"authenticated\";\r\n};\r\n"],"mappings":"aAGA,OAAS,eAAAA,MAAmB,QAE5B,OAAS,sBAAAC,MAA0B,sBACnC,OAAS,2BAAAC,MAA+B,iCAExC,OAAS,4CAAAC,MAAgD,uCAEzD,MAAMC,EAAiBC,GACd,MAAOC,GAA6B,CACzC,GAAI,CACEA,GAAS,iBACX,MAAMA,EAAQ,gBAAgB,EAGhC,MAAMD,EAAS,QAAQC,CAAO,EAE1BA,GAAS,gBACX,MAAMA,EAAQ,eAAe,CAEjC,OAASC,EAAO,CACd,cAAQ,MAAM,6BAA8BA,CAAK,EAC3CA,CACR,CACF,EAGWC,EAAU,IAAqB,CAC1CL,EAAyC,SAAS,EAElD,MAAMM,EAAMR,EAAmB,EACzBI,EAAWH,EAAwB,EACnCQ,EAAmBV,EAAYI,EAAcC,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAElEM,EAAW,CAAC,CAACF,EAAI,MAAQA,EAAI,SAAW,OACxCG,EAAU,CAAC,CAACH,EAAI,OAChBI,EAAa,CAAC,CAACJ,EAAI,MAAM,cACzBK,EAAkBF,GAAWC,EAC7BE,EAASC,EAAiBL,EAAUG,EAAiBD,CAAU,EAErE,MAAO,CACL,OAAQJ,EAAI,OACZ,MAAOA,EAAI,MACX,MAAOA,EAAI,MACX,KAAMA,EAAI,KACV,SAAAE,EACA,QAAAC,EACA,WAAAC,EACA,gBAAAC,EACA,OAAAC,EACA,QAAAL,CACF,CACF,EAEMM,EAAmB,CACvBL,EACAG,EACAD,IAEKF,EACAG,EACAD,EACE,gBADiB,aADK,kBADP","names":["useCallback","useAuthProviderCtx","useIsoTernSecureAuthCtx","useAssertWrappedByTernSecureAuthProvider","handleSignOut","instance","options","error","useAuth","ctx","signOut","isLoaded","isValid","isVerified","isAuthenticated","status","deriveAuthStatus"]}
1
+ {"version":3,"sources":["../../src/hooks/useAuth.ts"],"sourcesContent":["'use client';\r\n\r\nimport type {\r\n DecodedIdToken,\r\n SignOut,\r\n SignOutOptions,\r\n TernSecureUser,\r\n UseAuthReturn,\r\n} from '@tern-secure/types';\r\nimport { useCallback } from 'react';\r\n\r\nimport { useAuthProviderCtx } from '../ctx/AuthProvider';\r\nimport { useIsoTernSecureAuthCtx } from '../ctx/IsomorphicTernSecureCtx';\r\nimport type { IsoTernSecureAuth } from '../lib/isoTernSecureAuth';\r\nimport { useAssertWrappedByTernSecureAuthProvider } from './useAssertWrappedTernSecureProvider';\r\n\r\n\r\nconst handleSignOut = (instance: IsoTernSecureAuth) => {\r\n return async (options?: SignOutOptions) => {\r\n try {\r\n if (options?.onBeforeSignOut) {\r\n await options.onBeforeSignOut();\r\n }\r\n\r\n await instance.signOut(options);\r\n\r\n if (options?.onAfterSignOut) {\r\n await options.onAfterSignOut();\r\n }\r\n } catch (error) {\r\n console.error('[useAuth] Sign out failed:', error);\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\nexport const useAuth = (): UseAuthReturn => {\r\n useAssertWrappedByTernSecureAuthProvider('useAuth');\r\n\r\n const ctx = useAuthProviderCtx();\r\n let authCtx = ctx;\r\n\r\n if (authCtx.user === undefined) {\r\n authCtx = { ...authCtx, user: null };\r\n }\r\n\r\n const instance = useIsoTernSecureAuthCtx();\r\n const signOut: SignOut = useCallback(handleSignOut(instance), [instance]);\r\n\r\n return useDeriveAuth({ ...authCtx, signOut });\r\n};\r\n\r\nexport function useDeriveAuth(authObject: any): UseAuthReturn {\r\n const { signOut } = authObject ?? {};\r\n const payload = resolvedAuthState({ authObject: { ...authObject, signOut } });\r\n\r\n if (!payload) {\r\n throw new Error('[useDeriveAuth] Unable to derive auth state.');\r\n }\r\n return payload;\r\n}\r\n\r\nconst deriveAuthStatus = (\r\n isLoaded: boolean,\r\n isAuthenticated: boolean,\r\n isVerified: boolean,\r\n): UseAuthReturn['status'] => {\r\n if (!isLoaded) return 'loading';\r\n if (!isAuthenticated) return 'unauthenticated';\r\n if (!isVerified) return 'unverified';\r\n return 'authenticated';\r\n};\r\n\r\ntype AuthStateOptions = {\r\n authObject: {\r\n userId?: string | null;\r\n user?: TernSecureUser | null;\r\n sessionClaims?: DecodedIdToken | null;\r\n signOut: SignOut;\r\n };\r\n};\r\n\r\nconst resolvedAuthState = ({\r\n authObject: { userId, user, sessionClaims, signOut },\r\n}: AuthStateOptions): UseAuthReturn | undefined => {\r\n if (sessionClaims) {\r\n const isLoaded = true;\r\n const isValid = !!sessionClaims.sub;\r\n const isVerified = sessionClaims.email_verified || false;\r\n const isAuthenticated = isValid && isVerified;\r\n const status = deriveAuthStatus(isLoaded, isAuthenticated, isVerified);\r\n\r\n return {\r\n isLoaded,\r\n isVerified,\r\n isAuthenticated,\r\n isValid,\r\n user: user || null,\r\n userId: sessionClaims.sub || userId || null,\r\n sessionClaims,\r\n status,\r\n signOut,\r\n } as const;\r\n }\r\n if (!user) {\r\n return {\r\n isLoaded: false,\r\n isVerified: false,\r\n isAuthenticated: false,\r\n isValid: false,\r\n user: null,\r\n userId: null,\r\n sessionClaims: null,\r\n status: 'loading',\r\n signOut,\r\n } as const;\r\n }\r\n\r\n if (user && userId) {\r\n const isLoaded = true;\r\n const isValid = true;\r\n const isVerified = user.emailVerified || false;\r\n const isAuthenticated = isValid && isVerified;\r\n const status = deriveAuthStatus(isLoaded, isAuthenticated, isVerified);\r\n return {\r\n isLoaded,\r\n isValid,\r\n user,\r\n userId,\r\n isAuthenticated,\r\n isVerified,\r\n status,\r\n sessionClaims,\r\n signOut,\r\n } as const;\r\n }\r\n};\r\n"],"mappings":"aASA,OAAS,eAAAA,MAAmB,QAE5B,OAAS,sBAAAC,MAA0B,sBACnC,OAAS,2BAAAC,MAA+B,iCAExC,OAAS,4CAAAC,MAAgD,uCAGzD,MAAMC,EAAiBC,GACd,MAAOC,GAA6B,CACzC,GAAI,CACEA,GAAS,iBACX,MAAMA,EAAQ,gBAAgB,EAGhC,MAAMD,EAAS,QAAQC,CAAO,EAE1BA,GAAS,gBACX,MAAMA,EAAQ,eAAe,CAEjC,OAASC,EAAO,CACd,cAAQ,MAAM,6BAA8BA,CAAK,EAC3CA,CACR,CACF,EAGWC,EAAU,IAAqB,CAC1CL,EAAyC,SAAS,EAGlD,IAAIM,EADQR,EAAmB,EAG3BQ,EAAQ,OAAS,SACnBA,EAAU,CAAE,GAAGA,EAAS,KAAM,IAAK,GAGrC,MAAMJ,EAAWH,EAAwB,EACnCQ,EAAmBV,EAAYI,EAAcC,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAExE,OAAOM,EAAc,CAAE,GAAGF,EAAS,QAAAC,CAAQ,CAAC,CAC9C,EAEO,SAASC,EAAcC,EAAgC,CAC5D,KAAM,CAAE,QAAAF,CAAQ,EAAIE,GAAc,CAAC,EAC7BC,EAAUC,EAAkB,CAAE,WAAY,CAAE,GAAGF,EAAY,QAAAF,CAAQ,CAAE,CAAC,EAE5E,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,8CAA8C,EAEhE,OAAOA,CACT,CAEA,MAAME,EAAmB,CACvBC,EACAC,EACAC,IAEKF,EACAC,EACAC,EACE,gBADiB,aADK,kBADP,UAelBJ,EAAoB,CAAC,CACzB,WAAY,CAAE,OAAAK,EAAQ,KAAAC,EAAM,cAAAC,EAAe,QAAAX,CAAQ,CACrD,IAAmD,CACjD,GAAIW,EAAe,CAEjB,MAAMC,EAAU,CAAC,CAACD,EAAc,IAC1BH,EAAaG,EAAc,gBAAkB,GAC7CJ,EAAkBK,GAAWJ,EAC7BK,EAASR,EAAiB,GAAUE,EAAiBC,CAAU,EAErE,MAAO,CACL,YACA,WAAAA,EACA,gBAAAD,EACA,QAAAK,EACA,KAAMF,GAAQ,KACd,OAAQC,EAAc,KAAOF,GAAU,KACvC,cAAAE,EACA,OAAAE,EACA,QAAAb,CACF,CACF,CACA,GAAI,CAACU,EACH,MAAO,CACL,SAAU,GACV,WAAY,GACZ,gBAAiB,GACjB,QAAS,GACT,KAAM,KACN,OAAQ,KACR,cAAe,KACf,OAAQ,UACR,QAAAV,CACF,EAGF,GAAIU,GAAQD,EAAQ,CAGlB,MAAMD,EAAaE,EAAK,eAAiB,GACnCH,EAA6BC,EAC7BK,EAASR,EAAiB,GAAUE,EAAiBC,CAAU,EACrE,MAAO,CACL,YACA,WACA,KAAAE,EACA,OAAAD,EACA,gBAAAF,EACA,WAAAC,EACA,OAAAK,EACA,cAAAF,EACA,QAAAX,CACF,CACF,CACF","names":["useCallback","useAuthProviderCtx","useIsoTernSecureAuthCtx","useAssertWrappedByTernSecureAuthProvider","handleSignOut","instance","options","error","useAuth","authCtx","signOut","useDeriveAuth","authObject","payload","resolvedAuthState","deriveAuthStatus","isLoaded","isAuthenticated","isVerified","userId","user","sessionClaims","isValid","status"]}
@@ -2,7 +2,6 @@ import * as _tern_secure_types from '@tern-secure/types';
2
2
 
3
3
  type SessionStatus = 'active' | 'expired' | 'refreshing' | 'inactive';
4
4
  declare function useSession(): {
5
- accessToken: string | null;
6
5
  expirationTime: string | null;
7
6
  error: Error | null;
8
7
  isLoading: boolean;
@@ -2,7 +2,6 @@ import * as _tern_secure_types from '@tern-secure/types';
2
2
 
3
3
  type SessionStatus = 'active' | 'expired' | 'refreshing' | 'inactive';
4
4
  declare function useSession(): {
5
- accessToken: string | null;
6
5
  expirationTime: string | null;
7
6
  error: Error | null;
8
7
  isLoading: boolean;
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var f=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var h=(n,e)=>{for(var o in e)f(n,o,{get:e[o],enumerable:!0})},L=(n,e,o,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of S(e))!k.call(n,t)&&t!==o&&f(n,t,{get:()=>e[t],enumerable:!(u=g(e,t))||u.enumerable});return n};var v=n=>L(f({},"__esModule",{value:!0}),n);var D={};h(D,{useSession:()=>w});module.exports=v(D);var p=require("@tern-secure/shared/react"),s=require("react"),m=require("./useAssertWrappedTernSecureProvider"),T=require("./useAuth");function w(){const n=(0,p.useTernSecureAuthCtx)();(0,m.useAssertWrappedByTernSecureAuthProvider)("useSession");const{user:e,token:o}=(0,T.useAuth)(),t=n.currentSession,[r,l]=(0,s.useState)({accessToken:o||null,expirationTime:t?.expirationTime||null,error:null,isLoading:!0}),d=(0,s.useMemo)(()=>r.isLoading?"refreshing":r.accessToken?r.error||r.expirationTime?"expired":"active":"inactive",[r]),a=(0,s.useCallback)(async()=>{try{l(x=>({...x,isLoading:!0}));const i=await e?.getIdToken();if(!i)throw new Error("Failed to get ID token");const c=Date.now()+60*60*1e3;l({accessToken:i,expirationTime:c.toString(),error:null,isLoading:!1})}catch(i){console.error("Failed to refresh session:",i),l(c=>({...c,error:i instanceof Error?i:new Error("An unknown error occurred"),isLoading:!1}))}},[e]);return(0,s.useEffect)(()=>{a();const i=setInterval(()=>{r.expirationTime&&Date.now()<5*60*1e3&&a()},60*1e3);return()=>clearInterval(i)},[a]),{accessToken:r.accessToken,expirationTime:r.expirationTime,error:r.error,isLoading:r.isLoading,status:d,user:e,refresh:a}}0&&(module.exports={useSession});
1
+ "use strict";"use client";var l=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var h=(i,r)=>{for(var o in r)l(i,o,{get:r[o],enumerable:!0})},L=(i,r,o,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of g(r))!T.call(i,e)&&e!==o&&l(i,e,{get:()=>r[e],enumerable:!(s=S(r,e))||s.enumerable});return i};var w=i=>L(l({},"__esModule",{value:!0}),i);var E={};h(E,{useSession:()=>D});module.exports=w(E);var f=require("@tern-secure/shared/react"),n=require("react"),p=require("./useAssertWrappedTernSecureProvider"),m=require("./useAuth");function D(){const i=(0,f.useTernSecureAuthCtx)();(0,p.useAssertWrappedByTernSecureAuthProvider)("useSession");const{user:r}=(0,m.useAuth)(),s=i.currentSession,[e,c]=(0,n.useState)({expirationTime:s?.expirationTime||null,error:null,isLoading:!0}),d=(0,n.useMemo)(()=>e.isLoading?"refreshing":e.error||e.expirationTime?"expired":"active",[e]),a=(0,n.useCallback)(async()=>{try{if(c(x=>({...x,isLoading:!0})),!await r?.getIdToken())throw new Error("Failed to get ID token");const u=Date.now()+60*60*1e3;c({expirationTime:u.toString(),error:null,isLoading:!1})}catch(t){console.error("Failed to refresh session:",t),c(u=>({...u,error:t instanceof Error?t:new Error("An unknown error occurred"),isLoading:!1}))}},[r]);return(0,n.useEffect)(()=>{a();const t=setInterval(()=>{e.expirationTime&&Date.now()<5*60*1e3&&a()},60*1e3);return()=>clearInterval(t)},[a]),{expirationTime:e.expirationTime,error:e.error,isLoading:e.isLoading,status:d,user:r,refresh:a}}0&&(module.exports={useSession});
2
2
  //# sourceMappingURL=useSession.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useSession.ts"],"sourcesContent":["'use client'\n\nimport { \n useTernSecureAuthCtx\n} from '@tern-secure/shared/react'\nimport { \n useCallback,\n useEffect,\n useMemo, \n useState} from 'react'\n\nimport { useAssertWrappedByTernSecureAuthProvider } from './useAssertWrappedTernSecureProvider'\nimport { useAuth } from './useAuth'\n\ninterface SessionData {\n accessToken: string | null\n expirationTime: string | null\n error: Error | null\n isLoading: boolean\n}\n\ntype SessionStatus = 'active' | 'expired' | 'refreshing' | 'inactive'\n\nexport function useSession() {\n const instanceCtx = useTernSecureAuthCtx()\n\n useAssertWrappedByTernSecureAuthProvider('useSession')\n \n const { user, token } = useAuth()\n const instance = instanceCtx\n const session = instance.currentSession\n\n const [sessionData, setSessionData] = useState<SessionData>({\n accessToken: token || null,\n expirationTime: session?.expirationTime|| null, \n error: null,\n isLoading: true\n })\n\n const status = useMemo((): SessionStatus => {\n if (sessionData.isLoading) return 'refreshing'\n if (!sessionData.accessToken) return 'inactive'\n if (sessionData.error) return 'expired'\n if (sessionData.expirationTime) return 'expired'\n return 'active'\n }, [sessionData])\n\n const refreshSession = useCallback(async () => {\n try {\n setSessionData(prev => ({ ...prev, isLoading: true }))\n //if (!isAuthenticated) throw new Error('No authenticated user')\n\n const token = await user?.getIdToken()\n if (!token) throw new Error('Failed to get ID token')\n\n // Set expiration to 1 hour from now (Firebase default)\n const expirationTime = Date.now() + (60 * 60 * 1000)\n\n setSessionData({\n accessToken: token,\n expirationTime: expirationTime.toString(), // Store as string for consistency\n error: null,\n isLoading: false\n \n })\n } catch (error) {\n console.error('Failed to refresh session:', error)\n setSessionData(prev => ({\n ...prev,\n error: error instanceof Error ? error : new Error('An unknown error occurred'),\n isLoading: false\n }))\n }\n }, [ user])\n\n useEffect(() => {\n refreshSession()\n\n // Set up a timer to refresh the token before it expires\n const timer = setInterval(() => {\n if (sessionData.expirationTime) {\n const timeUntilExpiry = Date.now()\n if (timeUntilExpiry < 5 * 60 * 1000) { // Refresh 5 minutes before expiry\n refreshSession()\n }\n }\n }, 60 * 1000) // Check every minute\n\n return () => clearInterval(timer)\n }, [refreshSession])\n\n return {\n accessToken: sessionData.accessToken,\n expirationTime: sessionData.expirationTime,\n error: sessionData.error,\n isLoading: sessionData.isLoading,\n status,\n user,\n refresh: refreshSession\n }\n}"],"mappings":"sbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAEO,qCACPA,EAIiB,iBAEjBC,EAAyD,gDACzDC,EAAwB,qBAWjB,SAASJ,GAAa,CAC3B,MAAMK,KAAc,wBAAqB,KAEzC,4CAAyC,YAAY,EAErD,KAAM,CAAE,KAAAC,EAAM,MAAAC,CAAM,KAAI,WAAQ,EAE1BC,EADWH,EACQ,eAEnB,CAACI,EAAaC,CAAc,KAAI,YAAsB,CAC1D,YAAaH,GAAS,KACtB,eAAgBC,GAAS,gBAAiB,KAC1C,MAAO,KACP,UAAW,EACb,CAAC,EAEKG,KAAS,WAAQ,IACjBF,EAAY,UAAkB,aAC7BA,EAAY,YACbA,EAAY,OACZA,EAAY,eAAuB,UAChC,SAH8B,WAIpC,CAACA,CAAW,CAAC,EAEVG,KAAiB,eAAY,SAAY,CAC7C,GAAI,CACFF,EAAeG,IAAS,CAAE,GAAGA,EAAM,UAAW,EAAK,EAAE,EAGrD,MAAMN,EAAQ,MAAMD,GAAM,WAAW,EACrC,GAAI,CAACC,EAAO,MAAM,IAAI,MAAM,wBAAwB,EAGpD,MAAMO,EAAiB,KAAK,IAAI,EAAK,GAAK,GAAK,IAE/CJ,EAAe,CACb,YAAaH,EACb,eAAgBO,EAAe,SAAS,EACxC,MAAO,KACP,UAAW,EAEb,CAAC,CACH,OAASC,EAAO,CACd,QAAQ,MAAM,6BAA8BA,CAAK,EACjDL,EAAeG,IAAS,CACtB,GAAGA,EACH,MAAOE,aAAiB,MAAQA,EAAQ,IAAI,MAAM,2BAA2B,EAC7E,UAAW,EACb,EAAE,CACJ,CACF,EAAG,CAAET,CAAI,CAAC,EAEV,sBAAU,IAAM,CACdM,EAAe,EAGf,MAAMI,EAAQ,YAAY,IAAM,CAC1BP,EAAY,gBACW,KAAK,IAAI,EACZ,EAAI,GAAK,KAC7BG,EAAe,CAGrB,EAAG,GAAK,GAAI,EAEZ,MAAO,IAAM,cAAcI,CAAK,CAClC,EAAG,CAACJ,CAAc,CAAC,EAEZ,CACL,YAAaH,EAAY,YACzB,eAAgBA,EAAY,eAC5B,MAAOA,EAAY,MACnB,UAAWA,EAAY,UACvB,OAAAE,EACA,KAAAL,EACA,QAASM,CACX,CACF","names":["useSession_exports","__export","useSession","__toCommonJS","import_react","import_useAssertWrappedTernSecureProvider","import_useAuth","instanceCtx","user","token","session","sessionData","setSessionData","status","refreshSession","prev","expirationTime","error","timer"]}
1
+ {"version":3,"sources":["../../src/hooks/useSession.ts"],"sourcesContent":["'use client'\n\nimport { \n useTernSecureAuthCtx\n} from '@tern-secure/shared/react'\nimport { \n useCallback,\n useEffect,\n useMemo, \n useState} from 'react'\n\nimport { useAssertWrappedByTernSecureAuthProvider } from './useAssertWrappedTernSecureProvider'\nimport { useAuth } from './useAuth'\n\ninterface SessionData {\n //accessToken: string | null\n expirationTime: string | null\n error: Error | null\n isLoading: boolean\n}\n\ntype SessionStatus = 'active' | 'expired' | 'refreshing' | 'inactive'\n\nexport function useSession() {\n const instanceCtx = useTernSecureAuthCtx()\n\n useAssertWrappedByTernSecureAuthProvider('useSession')\n \n const { user } = useAuth()\n const instance = instanceCtx\n const session = instance.currentSession\n\n const [sessionData, setSessionData] = useState<SessionData>({\n //accessToken: token || null,\n expirationTime: session?.expirationTime|| null, \n error: null,\n isLoading: true\n })\n\n const status = useMemo((): SessionStatus => {\n if (sessionData.isLoading) return 'refreshing'\n //if (!sessionData.accessToken) return 'inactive'\n if (sessionData.error) return 'expired'\n if (sessionData.expirationTime) return 'expired'\n return 'active'\n }, [sessionData])\n\n const refreshSession = useCallback(async () => {\n try {\n setSessionData(prev => ({ ...prev, isLoading: true }))\n //if (!isAuthenticated) throw new Error('No authenticated user')\n\n const token = await user?.getIdToken()\n if (!token) throw new Error('Failed to get ID token')\n\n // Set expiration to 1 hour from now (Firebase default)\n const expirationTime = Date.now() + (60 * 60 * 1000)\n\n setSessionData({\n //accessToken: token,\n expirationTime: expirationTime.toString(), // Store as string for consistency\n error: null,\n isLoading: false\n \n })\n } catch (error) {\n console.error('Failed to refresh session:', error)\n setSessionData(prev => ({\n ...prev,\n error: error instanceof Error ? error : new Error('An unknown error occurred'),\n isLoading: false\n }))\n }\n }, [ user])\n\n useEffect(() => {\n refreshSession()\n\n // Set up a timer to refresh the token before it expires\n const timer = setInterval(() => {\n if (sessionData.expirationTime) {\n const timeUntilExpiry = Date.now()\n if (timeUntilExpiry < 5 * 60 * 1000) { // Refresh 5 minutes before expiry\n refreshSession()\n }\n }\n }, 60 * 1000) // Check every minute\n\n return () => clearInterval(timer)\n }, [refreshSession])\n\n return {\n //accessToken: sessionData.accessToken,\n expirationTime: sessionData.expirationTime,\n error: sessionData.error,\n isLoading: sessionData.isLoading,\n status,\n user,\n refresh: refreshSession\n }\n}"],"mappings":"sbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAEO,qCACPA,EAIiB,iBAEjBC,EAAyD,gDACzDC,EAAwB,qBAWjB,SAASJ,GAAa,CAC3B,MAAMK,KAAc,wBAAqB,KAEzC,4CAAyC,YAAY,EAErD,KAAM,CAAE,KAAAC,CAAK,KAAI,WAAQ,EAEnBC,EADWF,EACQ,eAEnB,CAACG,EAAaC,CAAc,KAAI,YAAsB,CAE1D,eAAgBF,GAAS,gBAAiB,KAC1C,MAAO,KACP,UAAW,EACb,CAAC,EAEKG,KAAS,WAAQ,IACjBF,EAAY,UAAkB,aAE9BA,EAAY,OACZA,EAAY,eAAuB,UAChC,SACN,CAACA,CAAW,CAAC,EAEVG,KAAiB,eAAY,SAAY,CAC7C,GAAI,CAKF,GAJAF,EAAeG,IAAS,CAAE,GAAGA,EAAM,UAAW,EAAK,EAAE,EAIjD,CADU,MAAMN,GAAM,WAAW,EACzB,MAAM,IAAI,MAAM,wBAAwB,EAGpD,MAAMO,EAAiB,KAAK,IAAI,EAAK,GAAK,GAAK,IAE/CJ,EAAe,CAEb,eAAgBI,EAAe,SAAS,EACxC,MAAO,KACP,UAAW,EAEb,CAAC,CACH,OAASC,EAAO,CACd,QAAQ,MAAM,6BAA8BA,CAAK,EACjDL,EAAeG,IAAS,CACtB,GAAGA,EACH,MAAOE,aAAiB,MAAQA,EAAQ,IAAI,MAAM,2BAA2B,EAC7E,UAAW,EACb,EAAE,CACJ,CACF,EAAG,CAAER,CAAI,CAAC,EAEV,sBAAU,IAAM,CACdK,EAAe,EAGf,MAAMI,EAAQ,YAAY,IAAM,CAC1BP,EAAY,gBACW,KAAK,IAAI,EACZ,EAAI,GAAK,KAC7BG,EAAe,CAGrB,EAAG,GAAK,GAAI,EAEZ,MAAO,IAAM,cAAcI,CAAK,CAClC,EAAG,CAACJ,CAAc,CAAC,EAEZ,CAEL,eAAgBH,EAAY,eAC5B,MAAOA,EAAY,MACnB,UAAWA,EAAY,UACvB,OAAAE,EACA,KAAAJ,EACA,QAASK,CACX,CACF","names":["useSession_exports","__export","useSession","__toCommonJS","import_react","import_useAssertWrappedTernSecureProvider","import_useAuth","instanceCtx","user","session","sessionData","setSessionData","status","refreshSession","prev","expirationTime","error","timer"]}
@@ -1,2 +1,2 @@
1
- "use client";import{useTernSecureAuthCtx as f}from"@tern-secure/shared/react";import{useCallback as p,useEffect as m,useMemo as T,useState as d}from"react";import{useAssertWrappedByTernSecureAuthProvider as x}from"./useAssertWrappedTernSecureProvider";import{useAuth as g}from"./useAuth";function w(){const o=f();x("useSession");const{user:s,token:a}=g(),c=o.currentSession,[e,t]=d({accessToken:a||null,expirationTime:c?.expirationTime||null,error:null,isLoading:!0}),u=T(()=>e.isLoading?"refreshing":e.accessToken?e.error||e.expirationTime?"expired":"active":"inactive",[e]),n=p(async()=>{try{t(l=>({...l,isLoading:!0}));const r=await s?.getIdToken();if(!r)throw new Error("Failed to get ID token");const i=Date.now()+60*60*1e3;t({accessToken:r,expirationTime:i.toString(),error:null,isLoading:!1})}catch(r){console.error("Failed to refresh session:",r),t(i=>({...i,error:r instanceof Error?r:new Error("An unknown error occurred"),isLoading:!1}))}},[s]);return m(()=>{n();const r=setInterval(()=>{e.expirationTime&&Date.now()<5*60*1e3&&n()},60*1e3);return()=>clearInterval(r)},[n]),{accessToken:e.accessToken,expirationTime:e.expirationTime,error:e.error,isLoading:e.isLoading,status:u,user:s,refresh:n}}export{w as useSession};
1
+ "use client";import{useTernSecureAuthCtx as l}from"@tern-secure/shared/react";import{useCallback as f,useEffect as p,useMemo as m,useState as d}from"react";import{useAssertWrappedByTernSecureAuthProvider as x}from"./useAssertWrappedTernSecureProvider";import{useAuth as S}from"./useAuth";function D(){const s=l();x("useSession");const{user:t}=S(),a=s.currentSession,[e,o]=d({expirationTime:a?.expirationTime||null,error:null,isLoading:!0}),u=m(()=>e.isLoading?"refreshing":e.error||e.expirationTime?"expired":"active",[e]),i=f(async()=>{try{if(o(c=>({...c,isLoading:!0})),!await t?.getIdToken())throw new Error("Failed to get ID token");const n=Date.now()+60*60*1e3;o({expirationTime:n.toString(),error:null,isLoading:!1})}catch(r){console.error("Failed to refresh session:",r),o(n=>({...n,error:r instanceof Error?r:new Error("An unknown error occurred"),isLoading:!1}))}},[t]);return p(()=>{i();const r=setInterval(()=>{e.expirationTime&&Date.now()<5*60*1e3&&i()},60*1e3);return()=>clearInterval(r)},[i]),{expirationTime:e.expirationTime,error:e.error,isLoading:e.isLoading,status:u,user:t,refresh:i}}export{D as useSession};
2
2
  //# sourceMappingURL=useSession.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useSession.ts"],"sourcesContent":["'use client'\n\nimport { \n useTernSecureAuthCtx\n} from '@tern-secure/shared/react'\nimport { \n useCallback,\n useEffect,\n useMemo, \n useState} from 'react'\n\nimport { useAssertWrappedByTernSecureAuthProvider } from './useAssertWrappedTernSecureProvider'\nimport { useAuth } from './useAuth'\n\ninterface SessionData {\n accessToken: string | null\n expirationTime: string | null\n error: Error | null\n isLoading: boolean\n}\n\ntype SessionStatus = 'active' | 'expired' | 'refreshing' | 'inactive'\n\nexport function useSession() {\n const instanceCtx = useTernSecureAuthCtx()\n\n useAssertWrappedByTernSecureAuthProvider('useSession')\n \n const { user, token } = useAuth()\n const instance = instanceCtx\n const session = instance.currentSession\n\n const [sessionData, setSessionData] = useState<SessionData>({\n accessToken: token || null,\n expirationTime: session?.expirationTime|| null, \n error: null,\n isLoading: true\n })\n\n const status = useMemo((): SessionStatus => {\n if (sessionData.isLoading) return 'refreshing'\n if (!sessionData.accessToken) return 'inactive'\n if (sessionData.error) return 'expired'\n if (sessionData.expirationTime) return 'expired'\n return 'active'\n }, [sessionData])\n\n const refreshSession = useCallback(async () => {\n try {\n setSessionData(prev => ({ ...prev, isLoading: true }))\n //if (!isAuthenticated) throw new Error('No authenticated user')\n\n const token = await user?.getIdToken()\n if (!token) throw new Error('Failed to get ID token')\n\n // Set expiration to 1 hour from now (Firebase default)\n const expirationTime = Date.now() + (60 * 60 * 1000)\n\n setSessionData({\n accessToken: token,\n expirationTime: expirationTime.toString(), // Store as string for consistency\n error: null,\n isLoading: false\n \n })\n } catch (error) {\n console.error('Failed to refresh session:', error)\n setSessionData(prev => ({\n ...prev,\n error: error instanceof Error ? error : new Error('An unknown error occurred'),\n isLoading: false\n }))\n }\n }, [ user])\n\n useEffect(() => {\n refreshSession()\n\n // Set up a timer to refresh the token before it expires\n const timer = setInterval(() => {\n if (sessionData.expirationTime) {\n const timeUntilExpiry = Date.now()\n if (timeUntilExpiry < 5 * 60 * 1000) { // Refresh 5 minutes before expiry\n refreshSession()\n }\n }\n }, 60 * 1000) // Check every minute\n\n return () => clearInterval(timer)\n }, [refreshSession])\n\n return {\n accessToken: sessionData.accessToken,\n expirationTime: sessionData.expirationTime,\n error: sessionData.error,\n isLoading: sessionData.isLoading,\n status,\n user,\n refresh: refreshSession\n }\n}"],"mappings":"aAEA,OACE,wBAAAA,MACK,4BACP,OACE,eAAAC,EACA,aAAAC,EACA,WAAAC,EACA,YAAAC,MAAe,QAEjB,OAAS,4CAAAC,MAAgD,uCACzD,OAAS,WAAAC,MAAe,YAWjB,SAASC,GAAa,CAC3B,MAAMC,EAAcR,EAAqB,EAEzCK,EAAyC,YAAY,EAErD,KAAM,CAAE,KAAAI,EAAM,MAAAC,CAAM,EAAIJ,EAAQ,EAE1BK,EADWH,EACQ,eAEnB,CAACI,EAAaC,CAAc,EAAIT,EAAsB,CAC1D,YAAaM,GAAS,KACtB,eAAgBC,GAAS,gBAAiB,KAC1C,MAAO,KACP,UAAW,EACb,CAAC,EAEKG,EAASX,EAAQ,IACjBS,EAAY,UAAkB,aAC7BA,EAAY,YACbA,EAAY,OACZA,EAAY,eAAuB,UAChC,SAH8B,WAIpC,CAACA,CAAW,CAAC,EAEVG,EAAiBd,EAAY,SAAY,CAC7C,GAAI,CACFY,EAAeG,IAAS,CAAE,GAAGA,EAAM,UAAW,EAAK,EAAE,EAGrD,MAAMN,EAAQ,MAAMD,GAAM,WAAW,EACrC,GAAI,CAACC,EAAO,MAAM,IAAI,MAAM,wBAAwB,EAGpD,MAAMO,EAAiB,KAAK,IAAI,EAAK,GAAK,GAAK,IAE/CJ,EAAe,CACb,YAAaH,EACb,eAAgBO,EAAe,SAAS,EACxC,MAAO,KACP,UAAW,EAEb,CAAC,CACH,OAASC,EAAO,CACd,QAAQ,MAAM,6BAA8BA,CAAK,EACjDL,EAAeG,IAAS,CACtB,GAAGA,EACH,MAAOE,aAAiB,MAAQA,EAAQ,IAAI,MAAM,2BAA2B,EAC7E,UAAW,EACb,EAAE,CACJ,CACF,EAAG,CAAET,CAAI,CAAC,EAEV,OAAAP,EAAU,IAAM,CACda,EAAe,EAGf,MAAMI,EAAQ,YAAY,IAAM,CAC1BP,EAAY,gBACW,KAAK,IAAI,EACZ,EAAI,GAAK,KAC7BG,EAAe,CAGrB,EAAG,GAAK,GAAI,EAEZ,MAAO,IAAM,cAAcI,CAAK,CAClC,EAAG,CAACJ,CAAc,CAAC,EAEZ,CACL,YAAaH,EAAY,YACzB,eAAgBA,EAAY,eAC5B,MAAOA,EAAY,MACnB,UAAWA,EAAY,UACvB,OAAAE,EACA,KAAAL,EACA,QAASM,CACX,CACF","names":["useTernSecureAuthCtx","useCallback","useEffect","useMemo","useState","useAssertWrappedByTernSecureAuthProvider","useAuth","useSession","instanceCtx","user","token","session","sessionData","setSessionData","status","refreshSession","prev","expirationTime","error","timer"]}
1
+ {"version":3,"sources":["../../src/hooks/useSession.ts"],"sourcesContent":["'use client'\n\nimport { \n useTernSecureAuthCtx\n} from '@tern-secure/shared/react'\nimport { \n useCallback,\n useEffect,\n useMemo, \n useState} from 'react'\n\nimport { useAssertWrappedByTernSecureAuthProvider } from './useAssertWrappedTernSecureProvider'\nimport { useAuth } from './useAuth'\n\ninterface SessionData {\n //accessToken: string | null\n expirationTime: string | null\n error: Error | null\n isLoading: boolean\n}\n\ntype SessionStatus = 'active' | 'expired' | 'refreshing' | 'inactive'\n\nexport function useSession() {\n const instanceCtx = useTernSecureAuthCtx()\n\n useAssertWrappedByTernSecureAuthProvider('useSession')\n \n const { user } = useAuth()\n const instance = instanceCtx\n const session = instance.currentSession\n\n const [sessionData, setSessionData] = useState<SessionData>({\n //accessToken: token || null,\n expirationTime: session?.expirationTime|| null, \n error: null,\n isLoading: true\n })\n\n const status = useMemo((): SessionStatus => {\n if (sessionData.isLoading) return 'refreshing'\n //if (!sessionData.accessToken) return 'inactive'\n if (sessionData.error) return 'expired'\n if (sessionData.expirationTime) return 'expired'\n return 'active'\n }, [sessionData])\n\n const refreshSession = useCallback(async () => {\n try {\n setSessionData(prev => ({ ...prev, isLoading: true }))\n //if (!isAuthenticated) throw new Error('No authenticated user')\n\n const token = await user?.getIdToken()\n if (!token) throw new Error('Failed to get ID token')\n\n // Set expiration to 1 hour from now (Firebase default)\n const expirationTime = Date.now() + (60 * 60 * 1000)\n\n setSessionData({\n //accessToken: token,\n expirationTime: expirationTime.toString(), // Store as string for consistency\n error: null,\n isLoading: false\n \n })\n } catch (error) {\n console.error('Failed to refresh session:', error)\n setSessionData(prev => ({\n ...prev,\n error: error instanceof Error ? error : new Error('An unknown error occurred'),\n isLoading: false\n }))\n }\n }, [ user])\n\n useEffect(() => {\n refreshSession()\n\n // Set up a timer to refresh the token before it expires\n const timer = setInterval(() => {\n if (sessionData.expirationTime) {\n const timeUntilExpiry = Date.now()\n if (timeUntilExpiry < 5 * 60 * 1000) { // Refresh 5 minutes before expiry\n refreshSession()\n }\n }\n }, 60 * 1000) // Check every minute\n\n return () => clearInterval(timer)\n }, [refreshSession])\n\n return {\n //accessToken: sessionData.accessToken,\n expirationTime: sessionData.expirationTime,\n error: sessionData.error,\n isLoading: sessionData.isLoading,\n status,\n user,\n refresh: refreshSession\n }\n}"],"mappings":"aAEA,OACE,wBAAAA,MACK,4BACP,OACE,eAAAC,EACA,aAAAC,EACA,WAAAC,EACA,YAAAC,MAAe,QAEjB,OAAS,4CAAAC,MAAgD,uCACzD,OAAS,WAAAC,MAAe,YAWjB,SAASC,GAAa,CAC3B,MAAMC,EAAcR,EAAqB,EAEzCK,EAAyC,YAAY,EAErD,KAAM,CAAE,KAAAI,CAAK,EAAIH,EAAQ,EAEnBI,EADWF,EACQ,eAEnB,CAACG,EAAaC,CAAc,EAAIR,EAAsB,CAE1D,eAAgBM,GAAS,gBAAiB,KAC1C,MAAO,KACP,UAAW,EACb,CAAC,EAEKG,EAASV,EAAQ,IACjBQ,EAAY,UAAkB,aAE9BA,EAAY,OACZA,EAAY,eAAuB,UAChC,SACN,CAACA,CAAW,CAAC,EAEVG,EAAiBb,EAAY,SAAY,CAC7C,GAAI,CAKF,GAJAW,EAAeG,IAAS,CAAE,GAAGA,EAAM,UAAW,EAAK,EAAE,EAIjD,CADU,MAAMN,GAAM,WAAW,EACzB,MAAM,IAAI,MAAM,wBAAwB,EAGpD,MAAMO,EAAiB,KAAK,IAAI,EAAK,GAAK,GAAK,IAE/CJ,EAAe,CAEb,eAAgBI,EAAe,SAAS,EACxC,MAAO,KACP,UAAW,EAEb,CAAC,CACH,OAASC,EAAO,CACd,QAAQ,MAAM,6BAA8BA,CAAK,EACjDL,EAAeG,IAAS,CACtB,GAAGA,EACH,MAAOE,aAAiB,MAAQA,EAAQ,IAAI,MAAM,2BAA2B,EAC7E,UAAW,EACb,EAAE,CACJ,CACF,EAAG,CAAER,CAAI,CAAC,EAEV,OAAAP,EAAU,IAAM,CACdY,EAAe,EAGf,MAAMI,EAAQ,YAAY,IAAM,CAC1BP,EAAY,gBACW,KAAK,IAAI,EACZ,EAAI,GAAK,KAC7BG,EAAe,CAGrB,EAAG,GAAK,GAAI,EAEZ,MAAO,IAAM,cAAcI,CAAK,CAClC,EAAG,CAACJ,CAAc,CAAC,EAEZ,CAEL,eAAgBH,EAAY,eAC5B,MAAOA,EAAY,MACnB,UAAWA,EAAY,UACvB,OAAAE,EACA,KAAAJ,EACA,QAASK,CACX,CACF","names":["useTernSecureAuthCtx","useCallback","useEffect","useMemo","useState","useAssertWrappedByTernSecureAuthProvider","useAuth","useSession","instanceCtx","user","session","sessionData","setSessionData","status","refreshSession","prev","expirationTime","error","timer"]}
@@ -1,4 +1,4 @@
1
- import { UseSignInReturn, SignInFormValuesTree, SignInResponseTree, ResendEmailVerification } from '@tern-secure/types';
1
+ import { UseSignInReturn, SignInFormValues, SignInResponse, ResendEmailVerification } from '@tern-secure/types';
2
2
 
3
3
  /**
4
4
  * Hook to access the SignInResource methods from TernSecureAuth
@@ -6,12 +6,12 @@ import { UseSignInReturn, SignInFormValuesTree, SignInResponseTree, ResendEmailV
6
6
  */
7
7
  declare const useSignIn: () => UseSignInReturn;
8
8
  declare const signIn: {
9
- withEmailAndPassword: (params: SignInFormValuesTree) => Promise<SignInResponseTree>;
9
+ withEmailAndPassword: (params: SignInFormValues) => Promise<SignInResponse>;
10
10
  withSocialProvider: (provider: string, options?: {
11
11
  mode?: "popup" | "redirect";
12
- }) => Promise<SignInResponseTree | void>;
12
+ }) => Promise<SignInResponse | void>;
13
13
  resendEmailVerification: () => Promise<ResendEmailVerification>;
14
- checkRedirectResult: () => Promise<SignInResponseTree | null>;
14
+ checkRedirectResult: () => Promise<SignInResponse | null>;
15
15
  };
16
16
 
17
17
  export { signIn, useSignIn };
@@ -1,4 +1,4 @@
1
- import { UseSignInReturn, SignInFormValuesTree, SignInResponseTree, ResendEmailVerification } from '@tern-secure/types';
1
+ import { UseSignInReturn, SignInFormValues, SignInResponse, ResendEmailVerification } from '@tern-secure/types';
2
2
 
3
3
  /**
4
4
  * Hook to access the SignInResource methods from TernSecureAuth
@@ -6,12 +6,12 @@ import { UseSignInReturn, SignInFormValuesTree, SignInResponseTree, ResendEmailV
6
6
  */
7
7
  declare const useSignIn: () => UseSignInReturn;
8
8
  declare const signIn: {
9
- withEmailAndPassword: (params: SignInFormValuesTree) => Promise<SignInResponseTree>;
9
+ withEmailAndPassword: (params: SignInFormValues) => Promise<SignInResponse>;
10
10
  withSocialProvider: (provider: string, options?: {
11
11
  mode?: "popup" | "redirect";
12
- }) => Promise<SignInResponseTree | void>;
12
+ }) => Promise<SignInResponse | void>;
13
13
  resendEmailVerification: () => Promise<ResendEmailVerification>;
14
- checkRedirectResult: () => Promise<SignInResponseTree | null>;
14
+ checkRedirectResult: () => Promise<SignInResponse | null>;
15
15
  };
16
16
 
17
17
  export { signIn, useSignIn };
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var o=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(e,n)=>{for(var i in n)o(e,i,{get:n[i],enumerable:!0})},h=(e,n,i,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of d(n))!l.call(e,t)&&t!==i&&o(e,t,{get:()=>n[t],enumerable:!(s=u(n,t))||s.enumerable});return e};var m=e=>h(o({},"__esModule",{value:!0}),e);var S={};c(S,{signIn:()=>I,useSignIn:()=>g});module.exports=m(S);var r=require("../ctx/TernSecureAuthResourcesCtx"),a=require("./useAssertWrappedTernSecureProvider");const g=()=>{(0,a.useAssertWrappedByTernSecureAuthProvider)("useSignIn");const e=(0,r.useAuthSignInCtx)();return e?{isLoaded:!0,signIn:e}:{isLoaded:!1,signIn:void 0}},I={withEmailAndPassword:async e=>{const n=(0,r.useAuthSignInCtx)();if(!n)throw new Error("SignIn methods not available - auth not initialized");return n.withEmailAndPassword(e)},withSocialProvider:async(e,n)=>{const i=(0,r.useAuthSignInCtx)();if(!i)throw new Error("SignIn methods not available - auth not initialized");return i.withSocialProvider(e,n)},resendEmailVerification:async()=>{const e=(0,r.useAuthSignInCtx)();if(!e)throw new Error("SignIn methods not available - auth not initialized");return e.resendEmailVerification()},checkRedirectResult:async()=>{const e=(0,r.useAuthSignInCtx)();if(!e)throw new Error("SignIn methods not available - auth not initialized");return e.checkRedirectResult()}};0&&(module.exports={signIn,useSignIn});
1
+ "use strict";"use client";var o=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(n,e)=>{for(var i in e)o(n,i,{get:e[i],enumerable:!0})},h=(n,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of d(e))!l.call(n,r)&&r!==i&&o(n,r,{get:()=>e[r],enumerable:!(s=u(e,r))||s.enumerable});return n};var m=n=>h(o({},"__esModule",{value:!0}),n);var S={};c(S,{signIn:()=>I,useSignIn:()=>g});module.exports=m(S);var t=require("../ctx/TernSecureAuthResourcesCtx"),a=require("./useAssertWrappedTernSecureProvider");const g=()=>{(0,a.useAssertWrappedByTernSecureAuthProvider)("useSignIn");const n=(0,t.useAuthSignInCtx)();return n?{isLoaded:!0,signIn:n}:{isLoaded:!1,signIn:void 0}},I={withEmailAndPassword:async n=>{const e=(0,t.useAuthSignInCtx)();if(!e)throw new Error("SignIn methods not available - auth not initialized");return e.withEmailAndPassword(n)},withSocialProvider:async(n,e)=>{const i=(0,t.useAuthSignInCtx)();if(!i)throw new Error("SignIn methods not available - auth not initialized");return i.withSocialProvider(n,e)},resendEmailVerification:async()=>{const n=(0,t.useAuthSignInCtx)();if(!n)throw new Error("SignIn methods not available - auth not initialized");return n.resendEmailVerification()},checkRedirectResult:async()=>{const n=(0,t.useAuthSignInCtx)();if(!n)throw new Error("SignIn methods not available - auth not initialized");return n.checkRedirectResult()}};0&&(module.exports={signIn,useSignIn});
2
2
  //# sourceMappingURL=useSignIn.js.map