@tern-secure/nextjs 4.2.11 → 5.0.1

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 (232) hide show
  1. package/README.md +33 -33
  2. package/dist/cjs/app-router/admin/index.js +5 -8
  3. package/dist/cjs/app-router/admin/index.js.map +1 -1
  4. package/dist/cjs/app-router/admin/sessionTernSecure.js +3 -6
  5. package/dist/cjs/app-router/admin/sessionTernSecure.js.map +1 -1
  6. package/dist/cjs/app-router/client/TernSecureProvider.js +10 -18
  7. package/dist/cjs/app-router/client/TernSecureProvider.js.map +1 -1
  8. package/dist/cjs/app-router/client/actions.js +1 -177
  9. package/dist/cjs/app-router/client/actions.js.map +1 -1
  10. package/dist/cjs/app-router/route-handler/internal-route.js +4 -35
  11. package/dist/cjs/app-router/route-handler/internal-route.js.map +1 -1
  12. package/dist/cjs/boundary/{hooks/useSignUp.js → components.js} +16 -16
  13. package/dist/cjs/boundary/components.js.map +1 -0
  14. package/dist/cjs/{lib/utils.js → boundary/hooks.js} +9 -11
  15. package/dist/cjs/boundary/hooks.js.map +1 -0
  16. package/dist/cjs/{boundary/TernSecureCtx.js → components/uiComponents.js} +17 -24
  17. package/dist/cjs/components/uiComponents.js.map +1 -0
  18. package/dist/cjs/errors.js +1 -0
  19. package/dist/cjs/errors.js.map +1 -1
  20. package/dist/cjs/index.js +13 -27
  21. package/dist/cjs/index.js.map +1 -1
  22. package/dist/cjs/server/auth.js +4 -5
  23. package/dist/cjs/server/auth.js.map +1 -1
  24. package/dist/cjs/server/crypto.js.map +1 -1
  25. package/dist/cjs/server/ctx-store.js +1 -2
  26. package/dist/cjs/server/ctx-store.js.map +1 -1
  27. package/dist/cjs/server/edge-session.js +6 -7
  28. package/dist/cjs/server/edge-session.js.map +1 -1
  29. package/dist/cjs/server/index.js.map +1 -1
  30. package/dist/cjs/server/jwt-edge.js.map +1 -1
  31. package/dist/cjs/server/jwt.js.map +1 -1
  32. package/dist/cjs/server/session-store.js +3 -1
  33. package/dist/cjs/server/session-store.js.map +1 -1
  34. package/dist/cjs/server/ternSecureMiddleware.js.map +1 -1
  35. package/dist/cjs/server/types.js.map +1 -1
  36. package/dist/cjs/server/utils.js.map +1 -1
  37. package/dist/cjs/types.js.map +1 -1
  38. package/dist/cjs/utils/admin-init.js +3 -0
  39. package/dist/cjs/utils/admin-init.js.map +1 -1
  40. package/dist/cjs/utils/allNextProviderProps.js +108 -0
  41. package/dist/cjs/utils/allNextProviderProps.js.map +1 -0
  42. package/dist/cjs/utils/client-init.js +2 -47
  43. package/dist/cjs/utils/client-init.js.map +1 -1
  44. package/dist/cjs/utils/config.js.map +1 -1
  45. package/dist/cjs/utils/construct.js.map +1 -1
  46. package/dist/cjs/utils/create-styles.js.map +1 -1
  47. package/dist/cjs/utils/redirect.js.map +1 -1
  48. package/dist/cjs/{components/ui/separator.js → utils/tern-ui-script.js} +41 -24
  49. package/dist/cjs/utils/tern-ui-script.js.map +1 -0
  50. package/dist/esm/app-router/admin/index.js +6 -4
  51. package/dist/esm/app-router/admin/index.js.map +1 -1
  52. package/dist/esm/app-router/admin/sessionTernSecure.js +3 -6
  53. package/dist/esm/app-router/admin/sessionTernSecure.js.map +1 -1
  54. package/dist/esm/app-router/client/TernSecureProvider.js +13 -19
  55. package/dist/esm/app-router/client/TernSecureProvider.js.map +1 -1
  56. package/dist/esm/app-router/client/actions.js +1 -157
  57. package/dist/esm/app-router/client/actions.js.map +1 -1
  58. package/dist/esm/app-router/route-handler/internal-route.js +5 -30
  59. package/dist/esm/app-router/route-handler/internal-route.js.map +1 -1
  60. package/dist/esm/boundary/components.js +18 -0
  61. package/dist/esm/boundary/components.js.map +1 -0
  62. package/dist/esm/boundary/hooks.js +9 -0
  63. package/dist/esm/boundary/hooks.js.map +1 -0
  64. package/dist/esm/components/uiComponents.js +21 -0
  65. package/dist/esm/components/uiComponents.js.map +1 -0
  66. package/dist/esm/errors.js +1 -0
  67. package/dist/esm/errors.js.map +1 -1
  68. package/dist/esm/index.js +15 -16
  69. package/dist/esm/index.js.map +1 -1
  70. package/dist/esm/server/auth.js +4 -5
  71. package/dist/esm/server/auth.js.map +1 -1
  72. package/dist/esm/server/crypto.js.map +1 -1
  73. package/dist/esm/server/ctx-store.js +1 -2
  74. package/dist/esm/server/ctx-store.js.map +1 -1
  75. package/dist/esm/server/edge-session.js +6 -7
  76. package/dist/esm/server/edge-session.js.map +1 -1
  77. package/dist/esm/server/index.js.map +1 -1
  78. package/dist/esm/server/jwt-edge.js.map +1 -1
  79. package/dist/esm/server/jwt.js.map +1 -1
  80. package/dist/esm/server/session-store.js +3 -1
  81. package/dist/esm/server/session-store.js.map +1 -1
  82. package/dist/esm/server/ternSecureMiddleware.js.map +1 -1
  83. package/dist/esm/server/utils.js.map +1 -1
  84. package/dist/esm/types.js.map +1 -1
  85. package/dist/esm/utils/admin-init.js +2 -0
  86. package/dist/esm/utils/admin-init.js.map +1 -1
  87. package/dist/esm/utils/allNextProviderProps.js +84 -0
  88. package/dist/esm/utils/allNextProviderProps.js.map +1 -0
  89. package/dist/esm/utils/client-init.js +2 -21
  90. package/dist/esm/utils/client-init.js.map +1 -1
  91. package/dist/esm/utils/config.js.map +1 -1
  92. package/dist/esm/utils/construct.js.map +1 -1
  93. package/dist/esm/utils/create-styles.js.map +1 -1
  94. package/dist/esm/utils/redirect.js.map +1 -1
  95. package/dist/esm/utils/tern-ui-script.js +42 -0
  96. package/dist/esm/utils/tern-ui-script.js.map +1 -0
  97. package/dist/types/app-router/admin/index.d.ts +1 -2
  98. package/dist/types/app-router/admin/index.d.ts.map +1 -1
  99. package/dist/types/app-router/client/TernSecureProvider.d.ts +2 -14
  100. package/dist/types/app-router/client/TernSecureProvider.d.ts.map +1 -1
  101. package/dist/types/app-router/client/actions.d.ts +1 -54
  102. package/dist/types/app-router/client/actions.d.ts.map +1 -1
  103. package/dist/types/app-router/route-handler/internal-route.d.ts +1 -15
  104. package/dist/types/app-router/route-handler/internal-route.d.ts.map +1 -1
  105. package/dist/types/boundary/components.d.ts +2 -0
  106. package/dist/types/boundary/components.d.ts.map +1 -0
  107. package/dist/types/boundary/hooks.d.ts +2 -0
  108. package/dist/types/boundary/hooks.d.ts.map +1 -0
  109. package/dist/types/components/uiComponents.d.ts +6 -0
  110. package/dist/types/components/uiComponents.d.ts.map +1 -0
  111. package/dist/types/errors.d.ts +1 -1
  112. package/dist/types/errors.d.ts.map +1 -1
  113. package/dist/types/index.d.ts +3 -9
  114. package/dist/types/index.d.ts.map +1 -1
  115. package/dist/types/server/ternSecureMiddleware.d.ts.map +1 -1
  116. package/dist/types/types.d.ts +6 -13
  117. package/dist/types/types.d.ts.map +1 -1
  118. package/dist/types/utils/admin-init.d.ts +2 -1
  119. package/dist/types/utils/admin-init.d.ts.map +1 -1
  120. package/dist/types/utils/allNextProviderProps.d.ts +6 -0
  121. package/dist/types/utils/allNextProviderProps.d.ts.map +1 -0
  122. package/dist/types/utils/client-init.d.ts +1 -4
  123. package/dist/types/utils/client-init.d.ts.map +1 -1
  124. package/dist/types/utils/config.d.ts +1 -1
  125. package/dist/types/utils/config.d.ts.map +1 -1
  126. package/dist/types/utils/construct.d.ts.map +1 -1
  127. package/dist/types/utils/tern-ui-script.d.ts +8 -0
  128. package/dist/types/utils/tern-ui-script.d.ts.map +1 -0
  129. package/package.json +41 -52
  130. package/dist/cjs/boundary/TernSecureClientProvider.js +0 -240
  131. package/dist/cjs/boundary/TernSecureClientProvider.js.map +0 -1
  132. package/dist/cjs/boundary/TernSecureCtx.js.map +0 -1
  133. package/dist/cjs/boundary/hooks/useAuth.js +0 -63
  134. package/dist/cjs/boundary/hooks/useAuth.js.map +0 -1
  135. package/dist/cjs/boundary/hooks/useSignUp.js.map +0 -1
  136. package/dist/cjs/components/background.js +0 -65
  137. package/dist/cjs/components/background.js.map +0 -1
  138. package/dist/cjs/components/sign-in.js +0 -368
  139. package/dist/cjs/components/sign-in.js.map +0 -1
  140. package/dist/cjs/components/sign-out-button.js +0 -84
  141. package/dist/cjs/components/sign-out-button.js.map +0 -1
  142. package/dist/cjs/components/sign-out.js +0 -99
  143. package/dist/cjs/components/sign-out.js.map +0 -1
  144. package/dist/cjs/components/sign-up.js +0 -332
  145. package/dist/cjs/components/sign-up.js.map +0 -1
  146. package/dist/cjs/components/ui/alert.js +0 -88
  147. package/dist/cjs/components/ui/alert.js.map +0 -1
  148. package/dist/cjs/components/ui/button.js +0 -84
  149. package/dist/cjs/components/ui/button.js.map +0 -1
  150. package/dist/cjs/components/ui/card.js +0 -101
  151. package/dist/cjs/components/ui/card.js.map +0 -1
  152. package/dist/cjs/components/ui/input.js +0 -58
  153. package/dist/cjs/components/ui/input.js.map +0 -1
  154. package/dist/cjs/components/ui/label.js +0 -55
  155. package/dist/cjs/components/ui/label.js.map +0 -1
  156. package/dist/cjs/components/ui/separator.js.map +0 -1
  157. package/dist/cjs/components/verify.js +0 -195
  158. package/dist/cjs/components/verify.js.map +0 -1
  159. package/dist/cjs/lib/utils.d.js +0 -17
  160. package/dist/cjs/lib/utils.d.js.map +0 -1
  161. package/dist/cjs/lib/utils.js.map +0 -1
  162. package/dist/esm/boundary/TernSecureClientProvider.js +0 -216
  163. package/dist/esm/boundary/TernSecureClientProvider.js.map +0 -1
  164. package/dist/esm/boundary/TernSecureCtx.js +0 -23
  165. package/dist/esm/boundary/TernSecureCtx.js.map +0 -1
  166. package/dist/esm/boundary/hooks/useAuth.js +0 -39
  167. package/dist/esm/boundary/hooks/useAuth.js.map +0 -1
  168. package/dist/esm/boundary/hooks/useSignUp.js +0 -16
  169. package/dist/esm/boundary/hooks/useSignUp.js.map +0 -1
  170. package/dist/esm/components/background.js +0 -41
  171. package/dist/esm/components/background.js.map +0 -1
  172. package/dist/esm/components/sign-in.js +0 -344
  173. package/dist/esm/components/sign-in.js.map +0 -1
  174. package/dist/esm/components/sign-out-button.js +0 -60
  175. package/dist/esm/components/sign-out-button.js.map +0 -1
  176. package/dist/esm/components/sign-out.js +0 -65
  177. package/dist/esm/components/sign-out.js.map +0 -1
  178. package/dist/esm/components/sign-up.js +0 -298
  179. package/dist/esm/components/sign-up.js.map +0 -1
  180. package/dist/esm/components/ui/alert.js +0 -52
  181. package/dist/esm/components/ui/alert.js.map +0 -1
  182. package/dist/esm/components/ui/button.js +0 -49
  183. package/dist/esm/components/ui/button.js.map +0 -1
  184. package/dist/esm/components/ui/card.js +0 -62
  185. package/dist/esm/components/ui/card.js.map +0 -1
  186. package/dist/esm/components/ui/input.js +0 -24
  187. package/dist/esm/components/ui/input.js.map +0 -1
  188. package/dist/esm/components/ui/label.js +0 -21
  189. package/dist/esm/components/ui/label.js.map +0 -1
  190. package/dist/esm/components/ui/separator.js +0 -25
  191. package/dist/esm/components/ui/separator.js.map +0 -1
  192. package/dist/esm/components/verify.js +0 -161
  193. package/dist/esm/components/verify.js.map +0 -1
  194. package/dist/esm/lib/utils.d.js +0 -1
  195. package/dist/esm/lib/utils.d.js.map +0 -1
  196. package/dist/esm/lib/utils.js +0 -9
  197. package/dist/esm/lib/utils.js.map +0 -1
  198. package/dist/types/boundary/TernSecureClientProvider.d.ts +0 -27
  199. package/dist/types/boundary/TernSecureClientProvider.d.ts.map +0 -1
  200. package/dist/types/boundary/TernSecureCtx.d.ts +0 -11
  201. package/dist/types/boundary/TernSecureCtx.d.ts.map +0 -1
  202. package/dist/types/boundary/hooks/useAuth.d.ts +0 -15
  203. package/dist/types/boundary/hooks/useAuth.d.ts.map +0 -1
  204. package/dist/types/boundary/hooks/useSignUp.d.ts +0 -5
  205. package/dist/types/boundary/hooks/useSignUp.d.ts.map +0 -1
  206. package/dist/types/components/background.d.ts +0 -2
  207. package/dist/types/components/background.d.ts.map +0 -1
  208. package/dist/types/components/sign-in.d.ts +0 -18
  209. package/dist/types/components/sign-in.d.ts.map +0 -1
  210. package/dist/types/components/sign-out-button.d.ts +0 -14
  211. package/dist/types/components/sign-out-button.d.ts.map +0 -1
  212. package/dist/types/components/sign-out.d.ts +0 -12
  213. package/dist/types/components/sign-out.d.ts.map +0 -1
  214. package/dist/types/components/sign-up.d.ts +0 -11
  215. package/dist/types/components/sign-up.d.ts.map +0 -1
  216. package/dist/types/components/ui/alert.d.ts +0 -9
  217. package/dist/types/components/ui/alert.d.ts.map +0 -1
  218. package/dist/types/components/ui/button.d.ts +0 -12
  219. package/dist/types/components/ui/button.d.ts.map +0 -1
  220. package/dist/types/components/ui/card.d.ts +0 -9
  221. package/dist/types/components/ui/card.d.ts.map +0 -1
  222. package/dist/types/components/ui/input.d.ts +0 -4
  223. package/dist/types/components/ui/input.d.ts.map +0 -1
  224. package/dist/types/components/ui/label.d.ts +0 -6
  225. package/dist/types/components/ui/label.d.ts.map +0 -1
  226. package/dist/types/components/ui/separator.d.ts +0 -5
  227. package/dist/types/components/ui/separator.d.ts.map +0 -1
  228. package/dist/types/components/verify.d.ts +0 -2
  229. package/dist/types/components/verify.d.ts.map +0 -1
  230. package/dist/types/lib/utils.d.ts +0 -3
  231. package/dist/types/lib/utils.d.ts.map +0 -1
  232. package/server/package.json +0 -5
package/README.md CHANGED
@@ -1,34 +1,34 @@
1
- # @tern-secure/nextjs
2
-
3
- A comprehensive Firebase authentication solution for Next.js applications, providing seamless integration with Firebase Auth, including email/password, Google, and Microsoft authentication methods.
4
-
5
- [![npm version](https://badge.fury.io/js/@tern-secure%2Fnextjs.svg)](https://www.npmjs.com/package/@tern-secure/nextjs)
6
- [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)
7
-
8
- ## Features
9
-
10
- - 🔐 Multiple authentication methods:
11
- - Email/Password authentication
12
- - Google OAuth
13
- - Microsoft OAuth
14
- - 🔄 Session management with cookies
15
- - ⚡ Server-side and client-side components
16
- - 🎨 Customizable UI components
17
- - 📦 TypeScript support
18
- - 🚀 Next.js App Router compatible
19
-
20
- ## Installation
21
-
22
- ## Environment Variables
23
-
24
- Required environment variables:
25
- ```
26
- NEXT_PUBLIC_FIREBASE_API_KEY=
27
- NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
28
- NEXT_PUBLIC_FIREBASE_PROJECT_ID=
29
- NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
30
- NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
31
- NEXT_PUBLIC_FIREBASE_APP_ID=
32
- FIREBASE_ADMIN_CLIENT_EMAIL=
33
- FIREBASE_ADMIN_PRIVATE_KEY=
1
+ # @tern-secure/nextjs
2
+
3
+ A comprehensive Firebase authentication solution for Next.js applications, providing seamless integration with Firebase Auth, including email/password, Google, and Microsoft authentication methods.
4
+
5
+ [![npm version](https://badge.fury.io/js/@tern-secure%2Fnextjs.svg)](https://www.npmjs.com/package/@tern-secure/nextjs)
6
+ [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)
7
+
8
+ ## Features
9
+
10
+ - 🔐 Multiple authentication methods:
11
+ - Email/Password authentication
12
+ - Google OAuth
13
+ - Microsoft OAuth
14
+ - 🔄 Session management with cookies
15
+ - ⚡ Server-side and client-side components
16
+ - 🎨 Customizable UI components
17
+ - 📦 TypeScript support
18
+ - 🚀 Next.js App Router compatible
19
+
20
+ ## Installation
21
+
22
+ ## Environment Variables
23
+
24
+ Required environment variables:
25
+ ```
26
+ NEXT_PUBLIC_FIREBASE_API_KEY=
27
+ NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
28
+ NEXT_PUBLIC_FIREBASE_PROJECT_ID=
29
+ NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
30
+ NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
31
+ NEXT_PUBLIC_FIREBASE_APP_ID=
32
+ FIREBASE_ADMIN_CLIENT_EMAIL=
33
+ FIREBASE_ADMIN_PRIVATE_KEY=
34
34
  ```
@@ -18,18 +18,15 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var admin_exports = {};
20
20
  __export(admin_exports, {
21
- adminTernSecureAuth: () => import_admin_init.adminTernSecureAuth,
22
- adminTernSecureDb: () => import_admin_init.adminTernSecureDb,
23
- createSessionCookie: () => import_sessionTernSecure.createSessionCookie,
24
- verifyTernSessionCookie: () => import_sessionTernSecure.verifyTernSessionCookie
21
+ clearSessionCookie: () => import_backend.clearSessionCookie,
22
+ createSessionCookie: () => import_backend.createSessionCookie,
23
+ verifyTernSessionCookie: () => import_backend.verifyTernSessionCookie
25
24
  });
26
25
  module.exports = __toCommonJS(admin_exports);
27
- var import_sessionTernSecure = require("./sessionTernSecure");
28
- var import_admin_init = require("../../utils/admin-init");
26
+ var import_backend = require("@tern-secure/backend");
29
27
  // Annotate the CommonJS export names for ESM import in node:
30
28
  0 && (module.exports = {
31
- adminTernSecureAuth,
32
- adminTernSecureDb,
29
+ clearSessionCookie,
33
30
  createSessionCookie,
34
31
  verifyTernSessionCookie
35
32
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app-router/admin/index.ts"],"sourcesContent":["export { verifyTernSessionCookie, createSessionCookie } from './sessionTernSecure'\nexport { adminTernSecureAuth, adminTernSecureDb } from '../../utils/admin-init'"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAA6D;AAC7D,wBAAuD;","names":[]}
1
+ {"version":3,"sources":["../../../../src/app-router/admin/index.ts"],"sourcesContent":["export { \r\n verifyTernSessionCookie, \r\n createSessionCookie, \r\n clearSessionCookie,\r\n} from '@tern-secure/backend'"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAIO;","names":[]}
@@ -48,9 +48,8 @@ async function createSessionCookie(idToken) {
48
48
  }
49
49
  }
50
50
  async function getServerSessionCookie() {
51
- var _a;
52
51
  const cookieStore = await (0, import_headers.cookies)();
53
- const sessionCookie = (_a = cookieStore.get("_session_cookie")) == null ? void 0 : _a.value;
52
+ const sessionCookie = cookieStore.get("_session_cookie")?.value;
54
53
  if (!sessionCookie) {
55
54
  throw new Error("No session cookie found");
56
55
  }
@@ -66,9 +65,8 @@ async function getServerSessionCookie() {
66
65
  }
67
66
  }
68
67
  async function getIdToken() {
69
- var _a;
70
68
  const cookieStore = await (0, import_headers.cookies)();
71
- const token = (_a = cookieStore.get("_session_token")) == null ? void 0 : _a.value;
69
+ const token = cookieStore.get("_session_token")?.value;
72
70
  if (!token) {
73
71
  throw new Error("No session cookie found");
74
72
  }
@@ -138,13 +136,12 @@ async function verifyTernSessionCookie(session) {
138
136
  }
139
137
  }
140
138
  async function clearSessionCookie() {
141
- var _a;
142
139
  const cookieStore = await (0, import_headers.cookies)();
143
140
  cookieStore.delete("_session_cookie");
144
141
  cookieStore.delete("_session_token");
145
142
  cookieStore.delete("_session");
146
143
  try {
147
- const sessionCookie = (_a = cookieStore.get("_session_cookie")) == null ? void 0 : _a.value;
144
+ const sessionCookie = cookieStore.get("_session_cookie")?.value;
148
145
  if (sessionCookie) {
149
146
  const decodedClaims = await import_admin_init.adminTernSecureAuth.verifySessionCookie(sessionCookie);
150
147
  await import_admin_init.adminTernSecureAuth.revokeRefreshTokens(decodedClaims.uid);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app-router/admin/sessionTernSecure.ts"],"sourcesContent":["'use server'\n\nimport { cookies } from 'next/headers';\nimport { adminTernSecureAuth as adminAuth } from '../../utils/admin-init';\nimport { handleFirebaseAuthError, type AuthErrorResponse } from '../../errors';\n\ninterface FirebaseAuthError extends Error {\n code?: string;\n}\n\nexport interface User {\n uid: string | null;\n email: string | null;\n }\n\nexport interface Session {\n user: User | null;\n token: string | null;\n error: Error | null;\n}\n\ninterface TernVerificationResult extends User {\n valid: boolean\n authTime?: number\n error?: AuthErrorResponse\n}\n\nexport async function createSessionCookie(idToken: string) {\n try {\n const expiresIn = 60 * 60 * 24 * 5 * 1000;\n const sessionCookie = await adminAuth.createSessionCookie(idToken, { expiresIn });\n\n const cookieStore = await cookies();\n cookieStore.set('_session_cookie', sessionCookie, {\n maxAge: expiresIn,\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n path: '/',\n });\n return { success: true, message: 'Session created' };\n } catch (error) {\n return { success: false, message: 'Failed to create session' };\n }\n}\n\n\n\nexport async function getServerSessionCookie() {\n const cookieStore = await cookies();\n const sessionCookie = cookieStore.get('_session_cookie')?.value;\n\n if (!sessionCookie) {\n throw new Error('No session cookie found')\n }\n \n try {\n const decondeClaims = await adminAuth.verifySessionCookie(sessionCookie, true)\n return {\n token: sessionCookie,\n userId: decondeClaims.uid\n }\n } catch (error) {\n console.error('Error verifying session:', error)\n throw new Error('Invalid Session')\n }\n}\n\n\nexport async function getIdToken() {\n const cookieStore = await cookies();\n const token = cookieStore.get('_session_token')?.value;\n\n if (!token) {\n throw new Error('No session cookie found')\n }\n \n try {\n const decodedClaims = await adminAuth.verifyIdToken(token)\n return {\n token: token,\n userId: decodedClaims.uid\n }\n } catch (error) {\n console.error('Error verifying session:', error)\n throw new Error('Invalid Session')\n }\n}\n\nexport async function setServerSession(token: string) {\n try {\n const cookieStore = await cookies();\n cookieStore.set('_session_token', token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'strict',\n maxAge: 60 * 60, // 1 hour\n path: '/',\n });\n return { success: true, message: 'Session created' };\n } catch {\n return { success: false, message: 'Failed to create session' };\n }\n}\n\n export async function verifyTernIdToken(token: string): Promise<TernVerificationResult> {\n try {\n const decodedToken = await adminAuth.verifyIdToken(token);\n return {\n valid: true,\n uid: decodedToken.uid,\n email: decodedToken.email || null,\n authTime: decodedToken.auth_time\n };\n } catch (error) {\n const errorResponse = handleFirebaseAuthError(error)\n return {\n valid: false,\n uid: null,\n email: null,\n error: errorResponse\n };\n }\n }\n \n\n export async function verifyTernSessionCookie(session: string): Promise<TernVerificationResult>{\n try {\n const res = await adminAuth.verifySessionCookie(session);\n return { \n valid: true, \n uid: res.uid,\n email: res.email || null,\n authTime: res.auth_time\n };\n } catch (error) {\n const errorResponse = handleFirebaseAuthError(error)\n return {\n valid: false, \n uid: null,\n email: null,\n error: errorResponse\n };\n }\n }\n\n\n export async function clearSessionCookie() {\n const cookieStore = await cookies()\n \n cookieStore.delete('_session_cookie')\n cookieStore.delete('_session_token')\n cookieStore.delete('_session')\n \n try {\n // Verify if there's an active session before revoking\n const sessionCookie = cookieStore.get('_session_cookie')?.value\n if (sessionCookie) {\n // Get the decoded claims to get the user's ID\n const decodedClaims = await adminAuth.verifySessionCookie(sessionCookie)\n \n // Revoke all sessions for the user\n await adminAuth.revokeRefreshTokens(decodedClaims.uid)\n }\n \n return { success: true, message: 'Session cleared successfully' }\n } catch (error) {\n console.error('Error clearing session:', error)\n // Still return success even if revoking fails, as cookies are cleared\n return { success: true, message: 'Session cookies cleared' }\n }\n }\n\n\n\n/*\n export async function GET(request: NextRequest) {\n const cookieStore = await cookies();\n const sessionCookie = cookieStore.get('session')?.value\n \n if (!sessionCookie) {\n return NextResponse.json({ isAuthenticated: false }, { status: 401 })\n }\n \n try {\n const decodedClaims = await adminAuth.verifySessionCookie(sessionCookie, true)\n return NextResponse.json({ isAuthenticated: true, user: decodedClaims }, { status: 200 })\n } catch (error) {\n console.error('Error verifying session cookie:', error)\n return NextResponse.json({ isAuthenticated: false }, { status: 401 })\n }\n }\n\n*/"],"mappings":"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","names":["adminAuth"]}
1
+ {"version":3,"sources":["../../../../src/app-router/admin/sessionTernSecure.ts"],"sourcesContent":["'use server'\n\nimport { cookies } from 'next/headers';\nimport { adminTernSecureAuth as adminAuth } from '../../utils/admin-init';\nimport { handleFirebaseAuthError, type AuthErrorResponse } from '../../errors';\n\ninterface FirebaseAuthError extends Error {\n code?: string;\n}\n\nexport interface User {\n uid: string | null;\n email: string | null;\n }\n\nexport interface Session {\n user: User | null;\n token: string | null;\n error: Error | null;\n}\n\ninterface TernVerificationResult extends User {\n valid: boolean\n authTime?: number\n error?: AuthErrorResponse\n}\n\nexport async function createSessionCookie(idToken: string) {\n try {\n const expiresIn = 60 * 60 * 24 * 5 * 1000;\n const sessionCookie = await adminAuth.createSessionCookie(idToken, { expiresIn });\n\n const cookieStore = await cookies();\n cookieStore.set('_session_cookie', sessionCookie, {\n maxAge: expiresIn,\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n path: '/',\n });\n return { success: true, message: 'Session created' };\n } catch (error) {\n return { success: false, message: 'Failed to create session' };\n }\n}\n\n\n\nexport async function getServerSessionCookie() {\n const cookieStore = await cookies();\n const sessionCookie = cookieStore.get('_session_cookie')?.value;\n\n if (!sessionCookie) {\n throw new Error('No session cookie found')\n }\n \n try {\n const decondeClaims = await adminAuth.verifySessionCookie(sessionCookie, true)\n return {\n token: sessionCookie,\n userId: decondeClaims.uid\n }\n } catch (error) {\n console.error('Error verifying session:', error)\n throw new Error('Invalid Session')\n }\n}\n\n\nexport async function getIdToken() {\n const cookieStore = await cookies();\n const token = cookieStore.get('_session_token')?.value;\n\n if (!token) {\n throw new Error('No session cookie found')\n }\n \n try {\n const decodedClaims = await adminAuth.verifyIdToken(token)\n return {\n token: token,\n userId: decodedClaims.uid\n }\n } catch (error) {\n console.error('Error verifying session:', error)\n throw new Error('Invalid Session')\n }\n}\n\nexport async function setServerSession(token: string) {\n try {\n const cookieStore = await cookies();\n cookieStore.set('_session_token', token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'strict',\n maxAge: 60 * 60, // 1 hour\n path: '/',\n });\n return { success: true, message: 'Session created' };\n } catch {\n return { success: false, message: 'Failed to create session' };\n }\n}\n\n export async function verifyTernIdToken(token: string): Promise<TernVerificationResult> {\n try {\n const decodedToken = await adminAuth.verifyIdToken(token);\n return {\n valid: true,\n uid: decodedToken.uid,\n email: decodedToken.email || null,\n authTime: decodedToken.auth_time\n };\n } catch (error) {\n const errorResponse = handleFirebaseAuthError(error)\n return {\n valid: false,\n uid: null,\n email: null,\n error: errorResponse\n };\n }\n }\n \n\n export async function verifyTernSessionCookie(session: string): Promise<TernVerificationResult>{\n try {\n const res = await adminAuth.verifySessionCookie(session);\n return { \n valid: true, \n uid: res.uid,\n email: res.email || null,\n authTime: res.auth_time\n };\n } catch (error) {\n const errorResponse = handleFirebaseAuthError(error)\n return {\n valid: false, \n uid: null,\n email: null,\n error: errorResponse\n };\n }\n }\n\n\n export async function clearSessionCookie() {\n const cookieStore = await cookies()\n \n cookieStore.delete('_session_cookie')\n cookieStore.delete('_session_token')\n cookieStore.delete('_session')\n \n try {\n // Verify if there's an active session before revoking\n const sessionCookie = cookieStore.get('_session_cookie')?.value\n if (sessionCookie) {\n // Get the decoded claims to get the user's ID\n const decodedClaims = await adminAuth.verifySessionCookie(sessionCookie)\n \n // Revoke all sessions for the user\n await adminAuth.revokeRefreshTokens(decodedClaims.uid)\n }\n \n return { success: true, message: 'Session cleared successfully' }\n } catch (error) {\n console.error('Error clearing session:', error)\n // Still return success even if revoking fails, as cookies are cleared\n return { success: true, message: 'Session cookies cleared' }\n }\n }\n\n\n\n/*\n export async function GET(request: NextRequest) {\n const cookieStore = await cookies();\n const sessionCookie = cookieStore.get('session')?.value\n \n if (!sessionCookie) {\n return NextResponse.json({ isAuthenticated: false }, { status: 401 })\n }\n \n try {\n const decodedClaims = await adminAuth.verifySessionCookie(sessionCookie, true)\n return NextResponse.json({ isAuthenticated: true, user: decodedClaims }, { status: 200 })\n } catch (error) {\n console.error('Error verifying session cookie:', error)\n return NextResponse.json({ isAuthenticated: false }, { status: 401 })\n }\n }\n\n*/"],"mappings":"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","names":["adminAuth"]}
@@ -22,24 +22,16 @@ __export(TernSecureProvider_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(TernSecureProvider_exports);
24
24
  var import_jsx_runtime = require("react/jsx-runtime");
25
- var import_TernSecureClientProvider = require("../../boundary/TernSecureClientProvider");
26
- async function TernSecureProvider({
27
- children,
28
- requiresVerification = true,
29
- loginPath,
30
- signUpPath,
31
- loadingComponent
32
- }) {
33
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
34
- import_TernSecureClientProvider.TernSecureClientProvider,
35
- {
36
- requiresVerification,
37
- loginPath,
38
- signUpPath,
39
- loadingComponent,
40
- children
41
- }
42
- );
25
+ var import_react2 = require("@tern-secure/react");
26
+ var import_allNextProviderProps = require("../../utils/allNextProviderProps");
27
+ var import_tern_ui_script = require("../../utils/tern-ui-script");
28
+ function TernSecureProvider(props) {
29
+ const { children, ...nextProps } = props;
30
+ const providerProps = (0, import_allNextProviderProps.allNextProviderPropsWithEnv)(nextProps);
31
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react2.TernSecureProvider, { ...providerProps, children: [
32
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tern_ui_script.TernUIScript, {}),
33
+ children
34
+ ] });
43
35
  }
44
36
  // Annotate the CommonJS export names for ESM import in node:
45
37
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app-router/client/TernSecureProvider.tsx"],"sourcesContent":["import React from \"react\"\nimport { TernSecureClientProvider } from \"../../boundary/TernSecureClientProvider\"\n\n\n/**\n * Configuration options for TernSecure authentication\n */\nexport interface TernSecureConfig {\n /** Whether email verification is required (defaults to true) */\n requiresVerification?: boolean\n /** Custom path for login page (defaults to /sign-in) */\n loginPath?: string\n /** Custom path for signup page (defaults to /sign-up) */\n signUpPath?: string\n /** Custom loading component */\n loadingComponent?: React.ReactNode\n}\n\n// Loading fallback component\n/*function TernSecureLoadingFallback() {\n return (\n <div>\n <span className=\"sr-only\">Loading...</span>\n </div>\n )\n}*/\n/**\n * Root Provider for TernSecure\n * Use this in your Next.js App Router root layout\n * Automatically handles client/server boundary and authentication state\n * \n * @example\n * /// app/layout.tsx\n * import { TernSecureProvider } from '@tern/secure'\n * \n * export default function RootLayout({ children }) {\n * return (\n * <html>\n * <body>\n * <TernSecureProvider>\n * {children}\n * </TernSecureProvider>\n * </body>\n * </html>\n * )\n * }\n */\nexport async function TernSecureProvider({ \n children,\n requiresVerification = true,\n loginPath,\n signUpPath,\n loadingComponent,\n }: React.PropsWithChildren<TernSecureConfig>) {\n return (\n <TernSecureClientProvider\n requiresVerification={requiresVerification}\n loginPath={loginPath}\n signUpPath={signUpPath}\n loadingComponent={loadingComponent}\n >\n {children}\n </TernSecureClientProvider>\n )\n}"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuDI;AAtDJ,sCAAyC;AA8CzC,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA,uBAAuB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACD,GAA8C;AAC7C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEG;AAAA;AAAA,EACL;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/app-router/client/TernSecureProvider.tsx"],"sourcesContent":["import React from \"react\"\r\nimport { \r\n TernSecureProvider as TernSecureReactProvider \r\n} from \"@tern-secure/react\"\r\nimport type { TernSecureNextProps } from \"../../types\"\r\nimport { allNextProviderPropsWithEnv } from \"../../utils/allNextProviderProps\"\r\nimport { TernUIScript } from \"../../utils/tern-ui-script\";\r\n\r\n\r\n\r\n// Loading fallback component\r\n/*function TernSecureLoadingFallback() {\r\n return (\r\n <div>\r\n <span className=\"sr-only\">Loading...</span>\r\n </div>\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 TernSecureProvider(props: React.PropsWithChildren<TernSecureNextProps>) {\r\n const {children, ...nextProps } = props;\r\n const providerProps = allNextProviderPropsWithEnv(nextProps);\r\n return (\r\n <TernSecureReactProvider {...providerProps}>\r\n <TernUIScript />\r\n {children}\r\n </TernSecureReactProvider>\r\n )\r\n}"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CI;AA1CJ,IAAAA,gBAEO;AAEP,kCAA4C;AAC5C,4BAA6B;AAiCtB,SAAS,mBAAmB,OAAqD;AACtF,QAAM,EAAC,UAAU,GAAG,UAAU,IAAI;AAClC,QAAM,oBAAgB,yDAA4B,SAAS;AAC3D,SACE,6CAAC,cAAAC,oBAAA,EAAyB,GAAG,eAC3B;AAAA,gDAAC,sCAAa;AAAA,IACX;AAAA,KACL;AAEJ;","names":["import_react","TernSecureReactProvider"]}
@@ -1,180 +1,4 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var actions_exports = {};
20
- __export(actions_exports, {
21
- createUser: () => createUser,
22
- handleAuthRedirectResult: () => handleAuthRedirectResult,
23
- resendEmailVerification: () => resendEmailVerification,
24
- signInWithEmail: () => signInWithEmail,
25
- signInWithMicrosoft: () => signInWithMicrosoft,
26
- signInWithRedirectGoogle: () => signInWithRedirectGoogle
27
- });
28
- module.exports = __toCommonJS(actions_exports);
29
- var import_client_init = require("../../utils/client-init");
30
- var import_auth = require("firebase/auth");
31
- var import_errors = require("../../errors");
32
- async function createUser(email, password) {
33
- const auth = (0, import_client_init.TernSecureAuth)();
34
- try {
35
- const actionCodeSettings = {
36
- url: `${window.location.origin}/sign-in`,
37
- handleCodeInApp: true
38
- };
39
- const userCredential = await (0, import_auth.createUserWithEmailAndPassword)(auth, email, password);
40
- await (0, import_auth.sendEmailVerification)(userCredential.user, actionCodeSettings);
41
- return {
42
- success: true,
43
- message: "Account created successfully. Please check your email for verification",
44
- user: userCredential.user
45
- };
46
- } catch (error) {
47
- const authError = (0, import_errors.handleFirebaseAuthError)(error);
48
- return {
49
- success: false,
50
- message: authError.message,
51
- error: authError.code,
52
- user: null
53
- };
54
- }
2
+ {
55
3
  }
56
- async function signInWithEmail(email, password) {
57
- const auth = (0, import_client_init.TernSecureAuth)();
58
- try {
59
- const UserCredential = await (0, import_auth.signInWithEmailAndPassword)(auth, email, password);
60
- const user = UserCredential.user;
61
- return {
62
- success: true,
63
- message: "Authentication successful",
64
- user,
65
- error: !user.emailVerified ? "REQUIRES_VERIFICATION" : "AUTHENTICATED"
66
- };
67
- } catch (error) {
68
- const authError = (0, import_errors.handleFirebaseAuthError)(error);
69
- return {
70
- success: false,
71
- message: authError.message,
72
- error: authError.code,
73
- user: null
74
- };
75
- }
76
- }
77
- async function signInWithRedirectGoogle() {
78
- const auth = (0, import_client_init.TernSecureAuth)();
79
- const provider = new import_auth.GoogleAuthProvider();
80
- provider.setCustomParameters({
81
- login_hint: "user@example.com",
82
- prompt: "select_account"
83
- });
84
- try {
85
- await (0, import_auth.signInWithRedirect)(auth, provider);
86
- return { success: true, message: "Redirect initiated" };
87
- } catch (error) {
88
- const authError = (0, import_errors.handleFirebaseAuthError)(error);
89
- return {
90
- success: false,
91
- message: authError.message,
92
- error: authError.code,
93
- user: null
94
- };
95
- }
96
- }
97
- async function signInWithMicrosoft() {
98
- const auth = (0, import_client_init.TernSecureAuth)();
99
- const provider = new import_auth.OAuthProvider("microsoft.com");
100
- provider.setCustomParameters({
101
- prompt: "consent"
102
- });
103
- try {
104
- await (0, import_auth.signInWithRedirect)(auth, provider);
105
- return { success: true, message: "Redirect initiated" };
106
- } catch (error) {
107
- const authError = (0, import_errors.handleFirebaseAuthError)(error);
108
- return {
109
- success: false,
110
- message: authError.message,
111
- error: authError.code,
112
- user: null
113
- };
114
- }
115
- }
116
- async function handleAuthRedirectResult() {
117
- const auth = (0, import_client_init.TernSecureAuth)();
118
- try {
119
- const result = await (0, import_auth.getRedirectResult)(auth);
120
- if (result) {
121
- const user = result.user;
122
- return { success: true, user };
123
- } else {
124
- return { success: false, error: "No redirect result" };
125
- }
126
- } catch (error) {
127
- const authError = (0, import_errors.handleFirebaseAuthError)(error);
128
- return {
129
- success: false,
130
- message: authError.message,
131
- error: authError.code,
132
- user: null
133
- };
134
- }
135
- }
136
- async function resendEmailVerification() {
137
- const auth = (0, import_client_init.TernSecureAuth)();
138
- try {
139
- const user = auth.currentUser;
140
- if (!user) {
141
- throw new Error("No user found. Please try signing up again.");
142
- }
143
- await user.reload();
144
- if (user.emailVerified) {
145
- return {
146
- success: true,
147
- message: "Email is already verified. You can sign in.",
148
- isVerified: true
149
- };
150
- }
151
- const actionCodeSettings = {
152
- url: `${window.location.origin}/sign-in`,
153
- handleCodeInApp: true
154
- };
155
- await (0, import_auth.sendEmailVerification)(user, actionCodeSettings);
156
- return {
157
- success: true,
158
- message: "Verification email sent successfully.",
159
- isVerified: false
160
- };
161
- } catch (error) {
162
- const authError = (0, import_errors.handleFirebaseAuthError)(error);
163
- return {
164
- success: false,
165
- message: authError.message,
166
- error: authError.code,
167
- user: null
168
- };
169
- }
170
- }
171
- // Annotate the CommonJS export names for ESM import in node:
172
- 0 && (module.exports = {
173
- createUser,
174
- handleAuthRedirectResult,
175
- resendEmailVerification,
176
- signInWithEmail,
177
- signInWithMicrosoft,
178
- signInWithRedirectGoogle
179
- });
180
4
  //# sourceMappingURL=actions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app-router/client/actions.ts"],"sourcesContent":["import { TernSecureAuth } from '../../utils/client-init'\nimport { \n signInWithEmailAndPassword, \n signInWithRedirect, \n getRedirectResult, \n GoogleAuthProvider, \n OAuthProvider, \n createUserWithEmailAndPassword, \n sendEmailVerification } from 'firebase/auth'\nimport type { SignInResponse } from '../../types'\nimport { handleFirebaseAuthError } from '../../errors'\n\n\nexport async function createUser(email: string, password: string): Promise<SignInResponse> {\n const auth = TernSecureAuth()\n try {\n \n const actionCodeSettings = {\n url: `${window.location.origin}/sign-in`,\n handleCodeInApp: true\n };\n\n const userCredential = await createUserWithEmailAndPassword(auth, email, password);\n\n await sendEmailVerification(userCredential.user, actionCodeSettings)\n \n return { \n success: true, \n message: 'Account created successfully. Please check your email for verification', \n user: userCredential.user \n };\n\n } catch (error) {\n const authError = handleFirebaseAuthError(error)\n return { \n success: false, \n message: authError.message, \n error: authError.code,\n user: null\n }\n }\n}\n\n\nexport async function signInWithEmail(email: string, password: string): Promise<SignInResponse> {\n const auth = TernSecureAuth()\n try {\n const UserCredential = await signInWithEmailAndPassword(auth, email, password)\n const user = UserCredential.user\n \n return { \n success: true, \n message: 'Authentication successful',\n user: user,\n error: !user.emailVerified ? 'REQUIRES_VERIFICATION' : 'AUTHENTICATED'\n };\n\n} catch (error){\n const authError = handleFirebaseAuthError(error)\n return { \n success: false,\n message: authError.message,\n error: authError.code,\n user: null\n }\n}\n}\n\nexport async function signInWithRedirectGoogle() {\n const auth = TernSecureAuth()\n const provider = new GoogleAuthProvider()\n provider.setCustomParameters({\n login_hint: 'user@example.com',\n prompt: 'select_account'\n })\n\n try {\n await signInWithRedirect(auth, provider)\n return { success: true, message: 'Redirect initiated' }\n } catch (error) {\n const authError = handleFirebaseAuthError(error)\n return {\n success: false,\n message: authError.message,\n error: authError.code,\n user: null\n }\n }\n}\n\n\nexport async function signInWithMicrosoft() {\n const auth = TernSecureAuth()\n const provider = new OAuthProvider('microsoft.com')\n provider.setCustomParameters({\n prompt: 'consent'\n })\n\n try {\n await signInWithRedirect(auth, provider)\n return { success: true, message: 'Redirect initiated' }\n } catch (error) {\n const authError = handleFirebaseAuthError(error)\n return {\n success: false, \n message: authError.message,\n error: authError.code,\n user: null\n }\n }\n}\n\n\nexport async function handleAuthRedirectResult() {\n const auth = TernSecureAuth()\n try {\n const result = await getRedirectResult(auth)\n if (result) {\n const user = result.user\n return { success: true, user }\n } else {\n return { success: false, error: 'No redirect result' }\n }\n } catch (error: any) {\n const authError = handleFirebaseAuthError(error)\n return {\n success: false,\n message: authError.message,\n error: authError.code,\n user: null\n }\n }\n}\n\n\nexport async function resendEmailVerification() {\n const auth = TernSecureAuth()\n try {\n const user = auth.currentUser;\n if (!user) {\n throw new Error('No user found. Please try signing up again.');\n }\n\n await user.reload();\n\n if (user.emailVerified) {\n return { \n success: true, \n message: 'Email is already verified. You can sign in.',\n isVerified: true \n };\n }\n\n const actionCodeSettings = {\n url: `${window.location.origin}/sign-in`,\n handleCodeInApp: true,\n };\n\n await sendEmailVerification(user, actionCodeSettings);\n return { \n success: true, \n message: 'Verification email sent successfully.',\n isVerified: false\n };\n } catch (error) {\n const authError = handleFirebaseAuthError(error)\n return {\n success: false,\n message: authError.message,\n error: authError.code,\n user: null\n }\n }\n}"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/app-router/client/actions.ts"],"sourcesContent":["{/*import { TernSecureAuth } from '../../utils/client-init'\r\nimport { \r\n signInWithEmailAndPassword, \r\n signInWithRedirect, \r\n getRedirectResult, \r\n GoogleAuthProvider, \r\n OAuthProvider, \r\n createUserWithEmailAndPassword, \r\n sendEmailVerification \r\n} from 'firebase/auth'\r\nimport type { SignInResponse } from '@tern-secure/types'\r\nimport { handleFirebaseAuthError } from '@tern-secure/types'\r\n\r\n\r\nexport async function createUser(email: string, password: string): Promise<SignInResponse> {\r\n const auth = TernSecureAuth()\r\n \r\n try {\r\n \r\n const actionCodeSettings = {\r\n url: `${window.location.origin}/sign-in`,\r\n handleCodeInApp: true\r\n };\r\n\r\n const userCredential = await createUserWithEmailAndPassword(auth, email, password);\r\n\r\n await sendEmailVerification(userCredential.user, actionCodeSettings)\r\n \r\n return { \r\n success: true, \r\n message: 'Account created successfully. Please check your email for verification', \r\n user: userCredential.user \r\n };\r\n\r\n } catch (error) {\r\n const authError = handleFirebaseAuthError(error)\r\n return { \r\n success: false, \r\n message: authError.message, \r\n error: authError.code,\r\n user: null\r\n }\r\n }\r\n}\r\n\r\n\r\nexport async function signInWithEmail(email: string, password: string): Promise<SignInResponse> {\r\n const auth = TernSecureAuth()\r\n try {\r\n const UserCredential = await signInWithEmailAndPassword(auth, email, password)\r\n const user = UserCredential.user\r\n \r\n return { \r\n success: true, \r\n message: 'Authentication successful',\r\n user: user,\r\n error: !user.emailVerified ? 'REQUIRES_VERIFICATION' : 'AUTHENTICATED'\r\n };\r\n\r\n} catch (error){\r\n const authError = handleFirebaseAuthError(error)\r\n return { \r\n success: false,\r\n message: authError.message,\r\n error: authError.code,\r\n user: null\r\n }\r\n}\r\n}\r\n\r\nexport async function signInWithRedirectGoogle() {\r\n const auth = TernSecureAuth()\r\n const provider = new GoogleAuthProvider()\r\n provider.setCustomParameters({\r\n login_hint: 'user@example.com',\r\n prompt: 'select_account'\r\n })\r\n\r\n try {\r\n await signInWithRedirect(auth, provider)\r\n return { success: true, message: 'Redirect initiated' }\r\n } catch (error) {\r\n const authError = handleFirebaseAuthError(error)\r\n return {\r\n success: false,\r\n message: authError.message,\r\n error: authError.code,\r\n user: null\r\n }\r\n }\r\n}\r\n\r\n\r\nexport async function signInWithMicrosoft() {\r\n const auth = TernSecureAuth()\r\n const provider = new OAuthProvider('microsoft.com')\r\n provider.setCustomParameters({\r\n prompt: 'consent'\r\n })\r\n\r\n try {\r\n await signInWithRedirect(auth, provider)\r\n return { success: true, message: 'Redirect initiated' }\r\n } catch (error) {\r\n const authError = handleFirebaseAuthError(error)\r\n return {\r\n success: false, \r\n message: authError.message,\r\n error: authError.code,\r\n user: null\r\n }\r\n }\r\n}\r\n\r\n\r\nexport async function handleAuthRedirectResult() {\r\n const auth = TernSecureAuth()\r\n try {\r\n const result = await getRedirectResult(auth)\r\n if (result) {\r\n const user = result.user\r\n return { success: true, user }\r\n } else {\r\n return { success: false, error: 'No redirect result' }\r\n }\r\n } catch (error: any) {\r\n const authError = handleFirebaseAuthError(error)\r\n return {\r\n success: false,\r\n message: authError.message,\r\n error: authError.code,\r\n user: null\r\n }\r\n }\r\n}\r\n\r\n\r\nexport async function resendEmailVerification() {\r\n const auth = TernSecureAuth()\r\n try {\r\n const user = auth.currentUser;\r\n if (!user) {\r\n throw new Error('No user found. Please try signing up again.');\r\n }\r\n\r\n await user.reload();\r\n\r\n if (user.emailVerified) {\r\n return { \r\n success: true, \r\n message: 'Email is already verified. You can sign in.',\r\n isVerified: true \r\n };\r\n }\r\n\r\n const actionCodeSettings = {\r\n url: `${window.location.origin}/sign-in`,\r\n handleCodeInApp: true,\r\n };\r\n\r\n await sendEmailVerification(user, actionCodeSettings);\r\n return { \r\n success: true, \r\n message: 'Verification email sent successfully.',\r\n isVerified: false\r\n };\r\n } catch (error) {\r\n const authError = handleFirebaseAuthError(error)\r\n return {\r\n success: false,\r\n message: authError.message,\r\n error: authError.code,\r\n user: null\r\n }\r\n }\r\n}*/}"],"mappings":";AAAA;AA+KG;","names":[]}
@@ -18,45 +18,14 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var internal_route_exports = {};
20
20
  __export(internal_route_exports, {
21
- handleInternalRoute: () => handleInternalRoute,
22
- internalRoutes: () => internalRoutes,
23
- isAuthRoute: () => isAuthRoute,
24
- isBaseAuthRoute: () => isBaseAuthRoute,
25
- isInternalRoute: () => isInternalRoute
21
+ isAuthRoute: () => import_react.isAuthRoute,
22
+ isBaseAuthRoute: () => import_react.isBaseAuthRoute,
23
+ isInternalRoute: () => import_react.isInternalRoute
26
24
  });
27
25
  module.exports = __toCommonJS(internal_route_exports);
28
- var import_verify = require("../../components/verify");
29
- const internalRoutes = {
30
- signUpVerify: {
31
- pattern: /^\/sign-up\/verify$/,
32
- component: import_verify.Verify
33
- },
34
- signInVerify: {
35
- pattern: /^\/sign-in\/verify$/,
36
- component: import_verify.Verify
37
- }
38
- };
39
- function isInternalRoute(pathname) {
40
- return Object.values(internalRoutes).some((route) => route.pattern.test(pathname));
41
- }
42
- function isAuthRoute(pathname) {
43
- return pathname.startsWith("/sign-in") || pathname.startsWith("/sign-up");
44
- }
45
- function isBaseAuthRoute(pathname) {
46
- return pathname === "/sign-in" || pathname === "/sign-up";
47
- }
48
- function handleInternalRoute(pathname) {
49
- for (const [key, route] of Object.entries(internalRoutes)) {
50
- if (route.pattern.test(pathname)) {
51
- return route.component;
52
- }
53
- }
54
- return null;
55
- }
26
+ var import_react = require("@tern-secure/react");
56
27
  // Annotate the CommonJS export names for ESM import in node:
57
28
  0 && (module.exports = {
58
- handleInternalRoute,
59
- internalRoutes,
60
29
  isAuthRoute,
61
30
  isBaseAuthRoute,
62
31
  isInternalRoute
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app-router/route-handler/internal-route.tsx"],"sourcesContent":["import { Verify } from \"../../components/verify\"\n\n// Internal route mapping\nexport const internalRoutes = {\n signUpVerify: {\n pattern: /^\\/sign-up\\/verify$/,\n component: Verify,\n },\n signInVerify: {\n pattern: /^\\/sign-in\\/verify$/,\n component: Verify,\n },\n}\n\n// Check if path is an internal route\nexport function isInternalRoute(pathname: string): boolean {\n return Object.values(internalRoutes).some((route) => route.pattern.test(pathname))\n}\n\n// Check if path is within auth routes\nexport function isAuthRoute(pathname: string): boolean {\n return pathname.startsWith(\"/sign-in\") || pathname.startsWith(\"/sign-up\")\n}\n\n// Check if path is exactly the base auth route\nexport function isBaseAuthRoute(pathname: string): boolean {\n return pathname === \"/sign-in\" || pathname === \"/sign-up\"\n}\n\n// Internal route handler\nexport function handleInternalRoute(pathname: string) {\n for (const [key, route] of Object.entries(internalRoutes)) {\n if (route.pattern.test(pathname)) {\n return route.component\n }\n }\n return null\n}"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AAGhB,MAAM,iBAAiB;AAAA,EAC5B,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AACF;AAGO,SAAS,gBAAgB,UAA2B;AACzD,SAAO,OAAO,OAAO,cAAc,EAAE,KAAK,CAAC,UAAU,MAAM,QAAQ,KAAK,QAAQ,CAAC;AACnF;AAGO,SAAS,YAAY,UAA2B;AACrD,SAAO,SAAS,WAAW,UAAU,KAAK,SAAS,WAAW,UAAU;AAC1E;AAGO,SAAS,gBAAgB,UAA2B;AACzD,SAAO,aAAa,cAAc,aAAa;AACjD;AAGO,SAAS,oBAAoB,UAAkB;AACpD,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,cAAc,GAAG;AACzD,QAAI,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAChC,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../src/app-router/route-handler/internal-route.tsx"],"sourcesContent":["export {\r\n isBaseAuthRoute,\r\n isInternalRoute,\r\n isAuthRoute\r\n} from '@tern-secure/react'"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAIO;","names":[]}
@@ -17,24 +17,24 @@ var __copyProps = (to, from, except, desc) => {
17
17
  return to;
18
18
  };
19
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
- var useSignUp_exports = {};
21
- __export(useSignUp_exports, {
22
- useSignUp: () => useSignUp
20
+ var components_exports = {};
21
+ __export(components_exports, {
22
+ SignIn: () => import_react.SignIn,
23
+ SignUp: () => import_react.SignUp,
24
+ useAuth: () => import_react.useAuth,
25
+ useIdToken: () => import_react.useIdToken,
26
+ useSession: () => import_react.useSession,
27
+ useSignUp: () => import_react.useSignUp
23
28
  });
24
- module.exports = __toCommonJS(useSignUp_exports);
25
- var import_TernSecureCtx = require("../TernSecureCtx");
26
- function useSignUp() {
27
- const {
28
- email,
29
- setEmail
30
- } = (0, import_TernSecureCtx.useTernSecure)("useSignUp");
31
- return {
32
- email,
33
- setEmail
34
- };
35
- }
29
+ module.exports = __toCommonJS(components_exports);
30
+ var import_react = require("@tern-secure/react");
36
31
  // Annotate the CommonJS export names for ESM import in node:
37
32
  0 && (module.exports = {
33
+ SignIn,
34
+ SignUp,
35
+ useAuth,
36
+ useIdToken,
37
+ useSession,
38
38
  useSignUp
39
39
  });
40
- //# sourceMappingURL=useSignUp.js.map
40
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/boundary/components.ts"],"sourcesContent":["'use client'\n\nexport { \n useAuth,\n useIdToken,\n useSignUp,\n useSession,\n SignIn,\n //SignOut,\n //SignOutButton,\n SignUp,\n} from '@tern-secure/react' "],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBASO;","names":[]}
@@ -16,18 +16,16 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var utils_exports = {};
20
- __export(utils_exports, {
21
- cn: () => cn
19
+ var hooks_exports = {};
20
+ __export(hooks_exports, {
21
+ useAuth: () => import_react.useAuth,
22
+ useIdToken: () => import_react.useIdToken
22
23
  });
23
- module.exports = __toCommonJS(utils_exports);
24
- var import_clsx = require("clsx");
25
- var import_tailwind_merge = require("tailwind-merge");
26
- function cn(...inputs) {
27
- return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
28
- }
24
+ module.exports = __toCommonJS(hooks_exports);
25
+ var import_react = require("@tern-secure/react");
29
26
  // Annotate the CommonJS export names for ESM import in node:
30
27
  0 && (module.exports = {
31
- cn
28
+ useAuth,
29
+ useIdToken
32
30
  });
33
- //# sourceMappingURL=utils.js.map
31
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/boundary/hooks.ts"],"sourcesContent":["export {\n useAuth,\n useIdToken\n} from '@tern-secure/react'"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAGO;","names":[]}
@@ -17,33 +17,26 @@ var __copyProps = (to, from, except, desc) => {
17
17
  return to;
18
18
  };
19
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
- var TernSecureCtx_exports = {};
21
- __export(TernSecureCtx_exports, {
22
- TernSecureCtx: () => TernSecureCtx,
23
- getCurrentUser: () => getCurrentUser,
24
- useTernSecure: () => useTernSecure
20
+ var uiComponents_exports = {};
21
+ __export(uiComponents_exports, {
22
+ SignIn: () => SignIn,
23
+ SignUp: () => SignUp,
24
+ UserButton: () => import_react2.UserButton
25
25
  });
26
- module.exports = __toCommonJS(TernSecureCtx_exports);
27
- var import_react = require("react");
28
- var import_client_init = require("../utils/client-init");
29
- const getCurrentUser = () => {
30
- return import_client_init.ternSecureAuth.currentUser;
26
+ module.exports = __toCommonJS(uiComponents_exports);
27
+ var import_jsx_runtime = require("react/jsx-runtime");
28
+ var import_react = require("@tern-secure/react");
29
+ var import_react2 = require("@tern-secure/react");
30
+ const SignIn = (props) => {
31
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.SignIn, { ...props });
31
32
  };
32
- const TernSecureCtx = (0, import_react.createContext)(null);
33
- TernSecureCtx.displayName = "TernSecureCtx";
34
- const useTernSecure = (hookName) => {
35
- const context = (0, import_react.useContext)(TernSecureCtx);
36
- if (!context) {
37
- throw new Error(
38
- `${hookName} must be used within TernSecureProvider`
39
- );
40
- }
41
- return context;
33
+ const SignUp = (props) => {
34
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.SignUp, { ...props });
42
35
  };
43
36
  // Annotate the CommonJS export names for ESM import in node:
44
37
  0 && (module.exports = {
45
- TernSecureCtx,
46
- getCurrentUser,
47
- useTernSecure
38
+ SignIn,
39
+ SignUp,
40
+ UserButton
48
41
  });
49
- //# sourceMappingURL=TernSecureCtx.js.map
42
+ //# sourceMappingURL=uiComponents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/uiComponents.tsx"],"sourcesContent":["'use client'\n\nimport { \n SignIn as BaseSignIn,\n SignUp as BaseSignUp,\n} from '@tern-secure/react'\nimport type { ComponentProps } from 'react';\n\nexport {\n UserButton\n} from '@tern-secure/react';\n\nexport const SignIn = (props: ComponentProps<typeof BaseSignIn>) => {\n return <BaseSignIn {...props} />;\n};\n\nexport const SignUp = (props: ComponentProps<typeof BaseSignUp>) => {\n return <BaseSignUp {...props} />; \n};"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaS;AAXT,mBAGO;AAGP,IAAAA,gBAEO;AAEA,MAAM,SAAS,CAAC,UAA6C;AAClE,SAAO,4CAAC,aAAAC,QAAA,EAAY,GAAG,OAAO;AAChC;AAEO,MAAM,SAAS,CAAC,UAA6C;AAClE,SAAO,4CAAC,aAAAC,QAAA,EAAY,GAAG,OAAO;AAChC;","names":["import_react","BaseSignIn","BaseSignUp"]}