@tern-secure/react 1.2.0-canary.v20251008165428 → 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.
- package/dist/ctx/AuthProvider.d.mts +3 -4
- package/dist/ctx/AuthProvider.d.ts +3 -4
- package/dist/ctx/AuthProvider.js +1 -1
- package/dist/ctx/AuthProvider.js.map +1 -1
- package/dist/ctx/AuthProvider.mjs +1 -1
- package/dist/ctx/AuthProvider.mjs.map +1 -1
- package/dist/ctx/SignInCtx.d.mts +1 -0
- package/dist/ctx/SignInCtx.d.ts +1 -0
- package/dist/ctx/SignInCtx.js +1 -1
- package/dist/ctx/SignInCtx.js.map +1 -1
- package/dist/ctx/SignInCtx.mjs +1 -1
- package/dist/ctx/SignInCtx.mjs.map +1 -1
- package/dist/ctx/TernSecureCtxProvider.d.mts +2 -2
- package/dist/ctx/TernSecureCtxProvider.d.ts +2 -2
- package/dist/ctx/TernSecureCtxProvider.js +1 -1
- package/dist/ctx/TernSecureCtxProvider.js.map +1 -1
- package/dist/ctx/TernSecureCtxProvider.mjs +1 -1
- package/dist/ctx/TernSecureCtxProvider.mjs.map +1 -1
- package/dist/hooks/useAuth.d.mts +2 -1
- package/dist/hooks/useAuth.d.ts +2 -1
- package/dist/hooks/useAuth.js +1 -1
- package/dist/hooks/useAuth.js.map +1 -1
- package/dist/hooks/useAuth.mjs +1 -1
- package/dist/hooks/useAuth.mjs.map +1 -1
- package/dist/hooks/useSession.d.mts +0 -1
- package/dist/hooks/useSession.d.ts +0 -1
- package/dist/hooks/useSession.js +1 -1
- package/dist/hooks/useSession.js.map +1 -1
- package/dist/hooks/useSession.mjs +1 -1
- package/dist/hooks/useSession.mjs.map +1 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/lib/isoTernSecureAuth.d.mts +2 -1
- package/dist/lib/isoTernSecureAuth.d.ts +2 -1
- package/dist/lib/isoTernSecureAuth.js +1 -1
- package/dist/lib/isoTernSecureAuth.js.map +1 -1
- package/dist/lib/isoTernSecureAuth.mjs +1 -1
- package/dist/lib/isoTernSecureAuth.mjs.map +1 -1
- package/dist/types.d.mts +6 -6
- package/dist/types.d.ts +6 -6
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/types.mjs.map +1 -1
- 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
|
-
|
|
7
|
-
|
|
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
|
-
|
|
7
|
-
|
|
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;
|
package/dist/ctx/AuthProvider.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
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
|
|
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,
|
|
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
|
|
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"]}
|
package/dist/ctx/SignInCtx.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { SignInProps, SignInRedirectUrl, SignUpRedirectUrl, TernSecureUser, AuthErrorTree } from '@tern-secure/auth';
|
|
3
|
+
export { useTernSecure } from '@tern-secure/shared/react';
|
|
3
4
|
import { ReactNode } from 'react';
|
|
4
5
|
|
|
5
6
|
type SignInCtx = SignInProps & SignInRedirectUrl & SignUpRedirectUrl;
|
package/dist/ctx/SignInCtx.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { SignInProps, SignInRedirectUrl, SignUpRedirectUrl, TernSecureUser, AuthErrorTree } from '@tern-secure/auth';
|
|
3
|
+
export { useTernSecure } from '@tern-secure/shared/react';
|
|
3
4
|
import { ReactNode } from 'react';
|
|
4
5
|
|
|
5
6
|
type SignInCtx = SignInProps & SignInRedirectUrl & SignUpRedirectUrl;
|
package/dist/ctx/SignInCtx.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";"use client";var
|
|
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
2
|
//# sourceMappingURL=SignInCtx.js.map
|
|
@@ -1 +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\
|
|
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"]}
|
package/dist/ctx/SignInCtx.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{jsx as v}from"react/jsx-runtime";import{buildURL as I}from"@tern-secure/auth";import{useTernSecure as
|
|
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
2
|
//# sourceMappingURL=SignInCtx.mjs.map
|
|
@@ -1 +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\
|
|
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 {
|
|
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:
|
|
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 {
|
|
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:
|
|
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
|
|
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 {
|
|
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
|
|
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 {
|
|
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"]}
|
package/dist/hooks/useAuth.d.mts
CHANGED
package/dist/hooks/useAuth.d.ts
CHANGED
package/dist/hooks/useAuth.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";"use client";var
|
|
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":["
|
|
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"]}
|
package/dist/hooks/useAuth.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{useCallback as
|
|
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":["
|
|
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;
|
package/dist/hooks/useSession.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";"use client";var
|
|
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
|
|
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
|
|
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
|
|
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"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { useAuth } from './hooks/useAuth.mjs';
|
|
1
|
+
export { useAuth, useDeriveAuth } from './hooks/useAuth.mjs';
|
|
2
2
|
export { useIdToken } from './hooks/useIdToken.mjs';
|
|
3
3
|
export { useSession } from './hooks/useSession.mjs';
|
|
4
4
|
export { signIn, useSignIn } from './hooks/useSignIn.mjs';
|
|
@@ -8,6 +8,7 @@ export { SignInProvider, useSignInContext } from './ctx/SignInCtx.mjs';
|
|
|
8
8
|
export { handleInternalRoute, isAuthRoute, isBaseAuthRoute, isInternalRoute } from './route-handler/internal-route.mjs';
|
|
9
9
|
export { cn } from './lib/utils.mjs';
|
|
10
10
|
export { Browser, IsoTernSecureAuthOptions, IsomorphicTernSecureOptions, TernSecureProviderProps } from './types.mjs';
|
|
11
|
+
export { useTernSecure } from '@tern-secure/shared/react';
|
|
11
12
|
import '@tern-secure/types';
|
|
12
13
|
import 'react/jsx-runtime';
|
|
13
14
|
import 'react';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { useAuth } from './hooks/useAuth.js';
|
|
1
|
+
export { useAuth, useDeriveAuth } from './hooks/useAuth.js';
|
|
2
2
|
export { useIdToken } from './hooks/useIdToken.js';
|
|
3
3
|
export { useSession } from './hooks/useSession.js';
|
|
4
4
|
export { signIn, useSignIn } from './hooks/useSignIn.js';
|
|
@@ -8,6 +8,7 @@ export { SignInProvider, useSignInContext } from './ctx/SignInCtx.js';
|
|
|
8
8
|
export { handleInternalRoute, isAuthRoute, isBaseAuthRoute, isInternalRoute } from './route-handler/internal-route.js';
|
|
9
9
|
export { cn } from './lib/utils.js';
|
|
10
10
|
export { Browser, IsoTernSecureAuthOptions, IsomorphicTernSecureOptions, TernSecureProviderProps } from './types.js';
|
|
11
|
+
export { useTernSecure } from '@tern-secure/shared/react';
|
|
11
12
|
import '@tern-secure/types';
|
|
12
13
|
import 'react/jsx-runtime';
|
|
13
14
|
import 'react';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=Object.defineProperty;var
|
|
1
|
+
"use strict";var p=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var v=(o,e)=>{for(var u in e)p(o,u,{get:e[u],enumerable:!0})},A=(o,e,u,x)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of T(e))!d.call(o,n)&&n!==u&&p(o,n,{get:()=>e[n],enumerable:!(x=h(e,n))||x.enumerable});return o};var P=o=>A(p({},"__esModule",{value:!0}),o);var a={};v(a,{SignInProvider:()=>t.SignInProvider,TernSecureCtxProvider:()=>S.TernSecureCtxProvider,TernSecureProvider:()=>I.TernSecureProvider,cn:()=>c.cn,handleInternalRoute:()=>r.handleInternalRoute,isAuthRoute:()=>r.isAuthRoute,isBaseAuthRoute:()=>r.isBaseAuthRoute,isInternalRoute:()=>r.isInternalRoute,signIn:()=>i.signIn,useAuth:()=>s.useAuth,useDeriveAuth:()=>s.useDeriveAuth,useIdToken:()=>m.useIdToken,useSession:()=>f.useSession,useSignIn:()=>i.useSignIn,useSignInContext:()=>t.useSignInContext,useTernSecure:()=>t.useTernSecure});module.exports=P(a);var s=require("./hooks/useAuth"),m=require("./hooks/useIdToken"),f=require("./hooks/useSession"),i=require("./hooks/useSignIn"),S=require("./ctx/TernSecureCtxProvider"),I=require("./ctx/TernSecureProvider"),t=require("./ctx/SignInCtx"),r=require("./route-handler/internal-route"),c=require("./lib/utils");0&&(module.exports={SignInProvider,TernSecureCtxProvider,TernSecureProvider,cn,handleInternalRoute,isAuthRoute,isBaseAuthRoute,isInternalRoute,signIn,useAuth,useDeriveAuth,useIdToken,useSession,useSignIn,useSignInContext,useTernSecure});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { useAuth } from './hooks/useAuth';\nexport { useIdToken } from './hooks/useIdToken';\nexport { useSession } from './hooks/useSession';\nexport { useSignIn, signIn } from './hooks/useSignIn';\nexport { TernSecureCtxProvider } from './ctx/TernSecureCtxProvider';\nexport { TernSecureProvider } from './ctx/TernSecureProvider';\nexport { useSignInContext, SignInProvider } from './ctx/SignInCtx';\n\nexport {\n isAuthRoute,\n isBaseAuthRoute,\n isInternalRoute,\n handleInternalRoute,\n} from './route-handler/internal-route';\n\nexport { cn } from './lib/utils';\n\nexport type {\n IsomorphicTernSecureOptions,\n IsoTernSecureAuthOptions,\n Browser,\n TernSecureProviderProps,\n} from './types';\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { useAuth, useDeriveAuth} from './hooks/useAuth';\nexport { useIdToken } from './hooks/useIdToken';\nexport { useSession } from './hooks/useSession';\nexport { useSignIn, signIn } from './hooks/useSignIn';\nexport { TernSecureCtxProvider } from './ctx/TernSecureCtxProvider';\nexport { TernSecureProvider } from './ctx/TernSecureProvider';\nexport { useSignInContext, SignInProvider, useTernSecure } from './ctx/SignInCtx';\n\nexport {\n isAuthRoute,\n isBaseAuthRoute,\n isInternalRoute,\n handleInternalRoute,\n} from './route-handler/internal-route';\n\nexport { cn } from './lib/utils';\n\nexport type {\n IsomorphicTernSecureOptions,\n IsoTernSecureAuthOptions,\n Browser,\n TernSecureProviderProps,\n} from './types';\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,giBAAAE,EAAAF,GAAA,IAAAG,EAAsC,2BACtCC,EAA2B,8BAC3BC,EAA2B,8BAC3BC,EAAkC,6BAClCC,EAAsC,uCACtCC,EAAmC,oCACnCC,EAAgE,2BAEhEC,EAKO,0CAEPC,EAAmB","names":["index_exports","__export","__toCommonJS","import_useAuth","import_useIdToken","import_useSession","import_useSignIn","import_TernSecureCtxProvider","import_TernSecureProvider","import_SignInCtx","import_internal_route","import_utils"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useAuth as o}from"./hooks/useAuth";import{useIdToken as
|
|
1
|
+
import{useAuth as o,useDeriveAuth as t}from"./hooks/useAuth";import{useIdToken as u}from"./hooks/useIdToken";import{useSession as i}from"./hooks/useSession";import{useSignIn as x,signIn as m}from"./hooks/useSignIn";import{TernSecureCtxProvider as S}from"./ctx/TernSecureCtxProvider";import{TernSecureProvider as c}from"./ctx/TernSecureProvider";import{useSignInContext as T,SignInProvider as d,useTernSecure as v}from"./ctx/SignInCtx";import{isAuthRoute as P,isBaseAuthRoute as a,isInternalRoute as g,handleInternalRoute as R}from"./route-handler/internal-route";import{cn as y}from"./lib/utils";export{d as SignInProvider,S as TernSecureCtxProvider,c as TernSecureProvider,y as cn,R as handleInternalRoute,P as isAuthRoute,a as isBaseAuthRoute,g as isInternalRoute,m as signIn,o as useAuth,t as useDeriveAuth,u as useIdToken,i as useSession,x as useSignIn,T as useSignInContext,v as useTernSecure};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { useAuth } from './hooks/useAuth';\nexport { useIdToken } from './hooks/useIdToken';\nexport { useSession } from './hooks/useSession';\nexport { useSignIn, signIn } from './hooks/useSignIn';\nexport { TernSecureCtxProvider } from './ctx/TernSecureCtxProvider';\nexport { TernSecureProvider } from './ctx/TernSecureProvider';\nexport { useSignInContext, SignInProvider } from './ctx/SignInCtx';\n\nexport {\n isAuthRoute,\n isBaseAuthRoute,\n isInternalRoute,\n handleInternalRoute,\n} from './route-handler/internal-route';\n\nexport { cn } from './lib/utils';\n\nexport type {\n IsomorphicTernSecureOptions,\n IsoTernSecureAuthOptions,\n Browser,\n TernSecureProviderProps,\n} from './types';\n"],"mappings":"AAAA,OAAS,WAAAA,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { useAuth, useDeriveAuth} from './hooks/useAuth';\nexport { useIdToken } from './hooks/useIdToken';\nexport { useSession } from './hooks/useSession';\nexport { useSignIn, signIn } from './hooks/useSignIn';\nexport { TernSecureCtxProvider } from './ctx/TernSecureCtxProvider';\nexport { TernSecureProvider } from './ctx/TernSecureProvider';\nexport { useSignInContext, SignInProvider, useTernSecure } from './ctx/SignInCtx';\n\nexport {\n isAuthRoute,\n isBaseAuthRoute,\n isInternalRoute,\n handleInternalRoute,\n} from './route-handler/internal-route';\n\nexport { cn } from './lib/utils';\n\nexport type {\n IsomorphicTernSecureOptions,\n IsoTernSecureAuthOptions,\n Browser,\n TernSecureProviderProps,\n} from './types';\n"],"mappings":"AAAA,OAAS,WAAAA,EAAS,iBAAAC,MAAoB,kBACtC,OAAS,cAAAC,MAAkB,qBAC3B,OAAS,cAAAC,MAAkB,qBAC3B,OAAS,aAAAC,EAAW,UAAAC,MAAc,oBAClC,OAAS,yBAAAC,MAA6B,8BACtC,OAAS,sBAAAC,MAA0B,2BACnC,OAAS,oBAAAC,EAAkB,kBAAAC,EAAgB,iBAAAC,MAAqB,kBAEhE,OACE,eAAAC,EACA,mBAAAC,EACA,mBAAAC,EACA,uBAAAC,MACK,iCAEP,OAAS,MAAAC,MAAU","names":["useAuth","useDeriveAuth","useIdToken","useSession","useSignIn","signIn","TernSecureCtxProvider","TernSecureProvider","useSignInContext","SignInProvider","useTernSecure","isAuthRoute","isBaseAuthRoute","isInternalRoute","handleInternalRoute","cn"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _tern_secure_types from '@tern-secure/types';
|
|
2
|
-
import { TernSecureAuth, TernSecureAuthStatus, SignInResource, SignUpResource, TernSecureAuthOptions, ListenerCallback, UnsubscribeCallback, SignOutOptions, SignedInSession, SignInRedirectOptions, SignUpRedirectOptions } from '@tern-secure/types';
|
|
2
|
+
import { TernSecureAuth, TernSecureAuthStatus, SignInResource, SignUpResource, TernSecureAuthOptions, ListenerCallback, UnsubscribeCallback, CreateActiveSessionParams, SignOutOptions, SignedInSession, SignInRedirectOptions, SignUpRedirectOptions } from '@tern-secure/types';
|
|
3
3
|
import { IsoTernSecureAuthOptions } from '../types.mjs';
|
|
4
4
|
|
|
5
5
|
declare function inBrowser(): boolean;
|
|
@@ -45,6 +45,7 @@ declare class IsoTernSecureAuth implements TernSecureAuth {
|
|
|
45
45
|
on: TernSecureAuth['on'];
|
|
46
46
|
off: TernSecureAuth['off'];
|
|
47
47
|
addListener: (listener: ListenerCallback) => UnsubscribeCallback;
|
|
48
|
+
createActiveSession: (params: CreateActiveSessionParams) => Promise<void>;
|
|
48
49
|
signOut: (options?: SignOutOptions) => Promise<void>;
|
|
49
50
|
get currentSession(): SignedInSession | null;
|
|
50
51
|
onAuthStateChanged(callback: (user: any) => void): () => void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _tern_secure_types from '@tern-secure/types';
|
|
2
|
-
import { TernSecureAuth, TernSecureAuthStatus, SignInResource, SignUpResource, TernSecureAuthOptions, ListenerCallback, UnsubscribeCallback, SignOutOptions, SignedInSession, SignInRedirectOptions, SignUpRedirectOptions } from '@tern-secure/types';
|
|
2
|
+
import { TernSecureAuth, TernSecureAuthStatus, SignInResource, SignUpResource, TernSecureAuthOptions, ListenerCallback, UnsubscribeCallback, CreateActiveSessionParams, SignOutOptions, SignedInSession, SignInRedirectOptions, SignUpRedirectOptions } from '@tern-secure/types';
|
|
3
3
|
import { IsoTernSecureAuthOptions } from '../types.js';
|
|
4
4
|
|
|
5
5
|
declare function inBrowser(): boolean;
|
|
@@ -45,6 +45,7 @@ declare class IsoTernSecureAuth implements TernSecureAuth {
|
|
|
45
45
|
on: TernSecureAuth['on'];
|
|
46
46
|
off: TernSecureAuth['off'];
|
|
47
47
|
addListener: (listener: ListenerCallback) => UnsubscribeCallback;
|
|
48
|
+
createActiveSession: (params: CreateActiveSessionParams) => Promise<void>;
|
|
48
49
|
signOut: (options?: SignOutOptions) => Promise<void>;
|
|
49
50
|
get currentSession(): SignedInSession | null;
|
|
50
51
|
onAuthStateChanged(callback: (user: any) => void): () => void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var u=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var
|
|
1
|
+
"use strict";var u=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var S=(r,e)=>{for(var t in e)u(r,t,{get:e[t],enumerable:!0})},f=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of l(e))!p.call(r,i)&&i!==t&&u(r,i,{get:()=>e[i],enumerable:!(n=d(e,i))||n.enumerable});return r};var A=r=>f(u({},"__esModule",{value:!0}),r);var T={};S(T,{IsoTernSecureAuth:()=>h,inBrowser:()=>a});module.exports=A(T);var c=require("@tern-secure/auth"),s=require("@tern-secure/shared/ternStatusEvent"),o=require("@tern-secure/shared/utils");const g={name:"@tern-secure/react",version:"1.2.0-canary.v20251019190011",environment:process.env.NODE_ENV};function a(){return typeof window<"u"}class h{_mode;options;TernSecureAuth;ternauth=null;preAddListener=new Map;#i="loading";#s;#t;#n;#r=(0,s.createTernAuthEventBus)();static#e;get status(){return this.ternauth?this.ternauth.status||(this.ternauth.isReady?"ready":"loading"):this.#i}get isReady(){return this.ternauth?.isReady||!1}get isLoading(){return this.ternauth?.isLoading||!1}get requiresVerification(){return this.options.requiresVerification??!0}get signIn(){if(this.ternauth)return this.ternauth.signIn}get signUp(){if(this.ternauth)return this.ternauth.signUp}get user(){if(this.ternauth)return this.ternauth.user}static getOrCreateInstance(e){return(!a()||!this.#e||e.TernSecureAuth&&this.#e.TernSecureAuth!==e.TernSecureAuth)&&(this.#e=new h(e)),this.#e}static clearInstances(){this.#e&&(this.#e.ternauth=null,this.#e=null)}static clearInstance(){this.#e=null}get domain(){if(typeof window<"u"&&window.location)return(0,o.handleValueOrFn)(this.#t,new URL(window.location.href),"");if(typeof this.#t=="function")throw new Error("Unsupported customDomain type: function");return this.#t||""}get proxyUrl(){if(typeof window<"u"&&window.location)return(0,o.handleValueOrFn)(this.#n,new URL(window.location.href),"");if(typeof this.#n=="function")throw new Error("Unsupported customProxyUrl type: function");return this.#n||""}get mode(){return this._mode}_internal_getOption(e){return this.ternauth?._internal_getOption?this.ternauth?._internal_getOption(e):this.options[e]}_internal_getAllOptions(){return Object.freeze({...this.options})}constructor(e){const{TernSecureAuth:t=null}=e||{};this.#t=e.ternSecureConfig?.authDomain,this.options={...e},this._mode=a()?"browser":"server",this.#s=this.options.apiUrl,this.TernSecureAuth=t,this.options.sdkMetadata||(this.options.sdkMetadata=g),this.initTernSecureAuth()}get sdkMetadata(){return this.ternauth?.sdkMetadata||this.options.sdkMetadata}get version(){return this.ternauth?.version}get instanceType(){return this.ternauth?.instanceType}get apiUrl(){return this.#s||""}async initTernSecureAuth(){if(this._mode!=="browser"&&this.isReady)return;const e=c.TernSecureAuth.initialize(this.options);this.loadTernSecureAuth(e)}loadTernSecureAuth=e=>{if(!e)throw new Error("TernAuth instance is not initialized");return this.ternauth=e,this.preAddListener.forEach((t,n)=>{t.unsubscribe=e.addListener(n)}),this.#r.getListeners("status").forEach(t=>{this.on("status",t,{notify:!0})}),typeof this.ternauth.status>"u"&&(console.log("[IsoTernSecureAuth] TernSecureAuth has no status, setting internal status to ready"),this.#i="ready",this.#r.emit(s.ternEvents.Status,"ready")),this.ternauth};on=(...e)=>this.ternauth?.on?this.ternauth.on(...e):this.#r.on(...e);off=(...e)=>this.ternauth?.off?this.ternauth.off(...e):this.#r.off(...e);addListener=e=>{if(this.ternauth)return this.ternauth.addListener(e);{const t=()=>{const n=this.preAddListener.get(e);n&&(n.unsubscribe(),this.preAddListener.delete(e))};return this.preAddListener.set(e,{unsubscribe:t}),t}};createActiveSession=e=>this.ternauth?this.ternauth.createActiveSession(e):Promise.reject(new Error("TernSecureAuth not initialized"));signOut=async e=>{if(!this.ternauth)throw new Error("TernSecureAuth not initialized");await this.ternauth.signOut()};get currentSession(){return this.ternauth?this.ternauth.currentSession:null}onAuthStateChanged(e){return this.ternauth?this.ternauth.onAuthStateChanged(e):(console.warn("[IsoTernSecureAuth] TernAuth not initialized, cannot set up auth state listener"),()=>{})}getRedirectResult=async()=>{if(!this.ternauth?.getRedirectResult)throw new Error("TernSecure instance not initialized");return this.ternauth.getRedirectResult()};redirectToSignIn=async e=>{this.ternauth?.redirectToSignIn&&this.ternauth.redirectToSignIn(e)};redirectToSignUp=async e=>{this.ternauth?.redirectToSignUp&&this.ternauth.redirectToSignUp()};redirectAfterSignIn=e=>{this.ternauth?.redirectAfterSignIn&&this.ternauth.redirectAfterSignIn()};redirectAfterSignUp=e=>{this.ternauth?.redirectAfterSignUp&&this.ternauth.redirectAfterSignUp()};#u(){return new Promise(e=>{e(this.ternauth)})}initialize=async()=>{try{await this.#u()}catch(e){throw console.error("[IsomorphicTernSecure] Failed to initialize TernSecureAuth:",e),e}}}0&&(module.exports={IsoTernSecureAuth,inBrowser});
|
|
2
2
|
//# sourceMappingURL=isoTernSecureAuth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/isoTernSecureAuth.ts"],"sourcesContent":["import { TernSecureAuth as TernSecureAuthImpl } from '@tern-secure/auth'\nimport { createTernAuthEventBus, ternEvents } from '@tern-secure/shared/ternStatusEvent';\nimport { handleValueOrFn } from '@tern-secure/shared/utils';\nimport type {\n DomainOrProxyUrl,\n ListenerCallback,\n SignedInSession,\n SignInRedirectOptions,\n SignInResource,\n SignOutOptions,\n SignUpRedirectOptions,\n SignUpResource,\n TernSecureAuth,\n TernSecureAuthOptions,\n TernSecureAuthStatus,\n UnsubscribeCallback,\n} from '@tern-secure/types';\n\nimport type { IsoTernSecureAuthOptions, TernSecureAuthProps } from '../types';\n\nconst SDK_METADATA = {\n name: __PACKAGE_NAME__,\n version: __PACKAGE_VERSION__,\n environment: process.env.NODE_ENV,\n};\n\nexport function inBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\n/**\n * IsomorphicTernSecure class manages the auth state and UI rendering\n * in both browser and server environments, acting as a proxy for TernSecureAuth\n */\nexport class IsoTernSecureAuth implements TernSecureAuth {\n private readonly _mode: 'browser' | 'server';\n private readonly options: IsoTernSecureAuthOptions;\n private readonly TernSecureAuth: TernSecureAuthProps;\n private ternauth: TernSecureAuthProps | null = null;\n private preAddListener = new Map<ListenerCallback, { unsubscribe: UnsubscribeCallback }>();\n\n #status: TernSecureAuthStatus = 'loading';\n #apiUrl: string | undefined;\n #domain: DomainOrProxyUrl['domain'];\n #proxyUrl: DomainOrProxyUrl['proxyUrl'];\n #eventBus = createTernAuthEventBus();\n\n static #instance: IsoTernSecureAuth | null | undefined;\n\n get status(): TernSecureAuthStatus {\n if (!this.ternauth) {\n return this.#status;\n }\n return this.ternauth.status || (this.ternauth.isReady ? 'ready' : 'loading');\n }\n\n get isReady(): boolean {\n return this.ternauth?.isReady || false;\n }\n\n get isLoading(): boolean {\n return this.ternauth?.isLoading || false;\n }\n\n get requiresVerification(): boolean {\n return this.options.requiresVerification ?? true;\n }\n\n get signIn(): SignInResource | undefined | null {\n if (this.ternauth) {\n return this.ternauth.signIn;\n }\n return undefined;\n }\n\n get signUp(): SignUpResource | undefined | null {\n if (this.ternauth) {\n return this.ternauth.signUp;\n }\n return undefined;\n }\n\n get user() {\n if (this.ternauth) {\n return this.ternauth.user;\n }\n }\n\n static getOrCreateInstance(options: IsoTernSecureAuthOptions) {\n if (\n !inBrowser() ||\n !this.#instance ||\n (options.TernSecureAuth && this.#instance.TernSecureAuth !== options.TernSecureAuth)\n ) {\n this.#instance = new IsoTernSecureAuth(options);\n }\n //console.log('[IsoTernSecureAuth] getOrCreateInstance', this.#instance);\n return this.#instance;\n }\n\n static clearInstances() {\n if (this.#instance) {\n this.#instance.ternauth = null;\n this.#instance = null;\n }\n }\n\n static clearInstance() {\n this.#instance = null;\n }\n\n get domain(): string {\n if (typeof window !== 'undefined' && window.location) {\n return handleValueOrFn(this.#domain, new URL(window.location.href), '');\n }\n if (typeof this.#domain === 'function') {\n throw new Error('Unsupported customDomain type: function');\n }\n return this.#domain || '';\n }\n\n get proxyUrl(): string {\n if (typeof window !== 'undefined' && window.location) {\n return handleValueOrFn(this.#proxyUrl, new URL(window.location.href), '');\n }\n if (typeof this.#proxyUrl === 'function') {\n throw new Error('Unsupported customProxyUrl type: function');\n }\n return this.#proxyUrl || '';\n }\n\n get mode(): 'browser' | 'server' {\n return this._mode;\n }\n\n /**\n * @internal\n */\n public _internal_getOption<K extends keyof TernSecureAuthOptions>(key: K): TernSecureAuthOptions[K] | undefined {\n return this.ternauth?._internal_getOption ? this.ternauth?._internal_getOption(key) : this.options[key];\n }\n\n /** \n * @internal\n */\n public _internal_getAllOptions(): Readonly<TernSecureAuthOptions> {\n return Object.freeze({ ...this.options });\n }\n\n constructor(options: IsoTernSecureAuthOptions) {\n const { TernSecureAuth = null } = options || {};\n this.#domain = options.ternSecureConfig?.authDomain;\n this.options = { ...options };\n this._mode = inBrowser() ? 'browser' : 'server';\n this.#apiUrl = this.options.apiUrl;\n this.TernSecureAuth = TernSecureAuth;\n\n if (!this.options.sdkMetadata) {\n this.options.sdkMetadata = SDK_METADATA;\n }\n\n this.initTernSecureAuth();\n }\n\n get sdkMetadata() {\n return this.ternauth?.sdkMetadata || this.options.sdkMetadata;\n }\n\n get version() {\n return this.ternauth?.version;\n }\n\n get instanceType() {\n return this.ternauth?.instanceType;\n }\n\n get apiUrl() {\n return this.#apiUrl || '';\n }\n\n async initTernSecureAuth() {\n if (this._mode !== 'browser' && this.isReady) {\n return;\n }\n\n const tern = TernSecureAuthImpl.initialize(this.options);\n this.loadTernSecureAuth(tern);\n }\n\n private loadTernSecureAuth = (ternauth: TernSecureAuthProps | undefined) => {\n if (!ternauth) {\n throw new Error('TernAuth instance is not initialized');\n }\n\n this.ternauth = ternauth;\n this.preAddListener.forEach((listenerHandlers, listener) => {\n listenerHandlers.unsubscribe = ternauth.addListener(listener);\n });\n\n this.#eventBus.getListeners('status').forEach(listener => {\n this.on('status', listener, { notify: true });\n });\n\n if (typeof this.ternauth.status === 'undefined') {\n console.log(\n '[IsoTernSecureAuth] TernSecureAuth has no status, setting internal status to ready',\n );\n this.#status = 'ready';\n this.#eventBus.emit(ternEvents.Status, 'ready');\n }\n\n return this.ternauth;\n };\n\n public on: TernSecureAuth['on'] = (...args) => {\n if (this.ternauth?.on) {\n return this.ternauth.on(...args);\n } else {\n return this.#eventBus.on(...args);\n }\n };\n\n public off: TernSecureAuth['off'] = (...args) => {\n if (this.ternauth?.off) {\n return this.ternauth.off(...args);\n } else {\n return this.#eventBus.off(...args);\n }\n };\n\n addListener = (listener: ListenerCallback): UnsubscribeCallback => {\n if (this.ternauth) {\n return this.ternauth.addListener(listener);\n } else {\n const unsubscribe = () => {\n const listenerHandlers = this.preAddListener.get(listener);\n if (listenerHandlers) {\n listenerHandlers.unsubscribe();\n this.preAddListener.delete(listener);\n }\n };\n this.preAddListener.set(listener, { unsubscribe });\n return unsubscribe;\n }\n };\n\n signOut = async (options?: SignOutOptions): Promise<void> => {\n if (!this.ternauth) {\n throw new Error('TernSecureAuth not initialized');\n }\n await this.ternauth.signOut();\n };\n\n get currentSession(): SignedInSession | null {\n if (!this.ternauth) {\n return null;\n }\n return this.ternauth.currentSession;\n };\n\n onAuthStateChanged(callback: (user: any) => void): () => void {\n if (!this.ternauth) {\n console.warn(\n '[IsoTernSecureAuth] TernAuth not initialized, cannot set up auth state listener',\n );\n return () => {};\n }\n return this.ternauth.onAuthStateChanged(callback);\n }\n\n getRedirectResult = async (): Promise<any> => {\n if (!this.ternauth?.getRedirectResult) {\n throw new Error('TernSecure instance not initialized');\n }\n return this.ternauth.getRedirectResult();\n };\n\n redirectToSignIn = async (options?: SignInRedirectOptions) => {\n if (this.ternauth?.redirectToSignIn) {\n this.ternauth.redirectToSignIn(options);\n }\n };\n\n redirectToSignUp = async (options?: SignUpRedirectOptions) => {\n if (this.ternauth?.redirectToSignUp) {\n this.ternauth.redirectToSignUp();\n }\n };\n\n redirectAfterSignIn = (redirectUrl?: string): void => {\n if (this.ternauth?.redirectAfterSignIn) {\n this.ternauth.redirectAfterSignIn();\n }\n }\n\n redirectAfterSignUp = (redirectUrl?: string): void => {\n if (this.ternauth?.redirectAfterSignUp) {\n this.ternauth.redirectAfterSignUp();\n }\n };\n\n #awaitForTernSecureAuth(): Promise<TernSecureAuthProps> {\n return new Promise<TernSecureAuthProps>(resolve => {\n resolve(this.ternauth);\n });\n }\n\n initialize = async (): Promise<void> => {\n try {\n await this.#awaitForTernSecureAuth();\n } catch (error) {\n console.error('[IsomorphicTernSecure] Failed to initialize TernSecureAuth:', error);\n throw error;\n }\n };\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,EAAA,cAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAqD,6BACrDC,EAAmD,+CACnDC,EAAgC,qCAkBhC,MAAMC,EAAe,CACnB,KAAM,qBACN,QAAS,+BACT,YAAa,QAAQ,IAAI,QAC3B,EAEO,SAASL,GAAqB,CACnC,OAAO,OAAO,OAAW,GAC3B,CAMO,MAAMD,CAA4C,CACtC,MACA,QACA,eACT,SAAuC,KACvC,eAAiB,IAAI,IAE7BO,GAAgC,UAChCC,GACAC,GACAC,GACAC,MAAY,0BAAuB,EAEnC,MAAOC,GAEP,IAAI,QAA+B,CACjC,OAAK,KAAK,SAGH,KAAK,SAAS,SAAW,KAAK,SAAS,QAAU,QAAU,WAFzD,KAAKL,EAGhB,CAEA,IAAI,SAAmB,CACrB,OAAO,KAAK,UAAU,SAAW,EACnC,CAEA,IAAI,WAAqB,CACvB,OAAO,KAAK,UAAU,WAAa,EACrC,CAEA,IAAI,sBAAgC,CAClC,OAAO,KAAK,QAAQ,sBAAwB,EAC9C,CAEA,IAAI,QAA4C,CAC9C,GAAI,KAAK,SACP,OAAO,KAAK,SAAS,MAGzB,CAEA,IAAI,QAA4C,CAC9C,GAAI,KAAK,SACP,OAAO,KAAK,SAAS,MAGzB,CAEA,IAAI,MAAO,CACT,GAAI,KAAK,SACP,OAAO,KAAK,SAAS,IAEzB,CAEA,OAAO,oBAAoBM,EAAmC,CAC5D,OACE,CAACZ,EAAU,GACX,CAAC,KAAKW,IACLC,EAAQ,gBAAkB,KAAKD,GAAU,iBAAmBC,EAAQ,kBAErE,KAAKD,GAAY,IAAIZ,EAAkBa,CAAO,GAGzC,KAAKD,EACd,CAEA,OAAO,gBAAiB,CAClB,KAAKA,KACP,KAAKA,GAAU,SAAW,KAC1B,KAAKA,GAAY,KAErB,CAEA,OAAO,eAAgB,CACrB,KAAKA,GAAY,IACnB,CAEA,IAAI,QAAiB,CACnB,GAAI,OAAO,OAAW,KAAe,OAAO,SAC1C,SAAO,mBAAgB,KAAKH,GAAS,IAAI,IAAI,OAAO,SAAS,IAAI,EAAG,EAAE,EAExE,GAAI,OAAO,KAAKA,IAAY,WAC1B,MAAM,IAAI,MAAM,yCAAyC,EAE3D,OAAO,KAAKA,IAAW,EACzB,CAEA,IAAI,UAAmB,CACrB,GAAI,OAAO,OAAW,KAAe,OAAO,SAC1C,SAAO,mBAAgB,KAAKC,GAAW,IAAI,IAAI,OAAO,SAAS,IAAI,EAAG,EAAE,EAE1E,GAAI,OAAO,KAAKA,IAAc,WAC5B,MAAM,IAAI,MAAM,2CAA2C,EAE7D,OAAO,KAAKA,IAAa,EAC3B,CAEA,IAAI,MAA6B,CAC/B,OAAO,KAAK,KACd,CAKO,oBAA2DI,EAA8C,CAC9G,OAAO,KAAK,UAAU,oBAAsB,KAAK,UAAU,oBAAoBA,CAAG,EAAI,KAAK,QAAQA,CAAG,CACxG,CAKO,yBAA2D,CAChE,OAAO,OAAO,OAAO,CAAE,GAAG,KAAK,OAAQ,CAAC,CAC1C,CAEA,YAAYD,EAAmC,CAC7C,KAAM,CAAE,eAAAE,EAAiB,IAAK,EAAIF,GAAW,CAAC,EAC9C,KAAKJ,GAAUI,EAAQ,kBAAkB,WACzC,KAAK,QAAU,CAAE,GAAGA,CAAQ,EAC5B,KAAK,MAAQZ,EAAU,EAAI,UAAY,SACvC,KAAKO,GAAU,KAAK,QAAQ,OAC5B,KAAK,eAAiBO,EAEjB,KAAK,QAAQ,cAChB,KAAK,QAAQ,YAAcT,GAG7B,KAAK,mBAAmB,CAC1B,CAEA,IAAI,aAAc,CAChB,OAAO,KAAK,UAAU,aAAe,KAAK,QAAQ,WACpD,CAEA,IAAI,SAAU,CACZ,OAAO,KAAK,UAAU,OACxB,CAEA,IAAI,cAAe,CACjB,OAAO,KAAK,UAAU,YACxB,CAEA,IAAI,QAAS,CACX,OAAO,KAAKE,IAAW,EACzB,CAEA,MAAM,oBAAqB,CACzB,GAAI,KAAK,QAAU,WAAa,KAAK,QACnC,OAGF,MAAMQ,EAAO,EAAAC,eAAmB,WAAW,KAAK,OAAO,EACvD,KAAK,mBAAmBD,CAAI,CAC9B,CAEQ,mBAAsBE,GAA8C,CAC1E,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,sCAAsC,EAGxD,YAAK,SAAWA,EAChB,KAAK,eAAe,QAAQ,CAACC,EAAkBC,IAAa,CAC1DD,EAAiB,YAAcD,EAAS,YAAYE,CAAQ,CAC9D,CAAC,EAED,KAAKT,GAAU,aAAa,QAAQ,EAAE,QAAQS,GAAY,CACxD,KAAK,GAAG,SAAUA,EAAU,CAAE,OAAQ,EAAK,CAAC,CAC9C,CAAC,EAEG,OAAO,KAAK,SAAS,OAAW,MAClC,QAAQ,IACN,oFACF,EACA,KAAKb,GAAU,QACf,KAAKI,GAAU,KAAK,aAAW,OAAQ,OAAO,GAGzC,KAAK,QACd,EAEO,GAA2B,IAAIU,IAChC,KAAK,UAAU,GACV,KAAK,SAAS,GAAG,GAAGA,CAAI,EAExB,KAAKV,GAAU,GAAG,GAAGU,CAAI,EAI7B,IAA6B,IAAIA,IAClC,KAAK,UAAU,IACV,KAAK,SAAS,IAAI,GAAGA,CAAI,EAEzB,KAAKV,GAAU,IAAI,GAAGU,CAAI,EAIrC,YAAeD,GAAoD,CACjE,GAAI,KAAK,SACP,OAAO,KAAK,SAAS,YAAYA,CAAQ,EACpC,CACL,MAAME,EAAc,IAAM,CACxB,MAAMH,EAAmB,KAAK,eAAe,IAAIC,CAAQ,EACrDD,IACFA,EAAiB,YAAY,EAC7B,KAAK,eAAe,OAAOC,CAAQ,EAEvC,EACA,YAAK,eAAe,IAAIA,EAAU,CAAE,YAAAE,CAAY,CAAC,EAC1CA,CACT,CACF,EAEA,QAAU,MAAOT,GAA4C,CAC3D,GAAI,CAAC,KAAK,SACR,MAAM,IAAI,MAAM,gCAAgC,EAElD,MAAM,KAAK,SAAS,QAAQ,CAC9B,EAEA,IAAI,gBAAyC,CAC3C,OAAK,KAAK,SAGH,KAAK,SAAS,eAFZ,IAGX,CAEA,mBAAmBU,EAA2C,CAC5D,OAAK,KAAK,SAMH,KAAK,SAAS,mBAAmBA,CAAQ,GAL9C,QAAQ,KACN,iFACF,EACO,IAAM,CAAC,EAGlB,CAEA,kBAAoB,SAA0B,CAC5C,GAAI,CAAC,KAAK,UAAU,kBAClB,MAAM,IAAI,MAAM,qCAAqC,EAEvD,OAAO,KAAK,SAAS,kBAAkB,CACzC,EAEA,iBAAmB,MAAOV,GAAoC,CACxD,KAAK,UAAU,kBACjB,KAAK,SAAS,iBAAiBA,CAAO,CAE1C,EAEA,iBAAmB,MAAOA,GAAoC,CACxD,KAAK,UAAU,kBACjB,KAAK,SAAS,iBAAiB,CAEnC,EAEA,oBAAuBW,GAA+B,CAChD,KAAK,UAAU,qBACjB,KAAK,SAAS,oBAAoB,CAEtC,EAEA,oBAAuBA,GAA+B,CAChD,KAAK,UAAU,qBACjB,KAAK,SAAS,oBAAoB,CAEtC,EAEAC,IAAwD,CACtD,OAAO,IAAI,QAA6BC,GAAW,CACjDA,EAAQ,KAAK,QAAQ,CACvB,CAAC,CACH,CAEA,WAAa,SAA2B,CACtC,GAAI,CACF,MAAM,KAAKD,GAAwB,CACrC,OAASE,EAAO,CACd,cAAQ,MAAM,8DAA+DA,CAAK,EAC5EA,CACR,CACF,CACF","names":["isoTernSecureAuth_exports","__export","IsoTernSecureAuth","inBrowser","__toCommonJS","import_auth","import_ternStatusEvent","import_utils","SDK_METADATA","#status","#apiUrl","#domain","#proxyUrl","#eventBus","#instance","options","key","TernSecureAuth","tern","TernSecureAuthImpl","ternauth","listenerHandlers","listener","args","unsubscribe","callback","redirectUrl","#awaitForTernSecureAuth","resolve","error"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/isoTernSecureAuth.ts"],"sourcesContent":["import { TernSecureAuth as TernSecureAuthImpl } from '@tern-secure/auth'\nimport { createTernAuthEventBus, ternEvents } from '@tern-secure/shared/ternStatusEvent';\nimport { handleValueOrFn } from '@tern-secure/shared/utils';\nimport type {\n CreateActiveSessionParams,\n DomainOrProxyUrl,\n ListenerCallback,\n SignedInSession,\n SignInRedirectOptions,\n SignInResource,\n SignOutOptions,\n SignUpRedirectOptions,\n SignUpResource,\n TernSecureAuth,\n TernSecureAuthOptions,\n TernSecureAuthStatus,\n UnsubscribeCallback,\n} from '@tern-secure/types';\n\nimport type { IsoTernSecureAuthOptions, TernSecureAuthProps } from '../types';\n\nconst SDK_METADATA = {\n name: __PACKAGE_NAME__,\n version: __PACKAGE_VERSION__,\n environment: process.env.NODE_ENV,\n};\n\nexport function inBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\n/**\n * IsomorphicTernSecure class manages the auth state and UI rendering\n * in both browser and server environments, acting as a proxy for TernSecureAuth\n */\nexport class IsoTernSecureAuth implements TernSecureAuth {\n private readonly _mode: 'browser' | 'server';\n private readonly options: IsoTernSecureAuthOptions;\n private readonly TernSecureAuth: TernSecureAuthProps;\n private ternauth: TernSecureAuthProps | null = null;\n private preAddListener = new Map<ListenerCallback, { unsubscribe: UnsubscribeCallback }>();\n\n #status: TernSecureAuthStatus = 'loading';\n #apiUrl: string | undefined;\n #domain: DomainOrProxyUrl['domain'];\n #proxyUrl: DomainOrProxyUrl['proxyUrl'];\n #eventBus = createTernAuthEventBus();\n\n static #instance: IsoTernSecureAuth | null | undefined;\n\n get status(): TernSecureAuthStatus {\n if (!this.ternauth) {\n return this.#status;\n }\n return this.ternauth.status || (this.ternauth.isReady ? 'ready' : 'loading');\n }\n\n get isReady(): boolean {\n return this.ternauth?.isReady || false;\n }\n\n get isLoading(): boolean {\n return this.ternauth?.isLoading || false;\n }\n\n get requiresVerification(): boolean {\n return this.options.requiresVerification ?? true;\n }\n\n get signIn(): SignInResource | undefined | null {\n if (this.ternauth) {\n return this.ternauth.signIn;\n }\n return undefined;\n }\n\n get signUp(): SignUpResource | undefined | null {\n if (this.ternauth) {\n return this.ternauth.signUp;\n }\n return undefined;\n }\n\n get user() {\n if (this.ternauth) {\n return this.ternauth.user;\n }\n }\n\n static getOrCreateInstance(options: IsoTernSecureAuthOptions) {\n if (\n !inBrowser() ||\n !this.#instance ||\n (options.TernSecureAuth && this.#instance.TernSecureAuth !== options.TernSecureAuth)\n ) {\n this.#instance = new IsoTernSecureAuth(options);\n }\n //console.log('[IsoTernSecureAuth] getOrCreateInstance', this.#instance);\n return this.#instance;\n }\n\n static clearInstances() {\n if (this.#instance) {\n this.#instance.ternauth = null;\n this.#instance = null;\n }\n }\n\n static clearInstance() {\n this.#instance = null;\n }\n\n get domain(): string {\n if (typeof window !== 'undefined' && window.location) {\n return handleValueOrFn(this.#domain, new URL(window.location.href), '');\n }\n if (typeof this.#domain === 'function') {\n throw new Error('Unsupported customDomain type: function');\n }\n return this.#domain || '';\n }\n\n get proxyUrl(): string {\n if (typeof window !== 'undefined' && window.location) {\n return handleValueOrFn(this.#proxyUrl, new URL(window.location.href), '');\n }\n if (typeof this.#proxyUrl === 'function') {\n throw new Error('Unsupported customProxyUrl type: function');\n }\n return this.#proxyUrl || '';\n }\n\n get mode(): 'browser' | 'server' {\n return this._mode;\n }\n\n /**\n * @internal\n */\n public _internal_getOption<K extends keyof TernSecureAuthOptions>(key: K): TernSecureAuthOptions[K] | undefined {\n return this.ternauth?._internal_getOption ? this.ternauth?._internal_getOption(key) : this.options[key];\n }\n\n /** \n * @internal\n */\n public _internal_getAllOptions(): Readonly<TernSecureAuthOptions> {\n return Object.freeze({ ...this.options });\n }\n\n constructor(options: IsoTernSecureAuthOptions) {\n const { TernSecureAuth = null } = options || {};\n this.#domain = options.ternSecureConfig?.authDomain;\n this.options = { ...options };\n this._mode = inBrowser() ? 'browser' : 'server';\n this.#apiUrl = this.options.apiUrl;\n this.TernSecureAuth = TernSecureAuth;\n\n if (!this.options.sdkMetadata) {\n this.options.sdkMetadata = SDK_METADATA;\n }\n\n this.initTernSecureAuth();\n }\n\n get sdkMetadata() {\n return this.ternauth?.sdkMetadata || this.options.sdkMetadata;\n }\n\n get version() {\n return this.ternauth?.version;\n }\n\n get instanceType() {\n return this.ternauth?.instanceType;\n }\n\n get apiUrl() {\n return this.#apiUrl || '';\n }\n\n async initTernSecureAuth() {\n if (this._mode !== 'browser' && this.isReady) {\n return;\n }\n\n const tern = TernSecureAuthImpl.initialize(this.options);\n this.loadTernSecureAuth(tern);\n }\n\n private loadTernSecureAuth = (ternauth: TernSecureAuthProps | undefined) => {\n if (!ternauth) {\n throw new Error('TernAuth instance is not initialized');\n }\n\n this.ternauth = ternauth;\n this.preAddListener.forEach((listenerHandlers, listener) => {\n listenerHandlers.unsubscribe = ternauth.addListener(listener);\n });\n\n this.#eventBus.getListeners('status').forEach(listener => {\n this.on('status', listener, { notify: true });\n });\n\n if (typeof this.ternauth.status === 'undefined') {\n console.log(\n '[IsoTernSecureAuth] TernSecureAuth has no status, setting internal status to ready',\n );\n this.#status = 'ready';\n this.#eventBus.emit(ternEvents.Status, 'ready');\n }\n\n return this.ternauth;\n };\n\n public on: TernSecureAuth['on'] = (...args) => {\n if (this.ternauth?.on) {\n return this.ternauth.on(...args);\n } else {\n return this.#eventBus.on(...args);\n }\n };\n\n public off: TernSecureAuth['off'] = (...args) => {\n if (this.ternauth?.off) {\n return this.ternauth.off(...args);\n } else {\n return this.#eventBus.off(...args);\n }\n };\n\n addListener = (listener: ListenerCallback): UnsubscribeCallback => {\n if (this.ternauth) {\n return this.ternauth.addListener(listener);\n } else {\n const unsubscribe = () => {\n const listenerHandlers = this.preAddListener.get(listener);\n if (listenerHandlers) {\n listenerHandlers.unsubscribe();\n this.preAddListener.delete(listener);\n }\n };\n this.preAddListener.set(listener, { unsubscribe });\n return unsubscribe;\n }\n };\n\n createActiveSession = (params: CreateActiveSessionParams): Promise<void> => {\n if (this.ternauth) {\n return this.ternauth.createActiveSession(params);\n } else {\n return Promise.reject(new Error('TernSecureAuth not initialized'));\n }\n }\n\n signOut = async (options?: SignOutOptions): Promise<void> => {\n if (!this.ternauth) {\n throw new Error('TernSecureAuth not initialized');\n }\n await this.ternauth.signOut();\n };\n\n get currentSession(): SignedInSession | null {\n if (!this.ternauth) {\n return null;\n }\n return this.ternauth.currentSession;\n };\n\n onAuthStateChanged(callback: (user: any) => void): () => void {\n if (!this.ternauth) {\n console.warn(\n '[IsoTernSecureAuth] TernAuth not initialized, cannot set up auth state listener',\n );\n return () => {};\n }\n return this.ternauth.onAuthStateChanged(callback);\n }\n\n getRedirectResult = async (): Promise<any> => {\n if (!this.ternauth?.getRedirectResult) {\n throw new Error('TernSecure instance not initialized');\n }\n return this.ternauth.getRedirectResult();\n };\n\n redirectToSignIn = async (options?: SignInRedirectOptions) => {\n if (this.ternauth?.redirectToSignIn) {\n this.ternauth.redirectToSignIn(options);\n }\n };\n\n redirectToSignUp = async (options?: SignUpRedirectOptions) => {\n if (this.ternauth?.redirectToSignUp) {\n this.ternauth.redirectToSignUp();\n }\n };\n\n redirectAfterSignIn = (redirectUrl?: string): void => {\n if (this.ternauth?.redirectAfterSignIn) {\n this.ternauth.redirectAfterSignIn();\n }\n }\n\n redirectAfterSignUp = (redirectUrl?: string): void => {\n if (this.ternauth?.redirectAfterSignUp) {\n this.ternauth.redirectAfterSignUp();\n }\n };\n\n #awaitForTernSecureAuth(): Promise<TernSecureAuthProps> {\n return new Promise<TernSecureAuthProps>(resolve => {\n resolve(this.ternauth);\n });\n }\n\n initialize = async (): Promise<void> => {\n try {\n await this.#awaitForTernSecureAuth();\n } catch (error) {\n console.error('[IsomorphicTernSecure] Failed to initialize TernSecureAuth:', error);\n throw error;\n }\n };\n}\n"],"mappings":"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","names":["isoTernSecureAuth_exports","__export","IsoTernSecureAuth","inBrowser","__toCommonJS","import_auth","import_ternStatusEvent","import_utils","SDK_METADATA","#status","#apiUrl","#domain","#proxyUrl","#eventBus","#instance","options","key","TernSecureAuth","tern","TernSecureAuthImpl","ternauth","listenerHandlers","listener","args","unsubscribe","params","callback","redirectUrl","#awaitForTernSecureAuth","resolve","error"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{TernSecureAuth as u}from"@tern-secure/auth";import{createTernAuthEventBus as o,ternEvents as a}from"@tern-secure/shared/ternStatusEvent";import{handleValueOrFn as n}from"@tern-secure/shared/utils";const h={name:"@tern-secure/react",version:"1.2.0-canary.
|
|
1
|
+
import{TernSecureAuth as u}from"@tern-secure/auth";import{createTernAuthEventBus as o,ternEvents as a}from"@tern-secure/shared/ternStatusEvent";import{handleValueOrFn as n}from"@tern-secure/shared/utils";const h={name:"@tern-secure/react",version:"1.2.0-canary.v20251019190011",environment:process.env.NODE_ENV};function i(){return typeof window<"u"}class s{_mode;options;TernSecureAuth;ternauth=null;preAddListener=new Map;#i="loading";#s;#t;#n;#r=o();static#e;get status(){return this.ternauth?this.ternauth.status||(this.ternauth.isReady?"ready":"loading"):this.#i}get isReady(){return this.ternauth?.isReady||!1}get isLoading(){return this.ternauth?.isLoading||!1}get requiresVerification(){return this.options.requiresVerification??!0}get signIn(){if(this.ternauth)return this.ternauth.signIn}get signUp(){if(this.ternauth)return this.ternauth.signUp}get user(){if(this.ternauth)return this.ternauth.user}static getOrCreateInstance(e){return(!i()||!this.#e||e.TernSecureAuth&&this.#e.TernSecureAuth!==e.TernSecureAuth)&&(this.#e=new s(e)),this.#e}static clearInstances(){this.#e&&(this.#e.ternauth=null,this.#e=null)}static clearInstance(){this.#e=null}get domain(){if(typeof window<"u"&&window.location)return n(this.#t,new URL(window.location.href),"");if(typeof this.#t=="function")throw new Error("Unsupported customDomain type: function");return this.#t||""}get proxyUrl(){if(typeof window<"u"&&window.location)return n(this.#n,new URL(window.location.href),"");if(typeof this.#n=="function")throw new Error("Unsupported customProxyUrl type: function");return this.#n||""}get mode(){return this._mode}_internal_getOption(e){return this.ternauth?._internal_getOption?this.ternauth?._internal_getOption(e):this.options[e]}_internal_getAllOptions(){return Object.freeze({...this.options})}constructor(e){const{TernSecureAuth:t=null}=e||{};this.#t=e.ternSecureConfig?.authDomain,this.options={...e},this._mode=i()?"browser":"server",this.#s=this.options.apiUrl,this.TernSecureAuth=t,this.options.sdkMetadata||(this.options.sdkMetadata=h),this.initTernSecureAuth()}get sdkMetadata(){return this.ternauth?.sdkMetadata||this.options.sdkMetadata}get version(){return this.ternauth?.version}get instanceType(){return this.ternauth?.instanceType}get apiUrl(){return this.#s||""}async initTernSecureAuth(){if(this._mode!=="browser"&&this.isReady)return;const e=u.initialize(this.options);this.loadTernSecureAuth(e)}loadTernSecureAuth=e=>{if(!e)throw new Error("TernAuth instance is not initialized");return this.ternauth=e,this.preAddListener.forEach((t,r)=>{t.unsubscribe=e.addListener(r)}),this.#r.getListeners("status").forEach(t=>{this.on("status",t,{notify:!0})}),typeof this.ternauth.status>"u"&&(console.log("[IsoTernSecureAuth] TernSecureAuth has no status, setting internal status to ready"),this.#i="ready",this.#r.emit(a.Status,"ready")),this.ternauth};on=(...e)=>this.ternauth?.on?this.ternauth.on(...e):this.#r.on(...e);off=(...e)=>this.ternauth?.off?this.ternauth.off(...e):this.#r.off(...e);addListener=e=>{if(this.ternauth)return this.ternauth.addListener(e);{const t=()=>{const r=this.preAddListener.get(e);r&&(r.unsubscribe(),this.preAddListener.delete(e))};return this.preAddListener.set(e,{unsubscribe:t}),t}};createActiveSession=e=>this.ternauth?this.ternauth.createActiveSession(e):Promise.reject(new Error("TernSecureAuth not initialized"));signOut=async e=>{if(!this.ternauth)throw new Error("TernSecureAuth not initialized");await this.ternauth.signOut()};get currentSession(){return this.ternauth?this.ternauth.currentSession:null}onAuthStateChanged(e){return this.ternauth?this.ternauth.onAuthStateChanged(e):(console.warn("[IsoTernSecureAuth] TernAuth not initialized, cannot set up auth state listener"),()=>{})}getRedirectResult=async()=>{if(!this.ternauth?.getRedirectResult)throw new Error("TernSecure instance not initialized");return this.ternauth.getRedirectResult()};redirectToSignIn=async e=>{this.ternauth?.redirectToSignIn&&this.ternauth.redirectToSignIn(e)};redirectToSignUp=async e=>{this.ternauth?.redirectToSignUp&&this.ternauth.redirectToSignUp()};redirectAfterSignIn=e=>{this.ternauth?.redirectAfterSignIn&&this.ternauth.redirectAfterSignIn()};redirectAfterSignUp=e=>{this.ternauth?.redirectAfterSignUp&&this.ternauth.redirectAfterSignUp()};#u(){return new Promise(e=>{e(this.ternauth)})}initialize=async()=>{try{await this.#u()}catch(e){throw console.error("[IsomorphicTernSecure] Failed to initialize TernSecureAuth:",e),e}}}export{s as IsoTernSecureAuth,i as inBrowser};
|
|
2
2
|
//# sourceMappingURL=isoTernSecureAuth.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/isoTernSecureAuth.ts"],"sourcesContent":["import { TernSecureAuth as TernSecureAuthImpl } from '@tern-secure/auth'\nimport { createTernAuthEventBus, ternEvents } from '@tern-secure/shared/ternStatusEvent';\nimport { handleValueOrFn } from '@tern-secure/shared/utils';\nimport type {\n DomainOrProxyUrl,\n ListenerCallback,\n SignedInSession,\n SignInRedirectOptions,\n SignInResource,\n SignOutOptions,\n SignUpRedirectOptions,\n SignUpResource,\n TernSecureAuth,\n TernSecureAuthOptions,\n TernSecureAuthStatus,\n UnsubscribeCallback,\n} from '@tern-secure/types';\n\nimport type { IsoTernSecureAuthOptions, TernSecureAuthProps } from '../types';\n\nconst SDK_METADATA = {\n name: __PACKAGE_NAME__,\n version: __PACKAGE_VERSION__,\n environment: process.env.NODE_ENV,\n};\n\nexport function inBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\n/**\n * IsomorphicTernSecure class manages the auth state and UI rendering\n * in both browser and server environments, acting as a proxy for TernSecureAuth\n */\nexport class IsoTernSecureAuth implements TernSecureAuth {\n private readonly _mode: 'browser' | 'server';\n private readonly options: IsoTernSecureAuthOptions;\n private readonly TernSecureAuth: TernSecureAuthProps;\n private ternauth: TernSecureAuthProps | null = null;\n private preAddListener = new Map<ListenerCallback, { unsubscribe: UnsubscribeCallback }>();\n\n #status: TernSecureAuthStatus = 'loading';\n #apiUrl: string | undefined;\n #domain: DomainOrProxyUrl['domain'];\n #proxyUrl: DomainOrProxyUrl['proxyUrl'];\n #eventBus = createTernAuthEventBus();\n\n static #instance: IsoTernSecureAuth | null | undefined;\n\n get status(): TernSecureAuthStatus {\n if (!this.ternauth) {\n return this.#status;\n }\n return this.ternauth.status || (this.ternauth.isReady ? 'ready' : 'loading');\n }\n\n get isReady(): boolean {\n return this.ternauth?.isReady || false;\n }\n\n get isLoading(): boolean {\n return this.ternauth?.isLoading || false;\n }\n\n get requiresVerification(): boolean {\n return this.options.requiresVerification ?? true;\n }\n\n get signIn(): SignInResource | undefined | null {\n if (this.ternauth) {\n return this.ternauth.signIn;\n }\n return undefined;\n }\n\n get signUp(): SignUpResource | undefined | null {\n if (this.ternauth) {\n return this.ternauth.signUp;\n }\n return undefined;\n }\n\n get user() {\n if (this.ternauth) {\n return this.ternauth.user;\n }\n }\n\n static getOrCreateInstance(options: IsoTernSecureAuthOptions) {\n if (\n !inBrowser() ||\n !this.#instance ||\n (options.TernSecureAuth && this.#instance.TernSecureAuth !== options.TernSecureAuth)\n ) {\n this.#instance = new IsoTernSecureAuth(options);\n }\n //console.log('[IsoTernSecureAuth] getOrCreateInstance', this.#instance);\n return this.#instance;\n }\n\n static clearInstances() {\n if (this.#instance) {\n this.#instance.ternauth = null;\n this.#instance = null;\n }\n }\n\n static clearInstance() {\n this.#instance = null;\n }\n\n get domain(): string {\n if (typeof window !== 'undefined' && window.location) {\n return handleValueOrFn(this.#domain, new URL(window.location.href), '');\n }\n if (typeof this.#domain === 'function') {\n throw new Error('Unsupported customDomain type: function');\n }\n return this.#domain || '';\n }\n\n get proxyUrl(): string {\n if (typeof window !== 'undefined' && window.location) {\n return handleValueOrFn(this.#proxyUrl, new URL(window.location.href), '');\n }\n if (typeof this.#proxyUrl === 'function') {\n throw new Error('Unsupported customProxyUrl type: function');\n }\n return this.#proxyUrl || '';\n }\n\n get mode(): 'browser' | 'server' {\n return this._mode;\n }\n\n /**\n * @internal\n */\n public _internal_getOption<K extends keyof TernSecureAuthOptions>(key: K): TernSecureAuthOptions[K] | undefined {\n return this.ternauth?._internal_getOption ? this.ternauth?._internal_getOption(key) : this.options[key];\n }\n\n /** \n * @internal\n */\n public _internal_getAllOptions(): Readonly<TernSecureAuthOptions> {\n return Object.freeze({ ...this.options });\n }\n\n constructor(options: IsoTernSecureAuthOptions) {\n const { TernSecureAuth = null } = options || {};\n this.#domain = options.ternSecureConfig?.authDomain;\n this.options = { ...options };\n this._mode = inBrowser() ? 'browser' : 'server';\n this.#apiUrl = this.options.apiUrl;\n this.TernSecureAuth = TernSecureAuth;\n\n if (!this.options.sdkMetadata) {\n this.options.sdkMetadata = SDK_METADATA;\n }\n\n this.initTernSecureAuth();\n }\n\n get sdkMetadata() {\n return this.ternauth?.sdkMetadata || this.options.sdkMetadata;\n }\n\n get version() {\n return this.ternauth?.version;\n }\n\n get instanceType() {\n return this.ternauth?.instanceType;\n }\n\n get apiUrl() {\n return this.#apiUrl || '';\n }\n\n async initTernSecureAuth() {\n if (this._mode !== 'browser' && this.isReady) {\n return;\n }\n\n const tern = TernSecureAuthImpl.initialize(this.options);\n this.loadTernSecureAuth(tern);\n }\n\n private loadTernSecureAuth = (ternauth: TernSecureAuthProps | undefined) => {\n if (!ternauth) {\n throw new Error('TernAuth instance is not initialized');\n }\n\n this.ternauth = ternauth;\n this.preAddListener.forEach((listenerHandlers, listener) => {\n listenerHandlers.unsubscribe = ternauth.addListener(listener);\n });\n\n this.#eventBus.getListeners('status').forEach(listener => {\n this.on('status', listener, { notify: true });\n });\n\n if (typeof this.ternauth.status === 'undefined') {\n console.log(\n '[IsoTernSecureAuth] TernSecureAuth has no status, setting internal status to ready',\n );\n this.#status = 'ready';\n this.#eventBus.emit(ternEvents.Status, 'ready');\n }\n\n return this.ternauth;\n };\n\n public on: TernSecureAuth['on'] = (...args) => {\n if (this.ternauth?.on) {\n return this.ternauth.on(...args);\n } else {\n return this.#eventBus.on(...args);\n }\n };\n\n public off: TernSecureAuth['off'] = (...args) => {\n if (this.ternauth?.off) {\n return this.ternauth.off(...args);\n } else {\n return this.#eventBus.off(...args);\n }\n };\n\n addListener = (listener: ListenerCallback): UnsubscribeCallback => {\n if (this.ternauth) {\n return this.ternauth.addListener(listener);\n } else {\n const unsubscribe = () => {\n const listenerHandlers = this.preAddListener.get(listener);\n if (listenerHandlers) {\n listenerHandlers.unsubscribe();\n this.preAddListener.delete(listener);\n }\n };\n this.preAddListener.set(listener, { unsubscribe });\n return unsubscribe;\n }\n };\n\n signOut = async (options?: SignOutOptions): Promise<void> => {\n if (!this.ternauth) {\n throw new Error('TernSecureAuth not initialized');\n }\n await this.ternauth.signOut();\n };\n\n get currentSession(): SignedInSession | null {\n if (!this.ternauth) {\n return null;\n }\n return this.ternauth.currentSession;\n };\n\n onAuthStateChanged(callback: (user: any) => void): () => void {\n if (!this.ternauth) {\n console.warn(\n '[IsoTernSecureAuth] TernAuth not initialized, cannot set up auth state listener',\n );\n return () => {};\n }\n return this.ternauth.onAuthStateChanged(callback);\n }\n\n getRedirectResult = async (): Promise<any> => {\n if (!this.ternauth?.getRedirectResult) {\n throw new Error('TernSecure instance not initialized');\n }\n return this.ternauth.getRedirectResult();\n };\n\n redirectToSignIn = async (options?: SignInRedirectOptions) => {\n if (this.ternauth?.redirectToSignIn) {\n this.ternauth.redirectToSignIn(options);\n }\n };\n\n redirectToSignUp = async (options?: SignUpRedirectOptions) => {\n if (this.ternauth?.redirectToSignUp) {\n this.ternauth.redirectToSignUp();\n }\n };\n\n redirectAfterSignIn = (redirectUrl?: string): void => {\n if (this.ternauth?.redirectAfterSignIn) {\n this.ternauth.redirectAfterSignIn();\n }\n }\n\n redirectAfterSignUp = (redirectUrl?: string): void => {\n if (this.ternauth?.redirectAfterSignUp) {\n this.ternauth.redirectAfterSignUp();\n }\n };\n\n #awaitForTernSecureAuth(): Promise<TernSecureAuthProps> {\n return new Promise<TernSecureAuthProps>(resolve => {\n resolve(this.ternauth);\n });\n }\n\n initialize = async (): Promise<void> => {\n try {\n await this.#awaitForTernSecureAuth();\n } catch (error) {\n console.error('[IsomorphicTernSecure] Failed to initialize TernSecureAuth:', error);\n throw error;\n }\n };\n}\n"],"mappings":"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","names":["TernSecureAuthImpl","createTernAuthEventBus","ternEvents","handleValueOrFn","SDK_METADATA","inBrowser","IsoTernSecureAuth","#status","#apiUrl","#domain","#proxyUrl","#eventBus","#instance","options","key","TernSecureAuth","tern","ternauth","listenerHandlers","listener","args","unsubscribe","callback","redirectUrl","#awaitForTernSecureAuth","resolve","error"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/isoTernSecureAuth.ts"],"sourcesContent":["import { TernSecureAuth as TernSecureAuthImpl } from '@tern-secure/auth'\nimport { createTernAuthEventBus, ternEvents } from '@tern-secure/shared/ternStatusEvent';\nimport { handleValueOrFn } from '@tern-secure/shared/utils';\nimport type {\n CreateActiveSessionParams,\n DomainOrProxyUrl,\n ListenerCallback,\n SignedInSession,\n SignInRedirectOptions,\n SignInResource,\n SignOutOptions,\n SignUpRedirectOptions,\n SignUpResource,\n TernSecureAuth,\n TernSecureAuthOptions,\n TernSecureAuthStatus,\n UnsubscribeCallback,\n} from '@tern-secure/types';\n\nimport type { IsoTernSecureAuthOptions, TernSecureAuthProps } from '../types';\n\nconst SDK_METADATA = {\n name: __PACKAGE_NAME__,\n version: __PACKAGE_VERSION__,\n environment: process.env.NODE_ENV,\n};\n\nexport function inBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\n/**\n * IsomorphicTernSecure class manages the auth state and UI rendering\n * in both browser and server environments, acting as a proxy for TernSecureAuth\n */\nexport class IsoTernSecureAuth implements TernSecureAuth {\n private readonly _mode: 'browser' | 'server';\n private readonly options: IsoTernSecureAuthOptions;\n private readonly TernSecureAuth: TernSecureAuthProps;\n private ternauth: TernSecureAuthProps | null = null;\n private preAddListener = new Map<ListenerCallback, { unsubscribe: UnsubscribeCallback }>();\n\n #status: TernSecureAuthStatus = 'loading';\n #apiUrl: string | undefined;\n #domain: DomainOrProxyUrl['domain'];\n #proxyUrl: DomainOrProxyUrl['proxyUrl'];\n #eventBus = createTernAuthEventBus();\n\n static #instance: IsoTernSecureAuth | null | undefined;\n\n get status(): TernSecureAuthStatus {\n if (!this.ternauth) {\n return this.#status;\n }\n return this.ternauth.status || (this.ternauth.isReady ? 'ready' : 'loading');\n }\n\n get isReady(): boolean {\n return this.ternauth?.isReady || false;\n }\n\n get isLoading(): boolean {\n return this.ternauth?.isLoading || false;\n }\n\n get requiresVerification(): boolean {\n return this.options.requiresVerification ?? true;\n }\n\n get signIn(): SignInResource | undefined | null {\n if (this.ternauth) {\n return this.ternauth.signIn;\n }\n return undefined;\n }\n\n get signUp(): SignUpResource | undefined | null {\n if (this.ternauth) {\n return this.ternauth.signUp;\n }\n return undefined;\n }\n\n get user() {\n if (this.ternauth) {\n return this.ternauth.user;\n }\n }\n\n static getOrCreateInstance(options: IsoTernSecureAuthOptions) {\n if (\n !inBrowser() ||\n !this.#instance ||\n (options.TernSecureAuth && this.#instance.TernSecureAuth !== options.TernSecureAuth)\n ) {\n this.#instance = new IsoTernSecureAuth(options);\n }\n //console.log('[IsoTernSecureAuth] getOrCreateInstance', this.#instance);\n return this.#instance;\n }\n\n static clearInstances() {\n if (this.#instance) {\n this.#instance.ternauth = null;\n this.#instance = null;\n }\n }\n\n static clearInstance() {\n this.#instance = null;\n }\n\n get domain(): string {\n if (typeof window !== 'undefined' && window.location) {\n return handleValueOrFn(this.#domain, new URL(window.location.href), '');\n }\n if (typeof this.#domain === 'function') {\n throw new Error('Unsupported customDomain type: function');\n }\n return this.#domain || '';\n }\n\n get proxyUrl(): string {\n if (typeof window !== 'undefined' && window.location) {\n return handleValueOrFn(this.#proxyUrl, new URL(window.location.href), '');\n }\n if (typeof this.#proxyUrl === 'function') {\n throw new Error('Unsupported customProxyUrl type: function');\n }\n return this.#proxyUrl || '';\n }\n\n get mode(): 'browser' | 'server' {\n return this._mode;\n }\n\n /**\n * @internal\n */\n public _internal_getOption<K extends keyof TernSecureAuthOptions>(key: K): TernSecureAuthOptions[K] | undefined {\n return this.ternauth?._internal_getOption ? this.ternauth?._internal_getOption(key) : this.options[key];\n }\n\n /** \n * @internal\n */\n public _internal_getAllOptions(): Readonly<TernSecureAuthOptions> {\n return Object.freeze({ ...this.options });\n }\n\n constructor(options: IsoTernSecureAuthOptions) {\n const { TernSecureAuth = null } = options || {};\n this.#domain = options.ternSecureConfig?.authDomain;\n this.options = { ...options };\n this._mode = inBrowser() ? 'browser' : 'server';\n this.#apiUrl = this.options.apiUrl;\n this.TernSecureAuth = TernSecureAuth;\n\n if (!this.options.sdkMetadata) {\n this.options.sdkMetadata = SDK_METADATA;\n }\n\n this.initTernSecureAuth();\n }\n\n get sdkMetadata() {\n return this.ternauth?.sdkMetadata || this.options.sdkMetadata;\n }\n\n get version() {\n return this.ternauth?.version;\n }\n\n get instanceType() {\n return this.ternauth?.instanceType;\n }\n\n get apiUrl() {\n return this.#apiUrl || '';\n }\n\n async initTernSecureAuth() {\n if (this._mode !== 'browser' && this.isReady) {\n return;\n }\n\n const tern = TernSecureAuthImpl.initialize(this.options);\n this.loadTernSecureAuth(tern);\n }\n\n private loadTernSecureAuth = (ternauth: TernSecureAuthProps | undefined) => {\n if (!ternauth) {\n throw new Error('TernAuth instance is not initialized');\n }\n\n this.ternauth = ternauth;\n this.preAddListener.forEach((listenerHandlers, listener) => {\n listenerHandlers.unsubscribe = ternauth.addListener(listener);\n });\n\n this.#eventBus.getListeners('status').forEach(listener => {\n this.on('status', listener, { notify: true });\n });\n\n if (typeof this.ternauth.status === 'undefined') {\n console.log(\n '[IsoTernSecureAuth] TernSecureAuth has no status, setting internal status to ready',\n );\n this.#status = 'ready';\n this.#eventBus.emit(ternEvents.Status, 'ready');\n }\n\n return this.ternauth;\n };\n\n public on: TernSecureAuth['on'] = (...args) => {\n if (this.ternauth?.on) {\n return this.ternauth.on(...args);\n } else {\n return this.#eventBus.on(...args);\n }\n };\n\n public off: TernSecureAuth['off'] = (...args) => {\n if (this.ternauth?.off) {\n return this.ternauth.off(...args);\n } else {\n return this.#eventBus.off(...args);\n }\n };\n\n addListener = (listener: ListenerCallback): UnsubscribeCallback => {\n if (this.ternauth) {\n return this.ternauth.addListener(listener);\n } else {\n const unsubscribe = () => {\n const listenerHandlers = this.preAddListener.get(listener);\n if (listenerHandlers) {\n listenerHandlers.unsubscribe();\n this.preAddListener.delete(listener);\n }\n };\n this.preAddListener.set(listener, { unsubscribe });\n return unsubscribe;\n }\n };\n\n createActiveSession = (params: CreateActiveSessionParams): Promise<void> => {\n if (this.ternauth) {\n return this.ternauth.createActiveSession(params);\n } else {\n return Promise.reject(new Error('TernSecureAuth not initialized'));\n }\n }\n\n signOut = async (options?: SignOutOptions): Promise<void> => {\n if (!this.ternauth) {\n throw new Error('TernSecureAuth not initialized');\n }\n await this.ternauth.signOut();\n };\n\n get currentSession(): SignedInSession | null {\n if (!this.ternauth) {\n return null;\n }\n return this.ternauth.currentSession;\n };\n\n onAuthStateChanged(callback: (user: any) => void): () => void {\n if (!this.ternauth) {\n console.warn(\n '[IsoTernSecureAuth] TernAuth not initialized, cannot set up auth state listener',\n );\n return () => {};\n }\n return this.ternauth.onAuthStateChanged(callback);\n }\n\n getRedirectResult = async (): Promise<any> => {\n if (!this.ternauth?.getRedirectResult) {\n throw new Error('TernSecure instance not initialized');\n }\n return this.ternauth.getRedirectResult();\n };\n\n redirectToSignIn = async (options?: SignInRedirectOptions) => {\n if (this.ternauth?.redirectToSignIn) {\n this.ternauth.redirectToSignIn(options);\n }\n };\n\n redirectToSignUp = async (options?: SignUpRedirectOptions) => {\n if (this.ternauth?.redirectToSignUp) {\n this.ternauth.redirectToSignUp();\n }\n };\n\n redirectAfterSignIn = (redirectUrl?: string): void => {\n if (this.ternauth?.redirectAfterSignIn) {\n this.ternauth.redirectAfterSignIn();\n }\n }\n\n redirectAfterSignUp = (redirectUrl?: string): void => {\n if (this.ternauth?.redirectAfterSignUp) {\n this.ternauth.redirectAfterSignUp();\n }\n };\n\n #awaitForTernSecureAuth(): Promise<TernSecureAuthProps> {\n return new Promise<TernSecureAuthProps>(resolve => {\n resolve(this.ternauth);\n });\n }\n\n initialize = async (): Promise<void> => {\n try {\n await this.#awaitForTernSecureAuth();\n } catch (error) {\n console.error('[IsomorphicTernSecure] Failed to initialize TernSecureAuth:', error);\n throw error;\n }\n };\n}\n"],"mappings":"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","names":["TernSecureAuthImpl","createTernAuthEventBus","ternEvents","handleValueOrFn","SDK_METADATA","inBrowser","IsoTernSecureAuth","#status","#apiUrl","#domain","#proxyUrl","#eventBus","#instance","options","key","TernSecureAuth","tern","ternauth","listenerHandlers","listener","args","unsubscribe","params","callback","redirectUrl","#awaitForTernSecureAuth","resolve","error"]}
|
package/dist/types.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TernSecureInstanceTree, TernSecureAuthOptions, TernSecureAuth,
|
|
1
|
+
import { TernSecureInstanceTree, TernSecureAuthOptions, TernSecureAuth, TernSecureStateExtended, TernSecureInstanceTreeOptions, TernSecureConfig } from '@tern-secure/types';
|
|
2
2
|
|
|
3
3
|
declare global {
|
|
4
4
|
interface Window {
|
|
@@ -70,7 +70,7 @@ interface HeadlessUIBrowserConstructor {
|
|
|
70
70
|
*/
|
|
71
71
|
type TernSecureProviderPropsOld = IsomorphicTernSecureOptions & {
|
|
72
72
|
children: React.ReactNode;
|
|
73
|
-
initialState?:
|
|
73
|
+
initialState?: TernSecureStateExtended;
|
|
74
74
|
loadingComponent?: React.ReactNode;
|
|
75
75
|
bypassApiKey?: boolean;
|
|
76
76
|
};
|
|
@@ -92,15 +92,15 @@ type IsomorphicTernSecureOptions = TernSecureInstanceTreeOptions & {
|
|
|
92
92
|
projectId?: string;
|
|
93
93
|
ternSecureConfig?: TernSecureConfig;
|
|
94
94
|
};
|
|
95
|
+
type IsoTernSecureAuthOptions = TernSecureAuthOptions & {
|
|
96
|
+
TernSecureAuth?: TernSecureAuthProps;
|
|
97
|
+
};
|
|
95
98
|
type TernSecureProviderProps = IsoTernSecureAuthOptions & {
|
|
96
99
|
children: React.ReactNode;
|
|
97
|
-
initialState?:
|
|
100
|
+
initialState?: TernSecureStateExtended;
|
|
98
101
|
loadingComponent?: React.ReactNode;
|
|
99
102
|
bypassApiKey?: boolean;
|
|
100
103
|
};
|
|
101
104
|
type TernSecureAuthProps = TernSecureAuth | undefined | null;
|
|
102
|
-
type IsoTernSecureAuthOptions = TernSecureAuthOptions & {
|
|
103
|
-
TernSecureAuth?: TernSecureAuthProps;
|
|
104
|
-
};
|
|
105
105
|
|
|
106
106
|
export { type AuthError, type Browser, type BrowserConstructor, type ConfigValidationResult, type HeadlessUIBrowser, type HeadlessUIBrowserConstructor, type IsoTernSecureAuthOptions, type IsomorphicTernSecureOptions, type SignInResponse, type TernSecureAuthProps, type TernSecureAuthState, type TernSecureProps, type TernSecureProviderProps, type TernSecureProviderPropsOld, type TernSecureUserData, type initialState, isSignInResponse };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TernSecureInstanceTree, TernSecureAuthOptions, TernSecureAuth,
|
|
1
|
+
import { TernSecureInstanceTree, TernSecureAuthOptions, TernSecureAuth, TernSecureStateExtended, TernSecureInstanceTreeOptions, TernSecureConfig } from '@tern-secure/types';
|
|
2
2
|
|
|
3
3
|
declare global {
|
|
4
4
|
interface Window {
|
|
@@ -70,7 +70,7 @@ interface HeadlessUIBrowserConstructor {
|
|
|
70
70
|
*/
|
|
71
71
|
type TernSecureProviderPropsOld = IsomorphicTernSecureOptions & {
|
|
72
72
|
children: React.ReactNode;
|
|
73
|
-
initialState?:
|
|
73
|
+
initialState?: TernSecureStateExtended;
|
|
74
74
|
loadingComponent?: React.ReactNode;
|
|
75
75
|
bypassApiKey?: boolean;
|
|
76
76
|
};
|
|
@@ -92,15 +92,15 @@ type IsomorphicTernSecureOptions = TernSecureInstanceTreeOptions & {
|
|
|
92
92
|
projectId?: string;
|
|
93
93
|
ternSecureConfig?: TernSecureConfig;
|
|
94
94
|
};
|
|
95
|
+
type IsoTernSecureAuthOptions = TernSecureAuthOptions & {
|
|
96
|
+
TernSecureAuth?: TernSecureAuthProps;
|
|
97
|
+
};
|
|
95
98
|
type TernSecureProviderProps = IsoTernSecureAuthOptions & {
|
|
96
99
|
children: React.ReactNode;
|
|
97
|
-
initialState?:
|
|
100
|
+
initialState?: TernSecureStateExtended;
|
|
98
101
|
loadingComponent?: React.ReactNode;
|
|
99
102
|
bypassApiKey?: boolean;
|
|
100
103
|
};
|
|
101
104
|
type TernSecureAuthProps = TernSecureAuth | undefined | null;
|
|
102
|
-
type IsoTernSecureAuthOptions = TernSecureAuthOptions & {
|
|
103
|
-
TernSecureAuth?: TernSecureAuthProps;
|
|
104
|
-
};
|
|
105
105
|
|
|
106
106
|
export { type AuthError, type Browser, type BrowserConstructor, type ConfigValidationResult, type HeadlessUIBrowser, type HeadlessUIBrowserConstructor, type IsoTernSecureAuthOptions, type IsomorphicTernSecureOptions, type SignInResponse, type TernSecureAuthProps, type TernSecureAuthState, type TernSecureProps, type TernSecureProviderProps, type TernSecureProviderPropsOld, type TernSecureUserData, type initialState, isSignInResponse };
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var u=(e,r)=>{for(var t in r)o(e,t,{get:r[t],enumerable:!0})},p=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of a(r))!c.call(e,n)&&n!==t&&o(e,n,{get:()=>r[n],enumerable:!(s=i(r,n))||s.enumerable});return e};var
|
|
1
|
+
"use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var u=(e,r)=>{for(var t in r)o(e,t,{get:r[t],enumerable:!0})},p=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of a(r))!c.call(e,n)&&n!==t&&o(e,n,{get:()=>r[n],enumerable:!(s=i(r,n))||s.enumerable});return e};var d=e=>p(o({},"__esModule",{value:!0}),e);var S={};u(S,{isSignInResponse:()=>l});module.exports=d(S);function l(e){return typeof e=="object"&&"success"in e&&typeof e.success=="boolean"}0&&(module.exports={isSignInResponse});
|
|
2
2
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n TernSecureAuth,\n TernSecureAuthOptions,\n TernSecureConfig,\n TernSecureInstanceTree,\n TernSecureInstanceTreeOptions,\n
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n TernSecureAuth,\n TernSecureAuthOptions,\n TernSecureConfig,\n TernSecureInstanceTree,\n TernSecureInstanceTreeOptions,\n TernSecureStateExtended,\n} from \"@tern-secure/types\";\n\ndeclare global {\n interface Window {\n apiKey?: string;\n customDomain?: TernSecureInstanceTree[\"customDomain\"];\n proxyUrl?: TernSecureInstanceTree[\"proxyUrl\"];\n projectId?: TernSecureInstanceTree[\"projectId\"];\n }\n}\n\n/**\n * TernSecure User\n */\n//export type TernSecureUser = FirebaseUser\n\nexport type TernSecureUserData = {\n uid: string;\n email: string | null;\n emailVerified?: boolean;\n displayName?: string | null;\n};\n\n/**\n * TernSecure Firebase configuration interface\n * Extends Firebase's base configuration options\n */\n{\n /*export interface TernSecureConfig {\n apiKey: string\n authDomain: string\n projectId: string\n storageBucket: string\n messagingSenderId: string\n appId: string\n measurementId?: string\n}*/\n}\n\nexport interface SignInResponse {\n success: boolean;\n message?: string;\n error?: any | undefined;\n user?: any; // Consider a more specific user type if possible, e.g., TernSecureUserData | null\n}\n\nexport interface AuthError extends Error {\n code?: any | string; // Allow string for other potential errors, or be stricter with just AuthErrorCode\n message: string;\n response?: SignInResponse;\n}\n\nexport function isSignInResponse(value: any): value is SignInResponse {\n return (\n typeof value === \"object\" &&\n \"success\" in value &&\n typeof value.success === \"boolean\"\n );\n}\n\n/**\n * Configuration validation result\n */\nexport interface ConfigValidationResult {\n isValid: boolean;\n errors: string[];\n //config: TernSecureConfig\n}\n\n/**\n * TernSecureAuthState\n */\n\nexport type TernSecureAuthState = {\n userId: string | null;\n isLoaded: boolean;\n error: Error | null;\n isValid: boolean;\n isVerified: boolean;\n isAuthenticated: boolean;\n token: any | null;\n email: string | null;\n status: \"loading\" | \"authenticated\" | \"unauthenticated\" | \"unverified\";\n requiresVerification: boolean;\n};\n\n/**\n * TernSecureInitialState\n */\n\nexport type initialState = {\n userId: string | null;\n sessionId: string | undefined;\n};\n\nexport interface BrowserConstructor {\n new (customDomain?: string): Browser;\n}\n\nexport interface HeadlessUIBrowserConstructor {\n new (customDomain?: string): HeadlessUIBrowser;\n}\n/**\n * TernSecureProviderProps\n * @param interface\n */\n\nexport type TernSecureProviderPropsOld = IsomorphicTernSecureOptions & {\n children: React.ReactNode;\n initialState?: TernSecureStateExtended;\n loadingComponent?: React.ReactNode;\n bypassApiKey?: boolean;\n};\n\nexport interface HeadlessUIBrowser extends TernSecureInstanceTree {\n load: (options?: TernSecureInstanceTreeOptions) => Promise<void>;\n setTernAuth: (provider: any) => void;\n}\n\nexport interface Browser extends HeadlessUIBrowser {\n onComponentsReady: Promise<void>;\n components: any;\n}\n\nexport type TernSecureProps =\n | HeadlessUIBrowserConstructor\n | HeadlessUIBrowser\n | Browser\n | BrowserConstructor\n | null\n | undefined;\n\nexport type IsomorphicTernSecureOptions = TernSecureInstanceTreeOptions & {\n TernSecure?: TernSecureProps;\n ternUIVersion?: string;\n apiKey?: string;\n customDomain?: string;\n proxyUrl?: string;\n projectId?: string;\n ternSecureConfig?: TernSecureConfig;\n};\n\nexport type IsoTernSecureAuthOptions = TernSecureAuthOptions & {\n TernSecureAuth?: TernSecureAuthProps;\n};\n\nexport type TernSecureProviderProps = IsoTernSecureAuthOptions & {\n children: React.ReactNode;\n initialState?: TernSecureStateExtended;\n loadingComponent?: React.ReactNode;\n bypassApiKey?: boolean;\n};\n\nexport type TernSecureAuthProps = TernSecureAuth | undefined | null;\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GA2DO,SAASE,EAAiBE,EAAqC,CACpE,OACE,OAAOA,GAAU,UACjB,YAAaA,GACb,OAAOA,EAAM,SAAY,SAE7B","names":["types_exports","__export","isSignInResponse","__toCommonJS","value"]}
|
package/dist/types.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n TernSecureAuth,\n TernSecureAuthOptions,\n TernSecureConfig,\n TernSecureInstanceTree,\n TernSecureInstanceTreeOptions,\n
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type {\n TernSecureAuth,\n TernSecureAuthOptions,\n TernSecureConfig,\n TernSecureInstanceTree,\n TernSecureInstanceTreeOptions,\n TernSecureStateExtended,\n} from \"@tern-secure/types\";\n\ndeclare global {\n interface Window {\n apiKey?: string;\n customDomain?: TernSecureInstanceTree[\"customDomain\"];\n proxyUrl?: TernSecureInstanceTree[\"proxyUrl\"];\n projectId?: TernSecureInstanceTree[\"projectId\"];\n }\n}\n\n/**\n * TernSecure User\n */\n//export type TernSecureUser = FirebaseUser\n\nexport type TernSecureUserData = {\n uid: string;\n email: string | null;\n emailVerified?: boolean;\n displayName?: string | null;\n};\n\n/**\n * TernSecure Firebase configuration interface\n * Extends Firebase's base configuration options\n */\n{\n /*export interface TernSecureConfig {\n apiKey: string\n authDomain: string\n projectId: string\n storageBucket: string\n messagingSenderId: string\n appId: string\n measurementId?: string\n}*/\n}\n\nexport interface SignInResponse {\n success: boolean;\n message?: string;\n error?: any | undefined;\n user?: any; // Consider a more specific user type if possible, e.g., TernSecureUserData | null\n}\n\nexport interface AuthError extends Error {\n code?: any | string; // Allow string for other potential errors, or be stricter with just AuthErrorCode\n message: string;\n response?: SignInResponse;\n}\n\nexport function isSignInResponse(value: any): value is SignInResponse {\n return (\n typeof value === \"object\" &&\n \"success\" in value &&\n typeof value.success === \"boolean\"\n );\n}\n\n/**\n * Configuration validation result\n */\nexport interface ConfigValidationResult {\n isValid: boolean;\n errors: string[];\n //config: TernSecureConfig\n}\n\n/**\n * TernSecureAuthState\n */\n\nexport type TernSecureAuthState = {\n userId: string | null;\n isLoaded: boolean;\n error: Error | null;\n isValid: boolean;\n isVerified: boolean;\n isAuthenticated: boolean;\n token: any | null;\n email: string | null;\n status: \"loading\" | \"authenticated\" | \"unauthenticated\" | \"unverified\";\n requiresVerification: boolean;\n};\n\n/**\n * TernSecureInitialState\n */\n\nexport type initialState = {\n userId: string | null;\n sessionId: string | undefined;\n};\n\nexport interface BrowserConstructor {\n new (customDomain?: string): Browser;\n}\n\nexport interface HeadlessUIBrowserConstructor {\n new (customDomain?: string): HeadlessUIBrowser;\n}\n/**\n * TernSecureProviderProps\n * @param interface\n */\n\nexport type TernSecureProviderPropsOld = IsomorphicTernSecureOptions & {\n children: React.ReactNode;\n initialState?: TernSecureStateExtended;\n loadingComponent?: React.ReactNode;\n bypassApiKey?: boolean;\n};\n\nexport interface HeadlessUIBrowser extends TernSecureInstanceTree {\n load: (options?: TernSecureInstanceTreeOptions) => Promise<void>;\n setTernAuth: (provider: any) => void;\n}\n\nexport interface Browser extends HeadlessUIBrowser {\n onComponentsReady: Promise<void>;\n components: any;\n}\n\nexport type TernSecureProps =\n | HeadlessUIBrowserConstructor\n | HeadlessUIBrowser\n | Browser\n | BrowserConstructor\n | null\n | undefined;\n\nexport type IsomorphicTernSecureOptions = TernSecureInstanceTreeOptions & {\n TernSecure?: TernSecureProps;\n ternUIVersion?: string;\n apiKey?: string;\n customDomain?: string;\n proxyUrl?: string;\n projectId?: string;\n ternSecureConfig?: TernSecureConfig;\n};\n\nexport type IsoTernSecureAuthOptions = TernSecureAuthOptions & {\n TernSecureAuth?: TernSecureAuthProps;\n};\n\nexport type TernSecureProviderProps = IsoTernSecureAuthOptions & {\n children: React.ReactNode;\n initialState?: TernSecureStateExtended;\n loadingComponent?: React.ReactNode;\n bypassApiKey?: boolean;\n};\n\nexport type TernSecureAuthProps = TernSecureAuth | undefined | null;\n"],"mappings":"AA2DO,SAASA,EAAiBC,EAAqC,CACpE,OACE,OAAOA,GAAU,UACjB,YAAaA,GACb,OAAOA,EAAM,SAAY,SAE7B","names":["isSignInResponse","value"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tern-secure/react",
|
|
3
|
-
"version": "1.2.0-canary.
|
|
3
|
+
"version": "1.2.0-canary.v20251019190011",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/TernSecure/auth.git",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"tailwind-merge": "^2.5.5",
|
|
37
37
|
"tailwindcss-animate": "^1.0.7",
|
|
38
38
|
"tslib": "2.4.1",
|
|
39
|
-
"@tern-secure/auth": "1.1.0-canary.
|
|
40
|
-
"@tern-secure/shared": "1.3.0-canary.
|
|
41
|
-
"@tern-secure/types": "1.1.0-canary.
|
|
39
|
+
"@tern-secure/auth": "1.1.0-canary.v20251019190011",
|
|
40
|
+
"@tern-secure/shared": "1.3.0-canary.v20251019190011",
|
|
41
|
+
"@tern-secure/types": "1.1.0-canary.v20251019190011"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@tailwindcss/cli": "^4.1.6",
|