@tern-secure/nextjs 3.1.62 → 3.1.64
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/cjs/app-router/client/TernSecureProvider.cjs +4 -2
- package/dist/cjs/app-router/client/TernSecureProvider.cjs.map +1 -1
- package/dist/cjs/app-router/server/TernSecureServerProvider.cjs +69 -105
- package/dist/cjs/app-router/server/TernSecureServerProvider.cjs.map +1 -1
- package/dist/cjs/boundary/TernSecureCtx.cjs +1 -1
- package/dist/cjs/boundary/TernSecureCtx.cjs.map +1 -1
- package/dist/cjs/boundary/hooks/{use-auth.cjs → useAuth.cjs} +24 -26
- package/dist/cjs/boundary/hooks/useAuth.cjs.map +1 -0
- package/dist/cjs/index.cjs +93 -138
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/app-router/client/TernSecureProvider.d.ts +8 -1
- package/dist/esm/app-router/client/TernSecureProvider.js +3 -38
- package/dist/esm/app-router/client/TernSecureProvider.js.map +1 -1
- package/dist/esm/app-router/server/TernSecureServerProvider.d.ts +19 -3
- package/dist/esm/app-router/server/TernSecureServerProvider.js +5 -1
- package/dist/esm/boundary/TernSecureCtx.js +1 -1
- package/dist/esm/boundary/hooks/useAuth.d.ts +7 -0
- package/dist/esm/boundary/hooks/useAuth.js +7 -0
- package/dist/esm/boundary/hooks/useAuth.js.map +1 -0
- package/dist/esm/{chunk-RAZTKM22.js → chunk-LSHP5OGU.js} +3 -3
- package/dist/esm/chunk-LSHP5OGU.js.map +1 -0
- package/dist/esm/chunk-PY4JT34Z.js +21 -0
- package/dist/esm/chunk-PY4JT34Z.js.map +1 -0
- package/dist/esm/chunk-XXTEVPIU.js +24 -0
- package/dist/esm/chunk-XXTEVPIU.js.map +1 -0
- package/dist/esm/chunk-ZLZQ7LBR.js +41 -0
- package/dist/esm/chunk-ZLZQ7LBR.js.map +1 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +4 -3
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/boundary/hooks/use-auth.cjs.map +0 -1
- package/dist/esm/boundary/hooks/use-auth.d.ts +0 -14
- package/dist/esm/boundary/hooks/use-auth.js +0 -6
- package/dist/esm/boundary/hooks/use-auth.js.map +0 -1
- package/dist/esm/chunk-D4W62QPB.js +0 -24
- package/dist/esm/chunk-D4W62QPB.js.map +0 -1
- package/dist/esm/chunk-RAZTKM22.js.map +0 -1
- package/dist/esm/chunk-WRPJTYEG.js +0 -23
- package/dist/esm/chunk-WRPJTYEG.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TernSecureClientProvider } from './chunk-ZLZQ7LBR.js';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function TernSecureLoadingFallback() {
|
|
6
|
+
return /* @__PURE__ */ jsx(
|
|
7
|
+
"div",
|
|
8
|
+
{
|
|
9
|
+
"aria-label": "Loading authentication",
|
|
10
|
+
role: "status",
|
|
11
|
+
className: "tern-secure-loading",
|
|
12
|
+
children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading authentication..." })
|
|
13
|
+
}
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
function TernSecureServerProvider({
|
|
17
|
+
children
|
|
18
|
+
}) {
|
|
19
|
+
return /* @__PURE__ */ jsx(React.Suspense, { fallback: /* @__PURE__ */ jsx(TernSecureLoadingFallback, {}), children: /* @__PURE__ */ jsx(TernSecureClientProvider, { children }) });
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { TernSecureServerProvider };
|
|
23
|
+
//# sourceMappingURL=chunk-XXTEVPIU.js.map
|
|
24
|
+
//# sourceMappingURL=chunk-XXTEVPIU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/app-router/server/TernSecureServerProvider.tsx"],"names":[],"mappings":";;;;AAMA,SAAS,yBAA4B,GAAA;AACnC,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,wBAAA;AAAA,MACX,IAAK,EAAA,QAAA;AAAA,MACL,SAAU,EAAA,qBAAA;AAAA,MAEV,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAK,SAAU,EAAA,SAAA,EAAU,QAAyB,EAAA,2BAAA,EAAA;AAAA;AAAA,GACrD;AAEJ;AA2BO,SAAS,wBAAyB,CAAA;AAAA,EACvC;AACF,CAAkC,EAAA;AAChC,EACE,uBAAA,GAAA,CAAC,KAAM,CAAA,QAAA,EAAN,EAAe,QAAA,kBAAW,GAAA,CAAA,yBAAA,EAAA,EAA0B,CACnD,EAAA,QAAA,kBAAA,GAAA,CAAC,wBACE,EAAA,EAAA,QAAA,EACH,CACF,EAAA,CAAA;AAEJ","file":"chunk-XXTEVPIU.js","sourcesContent":["import React from \"react\"\r\nimport { TernSecureClientProvider } from \"../client/TernSecureProvider\"\r\n\r\n\r\n\r\n// Loading fallback component\r\nfunction TernSecureLoadingFallback() {\r\n return (\r\n <div \r\n aria-label=\"Loading authentication\" \r\n role=\"status\"\r\n className=\"tern-secure-loading\"\r\n >\r\n <span className=\"sr-only\">Loading authentication...</span>\r\n </div>\r\n )\r\n}\r\n\r\ninterface TernSecureServerProviderProps {\r\n children: React.ReactNode\r\n}\r\n\r\n/**\r\n * Root Provider for TernSecure\r\n * Use this in your Next.js App Router root layout\r\n * Automatically handles client/server boundary and authentication state\r\n * \r\n * @example\r\n * // app/layout.tsx\r\n * import { TernSecureProvider } from '@tern/secure'\r\n * \r\n * export default function RootLayout({ children }) {\r\n * return (\r\n * <html>\r\n * <body>\r\n * <TernSecureProvider>\r\n * {children}\r\n * </TernSecureProvider>\r\n * </body>\r\n * </html>\r\n * )\r\n * }\r\n */\r\nexport function TernSecureServerProvider({ \r\n children \r\n}: TernSecureServerProviderProps) {\r\n return (\r\n <React.Suspense fallback={<TernSecureLoadingFallback />}>\r\n <TernSecureClientProvider>\r\n {children}\r\n </TernSecureClientProvider>\r\n </React.Suspense>\r\n )\r\n}\r\n\r\n// Export types for internal use\r\nexport type { TernSecureServerProviderProps }"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { TernSecureCtxProvider } from './chunk-LSHP5OGU.js';
|
|
2
|
+
import { TernSecureAuth } from './chunk-FVV74XVR.js';
|
|
3
|
+
import React, { useState, useEffect } from 'react';
|
|
4
|
+
import { onAuthStateChanged } from 'firebase/auth';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var AuthStateContext = React.createContext(null);
|
|
8
|
+
var auth = TernSecureAuth();
|
|
9
|
+
function TernSecureClientProvider({ children }) {
|
|
10
|
+
const [authState, setAuthState] = useState({
|
|
11
|
+
loading: true,
|
|
12
|
+
isSignedIn: false,
|
|
13
|
+
userId: null,
|
|
14
|
+
error: null
|
|
15
|
+
});
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const unsubscribe = onAuthStateChanged(auth, (user) => {
|
|
18
|
+
if (user) {
|
|
19
|
+
setAuthState({
|
|
20
|
+
loading: false,
|
|
21
|
+
isSignedIn: true,
|
|
22
|
+
userId: user.uid,
|
|
23
|
+
error: null
|
|
24
|
+
});
|
|
25
|
+
} else {
|
|
26
|
+
setAuthState({
|
|
27
|
+
loading: false,
|
|
28
|
+
isSignedIn: false,
|
|
29
|
+
userId: null,
|
|
30
|
+
error: null
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return () => unsubscribe();
|
|
35
|
+
}, []);
|
|
36
|
+
return /* @__PURE__ */ jsx(TernSecureCtxProvider, { children: /* @__PURE__ */ jsx(AuthStateContext.Provider, { value: authState, children }) });
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { AuthStateContext, TernSecureClientProvider };
|
|
40
|
+
//# sourceMappingURL=chunk-ZLZQ7LBR.js.map
|
|
41
|
+
//# sourceMappingURL=chunk-ZLZQ7LBR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/app-router/client/TernSecureProvider.tsx"],"names":[],"mappings":";;;;;;AAca,IAAA,gBAAA,GAAmB,KAAM,CAAA,aAAA,CAAsC,IAAI;AAMhF,IAAM,OAAO,cAAe,EAAA;AAErB,SAAS,wBAAA,CAAyB,EAAE,QAAA,EAAmC,EAAA;AAC5E,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAA0B,CAAA;AAAA,IAC1D,OAAS,EAAA,IAAA;AAAA,IACT,UAAY,EAAA,KAAA;AAAA,IACZ,MAAQ,EAAA,IAAA;AAAA,IACR,KAAO,EAAA;AAAA,GACR,CAAA;AACH,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,MAAM,WAAc,GAAA,kBAAA,CAAmB,IAAM,EAAA,CAAC,IAAS,KAAA;AACrD,MAAA,IAAI,IAAM,EAAA;AACR,QAAa,YAAA,CAAA;AAAA,UACX,OAAS,EAAA,KAAA;AAAA,UACT,UAAY,EAAA,IAAA;AAAA,UACZ,QAAQ,IAAK,CAAA,GAAA;AAAA,UACb,KAAO,EAAA;AAAA,SACR,CAAA;AAAA,OACI,MAAA;AACL,QAAa,YAAA,CAAA;AAAA,UACX,OAAS,EAAA,KAAA;AAAA,UACT,UAAY,EAAA,KAAA;AAAA,UACZ,MAAQ,EAAA,IAAA;AAAA,UACR,KAAO,EAAA;AAAA,SACR,CAAA;AAAA;AACH,KACD,CAAA;AAED,IAAA,OAAO,MAAM,WAAY,EAAA;AAAA,GAC3B,EAAG,EAAE,CAAA;AAGL,EACE,uBAAA,GAAA,CAAC,yBACC,QAAC,kBAAA,GAAA,CAAA,gBAAA,CAAiB,UAAjB,EAA0B,KAAA,EAAO,SACjC,EAAA,QAAA,EACD,CACF,EAAA,CAAA;AAEJ","file":"chunk-ZLZQ7LBR.js","sourcesContent":["'use client'\r\n\r\nimport React, { useState, useEffect } from 'react'\r\nimport { TernSecureAuth } from '../../utils/client-init'\r\nimport { onAuthStateChanged } from \"firebase/auth\"\r\nimport { useInternalContext, TernSecureCtxProvider } from '../../boundary/TernSecureCtx'\r\n\r\nexport type TernSecureState = {\r\n userId: string | null\r\n loading: boolean\r\n error: string | null\r\n isSignedIn: boolean\r\n}\r\n\r\nexport const AuthStateContext = React.createContext<TernSecureState | null>(null)\r\n\r\ninterface TernSecureClientProps {\r\n children: React.ReactNode\r\n}\r\n\r\nconst auth = TernSecureAuth();\r\n\r\nexport function TernSecureClientProvider({ children }: TernSecureClientProps) {\r\n const [authState, setAuthState] = useState<TernSecureState>({\r\n loading: true,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\nuseEffect(() => {\r\n const unsubscribe = onAuthStateChanged(auth, (user) => {\r\n if (user) {\r\n setAuthState({\r\n loading: false,\r\n isSignedIn: true,\r\n userId: user.uid,\r\n error: null\r\n })\r\n } else {\r\n setAuthState({\r\n loading: false,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\n }\r\n })\r\n \r\n return () => unsubscribe()\r\n }, [])\r\n\r\n\r\n return (\r\n <TernSecureCtxProvider>\r\n <AuthStateContext.Provider value={authState}>\r\n {children}\r\n </AuthStateContext.Provider>\r\n </TernSecureCtxProvider>\r\n )\r\n}\r\n\r\nexport type { TernSecureClientProps }"]}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { TernSecureServerProvider } from './app-router/server/TernSecureServerProvider.js';
|
|
2
|
+
export { TernSecureState } from './app-router/client/TernSecureProvider.js';
|
|
2
3
|
export { TernSecureAuth, TernSecureFirestore, TernSecureStorage } from './utils/client-init.js';
|
|
3
4
|
export { loadFireConfig, validateConfig } from './utils/config.js';
|
|
4
5
|
export { signInWithEmail } from './app-router/server/auth.js';
|
|
5
|
-
export { useAuth } from './boundary/hooks/
|
|
6
|
+
export { useAuth } from './boundary/hooks/useAuth.js';
|
|
6
7
|
export { SignIn } from './components/sign-in.js';
|
|
7
8
|
import 'react/jsx-runtime';
|
|
8
9
|
import 'react';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { TernSecureServerProvider } from './chunk-
|
|
2
|
-
export { useAuth } from './chunk-
|
|
3
|
-
import './chunk-
|
|
1
|
+
import { TernSecureServerProvider } from './chunk-XXTEVPIU.js';
|
|
2
|
+
export { useAuth } from './chunk-PY4JT34Z.js';
|
|
3
|
+
import './chunk-ZLZQ7LBR.js';
|
|
4
|
+
import './chunk-LSHP5OGU.js';
|
|
4
5
|
export { SignIn } from './chunk-EIOZNLP2.js';
|
|
5
6
|
export { signInWithEmail } from './chunk-4XFIX4FL.js';
|
|
6
7
|
export { TernSecureAuth, TernSecureFirestore, TernSecureStorage } from './chunk-FVV74XVR.js';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAWO,IAAM,kBAAqB,GAAA","file":"index.js","sourcesContent":["import { TernSecureServerProvider } from './app-router/server/TernSecureServerProvider'\r\nimport type { TernSecureState } from './app-router/client/TernSecureProvider'\r\nexport { TernSecureAuth, TernSecureFirestore, TernSecureStorage } from './utils/client-init'\r\nexport { loadFireConfig, validateConfig } from './utils/config'\r\nexport { signInWithEmail } from './app-router/server/auth'\r\n//export { useInternalContext } from './boundary/TernSecureCtx'\r\n//export { TernSecureClientProvider } from './app-router/client/TernSecureProvider'\r\n//export { TernSecureProvider } from './app-router/server/TernSecureServerProvider'\r\nexport { useAuth } from './boundary/hooks/useAuth' \r\nexport { SignIn } from './components/sign-in'\r\n\r\nexport const TernSecureProvider = TernSecureServerProvider\r\nexport type { TernSecureState }"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utils/config.ts","../../../../src/utils/client-init.ts","../../../../src/boundary/TernSecureCtx.tsx","../../../../src/boundary/hooks/use-auth.ts"],"names":["config","initializeApp","getAuth","setPersistence","browserSessionPersistence","getFirestore","getStorage","React","useMemo","useState"],"mappings":";;;;;;;;;;;;;;AAMO,IAAM,iBAAiB,OAAyB;AAAA,EACrD,MAAA,EAAQ,OAAQ,CAAA,GAAA,CAAI,4BAAgC,IAAA,EAAA;AAAA,EACpD,UAAA,EAAY,OAAQ,CAAA,GAAA,CAAI,gCAAoC,IAAA,EAAA;AAAA,EAC5D,SAAA,EAAW,OAAQ,CAAA,GAAA,CAAI,+BAAmC,IAAA,EAAA;AAAA,EAC1D,aAAA,EAAe,OAAQ,CAAA,GAAA,CAAI,mCAAuC,IAAA,EAAA;AAAA,EAClE,iBAAA,EAAmB,OAAQ,CAAA,GAAA,CAAI,wCAA4C,IAAA,EAAA;AAAA,EAC3E,KAAA,EAAO,OAAQ,CAAA,GAAA,CAAI,2BAA+B,IAAA,EAAA;AAAA,EAClD,aAAA,EAAe,OAAQ,CAAA,GAAA,CAAI,mCAAuC,IAAA,KAAA;AACpE,CAAA,CAAA;AAQO,IAAM,cAAA,GAAiB,CAACA,OAAqD,KAAA;AAClF,EAAA,MAAM,cAA6C,GAAA;AAAA,IACjD,QAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,cAAA,CAAe,QAAQ,CAAS,KAAA,KAAA;AAC9B,IAAI,IAAA,CAACA,OAAO,CAAA,KAAK,CAAG,EAAA;AAClB,MAAA,MAAA,CAAO,KAAK,CAAgD,6CAAA,EAAA,MAAA,CAAO,KAAK,CAAE,CAAA,WAAA,EAAa,CAAE,CAAA,CAAA;AAAA;AAC3F,GACD,CAAA;AAED,EAAO,OAAA;AAAA,IACL,OAAA,EAAS,OAAO,MAAW,KAAA,CAAA;AAAA,IAC3B,MAAA;AAAA,IACA,MAAAA,EAAAA;AAAA,GACF;AACF,CAAA;AAMO,IAAM,mBAAmB,MAAwB;AACtD,EAAA,MAAMA,UAAS,cAAe,EAAA;AAC9B,EAAM,MAAA,gBAAA,GAAmB,eAAeA,OAAM,CAAA;AAE9C,EAAI,IAAA,CAAC,iBAAiB,OAAS,EAAA;AAC7B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA;AAAA,EAA8C,gBAAiB,CAAA,MAAA,CAAO,IAAK,CAAA,IAAI,CAAC,CAAA;AAAA,KAClF;AAAA;AAGF,EAAOA,OAAAA,OAAAA;AACT,CAAA;;;ACvDA,IAAM,SAAS,gBAAiB,EAAA;AAChC,IAAM,SAAA,GAAYC,kBAAc,MAAM,CAAA;AACtC,IAAM,IAAA,GAAOC,eAAQ,SAAS,CAAA;AAC9BC,qBAAA,CAAe,MAAMC,gCAAyB,CAAA;AAC5BC,uBAAa,SAAS;AACxBC,mBAAW,SAAS;AAE7B,IAAM,iBAAiB,MAAM,IAAA;ACApC,IAAM,iBAAA,GAAoBC,sBAAM,CAAA,aAAA,CAAyC,IAAI,CAAA;AAG7E,iBAAA,CAAkB,WAAc,GAAA,mBAAA;AAEhC,IAAM,kBAAA,GAAqB,CAAC,QAAA,GAAmB,oBAAyB,KAAA;AAEtE,EAAM,MAAA,OAAA,GAAUA,sBAAM,CAAA,UAAA,CAAW,iBAAiB,CAAA;AAElD,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,GAAG,QAAQ,CAAA,6CAAA;AAAA,KACb;AAAA;AAGF,EAAO,OAAA,OAAA;AACT,CAAA;;;ACjBO,SAAS,OAAU,GAAA;AACxB,EAAaC,aAAQ,CAAA,MAAM,cAAe,EAAA,EAAG,EAAE;AAC/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,cAAoB,CAAA;AAAA,IACpD,OAAS,EAAA,IAAA;AAAA,IACT,UAAY,EAAA,KAAA;AAAA,IACZ,MAAQ,EAAA,IAAA;AAAA,IACR,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,EAAO,OAAA;AAAA,IACL,SAAS,SAAU,CAAA,OAAA;AAAA,IACnB,YAAY,SAAU,CAAA,UAAA;AAAA,IACtB,QAAQ,SAAU,CAAA,MAAA;AAAA,IAClB,OAAO,SAAU,CAAA;AAAA,GACnB;AACF","file":"use-auth.cjs","sourcesContent":["import { TernSecureConfig, ConfigValidationResult } from '../types'\r\n\r\n/**\r\n * Loads Firebase configuration from environment variables\r\n * @returns {TernSecureConfig} Firebase configuration object\r\n */\r\nexport const loadFireConfig = (): TernSecureConfig => ({\r\n apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || '',\r\n authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || '',\r\n projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || '',\r\n storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || '',\r\n messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || '',\r\n appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || '',\r\n measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || undefined,\r\n})\r\n\r\n/**\r\n * Validates Firebase configuration\r\n * @param {TernSecureConfig} config - Firebase configuration object\r\n * @throws {Error} If required configuration values are missing\r\n * @returns {TernSecureConfig} Validated configuration object\r\n */\r\nexport const validateConfig = (config: TernSecureConfig): ConfigValidationResult => {\r\n const requiredFields: (keyof TernSecureConfig)[] = [\r\n 'apiKey',\r\n 'authDomain',\r\n 'projectId',\r\n 'storageBucket',\r\n 'messagingSenderId',\r\n 'appId'\r\n ]\r\n\r\n const errors: string[] = []\r\n \r\n requiredFields.forEach(field => {\r\n if (!config[field]) {\r\n errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`)\r\n }\r\n })\r\n\r\n return {\r\n isValid: errors.length === 0,\r\n errors,\r\n config\r\n }\r\n}\r\n\r\n/**\r\n * Initializes configuration with validation\r\n * @throws {Error} If configuration is invalid\r\n */\r\nexport const initializeConfig = (): TernSecureConfig => {\r\n const config = loadFireConfig()\r\n const validationResult = validateConfig(config)\r\n\r\n if (!validationResult.isValid) {\r\n throw new Error(\r\n `Firebase configuration validation failed:\\n${validationResult.errors.join('\\n')}`\r\n )\r\n }\r\n\r\n return config\r\n}","import { initializeApp } from 'firebase/app';\r\nimport { getAuth, setPersistence, browserSessionPersistence } from 'firebase/auth';\r\nimport { getFirestore } from 'firebase/firestore';\r\nimport { getStorage } from 'firebase/storage';\r\nimport { initializeConfig} from './config';\r\n\r\n// Initialize immediately\r\nconst config = initializeConfig();\r\nconst clientApp = initializeApp(config)\r\nconst auth = getAuth(clientApp);\r\nsetPersistence(auth, browserSessionPersistence); //to change later user should be able to choose persistance\r\nconst firestore = getFirestore(clientApp);\r\nconst storage = getStorage(clientApp);\r\n\r\nexport const TernSecureAuth = () => auth;\r\nexport const TernSecureFirestore = () => firestore;\r\nexport const TernSecureStorage = () => storage;","'use client'\r\n\r\nimport React from 'react'\r\n\r\n// Core types\r\nexport type TernSecureCtxValue = {\r\n dynamic: boolean\r\n}\r\n\r\nexport type TernSecureProviderProps = React.PropsWithChildren<{\r\n options?: unknown // Made optional since we're not using it\r\n}>\r\n\r\n// Context with proper null handling\r\nconst TernSecureContext = React.createContext<TernSecureCtxValue | null>(null)\r\n\r\n// Set display name for better debugging\r\nTernSecureContext.displayName = 'TernSecureContext'\r\n\r\nconst useInternalContext = (hookname: string = 'useInternalContext') => {\r\n\r\n const context = React.useContext(TernSecureContext)\r\n \r\n if (!context) {\r\n throw new Error(\r\n `${hookname} must be used within TernSecureClientProvider`\r\n )\r\n }\r\n\r\n return context\r\n}\r\n\r\n/**\r\n * Provider component for TernSecure\r\n * Must be used in client components only\r\n */\r\nconst TernSecureCtxProvider: React.FC<TernSecureProviderProps> = ({ \r\n children \r\n}) => {\r\n\r\n return (\r\n <TernSecureContext.Provider value={{ dynamic: true }}>\r\n {children}\r\n </TernSecureContext.Provider>\r\n )\r\n}\r\n\r\nexport {\r\n useInternalContext,\r\n TernSecureCtxProvider\r\n}","'use client'\r\n\r\nimport { useEffect, useState, useMemo } from 'react'\r\nimport { TernSecureAuth } from '../../utils/client-init'\r\nimport { useInternalContext } from '../TernSecureCtx'\r\n\r\nexport interface AuthState {\r\n userId: string | null\r\n loading: boolean;\r\n error: Error | null;\r\n isSignedIn: boolean;\r\n}\r\n\r\nexport function useAuth() {\r\n const auth = useMemo(() => TernSecureAuth(), [])\r\n const [authState, setAuthState] = useState<AuthState>({\r\n loading: true,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\n\r\n useInternalContext('useAuth')\r\n return {\r\n loading: authState.loading,\r\n isSignedIn: authState.isSignedIn,\r\n userId: authState.userId,\r\n error: authState.error\r\n }\r\n}"]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
interface AuthState {
|
|
2
|
-
userId: string | null;
|
|
3
|
-
loading: boolean;
|
|
4
|
-
error: Error | null;
|
|
5
|
-
isSignedIn: boolean;
|
|
6
|
-
}
|
|
7
|
-
declare function useAuth(): {
|
|
8
|
-
loading: boolean;
|
|
9
|
-
isSignedIn: boolean;
|
|
10
|
-
userId: string | null;
|
|
11
|
-
error: Error | null;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export { type AuthState, useAuth };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"use-auth.js"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { useInternalContext } from './chunk-RAZTKM22.js';
|
|
2
|
-
import { TernSecureAuth } from './chunk-FVV74XVR.js';
|
|
3
|
-
import { useMemo, useState } from 'react';
|
|
4
|
-
|
|
5
|
-
function useAuth() {
|
|
6
|
-
useMemo(() => TernSecureAuth(), []);
|
|
7
|
-
const [authState, setAuthState] = useState({
|
|
8
|
-
loading: true,
|
|
9
|
-
isSignedIn: false,
|
|
10
|
-
userId: null,
|
|
11
|
-
error: null
|
|
12
|
-
});
|
|
13
|
-
useInternalContext("useAuth");
|
|
14
|
-
return {
|
|
15
|
-
loading: authState.loading,
|
|
16
|
-
isSignedIn: authState.isSignedIn,
|
|
17
|
-
userId: authState.userId,
|
|
18
|
-
error: authState.error
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export { useAuth };
|
|
23
|
-
//# sourceMappingURL=chunk-D4W62QPB.js.map
|
|
24
|
-
//# sourceMappingURL=chunk-D4W62QPB.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/boundary/hooks/use-auth.ts"],"names":[],"mappings":";;;;AAaO,SAAS,OAAU,GAAA;AACxB,EAAa,OAAQ,CAAA,MAAM,cAAe,EAAA,EAAG,EAAE;AAC/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAAoB,CAAA;AAAA,IACpD,OAAS,EAAA,IAAA;AAAA,IACT,UAAY,EAAA,KAAA;AAAA,IACZ,MAAQ,EAAA,IAAA;AAAA,IACR,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAA,kBAAA,CAAmB,SAAS,CAAA;AAC5B,EAAO,OAAA;AAAA,IACL,SAAS,SAAU,CAAA,OAAA;AAAA,IACnB,YAAY,SAAU,CAAA,UAAA;AAAA,IACtB,QAAQ,SAAU,CAAA,MAAA;AAAA,IAClB,OAAO,SAAU,CAAA;AAAA,GACnB;AACF","file":"chunk-D4W62QPB.js","sourcesContent":["'use client'\r\n\r\nimport { useEffect, useState, useMemo } from 'react'\r\nimport { TernSecureAuth } from '../../utils/client-init'\r\nimport { useInternalContext } from '../TernSecureCtx'\r\n\r\nexport interface AuthState {\r\n userId: string | null\r\n loading: boolean;\r\n error: Error | null;\r\n isSignedIn: boolean;\r\n}\r\n\r\nexport function useAuth() {\r\n const auth = useMemo(() => TernSecureAuth(), [])\r\n const [authState, setAuthState] = useState<AuthState>({\r\n loading: true,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\n\r\n useInternalContext('useAuth')\r\n return {\r\n loading: authState.loading,\r\n isSignedIn: authState.isSignedIn,\r\n userId: authState.userId,\r\n error: authState.error\r\n }\r\n}"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/boundary/TernSecureCtx.tsx"],"names":[],"mappings":";;;;AAcA,IAAM,iBAAA,GAAoB,KAAM,CAAA,aAAA,CAAyC,IAAI,CAAA;AAG7E,iBAAA,CAAkB,WAAc,GAAA,mBAAA;AAE1B,IAAA,kBAAA,GAAqB,CAAC,QAAA,GAAmB,oBAAyB,KAAA;AAEtE,EAAM,MAAA,OAAA,GAAU,KAAM,CAAA,UAAA,CAAW,iBAAiB,CAAA;AAElD,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,GAAG,QAAQ,CAAA,6CAAA;AAAA,KACb;AAAA;AAGF,EAAO,OAAA,OAAA;AACT;AAMA,IAAM,wBAA2D,CAAC;AAAA,EAChE;AACF,CAAM,KAAA;AAEJ,EACE,uBAAA,GAAA,CAAC,kBAAkB,QAAlB,EAAA,EAA2B,OAAO,EAAE,OAAA,EAAS,IAAK,EAAA,EAChD,QACH,EAAA,CAAA;AAEJ","file":"chunk-RAZTKM22.js","sourcesContent":["'use client'\r\n\r\nimport React from 'react'\r\n\r\n// Core types\r\nexport type TernSecureCtxValue = {\r\n dynamic: boolean\r\n}\r\n\r\nexport type TernSecureProviderProps = React.PropsWithChildren<{\r\n options?: unknown // Made optional since we're not using it\r\n}>\r\n\r\n// Context with proper null handling\r\nconst TernSecureContext = React.createContext<TernSecureCtxValue | null>(null)\r\n\r\n// Set display name for better debugging\r\nTernSecureContext.displayName = 'TernSecureContext'\r\n\r\nconst useInternalContext = (hookname: string = 'useInternalContext') => {\r\n\r\n const context = React.useContext(TernSecureContext)\r\n \r\n if (!context) {\r\n throw new Error(\r\n `${hookname} must be used within TernSecureClientProvider`\r\n )\r\n }\r\n\r\n return context\r\n}\r\n\r\n/**\r\n * Provider component for TernSecure\r\n * Must be used in client components only\r\n */\r\nconst TernSecureCtxProvider: React.FC<TernSecureProviderProps> = ({ \r\n children \r\n}) => {\r\n\r\n return (\r\n <TernSecureContext.Provider value={{ dynamic: true }}>\r\n {children}\r\n </TernSecureContext.Provider>\r\n )\r\n}\r\n\r\nexport {\r\n useInternalContext,\r\n TernSecureCtxProvider\r\n}"]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import dynamic from 'next/dynamic';
|
|
3
|
-
import { jsx } from 'react/jsx-runtime';
|
|
4
|
-
|
|
5
|
-
// src/app-router/server/TernSecureServerProvider.tsx
|
|
6
|
-
var TernSecureClientProvider = dynamic(
|
|
7
|
-
() => import('./app-router/client/TernSecureProvider.js').then((mod) => mod.TernSecureClientProvider),
|
|
8
|
-
{
|
|
9
|
-
loading: () => /* @__PURE__ */ jsx(TernSecureLoadingFallback, {})
|
|
10
|
-
}
|
|
11
|
-
);
|
|
12
|
-
function TernSecureLoadingFallback() {
|
|
13
|
-
return /* @__PURE__ */ jsx("div", { "aria-label": "Loading authentication", role: "status", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading authentication..." }) });
|
|
14
|
-
}
|
|
15
|
-
function TernSecureServerProvider({
|
|
16
|
-
children
|
|
17
|
-
}) {
|
|
18
|
-
return /* @__PURE__ */ jsx(React.Suspense, { fallback: /* @__PURE__ */ jsx(TernSecureLoadingFallback, {}), children: /* @__PURE__ */ jsx(TernSecureClientProvider, { children }) });
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { TernSecureServerProvider };
|
|
22
|
-
//# sourceMappingURL=chunk-WRPJTYEG.js.map
|
|
23
|
-
//# sourceMappingURL=chunk-WRPJTYEG.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/app-router/server/TernSecureServerProvider.tsx"],"names":[],"mappings":";;;;;AAKA,IAAM,wBAA2B,GAAA,OAAA;AAAA,EAC/B,MAAM,OAAO,2CAA8B,EAAE,IAAK,CAAA,CAAA,GAAA,KAAO,IAAI,wBAAwB,CAAA;AAAA,EACrF;AAAA,IACE,OAAA,EAAS,sBAAM,GAAA,CAAC,yBAA0B,EAAA,EAAA;AAAA;AAE9C,CAAA;AAGA,SAAS,yBAA4B,GAAA;AACnC,EACE,uBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,YAAA,EAAW,wBAAyB,EAAA,IAAA,EAAK,QAC5C,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAU,SAAU,EAAA,QAAA,EAAA,2BAAA,EAAyB,CACrD,EAAA,CAAA;AAEJ;AAWO,SAAS,wBAAyB,CAAA;AAAA,EACvC;AACF,CAAkC,EAAA;AAChC,EACE,uBAAA,GAAA,CAAC,KAAM,CAAA,QAAA,EAAN,EAAe,QAAA,kBAAW,GAAA,CAAA,yBAAA,EAAA,EAA0B,CACnD,EAAA,QAAA,kBAAA,GAAA,CAAC,wBACE,EAAA,EAAA,QAAA,EACH,CACF,EAAA,CAAA;AAEJ","file":"chunk-WRPJTYEG.js","sourcesContent":["import React from \"react\"\r\nimport dynamic from 'next/dynamic'\r\nimport type { TernSecureClientProps } from '../client/TernSecureProvider'\r\n\r\n// Dynamically import the client provider with no SSR\r\nconst TernSecureClientProvider = dynamic<TernSecureClientProps>(\r\n () => import('../client/TernSecureProvider').then(mod => mod.TernSecureClientProvider),\r\n { \r\n loading: () => <TernSecureLoadingFallback />\r\n }\r\n)\r\n\r\n// Loading fallback component\r\nfunction TernSecureLoadingFallback() {\r\n return (\r\n <div aria-label=\"Loading authentication\" role=\"status\">\r\n <span className=\"sr-only\">Loading authentication...</span>\r\n </div>\r\n )\r\n}\r\n\r\ninterface TernSecureServerProviderProps {\r\n children: React.ReactNode\r\n}\r\n\r\n/**\r\n * Server Provider for TernSecure\r\n * Safe to use in server components\r\n * Automatically handles client/server boundary\r\n */\r\nexport function TernSecureServerProvider({ \r\n children \r\n}: TernSecureServerProviderProps) {\r\n return (\r\n <React.Suspense fallback={<TernSecureLoadingFallback />}>\r\n <TernSecureClientProvider>\r\n {children}\r\n </TernSecureClientProvider>\r\n </React.Suspense>\r\n )\r\n}\r\n\r\n// Export types for package users\r\nexport type { TernSecureServerProviderProps }"]}
|