@tern-secure/nextjs 3.1.2 → 3.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/app-router/client/client-init.cjs +21 -0
  2. package/dist/app-router/client/client-init.cjs.map +1 -0
  3. package/dist/app-router/client/client-init.d.cts +9 -0
  4. package/dist/app-router/client/client-init.d.ts +9 -0
  5. package/dist/app-router/client/client-init.js +4 -0
  6. package/dist/app-router/client/client-init.js.map +1 -0
  7. package/dist/app-router/client/config.cjs +16 -0
  8. package/dist/app-router/client/config.cjs.map +1 -0
  9. package/dist/app-router/client/config.d.cts +2 -0
  10. package/dist/app-router/client/config.d.ts +2 -0
  11. package/dist/app-router/client/config.js +3 -0
  12. package/dist/app-router/client/config.js.map +1 -0
  13. package/dist/app-router/client/index.cjs +47 -0
  14. package/dist/app-router/client/index.cjs.map +1 -0
  15. package/dist/app-router/client/index.d.cts +24 -0
  16. package/dist/app-router/client/index.d.ts +24 -0
  17. package/dist/app-router/client/index.js +6 -0
  18. package/dist/app-router/client/index.js.map +1 -0
  19. package/dist/app-router/server/index.cjs +12 -0
  20. package/dist/app-router/server/index.cjs.map +1 -0
  21. package/dist/app-router/server/index.d.cts +9 -0
  22. package/dist/app-router/server/index.d.ts +9 -0
  23. package/dist/app-router/server/index.js +3 -0
  24. package/dist/app-router/server/index.js.map +1 -0
  25. package/dist/chunk-5GZKGYND.cjs +52 -0
  26. package/dist/chunk-5GZKGYND.cjs.map +1 -0
  27. package/dist/{esm/chunk-MR7XOWJM.js → chunk-COJKOD7O.js} +6 -13
  28. package/dist/chunk-COJKOD7O.js.map +1 -0
  29. package/dist/chunk-F6OZXBDZ.cjs +25 -0
  30. package/dist/chunk-F6OZXBDZ.cjs.map +1 -0
  31. package/dist/{esm/chunk-C2Y6UR4A.js → chunk-F72ZE3BA.js} +8 -8
  32. package/dist/chunk-F72ZE3BA.js.map +1 -0
  33. package/dist/{esm/chunk-5DISHXED.js → chunk-G7IGHHLE.js} +3 -5
  34. package/dist/chunk-G7IGHHLE.js.map +1 -0
  35. package/dist/chunk-GLWDHU7I.cjs +25 -0
  36. package/dist/chunk-GLWDHU7I.cjs.map +1 -0
  37. package/dist/chunk-ILPVABOB.js +14 -0
  38. package/dist/chunk-ILPVABOB.js.map +1 -0
  39. package/dist/chunk-OQAWVYEY.cjs +16 -0
  40. package/dist/chunk-OQAWVYEY.cjs.map +1 -0
  41. package/dist/chunk-SR35MXXB.cjs +227 -0
  42. package/dist/chunk-SR35MXXB.cjs.map +1 -0
  43. package/dist/{esm/chunk-RHUIR5LX.js → chunk-TIDHWPS6.js} +8 -15
  44. package/dist/chunk-TIDHWPS6.js.map +1 -0
  45. package/dist/chunk-VWGH2WW6.cjs +43 -0
  46. package/dist/chunk-VWGH2WW6.cjs.map +1 -0
  47. package/dist/{esm/chunk-P4LC45HN.js → chunk-YDN4Z5BB.js} +6 -13
  48. package/dist/chunk-YDN4Z5BB.js.map +1 -0
  49. package/dist/components/index.cjs +16 -0
  50. package/dist/components/index.cjs.map +1 -0
  51. package/dist/{esm/components/sign-in.d.ts → components/index.d.cts} +6 -3
  52. package/dist/components/index.d.ts +25 -0
  53. package/dist/components/index.js +7 -0
  54. package/dist/components/index.js.map +1 -0
  55. package/dist/config-CYswigMN.d.cts +30 -0
  56. package/dist/config-CYswigMN.d.ts +30 -0
  57. package/dist/index.cjs +113 -0
  58. package/dist/index.cjs.map +1 -0
  59. package/dist/index.d.cts +16 -0
  60. package/dist/index.d.ts +16 -0
  61. package/dist/{esm/index.js → index.js} +12 -39
  62. package/dist/index.js.map +1 -0
  63. package/dist/ternSecureClientProvider-EGCEVPT4.js +3 -0
  64. package/dist/ternSecureClientProvider-EGCEVPT4.js.map +1 -0
  65. package/dist/ternSecureClientProvider-T6GZSMB2.cjs +12 -0
  66. package/dist/ternSecureClientProvider-T6GZSMB2.cjs.map +1 -0
  67. package/package.json +32 -33
  68. package/dist/cjs/app-router/client/client-init.js +0 -70
  69. package/dist/cjs/app-router/client/client-init.js.map +0 -7
  70. package/dist/cjs/app-router/client/config.js +0 -49
  71. package/dist/cjs/app-router/client/config.js.map +0 -7
  72. package/dist/cjs/app-router/client/index.js +0 -138
  73. package/dist/cjs/app-router/client/index.js.map +0 -7
  74. package/dist/cjs/app-router/server/index.js +0 -128
  75. package/dist/cjs/app-router/server/index.js.map +0 -7
  76. package/dist/cjs/components/index.js +0 -331
  77. package/dist/cjs/components/index.js.map +0 -7
  78. package/dist/cjs/index.js +0 -493
  79. package/dist/cjs/index.js.map +0 -7
  80. package/dist/esm/app-router/client/auth.d.ts +0 -7
  81. package/dist/esm/app-router/client/auth.d.ts.map +0 -1
  82. package/dist/esm/app-router/client/client-init.d.ts +0 -4
  83. package/dist/esm/app-router/client/client-init.d.ts.map +0 -1
  84. package/dist/esm/app-router/client/client-init.js +0 -12
  85. package/dist/esm/app-router/client/client-init.js.map +0 -7
  86. package/dist/esm/app-router/client/config.d.ts +0 -4
  87. package/dist/esm/app-router/client/config.d.ts.map +0 -1
  88. package/dist/esm/app-router/client/config.js +0 -9
  89. package/dist/esm/app-router/client/config.js.map +0 -7
  90. package/dist/esm/app-router/client/index.d.ts +0 -7
  91. package/dist/esm/app-router/client/index.d.ts.map +0 -1
  92. package/dist/esm/app-router/client/index.js +0 -29
  93. package/dist/esm/app-router/client/index.js.map +0 -7
  94. package/dist/esm/app-router/client/providers/ternSecureClientProvider.d.ts +0 -5
  95. package/dist/esm/app-router/client/providers/ternSecureClientProvider.d.ts.map +0 -1
  96. package/dist/esm/app-router/client/providers/ternSecureContext.d.ts +0 -7
  97. package/dist/esm/app-router/client/providers/ternSecureContext.d.ts.map +0 -1
  98. package/dist/esm/app-router/server/index.d.ts +0 -2
  99. package/dist/esm/app-router/server/index.d.ts.map +0 -1
  100. package/dist/esm/app-router/server/index.js +0 -7
  101. package/dist/esm/app-router/server/index.js.map +0 -7
  102. package/dist/esm/app-router/server/providers/TernSecureServerProvider.d.ts +0 -7
  103. package/dist/esm/app-router/server/providers/TernSecureServerProvider.d.ts.map +0 -1
  104. package/dist/esm/chunk-5DISHXED.js.map +0 -7
  105. package/dist/esm/chunk-C2Y6UR4A.js.map +0 -7
  106. package/dist/esm/chunk-CGWE73OH.js +0 -18
  107. package/dist/esm/chunk-CGWE73OH.js.map +0 -7
  108. package/dist/esm/chunk-MR7XOWJM.js.map +0 -7
  109. package/dist/esm/chunk-P4LC45HN.js.map +0 -7
  110. package/dist/esm/chunk-RHUIR5LX.js.map +0 -7
  111. package/dist/esm/components/index.d.ts +0 -2
  112. package/dist/esm/components/index.d.ts.map +0 -1
  113. package/dist/esm/components/index.js +0 -11
  114. package/dist/esm/components/index.js.map +0 -7
  115. package/dist/esm/components/sign-in.d.ts.map +0 -1
  116. package/dist/esm/errors/index.d.ts +0 -9
  117. package/dist/esm/errors/index.d.ts.map +0 -1
  118. package/dist/esm/hooks/index.d.ts +0 -2
  119. package/dist/esm/hooks/index.d.ts.map +0 -1
  120. package/dist/esm/hooks/useAuth.d.ts +0 -2
  121. package/dist/esm/hooks/useAuth.d.ts.map +0 -1
  122. package/dist/esm/index.d.ts +0 -5
  123. package/dist/esm/index.d.ts.map +0 -1
  124. package/dist/esm/index.js.map +0 -7
  125. package/dist/esm/ternSecureClientProvider-FZVUEXLU.js +0 -8
  126. package/dist/esm/ternSecureClientProvider-FZVUEXLU.js.map +0 -7
  127. package/dist/esm/types/index.d.ts +0 -41
  128. package/dist/esm/types/index.d.ts.map +0 -1
  129. package/dist/esm/utils/create-styles.d.ts +0 -99
  130. package/dist/esm/utils/create-styles.d.ts.map +0 -1
@@ -0,0 +1,227 @@
1
+ 'use strict';
2
+
3
+ var chunkOQAWVYEY_cjs = require('./chunk-OQAWVYEY.cjs');
4
+ var react = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ // src/utils/create-styles.ts
8
+ var PREFIX = "tern";
9
+ var styleInjection = {
10
+ isInjected: false,
11
+ styleElement: null
12
+ };
13
+ var defaultClassNames = {
14
+ container: `${PREFIX}-container`,
15
+ header: `${PREFIX}-header`,
16
+ title: `${PREFIX}-title`,
17
+ formWrapper: `${PREFIX}-formWrapper`,
18
+ formContainer: `${PREFIX}-formContainer`,
19
+ form: `${PREFIX}-form`,
20
+ label: `${PREFIX}-label`,
21
+ input: `${PREFIX}-input`,
22
+ button: `${PREFIX}-button`,
23
+ error: `${PREFIX}-error`
24
+ };
25
+ function createStyleSheet(styles2) {
26
+ if (typeof window === "undefined") return defaultClassNames;
27
+ if (styleInjection.isInjected) {
28
+ return defaultClassNames;
29
+ }
30
+ let styleElement = document.querySelector("[data-tern-secure]");
31
+ if (!styleElement) {
32
+ styleElement = document.createElement("style");
33
+ styleElement.setAttribute("data-tern-secure", "");
34
+ document.head.appendChild(styleElement);
35
+ styleInjection.styleElement = styleElement;
36
+ }
37
+ const cssRules = Object.entries(styles2).map(([key, rules]) => {
38
+ const className = defaultClassNames[key];
39
+ const cssProperties = Object.entries(rules).map(([prop, value]) => {
40
+ const cssProperty = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
41
+ return `${cssProperty}: ${value};`;
42
+ }).join(" ");
43
+ return `.${className} { ${cssProperties} }`;
44
+ }).join("\n");
45
+ styleElement.textContent = cssRules;
46
+ styleInjection.isInjected = true;
47
+ return defaultClassNames;
48
+ }
49
+ var styleConfig = {
50
+ container: {
51
+ display: "flex",
52
+ minHeight: "100%",
53
+ flex: "1",
54
+ flexDirection: "column",
55
+ justifyContent: "center",
56
+ padding: "3rem 1.5rem"
57
+ },
58
+ header: {
59
+ margin: "0 auto",
60
+ width: "100%",
61
+ maxWidth: "28rem"
62
+ },
63
+ title: {
64
+ marginTop: "1.5rem",
65
+ textAlign: "center",
66
+ fontSize: "1.875rem",
67
+ fontWeight: "700",
68
+ lineHeight: "2.25rem",
69
+ letterSpacing: "-0.025em",
70
+ color: "var(--tern-text-primary, #111827)"
71
+ },
72
+ formWrapper: {
73
+ marginTop: "2.5rem",
74
+ margin: "0 auto",
75
+ width: "100%",
76
+ maxWidth: "30rem"
77
+ },
78
+ formContainer: {
79
+ padding: "3rem 1.5rem",
80
+ boxShadow: "0 1px 3px 0 rgb(0 0 0 / 0.1)",
81
+ borderRadius: "0.5rem",
82
+ backgroundColor: "var(--tern-background, white)"
83
+ },
84
+ form: {
85
+ display: "flex",
86
+ flexDirection: "column",
87
+ gap: "1rem"
88
+ },
89
+ label: {
90
+ display: "block",
91
+ fontSize: "0.875rem",
92
+ fontWeight: "500",
93
+ color: "var(--tern-text-secondary, #374151)"
94
+ },
95
+ input: {
96
+ marginTop: "0.25rem",
97
+ display: "block",
98
+ width: "100%",
99
+ padding: "0.5rem 0.75rem",
100
+ borderRadius: "0.375rem",
101
+ border: "1px solid var(--tern-border, #D1D5DB)",
102
+ backgroundColor: "var(--tern-input-background, white)",
103
+ color: "var(--tern-text-primary, #111827)"
104
+ },
105
+ button: {
106
+ display: "flex",
107
+ width: "100%",
108
+ justifyContent: "center",
109
+ padding: "0.5rem 1rem",
110
+ fontSize: "0.875rem",
111
+ fontWeight: "500",
112
+ color: "white",
113
+ backgroundColor: "var(--tern-primary, #2563EB)",
114
+ border: "none",
115
+ borderRadius: "0.375rem",
116
+ cursor: "pointer"
117
+ },
118
+ error: {
119
+ color: "var(--tern-error, #DC2626)",
120
+ fontSize: "0.875rem"
121
+ }
122
+ };
123
+ var styles = createStyleSheet(styleConfig);
124
+ function SignIn({
125
+ onSuccess,
126
+ onError,
127
+ redirectUrl,
128
+ className = "",
129
+ style,
130
+ customStyles = {}
131
+ }) {
132
+ const [email, setEmail] = react.useState("");
133
+ const [password, setPassword] = react.useState("");
134
+ const [loading, setLoading] = react.useState(false);
135
+ const [error, setError] = react.useState("");
136
+ const handleSubmit = async (e) => {
137
+ e.preventDefault();
138
+ setLoading(true);
139
+ setError("");
140
+ try {
141
+ await chunkOQAWVYEY_cjs.signInWithEmail({ email, password });
142
+ onSuccess?.();
143
+ if (redirectUrl) {
144
+ window.location.href = redirectUrl;
145
+ }
146
+ } catch (err) {
147
+ const errorMessage = err instanceof Error ? err.message : "Failed to sign in";
148
+ setError(errorMessage);
149
+ onError?.(err instanceof Error ? err : new Error("Failed to sign in"));
150
+ } finally {
151
+ setLoading(false);
152
+ }
153
+ };
154
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${styles.container} ${customStyles.container || ""}`, style, children: [
155
+ /* @__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" }) }),
156
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${styles.formWrapper} ${customStyles.formWrapper || ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${styles.formContainer} ${customStyles.formContainer || ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs(
157
+ "form",
158
+ {
159
+ onSubmit: handleSubmit,
160
+ className: `${styles.form} ${customStyles.form || ""} ${className}`,
161
+ role: "form",
162
+ "aria-label": "Sign in form",
163
+ children: [
164
+ error && /* @__PURE__ */ jsxRuntime.jsx(
165
+ "div",
166
+ {
167
+ className: `${styles.error} ${customStyles.errorText || ""}`,
168
+ role: "alert",
169
+ "aria-live": "polite",
170
+ children: error
171
+ }
172
+ ),
173
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
174
+ /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: "email", className: `${styles.label} ${customStyles.label || ""}`, children: "Email" }),
175
+ /* @__PURE__ */ jsxRuntime.jsx(
176
+ "input",
177
+ {
178
+ id: "email",
179
+ type: "email",
180
+ value: email,
181
+ onChange: (e) => setEmail(e.target.value),
182
+ placeholder: "Enter your email",
183
+ required: true,
184
+ className: `${styles.input} ${customStyles.input || ""}`,
185
+ disabled: loading,
186
+ "aria-required": "true",
187
+ "aria-invalid": !!error
188
+ }
189
+ )
190
+ ] }),
191
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
192
+ /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: "password", className: `${styles.label} ${customStyles.label || ""}`, children: "Password" }),
193
+ /* @__PURE__ */ jsxRuntime.jsx(
194
+ "input",
195
+ {
196
+ id: "password",
197
+ type: "password",
198
+ value: password,
199
+ onChange: (e) => setPassword(e.target.value),
200
+ placeholder: "Enter your password",
201
+ required: true,
202
+ className: `${styles.input} ${customStyles.input || ""}`,
203
+ disabled: loading,
204
+ "aria-required": "true",
205
+ "aria-invalid": !!error
206
+ }
207
+ )
208
+ ] }),
209
+ /* @__PURE__ */ jsxRuntime.jsx(
210
+ "button",
211
+ {
212
+ type: "submit",
213
+ disabled: loading,
214
+ className: `${styles.button} ${customStyles.button || ""}`,
215
+ "data-testid": "sign-in-submit",
216
+ children: loading ? "Signing in..." : "Sign in"
217
+ }
218
+ )
219
+ ]
220
+ }
221
+ ) }) })
222
+ ] });
223
+ }
224
+
225
+ exports.SignIn = SignIn;
226
+ //# sourceMappingURL=chunk-SR35MXXB.cjs.map
227
+ //# sourceMappingURL=chunk-SR35MXXB.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/create-styles.ts","../src/components/sign-in.tsx"],"names":["styles","useState","signInWithEmail","jsxs","jsx"],"mappings":"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","file":"chunk-SR35MXXB.cjs","sourcesContent":["'use client'\r\n\r\nconst PREFIX = 'tern'\r\n\r\n// Singleton to track style injection\r\nconst styleInjection = {\r\n isInjected: false,\r\n styleElement: null as HTMLStyleElement | null\r\n}\r\n\r\nexport const defaultClassNames = {\r\n container: `${PREFIX}-container`,\r\n header: `${PREFIX}-header`,\r\n title: `${PREFIX}-title`,\r\n formWrapper: `${PREFIX}-formWrapper`,\r\n formContainer: `${PREFIX}-formContainer`,\r\n form: `${PREFIX}-form`,\r\n label: `${PREFIX}-label`,\r\n input: `${PREFIX}-input`,\r\n button: `${PREFIX}-button`,\r\n error: `${PREFIX}-error`\r\n} as const\r\n\r\n// Create styles once and cache them\r\nfunction createStyleSheet(styles: Record<string, React.CSSProperties>) {\r\n if (typeof window === 'undefined') return defaultClassNames\r\n\r\n // Return early if styles are already injected\r\n if (styleInjection.isInjected) {\r\n return defaultClassNames\r\n }\r\n\r\n // Find existing style element or create new one\r\n let styleElement = document.querySelector<HTMLStyleElement>('[data-tern-secure]')\r\n \r\n if (!styleElement) {\r\n styleElement = document.createElement('style')\r\n styleElement.setAttribute('data-tern-secure', '')\r\n document.head.appendChild(styleElement)\r\n styleInjection.styleElement = styleElement\r\n }\r\n\r\n // Create CSS rules\r\n const cssRules = Object.entries(styles).map(([key, rules]) => {\r\n const className = defaultClassNames[key as keyof typeof defaultClassNames]\r\n const cssProperties = Object.entries(rules).map(([prop, value]) => {\r\n const cssProperty = prop.replace(/([A-Z])/g, '-$1').toLowerCase()\r\n return `${cssProperty}: ${value};`\r\n }).join(' ')\r\n\r\n return `.${className} { ${cssProperties} }`\r\n }).join('\\n')\r\n\r\n // Insert styles only once\r\n styleElement.textContent = cssRules\r\n styleInjection.isInjected = true\r\n\r\n return defaultClassNames\r\n}\r\n\r\n// Style configuration\r\nexport const styleConfig = {\r\n container: {\r\n display: 'flex',\r\n minHeight: '100%',\r\n flex: '1',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n padding: '3rem 1.5rem'\r\n },\r\n header: {\r\n margin: '0 auto',\r\n width: '100%',\r\n maxWidth: '28rem'\r\n },\r\n title: {\r\n marginTop: '1.5rem',\r\n textAlign: 'center',\r\n fontSize: '1.875rem',\r\n fontWeight: '700',\r\n lineHeight: '2.25rem',\r\n letterSpacing: '-0.025em',\r\n color: 'var(--tern-text-primary, #111827)'\r\n },\r\n formWrapper: {\r\n marginTop: '2.5rem',\r\n margin: '0 auto',\r\n width: '100%',\r\n maxWidth: '30rem'\r\n },\r\n formContainer: {\r\n padding: '3rem 1.5rem',\r\n boxShadow: '0 1px 3px 0 rgb(0 0 0 / 0.1)',\r\n borderRadius: '0.5rem',\r\n backgroundColor: 'var(--tern-background, white)'\r\n },\r\n form: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '1rem'\r\n },\r\n label: {\r\n display: 'block',\r\n fontSize: '0.875rem',\r\n fontWeight: '500',\r\n color: 'var(--tern-text-secondary, #374151)'\r\n },\r\n input: {\r\n marginTop: '0.25rem',\r\n display: 'block',\r\n width: '100%',\r\n padding: '0.5rem 0.75rem',\r\n borderRadius: '0.375rem',\r\n border: '1px solid var(--tern-border, #D1D5DB)',\r\n backgroundColor: 'var(--tern-input-background, white)',\r\n color: 'var(--tern-text-primary, #111827)'\r\n },\r\n button: {\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'center',\r\n padding: '0.5rem 1rem',\r\n fontSize: '0.875rem',\r\n fontWeight: '500',\r\n color: 'white',\r\n backgroundColor: 'var(--tern-primary, #2563EB)',\r\n border: 'none',\r\n borderRadius: '0.375rem',\r\n cursor: 'pointer'\r\n },\r\n error: {\r\n color: 'var(--tern-error, #DC2626)',\r\n fontSize: '0.875rem'\r\n }\r\n} as const\r\n\r\n// Export pre-created styles\r\nexport const styles = createStyleSheet(styleConfig)\r\n\r\n","import * as React from 'react'\r\nimport { useState } from 'react'\r\nimport { signInWithEmail } from '../app-router/client'\r\nimport { styles } from '../utils/create-styles'\r\n\r\nexport interface SignInProps {\r\n onSuccess?: () => void\r\n onError?: (error: Error) => void\r\n redirectUrl?: string\r\n className?: string\r\n style?: React.CSSProperties\r\n customStyles?: {\r\n container?: string\r\n header?: string\r\n title?: string\r\n formWrapper?: string\r\n formContainer?: string\r\n form?: string\r\n input?: string\r\n button?: string\r\n errorText?: string\r\n label?: string\r\n }\r\n}\r\n\r\nexport function SignIn({ \r\n onSuccess, \r\n onError, \r\n redirectUrl,\r\n className = '',\r\n style,\r\n customStyles = {}\r\n}: SignInProps) {\r\n const [email, setEmail] = useState('')\r\n const [password, setPassword] = useState('')\r\n const [loading, setLoading] = useState(false)\r\n const [error, setError] = useState('')\r\n\r\n const handleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault()\r\n setLoading(true)\r\n setError('')\r\n\r\n try {\r\n await signInWithEmail({ email, password })\r\n onSuccess?.()\r\n \r\n if (redirectUrl) {\r\n window.location.href = redirectUrl\r\n }\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err.message : 'Failed to sign in'\r\n setError(errorMessage)\r\n onError?.(err instanceof Error ? err : new Error('Failed to sign in'))\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n return (\r\n <div className={`${styles.container} ${customStyles.container || ''}`} style={style}>\r\n <div className={`${styles.header} ${customStyles.header || ''}`}>\r\n <h2 className={`${styles.title} ${customStyles.title || ''}`}>\r\n Sign in to your account\r\n </h2>\r\n </div>\r\n \r\n <div className={`${styles.formWrapper} ${customStyles.formWrapper || ''}`}>\r\n <div className={`${styles.formContainer} ${customStyles.formContainer || ''}`}>\r\n <form \r\n onSubmit={handleSubmit} \r\n className={`${styles.form} ${customStyles.form || ''} ${className}`}\r\n role=\"form\"\r\n aria-label=\"Sign in form\"\r\n >\r\n {error && (\r\n <div \r\n className={`${styles.error} ${customStyles.errorText || ''}`}\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n >\r\n {error}\r\n </div>\r\n )}\r\n <div>\r\n <label htmlFor=\"email\" className={`${styles.label} ${customStyles.label || ''}`}>\r\n Email\r\n </label>\r\n <input\r\n id=\"email\"\r\n type=\"email\"\r\n value={email}\r\n onChange={(e) => setEmail(e.target.value)}\r\n placeholder=\"Enter your email\"\r\n required\r\n className={`${styles.input} ${customStyles.input || ''}`}\r\n disabled={loading}\r\n aria-required=\"true\"\r\n aria-invalid={!!error}\r\n />\r\n </div>\r\n <div>\r\n <label htmlFor=\"password\" className={`${styles.label} ${customStyles.label || ''}`}>\r\n Password\r\n </label>\r\n <input\r\n id=\"password\"\r\n type=\"password\"\r\n value={password}\r\n onChange={(e) => setPassword(e.target.value)}\r\n placeholder=\"Enter your password\"\r\n required\r\n className={`${styles.input} ${customStyles.input || ''}`}\r\n disabled={loading}\r\n aria-required=\"true\"\r\n aria-invalid={!!error}\r\n />\r\n </div>\r\n <button \r\n type=\"submit\" \r\n disabled={loading}\r\n className={`${styles.button} ${customStyles.button || ''}`}\r\n data-testid=\"sign-in-submit\"\r\n >\r\n {loading ? 'Signing in...' : 'Sign in'}\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\n"]}
@@ -1,13 +1,9 @@
1
- import {
2
- loadFireConfig,
3
- validateConfig
4
- } from "./chunk-5DISHXED.js";
1
+ import { validateConfig, loadFireConfig } from './chunk-G7IGHHLE.js';
2
+ import { getApps, initializeApp } from 'firebase/app';
3
+ import { getAuth, setPersistence, browserSessionPersistence } from 'firebase/auth';
4
+ import { getFirestore } from 'firebase/firestore';
5
+ import { getStorage } from 'firebase/storage';
5
6
 
6
- // src/app-router/client/client-init.ts
7
- import { getApps, initializeApp } from "firebase/app";
8
- import { getAuth, setPersistence, browserSessionPersistence } from "firebase/auth";
9
- import { getFirestore } from "firebase/firestore";
10
- import { getStorage } from "firebase/storage";
11
7
  var app = (() => {
12
8
  const config = validateConfig(loadFireConfig());
13
9
  return getApps().length ? getApps()[0] : initializeApp(config);
@@ -20,9 +16,6 @@ var TernSecureAuth = () => auth;
20
16
  var TernSecureFirestore = () => firestore;
21
17
  var TernSecureStorage = () => storage;
22
18
 
23
- export {
24
- TernSecureAuth,
25
- TernSecureFirestore,
26
- TernSecureStorage
27
- };
28
- //# sourceMappingURL=chunk-RHUIR5LX.js.map
19
+ export { TernSecureAuth, TernSecureFirestore, TernSecureStorage };
20
+ //# sourceMappingURL=chunk-TIDHWPS6.js.map
21
+ //# sourceMappingURL=chunk-TIDHWPS6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app-router/client/client-init.ts"],"names":[],"mappings":";;;;;;AAOA,IAAM,OAAO,MAAM;AACjB,EAAM,MAAA,MAAA,GAAS,cAAe,CAAA,cAAA,EAAgB,CAAA;AAC9C,EAAO,OAAA,OAAA,GAAU,MAAS,GAAA,OAAA,GAAU,CAAC,CAAA,GAAI,cAAc,MAAM,CAAA;AAC/D,CAAG,GAAA;AAEH,IAAM,IAAA,GAAO,QAAQ,GAAG,CAAA;AACxB,cAAA,CAAe,MAAM,yBAAyB,CAAA;AAC9C,IAAM,SAAA,GAAY,aAAa,GAAG,CAAA;AAClC,IAAM,OAAA,GAAU,WAAW,GAAG,CAAA;AAEvB,IAAM,iBAAiB,MAAM;AAC7B,IAAM,sBAAsB,MAAM;AAClC,IAAM,oBAAoB,MAAM","file":"chunk-TIDHWPS6.js","sourcesContent":["import { getApps, 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 { loadFireConfig, validateConfig } from './config';\r\n\r\n// Initialize immediately\r\nconst app = (() => {\r\n const config = validateConfig(loadFireConfig());\r\n return getApps().length ? getApps()[0] : initializeApp(config);\r\n})();\r\n\r\nconst auth = getAuth(app);\r\nsetPersistence(auth, browserSessionPersistence); //to change later user should be able to choose persistance\r\nconst firestore = getFirestore(app);\r\nconst storage = getStorage(app);\r\n\r\nexport const TernSecureAuth = () => auth;\r\nexport const TernSecureFirestore = () => firestore;\r\nexport const TernSecureStorage = () => storage;"]}
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var React__default = /*#__PURE__*/_interopDefault(React);
9
+
10
+ // src/app-router/client/providers/ternSecureClientProvider.tsx
11
+ var initialState = {
12
+ firebase: {
13
+ initialized: false,
14
+ error: null
15
+ },
16
+ auth: {
17
+ user: null,
18
+ loading: true,
19
+ error: null,
20
+ isSignedIn: false
21
+ }
22
+ };
23
+ var TernSecureContext = React__default.default.createContext([initialState, () => {
24
+ }]);
25
+ var useTernSecure = (hookname) => {
26
+ const context = React__default.default.useContext(TernSecureContext);
27
+ if (!context) {
28
+ throw new Error(
29
+ `${hookname} must be used within TernSecureProvider`
30
+ );
31
+ }
32
+ return context;
33
+ };
34
+ function TernSecureClientProvider({ children }) {
35
+ const stateAndUpdater = React.useState(initialState);
36
+ return /* @__PURE__ */ jsxRuntime.jsx(TernSecureContext.Provider, { value: stateAndUpdater, children });
37
+ }
38
+
39
+ exports.TernSecureClientProvider = TernSecureClientProvider;
40
+ exports.TernSecureContext = TernSecureContext;
41
+ exports.useTernSecure = useTernSecure;
42
+ //# sourceMappingURL=chunk-VWGH2WW6.cjs.map
43
+ //# sourceMappingURL=chunk-VWGH2WW6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app-router/client/providers/ternSecureContext.tsx","../src/app-router/client/providers/ternSecureClientProvider.tsx"],"names":["React","useState"],"mappings":";;;;;;;;;;AAKA,IAAM,YAAgC,GAAA;AAAA,EACpC,QAAU,EAAA;AAAA,IACR,WAAa,EAAA,KAAA;AAAA,IACb,KAAO,EAAA;AAAA,GACT;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,IAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,IACT,KAAO,EAAA,IAAA;AAAA,IACP,UAAY,EAAA;AAAA;AAEhB,CAAA;AAEA,IAAM,iBAAoB,GAAAA,sBAAA,CAAM,aAAwF,CAAA,CAAC,cAAc,MAAM;AAAC,CAAC,CAAC;AAE1I,IAAA,aAAA,GAAgB,CAAC,QAAsB,KAAA;AAC3C,EAAM,MAAA,OAAA,GAAUA,sBAAM,CAAA,UAAA,CAAW,iBAAiB,CAAA;AAClD,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,GAAG,QAAQ,CAAA,uCAAA;AAAA,KAAyC;AAAA;AAExD,EAAO,OAAA,OAAA;AACT;ACtBO,SAAS,wBAAA,CAAyB,EAAE,QAAA,EAA2C,EAAA;AACpF,EAAM,MAAA,eAAA,GAAkBC,eAAS,YAAY,CAAA;AAE7C,EAAA,sCACG,iBAAkB,CAAA,QAAA,EAAlB,EAA2B,KAAA,EAAO,iBAChC,QACH,EAAA,CAAA;AAEJ","file":"chunk-VWGH2WW6.cjs","sourcesContent":["'use client'\r\n\r\nimport React from 'react'\r\nimport { TernSecureState } from '../../../types'\r\n\r\nconst initialState: TernSecureState = {\r\n firebase: {\r\n initialized: false,\r\n error: null\r\n },\r\n auth: {\r\n user: null,\r\n loading: true,\r\n error: null,\r\n isSignedIn: false\r\n }\r\n}\r\n\r\nconst TernSecureContext = React.createContext<[TernSecureState, React.Dispatch<React.SetStateAction<TernSecureState>>]>([initialState, () => {}])\r\n\r\nconst useTernSecure = (hookname?: string) => {\r\n const context = React.useContext(TernSecureContext)\r\n if (!context) {\r\n throw new Error(\r\n `${hookname} must be used within TernSecureProvider`)\r\n }\r\n return context\r\n}\r\n\r\nexport {\r\n TernSecureContext,\r\n useTernSecure,\r\n initialState\r\n}","'use client'\r\n\r\nimport React, { useState } from 'react'\r\nimport { TernSecureContext, initialState } from './ternSecureContext'\r\n\r\nexport function TernSecureClientProvider({ children }: { children: React.ReactNode }) {\r\n const stateAndUpdater = useState(initialState)\r\n\r\n return (\r\n <TernSecureContext.Provider value={stateAndUpdater}>\r\n {children}\r\n </TernSecureContext.Provider>\r\n )\r\n}"]}
@@ -1,8 +1,7 @@
1
- // src/app-router/client/providers/ternSecureClientProvider.tsx
2
- import { useState } from "react";
1
+ import React, { useState } from 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
3
 
4
- // src/app-router/client/providers/ternSecureContext.tsx
5
- import React from "react";
4
+ // src/app-router/client/providers/ternSecureClientProvider.tsx
6
5
  var initialState = {
7
6
  firebase: {
8
7
  initialized: false,
@@ -26,17 +25,11 @@ var useTernSecure = (hookname) => {
26
25
  }
27
26
  return context;
28
27
  };
29
-
30
- // src/app-router/client/providers/ternSecureClientProvider.tsx
31
- import { jsx } from "react/jsx-runtime";
32
28
  function TernSecureClientProvider({ children }) {
33
29
  const stateAndUpdater = useState(initialState);
34
30
  return /* @__PURE__ */ jsx(TernSecureContext.Provider, { value: stateAndUpdater, children });
35
31
  }
36
32
 
37
- export {
38
- TernSecureContext,
39
- useTernSecure,
40
- TernSecureClientProvider
41
- };
42
- //# sourceMappingURL=chunk-P4LC45HN.js.map
33
+ export { TernSecureClientProvider, TernSecureContext, useTernSecure };
34
+ //# sourceMappingURL=chunk-YDN4Z5BB.js.map
35
+ //# sourceMappingURL=chunk-YDN4Z5BB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/app-router/client/providers/ternSecureContext.tsx","../src/app-router/client/providers/ternSecureClientProvider.tsx"],"names":[],"mappings":";;;;AAKA,IAAM,YAAgC,GAAA;AAAA,EACpC,QAAU,EAAA;AAAA,IACR,WAAa,EAAA,KAAA;AAAA,IACb,KAAO,EAAA;AAAA,GACT;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,IAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,IACT,KAAO,EAAA,IAAA;AAAA,IACP,UAAY,EAAA;AAAA;AAEhB,CAAA;AAEA,IAAM,iBAAoB,GAAA,KAAA,CAAM,aAAwF,CAAA,CAAC,cAAc,MAAM;AAAC,CAAC,CAAC;AAE1I,IAAA,aAAA,GAAgB,CAAC,QAAsB,KAAA;AAC3C,EAAM,MAAA,OAAA,GAAU,KAAM,CAAA,UAAA,CAAW,iBAAiB,CAAA;AAClD,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,GAAG,QAAQ,CAAA,uCAAA;AAAA,KAAyC;AAAA;AAExD,EAAO,OAAA,OAAA;AACT;ACtBO,SAAS,wBAAA,CAAyB,EAAE,QAAA,EAA2C,EAAA;AACpF,EAAM,MAAA,eAAA,GAAkB,SAAS,YAAY,CAAA;AAE7C,EAAA,2BACG,iBAAkB,CAAA,QAAA,EAAlB,EAA2B,KAAA,EAAO,iBAChC,QACH,EAAA,CAAA;AAEJ","file":"chunk-YDN4Z5BB.js","sourcesContent":["'use client'\r\n\r\nimport React from 'react'\r\nimport { TernSecureState } from '../../../types'\r\n\r\nconst initialState: TernSecureState = {\r\n firebase: {\r\n initialized: false,\r\n error: null\r\n },\r\n auth: {\r\n user: null,\r\n loading: true,\r\n error: null,\r\n isSignedIn: false\r\n }\r\n}\r\n\r\nconst TernSecureContext = React.createContext<[TernSecureState, React.Dispatch<React.SetStateAction<TernSecureState>>]>([initialState, () => {}])\r\n\r\nconst useTernSecure = (hookname?: string) => {\r\n const context = React.useContext(TernSecureContext)\r\n if (!context) {\r\n throw new Error(\r\n `${hookname} must be used within TernSecureProvider`)\r\n }\r\n return context\r\n}\r\n\r\nexport {\r\n TernSecureContext,\r\n useTernSecure,\r\n initialState\r\n}","'use client'\r\n\r\nimport React, { useState } from 'react'\r\nimport { TernSecureContext, initialState } from './ternSecureContext'\r\n\r\nexport function TernSecureClientProvider({ children }: { children: React.ReactNode }) {\r\n const stateAndUpdater = useState(initialState)\r\n\r\n return (\r\n <TernSecureContext.Provider value={stateAndUpdater}>\r\n {children}\r\n </TernSecureContext.Provider>\r\n )\r\n}"]}
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var chunkSR35MXXB_cjs = require('../chunk-SR35MXXB.cjs');
4
+ require('../chunk-OQAWVYEY.cjs');
5
+ require('../chunk-F6OZXBDZ.cjs');
6
+ require('../chunk-GLWDHU7I.cjs');
7
+ require('../chunk-VWGH2WW6.cjs');
8
+
9
+
10
+
11
+ Object.defineProperty(exports, "SignIn", {
12
+ enumerable: true,
13
+ get: function () { return chunkSR35MXXB_cjs.SignIn; }
14
+ });
15
+ //# sourceMappingURL=index.cjs.map
16
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -1,5 +1,7 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
1
2
  import * as React from 'react';
2
- export interface SignInProps {
3
+
4
+ interface SignInProps {
3
5
  onSuccess?: () => void;
4
6
  onError?: (error: Error) => void;
5
7
  redirectUrl?: string;
@@ -18,5 +20,6 @@ export interface SignInProps {
18
20
  label?: string;
19
21
  };
20
22
  }
21
- export declare function SignIn({ onSuccess, onError, redirectUrl, className, style, customStyles }: SignInProps): import("react/jsx-runtime").JSX.Element;
22
- //# sourceMappingURL=sign-in.d.ts.map
23
+ declare function SignIn({ onSuccess, onError, redirectUrl, className, style, customStyles }: SignInProps): react_jsx_runtime.JSX.Element;
24
+
25
+ export { SignIn };
@@ -0,0 +1,25 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ interface SignInProps {
5
+ onSuccess?: () => void;
6
+ onError?: (error: Error) => void;
7
+ redirectUrl?: string;
8
+ className?: string;
9
+ style?: React.CSSProperties;
10
+ customStyles?: {
11
+ container?: string;
12
+ header?: string;
13
+ title?: string;
14
+ formWrapper?: string;
15
+ formContainer?: string;
16
+ form?: string;
17
+ input?: string;
18
+ button?: string;
19
+ errorText?: string;
20
+ label?: string;
21
+ };
22
+ }
23
+ declare function SignIn({ onSuccess, onError, redirectUrl, className, style, customStyles }: SignInProps): react_jsx_runtime.JSX.Element;
24
+
25
+ export { SignIn };
@@ -0,0 +1,7 @@
1
+ export { SignIn } from '../chunk-COJKOD7O.js';
2
+ import '../chunk-ILPVABOB.js';
3
+ import '../chunk-TIDHWPS6.js';
4
+ import '../chunk-G7IGHHLE.js';
5
+ import '../chunk-YDN4Z5BB.js';
6
+ //# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,30 @@
1
+ import { User } from 'firebase/auth';
2
+
3
+ interface TernSecureConfig {
4
+ apiKey: string;
5
+ authDomain: string;
6
+ projectId: string;
7
+ storageBucket: string;
8
+ messagingSenderId: string;
9
+ appId: string;
10
+ measurementId: string;
11
+ }
12
+ interface FirebaseState {
13
+ initialized: boolean;
14
+ error: Error | null;
15
+ }
16
+ interface TernSecureState {
17
+ firebase: FirebaseState;
18
+ auth: AuthState;
19
+ }
20
+ interface AuthState {
21
+ user: User | null;
22
+ loading: boolean;
23
+ error: Error | null;
24
+ isSignedIn: boolean;
25
+ }
26
+
27
+ declare const loadFireConfig: () => TernSecureConfig;
28
+ declare const validateConfig: (config: TernSecureConfig) => TernSecureConfig;
29
+
30
+ export { type AuthState as A, type TernSecureState as T, loadFireConfig as l, validateConfig as v };
@@ -0,0 +1,30 @@
1
+ import { User } from 'firebase/auth';
2
+
3
+ interface TernSecureConfig {
4
+ apiKey: string;
5
+ authDomain: string;
6
+ projectId: string;
7
+ storageBucket: string;
8
+ messagingSenderId: string;
9
+ appId: string;
10
+ measurementId: string;
11
+ }
12
+ interface FirebaseState {
13
+ initialized: boolean;
14
+ error: Error | null;
15
+ }
16
+ interface TernSecureState {
17
+ firebase: FirebaseState;
18
+ auth: AuthState;
19
+ }
20
+ interface AuthState {
21
+ user: User | null;
22
+ loading: boolean;
23
+ error: Error | null;
24
+ isSignedIn: boolean;
25
+ }
26
+
27
+ declare const loadFireConfig: () => TernSecureConfig;
28
+ declare const validateConfig: (config: TernSecureConfig) => TernSecureConfig;
29
+
30
+ export { type AuthState as A, type TernSecureState as T, loadFireConfig as l, validateConfig as v };
package/dist/index.cjs ADDED
@@ -0,0 +1,113 @@
1
+ 'use strict';
2
+
3
+ var chunkSR35MXXB_cjs = require('./chunk-SR35MXXB.cjs');
4
+ var chunkOQAWVYEY_cjs = require('./chunk-OQAWVYEY.cjs');
5
+ var chunkF6OZXBDZ_cjs = require('./chunk-F6OZXBDZ.cjs');
6
+ var chunkGLWDHU7I_cjs = require('./chunk-GLWDHU7I.cjs');
7
+ var chunk5GZKGYND_cjs = require('./chunk-5GZKGYND.cjs');
8
+ var chunkVWGH2WW6_cjs = require('./chunk-VWGH2WW6.cjs');
9
+ var react = require('react');
10
+
11
+ function useAuth() {
12
+ const [state, setState] = chunkVWGH2WW6_cjs.useTernSecure("useAuth");
13
+ react.useEffect(() => {
14
+ try {
15
+ const auth = chunkF6OZXBDZ_cjs.TernSecureAuth();
16
+ setState((prev) => ({
17
+ ...prev,
18
+ firebase: {
19
+ initialized: true,
20
+ error: null
21
+ }
22
+ }));
23
+ const unsubscribe = auth.onAuthStateChanged(
24
+ (user) => {
25
+ setState((prev) => ({
26
+ ...prev,
27
+ auth: {
28
+ user,
29
+ loading: false,
30
+ error: null,
31
+ isSignedIn: !!user
32
+ }
33
+ }));
34
+ },
35
+ (error) => {
36
+ setState((prev) => ({
37
+ ...prev,
38
+ auth: {
39
+ user: null,
40
+ loading: false,
41
+ error,
42
+ isSignedIn: false
43
+ }
44
+ }));
45
+ }
46
+ );
47
+ return () => unsubscribe();
48
+ } catch (error) {
49
+ setState((prev) => ({
50
+ ...prev,
51
+ firebase: {
52
+ initialized: false,
53
+ error
54
+ },
55
+ auth: {
56
+ user: null,
57
+ loading: false,
58
+ error,
59
+ isSignedIn: false
60
+ }
61
+ }));
62
+ }
63
+ }, []);
64
+ return state.auth;
65
+ }
66
+
67
+ Object.defineProperty(exports, "SignIn", {
68
+ enumerable: true,
69
+ get: function () { return chunkSR35MXXB_cjs.SignIn; }
70
+ });
71
+ Object.defineProperty(exports, "signInWithEmail", {
72
+ enumerable: true,
73
+ get: function () { return chunkOQAWVYEY_cjs.signInWithEmail; }
74
+ });
75
+ Object.defineProperty(exports, "TernSecureAuth", {
76
+ enumerable: true,
77
+ get: function () { return chunkF6OZXBDZ_cjs.TernSecureAuth; }
78
+ });
79
+ Object.defineProperty(exports, "TernSecureFirestore", {
80
+ enumerable: true,
81
+ get: function () { return chunkF6OZXBDZ_cjs.TernSecureFirestore; }
82
+ });
83
+ Object.defineProperty(exports, "TernSecureStorage", {
84
+ enumerable: true,
85
+ get: function () { return chunkF6OZXBDZ_cjs.TernSecureStorage; }
86
+ });
87
+ Object.defineProperty(exports, "loadFireConfig", {
88
+ enumerable: true,
89
+ get: function () { return chunkGLWDHU7I_cjs.loadFireConfig; }
90
+ });
91
+ Object.defineProperty(exports, "validateConfig", {
92
+ enumerable: true,
93
+ get: function () { return chunkGLWDHU7I_cjs.validateConfig; }
94
+ });
95
+ Object.defineProperty(exports, "TernSecureProvider", {
96
+ enumerable: true,
97
+ get: function () { return chunk5GZKGYND_cjs.TernSecureProvider; }
98
+ });
99
+ Object.defineProperty(exports, "TernSecureClientProvider", {
100
+ enumerable: true,
101
+ get: function () { return chunkVWGH2WW6_cjs.TernSecureClientProvider; }
102
+ });
103
+ Object.defineProperty(exports, "TernSecureContext", {
104
+ enumerable: true,
105
+ get: function () { return chunkVWGH2WW6_cjs.TernSecureContext; }
106
+ });
107
+ Object.defineProperty(exports, "useTernSecure", {
108
+ enumerable: true,
109
+ get: function () { return chunkVWGH2WW6_cjs.useTernSecure; }
110
+ });
111
+ exports.useAuth = useAuth;
112
+ //# sourceMappingURL=index.cjs.map
113
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useAuth.ts"],"names":["useTernSecure","useEffect","TernSecureAuth"],"mappings":";;;;;;;;;;AAMO,SAAS,OAAU,GAAA;AACxB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,gCAAc,SAAS,CAAA;AAEjD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAI,IAAA;AACF,MAAA,MAAM,OAAOC,gCAAe,EAAA;AAC5B,MAAA,QAAA,CAAS,CAAS,IAAA,MAAA;AAAA,QAChB,GAAG,IAAA;AAAA,QACH,QAAU,EAAA;AAAA,UACR,WAAa,EAAA,IAAA;AAAA,UACb,KAAO,EAAA;AAAA;AACT,OACA,CAAA,CAAA;AAEF,MAAA,MAAM,cAAc,IAAK,CAAA,kBAAA;AAAA,QACvB,CAAC,IAAS,KAAA;AACR,UAAA,QAAA,CAAS,CAAS,IAAA,MAAA;AAAA,YAChB,GAAG,IAAA;AAAA,YACH,IAAM,EAAA;AAAA,cACJ,IAAA;AAAA,cACA,OAAS,EAAA,KAAA;AAAA,cACT,KAAO,EAAA,IAAA;AAAA,cACP,UAAA,EAAY,CAAC,CAAC;AAAA;AAChB,WACA,CAAA,CAAA;AAAA,SACJ;AAAA,QACA,CAAC,KAAU,KAAA;AACT,UAAA,QAAA,CAAS,CAAS,IAAA,MAAA;AAAA,YAChB,GAAG,IAAA;AAAA,YACH,IAAM,EAAA;AAAA,cACJ,IAAM,EAAA,IAAA;AAAA,cACN,OAAS,EAAA,KAAA;AAAA,cACT,KAAA;AAAA,cACA,UAAY,EAAA;AAAA;AACd,WACA,CAAA,CAAA;AAAA;AACJ,OACF;AAEA,MAAA,OAAO,MAAM,WAAY,EAAA;AAAA,aAClB,KAAO,EAAA;AACd,MAAA,QAAA,CAAS,CAAS,IAAA,MAAA;AAAA,QAChB,GAAG,IAAA;AAAA,QACH,QAAU,EAAA;AAAA,UACR,WAAa,EAAA,KAAA;AAAA,UACb;AAAA,SACF;AAAA,QACA,IAAM,EAAA;AAAA,UACJ,IAAM,EAAA,IAAA;AAAA,UACN,OAAS,EAAA,KAAA;AAAA,UACT,KAAA;AAAA,UACA,UAAY,EAAA;AAAA;AACd,OACA,CAAA,CAAA;AAAA;AACJ,GACF,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,KAAM,CAAA,IAAA;AACf","file":"index.cjs","sourcesContent":["'use client'\r\n\r\nimport { useEffect } from 'react'\r\nimport { TernSecureAuth } from '../app-router/client'\r\nimport { useTernSecure } from '../app-router/client/'\r\n\r\nexport function useAuth() {\r\n const [state, setState] = useTernSecure('useAuth')\r\n\r\n useEffect(() => {\r\n try {\r\n const auth = TernSecureAuth() // This initializes Firebase\r\n setState(prev => ({\r\n ...prev,\r\n firebase: {\r\n initialized: true,\r\n error: null\r\n }\r\n }))\r\n\r\n const unsubscribe = auth.onAuthStateChanged(\r\n (user) => {\r\n setState(prev => ({\r\n ...prev,\r\n auth: {\r\n user,\r\n loading: false,\r\n error: null,\r\n isSignedIn: !!user\r\n }\r\n }))\r\n },\r\n (error) => {\r\n setState(prev => ({\r\n ...prev,\r\n auth: {\r\n user: null,\r\n loading: false,\r\n error,\r\n isSignedIn: false\r\n }\r\n }))\r\n }\r\n )\r\n\r\n return () => unsubscribe()\r\n } catch (error) {\r\n setState(prev => ({\r\n ...prev,\r\n firebase: {\r\n initialized: false,\r\n error: error as Error\r\n },\r\n auth: {\r\n user: null,\r\n loading: false,\r\n error: error as Error,\r\n isSignedIn: false\r\n }\r\n }))\r\n }\r\n }, []) // Only run once on mount\r\n\r\n return state.auth\r\n}"]}