@tern-secure/nextjs 3.1.75 → 3.1.76
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 +3 -84
- package/dist/cjs/app-router/server/TernSecureServerProvider.cjs +3 -95
- package/dist/cjs/app-router/server/auth.cjs +3 -71
- package/dist/cjs/boundary/TernSecureCtx.cjs +1 -17
- package/dist/cjs/boundary/hooks/useAuth.cjs +3 -30
- package/dist/cjs/components/sign-in.cjs +4 -291
- package/dist/cjs/errors.cjs +1 -19
- package/dist/cjs/index.cjs +4 -349
- package/dist/cjs/types.cjs +1 -4
- package/dist/cjs/utils/client-init.cjs +3 -68
- package/dist/cjs/utils/config.cjs +3 -50
- package/dist/cjs/utils/create-styles.cjs +2 -125
- package/dist/esm/app-router/client/TernSecureProvider.d.ts +10 -9
- package/dist/esm/app-router/client/TernSecureProvider.js +3 -6
- package/dist/esm/app-router/server/TernSecureServerProvider.d.ts +26 -5
- package/dist/esm/app-router/server/TernSecureServerProvider.js +3 -7
- package/dist/esm/app-router/server/auth.js +3 -5
- package/dist/esm/boundary/TernSecureCtx.d.ts +13 -8
- package/dist/esm/boundary/TernSecureCtx.js +1 -3
- package/dist/esm/boundary/hooks/useAuth.d.ts +3 -2
- package/dist/esm/boundary/hooks/useAuth.js +3 -4
- package/dist/esm/components/sign-in.js +4 -7
- package/dist/esm/errors.js +1 -16
- package/dist/esm/index.d.ts +6 -2
- package/dist/esm/index.js +4 -11
- package/dist/esm/types.js +0 -3
- package/dist/esm/utils/client-init.js +3 -4
- package/dist/esm/utils/config.js +3 -3
- package/dist/esm/utils/create-styles.js +2 -3
- package/package.json +2 -14
- package/dist/cjs/app-router/client/TernSecureProvider.cjs.map +0 -1
- package/dist/cjs/app-router/server/TernSecureServerProvider.cjs.map +0 -1
- package/dist/cjs/app-router/server/auth.cjs.map +0 -1
- package/dist/cjs/boundary/TernSecureCtx.cjs.map +0 -1
- package/dist/cjs/boundary/hooks/useAuth.cjs.map +0 -1
- package/dist/cjs/components/sign-in.cjs.map +0 -1
- package/dist/cjs/errors.cjs.map +0 -1
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/types.cjs.map +0 -1
- package/dist/cjs/utils/client-init.cjs.map +0 -1
- package/dist/cjs/utils/config.cjs.map +0 -1
- package/dist/cjs/utils/create-styles.cjs.map +0 -1
- package/dist/esm/app-router/client/TernSecureProvider.js.map +0 -1
- package/dist/esm/app-router/server/TernSecureServerProvider.js.map +0 -1
- package/dist/esm/app-router/server/auth.js.map +0 -1
- package/dist/esm/boundary/TernSecureCtx.js.map +0 -1
- package/dist/esm/boundary/hooks/useAuth.js.map +0 -1
- package/dist/esm/chunk-27O3JVAU.js +0 -16
- package/dist/esm/chunk-27O3JVAU.js.map +0 -1
- package/dist/esm/chunk-4XFIX4FL.js +0 -14
- package/dist/esm/chunk-4XFIX4FL.js.map +0 -1
- package/dist/esm/chunk-7VKPI5HF.js +0 -15
- package/dist/esm/chunk-7VKPI5HF.js.map +0 -1
- package/dist/esm/chunk-EI37GOD7.js +0 -121
- package/dist/esm/chunk-EI37GOD7.js.map +0 -1
- package/dist/esm/chunk-EIOZNLP2.js +0 -109
- package/dist/esm/chunk-EIOZNLP2.js.map +0 -1
- package/dist/esm/chunk-FVV74XVR.js +0 -19
- package/dist/esm/chunk-FVV74XVR.js.map +0 -1
- package/dist/esm/chunk-ODVOZOJG.js +0 -28
- package/dist/esm/chunk-ODVOZOJG.js.map +0 -1
- package/dist/esm/chunk-SHRRIEFY.js +0 -19
- package/dist/esm/chunk-SHRRIEFY.js.map +0 -1
- package/dist/esm/chunk-UHGBSUM6.js +0 -46
- package/dist/esm/chunk-UHGBSUM6.js.map +0 -1
- package/dist/esm/components/sign-in.js.map +0 -1
- package/dist/esm/errors.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/types.js.map +0 -1
- package/dist/esm/utils/client-init.js.map +0 -1
- package/dist/esm/utils/config.js.map +0 -1
- package/dist/esm/utils/create-styles.js.map +0 -1
|
@@ -1,84 +1,3 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
var app = require('firebase/app');
|
|
5
|
-
var auth$1 = require('firebase/auth');
|
|
6
|
-
var firestore = require('firebase/firestore');
|
|
7
|
-
var storage = require('firebase/storage');
|
|
8
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
-
|
|
10
|
-
// src/utils/config.ts
|
|
11
|
-
var loadFireConfig = () => ({
|
|
12
|
-
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || "",
|
|
13
|
-
authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || "",
|
|
14
|
-
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || "",
|
|
15
|
-
storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || "",
|
|
16
|
-
messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || "",
|
|
17
|
-
appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || "",
|
|
18
|
-
measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || void 0
|
|
19
|
-
});
|
|
20
|
-
var validateConfig = (config2) => {
|
|
21
|
-
const requiredFields = [
|
|
22
|
-
"apiKey",
|
|
23
|
-
"authDomain",
|
|
24
|
-
"projectId",
|
|
25
|
-
"storageBucket",
|
|
26
|
-
"messagingSenderId",
|
|
27
|
-
"appId"
|
|
28
|
-
];
|
|
29
|
-
const errors = [];
|
|
30
|
-
requiredFields.forEach((field) => {
|
|
31
|
-
if (!config2[field]) {
|
|
32
|
-
errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
return {
|
|
36
|
-
isValid: errors.length === 0,
|
|
37
|
-
errors,
|
|
38
|
-
config: config2
|
|
39
|
-
};
|
|
40
|
-
};
|
|
41
|
-
var initializeConfig = () => {
|
|
42
|
-
const config2 = loadFireConfig();
|
|
43
|
-
const validationResult = validateConfig(config2);
|
|
44
|
-
if (!validationResult.isValid) {
|
|
45
|
-
throw new Error(
|
|
46
|
-
`Firebase configuration validation failed:
|
|
47
|
-
${validationResult.errors.join("\n")}`
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
return config2;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
// src/utils/client-init.ts
|
|
54
|
-
var config = initializeConfig();
|
|
55
|
-
var clientApp = app.initializeApp(config);
|
|
56
|
-
var auth = auth$1.getAuth(clientApp);
|
|
57
|
-
auth$1.setPersistence(auth, auth$1.browserSessionPersistence);
|
|
58
|
-
firestore.getFirestore(clientApp);
|
|
59
|
-
storage.getStorage(clientApp);
|
|
60
|
-
var TernSecureAuth = () => auth;
|
|
61
|
-
var TernSecureContext = react.createContext(null);
|
|
62
|
-
var TernSecureClientProvider = ({
|
|
63
|
-
children,
|
|
64
|
-
initialState
|
|
65
|
-
}) => {
|
|
66
|
-
const [authState, setAuthState] = react.useState(initialState);
|
|
67
|
-
react.useEffect(() => {
|
|
68
|
-
const auth2 = TernSecureAuth();
|
|
69
|
-
const unsubscribe = auth2.onAuthStateChanged(
|
|
70
|
-
(user) => {
|
|
71
|
-
setAuthState({ userId: user?.uid || null, isSignedIn: !!user, loading: false, error: null });
|
|
72
|
-
},
|
|
73
|
-
(error) => {
|
|
74
|
-
setAuthState({ userId: null, isSignedIn: false, loading: false, error: null });
|
|
75
|
-
}
|
|
76
|
-
);
|
|
77
|
-
return () => unsubscribe();
|
|
78
|
-
}, []);
|
|
79
|
-
return /* @__PURE__ */ jsxRuntime.jsx(TernSecureContext.Provider, { value: { authState }, children });
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
exports.TernSecureClientProvider = TernSecureClientProvider;
|
|
83
|
-
//# sourceMappingURL=TernSecureProvider.cjs.map
|
|
84
|
-
//# sourceMappingURL=TernSecureProvider.cjs.map
|
|
1
|
+
'use strict';var R=require('react'),app=require('firebase/app'),auth=require('firebase/auth'),firestore=require('firebase/firestore'),storage=require('firebase/storage'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var R__default=/*#__PURE__*/_interopDefault(R);var d=()=>({apiKey:process.env.NEXT_PUBLIC_FIREBASE_API_KEY||"",authDomain:process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN||"",projectId:process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID||"",storageBucket:process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET||"",messagingSenderId:process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID||"",appId:process.env.NEXT_PUBLIC_FIREBASE_APP_ID||"",measurementId:process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID||void 0}),E=e=>{let r=["apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId"],t=[];return r.forEach(n=>{e[n]||t.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(n).toUpperCase()}`);}),{isValid:t.length===0,errors:t,config:e}},s=()=>{let e=d(),r=E(e);if(!r.isValid)throw new Error(`Firebase configuration validation failed:
|
|
2
|
+
${r.errors.join(`
|
|
3
|
+
`)}`);return e};var m=s(),o=app.initializeApp(m),c=auth.getAuth(o);auth.setPersistence(c,auth.browserSessionPersistence);firestore.getFirestore(o);storage.getStorage(o);var u=()=>c;var A=Symbol("TERN_SECURE_CONTEXT"),a=R.createContext(null);a.displayName="TernSecureContext";function l({children:e}){return jsxRuntime.jsx(a.Provider,{value:{_contextKey:A},children:e})}var B=R__default.default.createContext(null),F=u();function H({children:e,initialState:r}){let[t,n]=R.useState(r);return R.useEffect(()=>{let p=auth.onAuthStateChanged(F,i=>{n(i?{loading:!1,isSignedIn:!0,userId:i.uid,error:null}:{loading:!1,isSignedIn:!1,userId:null,error:null});});return ()=>p()},[]),jsxRuntime.jsx(l,{children:jsxRuntime.jsx(B.Provider,{value:t,children:e})})}exports.AuthStateContext=B;exports.TernSecureClientProvider=H;
|
|
@@ -1,95 +1,3 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
var app = require('firebase/app');
|
|
5
|
-
var auth$1 = require('firebase/auth');
|
|
6
|
-
var firestore = require('firebase/firestore');
|
|
7
|
-
var storage = require('firebase/storage');
|
|
8
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
-
|
|
10
|
-
// src/app-router/client/TernSecureProvider.tsx
|
|
11
|
-
|
|
12
|
-
// src/utils/config.ts
|
|
13
|
-
var loadFireConfig = () => ({
|
|
14
|
-
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || "",
|
|
15
|
-
authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || "",
|
|
16
|
-
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || "",
|
|
17
|
-
storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || "",
|
|
18
|
-
messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || "",
|
|
19
|
-
appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || "",
|
|
20
|
-
measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || void 0
|
|
21
|
-
});
|
|
22
|
-
var validateConfig = (config2) => {
|
|
23
|
-
const requiredFields = [
|
|
24
|
-
"apiKey",
|
|
25
|
-
"authDomain",
|
|
26
|
-
"projectId",
|
|
27
|
-
"storageBucket",
|
|
28
|
-
"messagingSenderId",
|
|
29
|
-
"appId"
|
|
30
|
-
];
|
|
31
|
-
const errors = [];
|
|
32
|
-
requiredFields.forEach((field) => {
|
|
33
|
-
if (!config2[field]) {
|
|
34
|
-
errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
return {
|
|
38
|
-
isValid: errors.length === 0,
|
|
39
|
-
errors,
|
|
40
|
-
config: config2
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
var initializeConfig = () => {
|
|
44
|
-
const config2 = loadFireConfig();
|
|
45
|
-
const validationResult = validateConfig(config2);
|
|
46
|
-
if (!validationResult.isValid) {
|
|
47
|
-
throw new Error(
|
|
48
|
-
`Firebase configuration validation failed:
|
|
49
|
-
${validationResult.errors.join("\n")}`
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
return config2;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
// src/utils/client-init.ts
|
|
56
|
-
var config = initializeConfig();
|
|
57
|
-
var clientApp = app.initializeApp(config);
|
|
58
|
-
var auth = auth$1.getAuth(clientApp);
|
|
59
|
-
auth$1.setPersistence(auth, auth$1.browserSessionPersistence);
|
|
60
|
-
firestore.getFirestore(clientApp);
|
|
61
|
-
storage.getStorage(clientApp);
|
|
62
|
-
var TernSecureAuth = () => auth;
|
|
63
|
-
var TernSecureContext = react.createContext(null);
|
|
64
|
-
var TernSecureClientProvider = ({
|
|
65
|
-
children,
|
|
66
|
-
initialState
|
|
67
|
-
}) => {
|
|
68
|
-
const [authState, setAuthState] = react.useState(initialState);
|
|
69
|
-
react.useEffect(() => {
|
|
70
|
-
const auth2 = TernSecureAuth();
|
|
71
|
-
const unsubscribe = auth2.onAuthStateChanged(
|
|
72
|
-
(user) => {
|
|
73
|
-
setAuthState({ userId: user?.uid || null, isSignedIn: !!user, loading: false, error: null });
|
|
74
|
-
},
|
|
75
|
-
(error) => {
|
|
76
|
-
setAuthState({ userId: null, isSignedIn: false, loading: false, error: null });
|
|
77
|
-
}
|
|
78
|
-
);
|
|
79
|
-
return () => unsubscribe();
|
|
80
|
-
}, []);
|
|
81
|
-
return /* @__PURE__ */ jsxRuntime.jsx(TernSecureContext.Provider, { value: { authState }, children });
|
|
82
|
-
};
|
|
83
|
-
function TernSecureProvider({ children }) {
|
|
84
|
-
const initialState = {
|
|
85
|
-
userId: null,
|
|
86
|
-
loading: true,
|
|
87
|
-
error: null,
|
|
88
|
-
isSignedIn: false
|
|
89
|
-
};
|
|
90
|
-
return /* @__PURE__ */ jsxRuntime.jsx(TernSecureClientProvider, { initialState, children });
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
exports.TernSecureProvider = TernSecureProvider;
|
|
94
|
-
//# sourceMappingURL=TernSecureServerProvider.cjs.map
|
|
95
|
-
//# sourceMappingURL=TernSecureServerProvider.cjs.map
|
|
1
|
+
'use strict';var h=require('react'),app=require('firebase/app'),auth=require('firebase/auth'),firestore=require('firebase/firestore'),storage=require('firebase/storage'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var h__default=/*#__PURE__*/_interopDefault(h);var f=()=>({apiKey:process.env.NEXT_PUBLIC_FIREBASE_API_KEY||"",authDomain:process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN||"",projectId:process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID||"",storageBucket:process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET||"",messagingSenderId:process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID||"",appId:process.env.NEXT_PUBLIC_FIREBASE_APP_ID||"",measurementId:process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID||void 0}),C=e=>{let r=["apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId"],t=[];return r.forEach(n=>{e[n]||t.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(n).toUpperCase()}`);}),{isValid:t.length===0,errors:t,config:e}},a=()=>{let e=f(),r=C(e);if(!r.isValid)throw new Error(`Firebase configuration validation failed:
|
|
2
|
+
${r.errors.join(`
|
|
3
|
+
`)}`);return e};var v=a(),i=app.initializeApp(v),c=auth.getAuth(i);auth.setPersistence(c,auth.browserSessionPersistence);firestore.getFirestore(i);storage.getStorage(i);var u=()=>c;var R=Symbol("TERN_SECURE_CONTEXT"),l=h.createContext(null);l.displayName="TernSecureContext";function S({children:e}){return jsxRuntime.jsx(l.Provider,{value:{_contextKey:R},children:e})}var U=h__default.default.createContext(null),b=u();function p({children:e,initialState:r}){let[t,n]=h.useState(r);return h.useEffect(()=>{let T=auth.onAuthStateChanged(b,s=>{n(s?{loading:!1,isSignedIn:!0,userId:s.uid,error:null}:{loading:!1,isSignedIn:!1,userId:null,error:null});});return ()=>T()},[]),jsxRuntime.jsx(S,{children:jsxRuntime.jsx(U.Provider,{value:t,children:e})})}function L(){return jsxRuntime.jsx("div",{"aria-label":"Loading authentication",role:"status",className:"tern-secure-loading",children:jsxRuntime.jsx("span",{className:"sr-only",children:"Loading authentication..."})})}function oe({children:e}){let r={loading:!0,isSignedIn:!1,userId:null,error:null};return jsxRuntime.jsx(h__default.default.Suspense,{fallback:jsxRuntime.jsx(L,{}),children:jsxRuntime.jsx(p,{initialState:r,children:e})})}exports.TernSecureServerProvider=oe;
|
|
@@ -1,71 +1,3 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var app =
|
|
4
|
-
var auth$1 = require('firebase/auth');
|
|
5
|
-
var firestore = require('firebase/firestore');
|
|
6
|
-
var storage = require('firebase/storage');
|
|
7
|
-
|
|
8
|
-
// src/utils/client-init.ts
|
|
9
|
-
|
|
10
|
-
// src/utils/config.ts
|
|
11
|
-
var loadFireConfig = () => ({
|
|
12
|
-
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || "",
|
|
13
|
-
authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || "",
|
|
14
|
-
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || "",
|
|
15
|
-
storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || "",
|
|
16
|
-
messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || "",
|
|
17
|
-
appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || "",
|
|
18
|
-
measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || void 0
|
|
19
|
-
});
|
|
20
|
-
var validateConfig = (config2) => {
|
|
21
|
-
const requiredFields = [
|
|
22
|
-
"apiKey",
|
|
23
|
-
"authDomain",
|
|
24
|
-
"projectId",
|
|
25
|
-
"storageBucket",
|
|
26
|
-
"messagingSenderId",
|
|
27
|
-
"appId"
|
|
28
|
-
];
|
|
29
|
-
const errors = [];
|
|
30
|
-
requiredFields.forEach((field) => {
|
|
31
|
-
if (!config2[field]) {
|
|
32
|
-
errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
return {
|
|
36
|
-
isValid: errors.length === 0,
|
|
37
|
-
errors,
|
|
38
|
-
config: config2
|
|
39
|
-
};
|
|
40
|
-
};
|
|
41
|
-
var initializeConfig = () => {
|
|
42
|
-
const config2 = loadFireConfig();
|
|
43
|
-
const validationResult = validateConfig(config2);
|
|
44
|
-
if (!validationResult.isValid) {
|
|
45
|
-
throw new Error(
|
|
46
|
-
`Firebase configuration validation failed:
|
|
47
|
-
${validationResult.errors.join("\n")}`
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
return config2;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
// src/utils/client-init.ts
|
|
54
|
-
var config = initializeConfig();
|
|
55
|
-
var clientApp = app.initializeApp(config);
|
|
56
|
-
var auth = auth$1.getAuth(clientApp);
|
|
57
|
-
auth$1.setPersistence(auth, auth$1.browserSessionPersistence);
|
|
58
|
-
firestore.getFirestore(clientApp);
|
|
59
|
-
storage.getStorage(clientApp);
|
|
60
|
-
var TernSecureAuth = () => auth;
|
|
61
|
-
async function signInWithEmail({
|
|
62
|
-
email,
|
|
63
|
-
password
|
|
64
|
-
}) {
|
|
65
|
-
const auth2 = TernSecureAuth();
|
|
66
|
-
return auth$1.signInWithEmailAndPassword(auth2, email, password);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
exports.signInWithEmail = signInWithEmail;
|
|
70
|
-
//# sourceMappingURL=auth.cjs.map
|
|
71
|
-
//# sourceMappingURL=auth.cjs.map
|
|
1
|
+
'use strict';var app=require('firebase/app'),auth=require('firebase/auth'),firestore=require('firebase/firestore'),storage=require('firebase/storage');var c=()=>({apiKey:process.env.NEXT_PUBLIC_FIREBASE_API_KEY||"",authDomain:process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN||"",projectId:process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID||"",storageBucket:process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET||"",messagingSenderId:process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID||"",appId:process.env.NEXT_PUBLIC_FIREBASE_APP_ID||"",measurementId:process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID||void 0}),p=e=>{let r=["apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId"],n=[];return r.forEach(o=>{e[o]||n.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(o).toUpperCase()}`);}),{isValid:n.length===0,errors:n,config:e}},t=()=>{let e=c(),r=p(e);if(!r.isValid)throw new Error(`Firebase configuration validation failed:
|
|
2
|
+
${r.errors.join(`
|
|
3
|
+
`)}`);return e};var f=t(),i=app.initializeApp(f),s=auth.getAuth(i);auth.setPersistence(s,auth.browserSessionPersistence);firestore.getFirestore(i);storage.getStorage(i);var a=()=>s;async function N({email:e,password:r}){let n=a();return auth.signInWithEmailAndPassword(n,e,r)}exports.signInWithEmail=N;
|
|
@@ -1,17 +1 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var react = require('react');
|
|
4
|
-
|
|
5
|
-
var TernSecureContext = react.createContext(null);
|
|
6
|
-
var useTernSecure = () => {
|
|
7
|
-
const context = react.useContext(TernSecureContext);
|
|
8
|
-
if (!context) {
|
|
9
|
-
throw new Error("useTernSecure must be used within a TernSecureProvider");
|
|
10
|
-
}
|
|
11
|
-
return context.authState;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
exports.TernSecureContext = TernSecureContext;
|
|
15
|
-
exports.useTernSecure = useTernSecure;
|
|
16
|
-
//# sourceMappingURL=TernSecureCtx.cjs.map
|
|
17
|
-
//# sourceMappingURL=TernSecureCtx.cjs.map
|
|
1
|
+
'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime');var c=Symbol("TERN_SECURE_CONTEXT"),t=react.createContext(null);t.displayName="TernSecureContext";var l=e=>{let r=react.useContext(t);if(!r)throw new Error(`${e} must be used within TernSecureProvider`);return r};function T({children:e}){return jsxRuntime.jsx(t.Provider,{value:{_contextKey:c},children:e})}exports.TernSecureCtxProvider=T;exports.useInternalContext=l;
|
|
@@ -1,30 +1,3 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
var TernSecureContext = react.createContext(null);
|
|
6
|
-
var useTernSecure = () => {
|
|
7
|
-
const context = react.useContext(TernSecureContext);
|
|
8
|
-
if (!context) {
|
|
9
|
-
throw new Error("useTernSecure must be used within a TernSecureProvider");
|
|
10
|
-
}
|
|
11
|
-
return context.authState;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
// src/boundary/hooks/useAuth.ts
|
|
15
|
-
function useAuth() {
|
|
16
|
-
const authState = useTernSecure();
|
|
17
|
-
if (!authState) {
|
|
18
|
-
throw new Error("Auth state not found");
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
userId: authState.userId,
|
|
22
|
-
loading: authState.loading,
|
|
23
|
-
error: authState.error,
|
|
24
|
-
isSignedIn: authState.isSignedIn
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
exports.useAuth = useAuth;
|
|
29
|
-
//# sourceMappingURL=useAuth.cjs.map
|
|
30
|
-
//# sourceMappingURL=useAuth.cjs.map
|
|
1
|
+
'use strict';var x=require('react');require('react/jsx-runtime');var app=require('firebase/app'),auth=require('firebase/auth'),firestore=require('firebase/firestore'),storage=require('firebase/storage');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var x__default=/*#__PURE__*/_interopDefault(x);var i=x.createContext(null);i.displayName="TernSecureContext";var s=e=>{let r=x.useContext(i);if(!r)throw new Error(`${e} must be used within TernSecureProvider`);return r};var p=()=>({apiKey:process.env.NEXT_PUBLIC_FIREBASE_API_KEY||"",authDomain:process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN||"",projectId:process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID||"",storageBucket:process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET||"",messagingSenderId:process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID||"",appId:process.env.NEXT_PUBLIC_FIREBASE_APP_ID||"",measurementId:process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID||void 0}),f=e=>{let r=["apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId"],t=[];return r.forEach(o=>{e[o]||t.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(o).toUpperCase()}`);}),{isValid:t.length===0,errors:t,config:e}},u=()=>{let e=p(),r=f(e);if(!r.isValid)throw new Error(`Firebase configuration validation failed:
|
|
2
|
+
${r.errors.join(`
|
|
3
|
+
`)}`);return e};var m=u(),n=app.initializeApp(m),c=auth.getAuth(n);auth.setPersistence(c,auth.browserSessionPersistence);firestore.getFirestore(n);storage.getStorage(n);var S=x__default.default.createContext(null);function Q(){s("useAuth");let e=x.useContext(S);if(!e)throw new Error("Auth state not found");return {userId:e.userId,loading:e.loading,error:e.error,isSignedIn:e.isSignedIn}}exports.useAuth=Q;
|
|
@@ -1,291 +1,4 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var auth$1 = require('firebase/auth');
|
|
6
|
-
var firestore = require('firebase/firestore');
|
|
7
|
-
var storage = require('firebase/storage');
|
|
8
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
-
|
|
10
|
-
// src/components/sign-in.tsx
|
|
11
|
-
|
|
12
|
-
// src/utils/config.ts
|
|
13
|
-
var loadFireConfig = () => ({
|
|
14
|
-
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || "",
|
|
15
|
-
authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || "",
|
|
16
|
-
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || "",
|
|
17
|
-
storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || "",
|
|
18
|
-
messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || "",
|
|
19
|
-
appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || "",
|
|
20
|
-
measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || void 0
|
|
21
|
-
});
|
|
22
|
-
var validateConfig = (config2) => {
|
|
23
|
-
const requiredFields = [
|
|
24
|
-
"apiKey",
|
|
25
|
-
"authDomain",
|
|
26
|
-
"projectId",
|
|
27
|
-
"storageBucket",
|
|
28
|
-
"messagingSenderId",
|
|
29
|
-
"appId"
|
|
30
|
-
];
|
|
31
|
-
const errors = [];
|
|
32
|
-
requiredFields.forEach((field) => {
|
|
33
|
-
if (!config2[field]) {
|
|
34
|
-
errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
return {
|
|
38
|
-
isValid: errors.length === 0,
|
|
39
|
-
errors,
|
|
40
|
-
config: config2
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
var initializeConfig = () => {
|
|
44
|
-
const config2 = loadFireConfig();
|
|
45
|
-
const validationResult = validateConfig(config2);
|
|
46
|
-
if (!validationResult.isValid) {
|
|
47
|
-
throw new Error(
|
|
48
|
-
`Firebase configuration validation failed:
|
|
49
|
-
${validationResult.errors.join("\n")}`
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
return config2;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
// src/utils/client-init.ts
|
|
56
|
-
var config = initializeConfig();
|
|
57
|
-
var clientApp = app.initializeApp(config);
|
|
58
|
-
var auth = auth$1.getAuth(clientApp);
|
|
59
|
-
auth$1.setPersistence(auth, auth$1.browserSessionPersistence);
|
|
60
|
-
firestore.getFirestore(clientApp);
|
|
61
|
-
storage.getStorage(clientApp);
|
|
62
|
-
var TernSecureAuth = () => auth;
|
|
63
|
-
async function signInWithEmail({
|
|
64
|
-
email,
|
|
65
|
-
password
|
|
66
|
-
}) {
|
|
67
|
-
const auth2 = TernSecureAuth();
|
|
68
|
-
return auth$1.signInWithEmailAndPassword(auth2, email, password);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// src/utils/create-styles.ts
|
|
72
|
-
var PREFIX = "tern";
|
|
73
|
-
var styleInjection = {
|
|
74
|
-
isInjected: false,
|
|
75
|
-
styleElement: null
|
|
76
|
-
};
|
|
77
|
-
var defaultClassNames = {
|
|
78
|
-
container: `${PREFIX}-container`,
|
|
79
|
-
header: `${PREFIX}-header`,
|
|
80
|
-
title: `${PREFIX}-title`,
|
|
81
|
-
formWrapper: `${PREFIX}-formWrapper`,
|
|
82
|
-
formContainer: `${PREFIX}-formContainer`,
|
|
83
|
-
form: `${PREFIX}-form`,
|
|
84
|
-
label: `${PREFIX}-label`,
|
|
85
|
-
input: `${PREFIX}-input`,
|
|
86
|
-
button: `${PREFIX}-button`,
|
|
87
|
-
error: `${PREFIX}-error`
|
|
88
|
-
};
|
|
89
|
-
function createStyleSheet(styles2) {
|
|
90
|
-
if (typeof window === "undefined") return defaultClassNames;
|
|
91
|
-
if (styleInjection.isInjected) {
|
|
92
|
-
return defaultClassNames;
|
|
93
|
-
}
|
|
94
|
-
let styleElement = document.querySelector("[data-tern-secure]");
|
|
95
|
-
if (!styleElement) {
|
|
96
|
-
styleElement = document.createElement("style");
|
|
97
|
-
styleElement.setAttribute("data-tern-secure", "");
|
|
98
|
-
document.head.appendChild(styleElement);
|
|
99
|
-
styleInjection.styleElement = styleElement;
|
|
100
|
-
}
|
|
101
|
-
const cssRules = Object.entries(styles2).map(([key, rules]) => {
|
|
102
|
-
const className = defaultClassNames[key];
|
|
103
|
-
const cssProperties = Object.entries(rules).map(([prop, value]) => {
|
|
104
|
-
const cssProperty = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
105
|
-
return `${cssProperty}: ${value};`;
|
|
106
|
-
}).join(" ");
|
|
107
|
-
return `.${className} { ${cssProperties} }`;
|
|
108
|
-
}).join("\n");
|
|
109
|
-
styleElement.textContent = cssRules;
|
|
110
|
-
styleInjection.isInjected = true;
|
|
111
|
-
return defaultClassNames;
|
|
112
|
-
}
|
|
113
|
-
var styleConfig = {
|
|
114
|
-
container: {
|
|
115
|
-
display: "flex",
|
|
116
|
-
minHeight: "100%",
|
|
117
|
-
flex: "1",
|
|
118
|
-
flexDirection: "column",
|
|
119
|
-
justifyContent: "center",
|
|
120
|
-
padding: "3rem 1.5rem"
|
|
121
|
-
},
|
|
122
|
-
header: {
|
|
123
|
-
margin: "0 auto",
|
|
124
|
-
width: "100%",
|
|
125
|
-
maxWidth: "28rem"
|
|
126
|
-
},
|
|
127
|
-
title: {
|
|
128
|
-
marginTop: "1.5rem",
|
|
129
|
-
textAlign: "center",
|
|
130
|
-
fontSize: "1.875rem",
|
|
131
|
-
fontWeight: "700",
|
|
132
|
-
lineHeight: "2.25rem",
|
|
133
|
-
letterSpacing: "-0.025em",
|
|
134
|
-
color: "var(--tern-text-primary, #111827)"
|
|
135
|
-
},
|
|
136
|
-
formWrapper: {
|
|
137
|
-
marginTop: "2.5rem",
|
|
138
|
-
margin: "0 auto",
|
|
139
|
-
width: "100%",
|
|
140
|
-
maxWidth: "30rem"
|
|
141
|
-
},
|
|
142
|
-
formContainer: {
|
|
143
|
-
padding: "3rem 1.5rem",
|
|
144
|
-
boxShadow: "0 1px 3px 0 rgb(0 0 0 / 0.1)",
|
|
145
|
-
borderRadius: "0.5rem",
|
|
146
|
-
backgroundColor: "var(--tern-background, white)"
|
|
147
|
-
},
|
|
148
|
-
form: {
|
|
149
|
-
display: "flex",
|
|
150
|
-
flexDirection: "column",
|
|
151
|
-
gap: "1rem"
|
|
152
|
-
},
|
|
153
|
-
label: {
|
|
154
|
-
display: "block",
|
|
155
|
-
fontSize: "0.875rem",
|
|
156
|
-
fontWeight: "500",
|
|
157
|
-
color: "var(--tern-text-secondary, #374151)"
|
|
158
|
-
},
|
|
159
|
-
input: {
|
|
160
|
-
marginTop: "0.25rem",
|
|
161
|
-
display: "block",
|
|
162
|
-
width: "100%",
|
|
163
|
-
padding: "0.5rem 0.75rem",
|
|
164
|
-
borderRadius: "0.375rem",
|
|
165
|
-
border: "1px solid var(--tern-border, #D1D5DB)",
|
|
166
|
-
backgroundColor: "var(--tern-input-background, white)",
|
|
167
|
-
color: "var(--tern-text-primary, #111827)"
|
|
168
|
-
},
|
|
169
|
-
button: {
|
|
170
|
-
display: "flex",
|
|
171
|
-
width: "100%",
|
|
172
|
-
justifyContent: "center",
|
|
173
|
-
padding: "0.5rem 1rem",
|
|
174
|
-
fontSize: "0.875rem",
|
|
175
|
-
fontWeight: "500",
|
|
176
|
-
color: "white",
|
|
177
|
-
backgroundColor: "var(--tern-primary, #2563EB)",
|
|
178
|
-
border: "none",
|
|
179
|
-
borderRadius: "0.375rem",
|
|
180
|
-
cursor: "pointer"
|
|
181
|
-
},
|
|
182
|
-
error: {
|
|
183
|
-
color: "var(--tern-error, #DC2626)",
|
|
184
|
-
fontSize: "0.875rem"
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
var styles = createStyleSheet(styleConfig);
|
|
188
|
-
function SignIn({
|
|
189
|
-
onSuccess,
|
|
190
|
-
onError,
|
|
191
|
-
redirectUrl,
|
|
192
|
-
className = "",
|
|
193
|
-
style,
|
|
194
|
-
customStyles = {}
|
|
195
|
-
}) {
|
|
196
|
-
const [email, setEmail] = react.useState("");
|
|
197
|
-
const [password, setPassword] = react.useState("");
|
|
198
|
-
const [loading, setLoading] = react.useState(false);
|
|
199
|
-
const [error, setError] = react.useState("");
|
|
200
|
-
const handleSubmit = async (e) => {
|
|
201
|
-
e.preventDefault();
|
|
202
|
-
setLoading(true);
|
|
203
|
-
setError("");
|
|
204
|
-
try {
|
|
205
|
-
await signInWithEmail({ email, password });
|
|
206
|
-
onSuccess?.();
|
|
207
|
-
if (redirectUrl) {
|
|
208
|
-
window.location.href = redirectUrl;
|
|
209
|
-
}
|
|
210
|
-
} catch (err) {
|
|
211
|
-
const errorMessage = err instanceof Error ? err.message : "Failed to sign in";
|
|
212
|
-
setError(errorMessage);
|
|
213
|
-
onError?.(err instanceof Error ? err : new Error("Failed to sign in"));
|
|
214
|
-
} finally {
|
|
215
|
-
setLoading(false);
|
|
216
|
-
}
|
|
217
|
-
};
|
|
218
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${styles.container} ${customStyles.container || ""}`, style, children: [
|
|
219
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${styles.header} ${customStyles.header || ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: `${styles.title} ${customStyles.title || ""}`, children: "Sign in to your account" }) }),
|
|
220
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${styles.formWrapper} ${customStyles.formWrapper || ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${styles.formContainer} ${customStyles.formContainer || ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
221
|
-
"form",
|
|
222
|
-
{
|
|
223
|
-
onSubmit: handleSubmit,
|
|
224
|
-
className: `${styles.form} ${customStyles.form || ""} ${className}`,
|
|
225
|
-
role: "form",
|
|
226
|
-
"aria-label": "Sign in form",
|
|
227
|
-
children: [
|
|
228
|
-
error && /* @__PURE__ */ jsxRuntime.jsx(
|
|
229
|
-
"div",
|
|
230
|
-
{
|
|
231
|
-
className: `${styles.error} ${customStyles.errorText || ""}`,
|
|
232
|
-
role: "alert",
|
|
233
|
-
"aria-live": "polite",
|
|
234
|
-
children: error
|
|
235
|
-
}
|
|
236
|
-
),
|
|
237
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
238
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: "email", className: `${styles.label} ${customStyles.label || ""}`, children: "Email" }),
|
|
239
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
240
|
-
"input",
|
|
241
|
-
{
|
|
242
|
-
id: "email",
|
|
243
|
-
type: "email",
|
|
244
|
-
value: email,
|
|
245
|
-
onChange: (e) => setEmail(e.target.value),
|
|
246
|
-
placeholder: "Enter your email",
|
|
247
|
-
required: true,
|
|
248
|
-
className: `${styles.input} ${customStyles.input || ""}`,
|
|
249
|
-
disabled: loading,
|
|
250
|
-
"aria-required": "true",
|
|
251
|
-
"aria-invalid": !!error
|
|
252
|
-
}
|
|
253
|
-
)
|
|
254
|
-
] }),
|
|
255
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
256
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: "password", className: `${styles.label} ${customStyles.label || ""}`, children: "Password" }),
|
|
257
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
258
|
-
"input",
|
|
259
|
-
{
|
|
260
|
-
id: "password",
|
|
261
|
-
type: "password",
|
|
262
|
-
value: password,
|
|
263
|
-
onChange: (e) => setPassword(e.target.value),
|
|
264
|
-
placeholder: "Enter your password",
|
|
265
|
-
required: true,
|
|
266
|
-
className: `${styles.input} ${customStyles.input || ""}`,
|
|
267
|
-
disabled: loading,
|
|
268
|
-
"aria-required": "true",
|
|
269
|
-
"aria-invalid": !!error
|
|
270
|
-
}
|
|
271
|
-
)
|
|
272
|
-
] }),
|
|
273
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
274
|
-
"button",
|
|
275
|
-
{
|
|
276
|
-
type: "submit",
|
|
277
|
-
disabled: loading,
|
|
278
|
-
className: `${styles.button} ${customStyles.button || ""}`,
|
|
279
|
-
"data-testid": "sign-in-submit",
|
|
280
|
-
children: loading ? "Signing in..." : "Sign in"
|
|
281
|
-
}
|
|
282
|
-
)
|
|
283
|
-
]
|
|
284
|
-
}
|
|
285
|
-
) }) })
|
|
286
|
-
] });
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
exports.SignIn = SignIn;
|
|
290
|
-
//# sourceMappingURL=sign-in.cjs.map
|
|
291
|
-
//# sourceMappingURL=sign-in.cjs.map
|
|
1
|
+
'use strict';var react=require('react'),app=require('firebase/app'),auth=require('firebase/auth'),firestore=require('firebase/firestore'),storage=require('firebase/storage'),jsxRuntime=require('react/jsx-runtime');var P=()=>({apiKey:process.env.NEXT_PUBLIC_FIREBASE_API_KEY||"",authDomain:process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN||"",projectId:process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID||"",storageBucket:process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET||"",messagingSenderId:process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID||"",appId:process.env.NEXT_PUBLIC_FIREBASE_APP_ID||"",measurementId:process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID||void 0}),R=n=>{let e=["apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId"],i=[];return e.forEach(s=>{n[s]||i.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(s).toUpperCase()}`);}),{isValid:i.length===0,errors:i,config:n}},y=()=>{let n=P(),e=R(n);if(!e.isValid)throw new Error(`Firebase configuration validation failed:
|
|
2
|
+
${e.errors.join(`
|
|
3
|
+
`)}`);return n};var j=y(),C=app.initializeApp(j),_=auth.getAuth(C);auth.setPersistence(_,auth.browserSessionPersistence);firestore.getFirestore(C);storage.getStorage(C);var x=()=>_;async function T({email:n,password:e}){let i=x();return auth.signInWithEmailAndPassword(i,n,e)}var o="tern",S={isInjected:!1,styleElement:null},f={container:`${o}-container`,header:`${o}-header`,title:`${o}-title`,formWrapper:`${o}-formWrapper`,formContainer:`${o}-formContainer`,form:`${o}-form`,label:`${o}-label`,input:`${o}-input`,button:`${o}-button`,error:`${o}-error`};function k(n){if(typeof window>"u"||S.isInjected)return f;let e=document.querySelector("[data-tern-secure]");e||(e=document.createElement("style"),e.setAttribute("data-tern-secure",""),document.head.appendChild(e),S.styleElement=e);let i=Object.entries(n).map(([s,h])=>{let r=f[s],d=Object.entries(h).map(([b,c])=>`${b.replace(/([A-Z])/g,"-$1").toLowerCase()}: ${c};`).join(" ");return `.${r} { ${d} }`}).join(`
|
|
4
|
+
`);return e.textContent=i,S.isInjected=!0,f}var X={container:{display:"flex",minHeight:"100%",flex:"1",flexDirection:"column",justifyContent:"center",padding:"3rem 1.5rem"},header:{margin:"0 auto",width:"100%",maxWidth:"28rem"},title:{marginTop:"1.5rem",textAlign:"center",fontSize:"1.875rem",fontWeight:"700",lineHeight:"2.25rem",letterSpacing:"-0.025em",color:"var(--tern-text-primary, #111827)"},formWrapper:{marginTop:"2.5rem",margin:"0 auto",width:"100%",maxWidth:"30rem"},formContainer:{padding:"3rem 1.5rem",boxShadow:"0 1px 3px 0 rgb(0 0 0 / 0.1)",borderRadius:"0.5rem",backgroundColor:"var(--tern-background, white)"},form:{display:"flex",flexDirection:"column",gap:"1rem"},label:{display:"block",fontSize:"0.875rem",fontWeight:"500",color:"var(--tern-text-secondary, #374151)"},input:{marginTop:"0.25rem",display:"block",width:"100%",padding:"0.5rem 0.75rem",borderRadius:"0.375rem",border:"1px solid var(--tern-border, #D1D5DB)",backgroundColor:"var(--tern-input-background, white)",color:"var(--tern-text-primary, #111827)"},button:{display:"flex",width:"100%",justifyContent:"center",padding:"0.5rem 1rem",fontSize:"0.875rem",fontWeight:"500",color:"white",backgroundColor:"var(--tern-primary, #2563EB)",border:"none",borderRadius:"0.375rem",cursor:"pointer"},error:{color:"var(--tern-error, #DC2626)",fontSize:"0.875rem"}},t=k(X);function ie({onSuccess:n,onError:e,redirectUrl:i,className:s="",style:h,customStyles:r={}}){let[d,b]=react.useState(""),[c,v]=react.useState(""),[m,I]=react.useState(!1),[p,$]=react.useState(""),N=async l=>{l.preventDefault(),I(!0),$("");try{await T({email:d,password:c}),n?.(),i&&(window.location.href=i);}catch(u){let w=u instanceof Error?u.message:"Failed to sign in";$(w),e?.(u instanceof Error?u:new Error("Failed to sign in"));}finally{I(!1);}};return jsxRuntime.jsxs("div",{className:`${t.container} ${r.container||""}`,style:h,children:[jsxRuntime.jsx("div",{className:`${t.header} ${r.header||""}`,children:jsxRuntime.jsx("h2",{className:`${t.title} ${r.title||""}`,children:"Sign in to your account"})}),jsxRuntime.jsx("div",{className:`${t.formWrapper} ${r.formWrapper||""}`,children:jsxRuntime.jsx("div",{className:`${t.formContainer} ${r.formContainer||""}`,children:jsxRuntime.jsxs("form",{onSubmit:N,className:`${t.form} ${r.form||""} ${s}`,role:"form","aria-label":"Sign in form",children:[p&&jsxRuntime.jsx("div",{className:`${t.error} ${r.errorText||""}`,role:"alert","aria-live":"polite",children:p}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"email",className:`${t.label} ${r.label||""}`,children:"Email"}),jsxRuntime.jsx("input",{id:"email",type:"email",value:d,onChange:l=>b(l.target.value),placeholder:"Enter your email",required:!0,className:`${t.input} ${r.input||""}`,disabled:m,"aria-required":"true","aria-invalid":!!p})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{htmlFor:"password",className:`${t.label} ${r.label||""}`,children:"Password"}),jsxRuntime.jsx("input",{id:"password",type:"password",value:c,onChange:l=>v(l.target.value),placeholder:"Enter your password",required:!0,className:`${t.input} ${r.input||""}`,disabled:m,"aria-required":"true","aria-invalid":!!p})]}),jsxRuntime.jsx("button",{type:"submit",disabled:m,className:`${t.button} ${r.button||""}`,"data-testid":"sign-in-submit",children:m?"Signing in...":"Sign in"})]})})})]})}exports.SignIn=ie;
|
package/dist/cjs/errors.cjs
CHANGED
|
@@ -1,19 +1 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// src/errors.ts
|
|
4
|
-
var ERRORS = {
|
|
5
|
-
SERVER_SIDE_INITIALIZATION: "TernSecure must be initialized on the client side",
|
|
6
|
-
NOT_INITIALIZED: "TernSecure services are not initialized. Call initializeTernSecure() first",
|
|
7
|
-
HOOK_CONTEXT: (hookName) => `${hookName} must be used within TernSecureProvider`
|
|
8
|
-
};
|
|
9
|
-
var TernSecureError = class extends Error {
|
|
10
|
-
constructor(message) {
|
|
11
|
-
super(message);
|
|
12
|
-
this.name = "TernSecureError";
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
exports.ERRORS = ERRORS;
|
|
17
|
-
exports.TernSecureError = TernSecureError;
|
|
18
|
-
//# sourceMappingURL=errors.cjs.map
|
|
19
|
-
//# sourceMappingURL=errors.cjs.map
|
|
1
|
+
'use strict';var t={SERVER_SIDE_INITIALIZATION:"TernSecure must be initialized on the client side",NOT_INITIALIZED:"TernSecure services are not initialized. Call initializeTernSecure() first",HOOK_CONTEXT:e=>`${e} must be used within TernSecureProvider`},r=class extends Error{constructor(i){super(i),this.name="TernSecureError";}};exports.ERRORS=t;exports.TernSecureError=r;
|