@tern-secure/nextjs 5.0.0 → 5.1.0

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 (64) hide show
  1. package/dist/cjs/app-router/admin/index.js +3 -0
  2. package/dist/cjs/app-router/admin/index.js.map +1 -1
  3. package/dist/cjs/app-router/admin/sessionHandler.js +74 -0
  4. package/dist/cjs/app-router/admin/sessionHandler.js.map +1 -0
  5. package/dist/cjs/app-router/client/TernSecureProvider.js +2 -2
  6. package/dist/cjs/app-router/client/TernSecureProvider.js.map +1 -1
  7. package/dist/cjs/server/auth.js.map +1 -1
  8. package/dist/cjs/server/edge-session.js +8 -10
  9. package/dist/cjs/server/edge-session.js.map +1 -1
  10. package/dist/cjs/server/ternSecureMiddleware.js +43 -25
  11. package/dist/cjs/server/ternSecureMiddleware.js.map +1 -1
  12. package/dist/cjs/server/types.js.map +1 -1
  13. package/dist/cjs/utils/admin-init.js +1 -57
  14. package/dist/cjs/utils/admin-init.js.map +1 -1
  15. package/dist/cjs/utils/allNextProviderProps.js +8 -2
  16. package/dist/cjs/utils/allNextProviderProps.js.map +1 -1
  17. package/dist/cjs/utils/tern-ui-script.js +4 -2
  18. package/dist/cjs/utils/tern-ui-script.js.map +1 -1
  19. package/dist/cjs/utils/ternsecure-sw.js +54 -0
  20. package/dist/cjs/utils/ternsecure-sw.js.map +1 -0
  21. package/dist/esm/app-router/admin/index.js +2 -0
  22. package/dist/esm/app-router/admin/index.js.map +1 -1
  23. package/dist/esm/app-router/admin/sessionHandler.js +50 -0
  24. package/dist/esm/app-router/admin/sessionHandler.js.map +1 -0
  25. package/dist/esm/app-router/client/TernSecureProvider.js +2 -2
  26. package/dist/esm/app-router/client/TernSecureProvider.js.map +1 -1
  27. package/dist/esm/server/auth.js.map +1 -1
  28. package/dist/esm/server/edge-session.js +8 -10
  29. package/dist/esm/server/edge-session.js.map +1 -1
  30. package/dist/esm/server/ternSecureMiddleware.js +43 -25
  31. package/dist/esm/server/ternSecureMiddleware.js.map +1 -1
  32. package/dist/esm/utils/admin-init.js +1 -22
  33. package/dist/esm/utils/admin-init.js.map +1 -1
  34. package/dist/esm/utils/allNextProviderProps.js +8 -2
  35. package/dist/esm/utils/allNextProviderProps.js.map +1 -1
  36. package/dist/esm/utils/tern-ui-script.js +4 -2
  37. package/dist/esm/utils/tern-ui-script.js.map +1 -1
  38. package/dist/esm/utils/ternsecure-sw.js +30 -0
  39. package/dist/esm/utils/ternsecure-sw.js.map +1 -0
  40. package/dist/types/app-router/admin/index.d.ts +1 -0
  41. package/dist/types/app-router/admin/index.d.ts.map +1 -1
  42. package/dist/types/app-router/admin/sessionHandler.d.ts +3 -0
  43. package/dist/types/app-router/admin/sessionHandler.d.ts.map +1 -0
  44. package/dist/types/server/auth.d.ts +4 -4
  45. package/dist/types/server/auth.d.ts.map +1 -1
  46. package/dist/types/server/edge-session.d.ts.map +1 -1
  47. package/dist/types/server/ternSecureMiddleware.d.ts +7 -7
  48. package/dist/types/server/ternSecureMiddleware.d.ts.map +1 -1
  49. package/dist/types/server/types.d.ts +15 -3
  50. package/dist/types/server/types.d.ts.map +1 -1
  51. package/dist/types/utils/admin-init.d.ts +1 -4
  52. package/dist/types/utils/admin-init.d.ts.map +1 -1
  53. package/dist/types/utils/allNextProviderProps.d.ts.map +1 -1
  54. package/dist/types/utils/tern-ui-script.d.ts +2 -1
  55. package/dist/types/utils/tern-ui-script.d.ts.map +1 -1
  56. package/dist/types/utils/ternsecure-sw.d.ts +8 -0
  57. package/dist/types/utils/ternsecure-sw.d.ts.map +1 -0
  58. package/package.json +4 -5
  59. package/dist/cjs/app-router/admin/sessionTernSecure.js +0 -165
  60. package/dist/cjs/app-router/admin/sessionTernSecure.js.map +0 -1
  61. package/dist/esm/app-router/admin/sessionTernSecure.js +0 -135
  62. package/dist/esm/app-router/admin/sessionTernSecure.js.map +0 -1
  63. package/dist/types/app-router/admin/sessionTernSecure.d.ts +0 -39
  64. package/dist/types/app-router/admin/sessionTernSecure.d.ts.map +0 -1
@@ -2,7 +2,8 @@ import type { TernSecureNextProps } from '../types';
2
2
  type TernUIScriptProps = Pick<TernSecureNextProps, 'customDomain' | 'proxyUrl'> & {
3
3
  version?: string;
4
4
  nonce?: string;
5
+ router: 'app' | 'pages';
5
6
  };
6
- export declare function TernUIScript({ customDomain, proxyUrl, version, nonce, }: TernUIScriptProps): import("react/jsx-runtime").JSX.Element | null;
7
+ export declare function TernUIScript({ customDomain, proxyUrl, version, nonce, router }: TernUIScriptProps): import("react/jsx-runtime").JSX.Element | null;
7
8
  export {};
8
9
  //# sourceMappingURL=tern-ui-script.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tern-ui-script.d.ts","sourceRoot":"","sources":["../../../src/utils/tern-ui-script.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAKnD,KAAK,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,UAAU,CAAC,GAAG;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAA;AAOD,wBAAgB,YAAY,CAAC,EACzB,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,KAAK,GACR,EAAE,iBAAiB,kDA8BnB"}
1
+ {"version":3,"file":"tern-ui-script.d.ts","sourceRoot":"","sources":["../../../src/utils/tern-ui-script.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAKnD,KAAK,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,UAAU,CAAC,GAAG;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC;CAC3B,CAAA;AAOD,wBAAgB,YAAY,CAAC,EACzB,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAc,EACjB,EAAE,iBAAiB,kDA+BnB"}
@@ -0,0 +1,8 @@
1
+ import type { TernSecureConfig } from '@tern-secure/types';
2
+ interface TernUIServiceWorkerProps {
3
+ ternSecureConfig?: TernSecureConfig;
4
+ baseUrl?: string;
5
+ }
6
+ export declare const TernUIServiceWorker: React.FC<TernUIServiceWorkerProps>;
7
+ export {};
8
+ //# sourceMappingURL=ternsecure-sw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ternsecure-sw.d.ts","sourceRoot":"","sources":["../../../src/utils/ternsecure-sw.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,UAAU,wBAAwB;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAyBlE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tern-secure/nextjs",
3
- "version": "5.0.0",
3
+ "version": "5.1.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -54,12 +54,11 @@
54
54
  "dependencies": {
55
55
  "jose": "^5.9.6",
56
56
  "tslib": "2.4.1",
57
- "@tern-secure/react": "1.0.0",
58
- "@tern-secure/types": "1.0.0",
59
- "@tern-secure/shared": "1.0.0"
57
+ "@tern-secure/react": "1.1.0",
58
+ "@tern-secure/shared": "1.1.1",
59
+ "@tern-secure/types": "1.0.2"
60
60
  },
61
61
  "peerDependencies": {
62
- "firebase-admin": "^12.7.0",
63
62
  "next": "^13.0.0 || ^14.0.0 || ^15.0.0",
64
63
  "react": "^19",
65
64
  "react-dom": "^19"
@@ -1,165 +0,0 @@
1
- "use strict";
2
- "use server";
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
- var sessionTernSecure_exports = {};
21
- __export(sessionTernSecure_exports, {
22
- clearSessionCookie: () => clearSessionCookie,
23
- createSessionCookie: () => createSessionCookie,
24
- getIdToken: () => getIdToken,
25
- getServerSessionCookie: () => getServerSessionCookie,
26
- setServerSession: () => setServerSession,
27
- verifyTernIdToken: () => verifyTernIdToken,
28
- verifyTernSessionCookie: () => verifyTernSessionCookie
29
- });
30
- module.exports = __toCommonJS(sessionTernSecure_exports);
31
- var import_headers = require("next/headers");
32
- var import_admin_init = require("../../utils/admin-init");
33
- var import_errors = require("../../errors");
34
- async function createSessionCookie(idToken) {
35
- try {
36
- const expiresIn = 60 * 60 * 24 * 5 * 1e3;
37
- const sessionCookie = await import_admin_init.adminTernSecureAuth.createSessionCookie(idToken, { expiresIn });
38
- const cookieStore = await (0, import_headers.cookies)();
39
- cookieStore.set("_session_cookie", sessionCookie, {
40
- maxAge: expiresIn,
41
- httpOnly: true,
42
- secure: process.env.NODE_ENV === "production",
43
- path: "/"
44
- });
45
- return { success: true, message: "Session created" };
46
- } catch (error) {
47
- return { success: false, message: "Failed to create session" };
48
- }
49
- }
50
- async function getServerSessionCookie() {
51
- const cookieStore = await (0, import_headers.cookies)();
52
- const sessionCookie = cookieStore.get("_session_cookie")?.value;
53
- if (!sessionCookie) {
54
- throw new Error("No session cookie found");
55
- }
56
- try {
57
- const decondeClaims = await import_admin_init.adminTernSecureAuth.verifySessionCookie(sessionCookie, true);
58
- return {
59
- token: sessionCookie,
60
- userId: decondeClaims.uid
61
- };
62
- } catch (error) {
63
- console.error("Error verifying session:", error);
64
- throw new Error("Invalid Session");
65
- }
66
- }
67
- async function getIdToken() {
68
- const cookieStore = await (0, import_headers.cookies)();
69
- const token = cookieStore.get("_session_token")?.value;
70
- if (!token) {
71
- throw new Error("No session cookie found");
72
- }
73
- try {
74
- const decodedClaims = await import_admin_init.adminTernSecureAuth.verifyIdToken(token);
75
- return {
76
- token,
77
- userId: decodedClaims.uid
78
- };
79
- } catch (error) {
80
- console.error("Error verifying session:", error);
81
- throw new Error("Invalid Session");
82
- }
83
- }
84
- async function setServerSession(token) {
85
- try {
86
- const cookieStore = await (0, import_headers.cookies)();
87
- cookieStore.set("_session_token", token, {
88
- httpOnly: true,
89
- secure: process.env.NODE_ENV === "production",
90
- sameSite: "strict",
91
- maxAge: 60 * 60,
92
- // 1 hour
93
- path: "/"
94
- });
95
- return { success: true, message: "Session created" };
96
- } catch {
97
- return { success: false, message: "Failed to create session" };
98
- }
99
- }
100
- async function verifyTernIdToken(token) {
101
- try {
102
- const decodedToken = await import_admin_init.adminTernSecureAuth.verifyIdToken(token);
103
- return {
104
- valid: true,
105
- uid: decodedToken.uid,
106
- email: decodedToken.email || null,
107
- authTime: decodedToken.auth_time
108
- };
109
- } catch (error) {
110
- const errorResponse = (0, import_errors.handleFirebaseAuthError)(error);
111
- return {
112
- valid: false,
113
- uid: null,
114
- email: null,
115
- error: errorResponse
116
- };
117
- }
118
- }
119
- async function verifyTernSessionCookie(session) {
120
- try {
121
- const res = await import_admin_init.adminTernSecureAuth.verifySessionCookie(session);
122
- return {
123
- valid: true,
124
- uid: res.uid,
125
- email: res.email || null,
126
- authTime: res.auth_time
127
- };
128
- } catch (error) {
129
- const errorResponse = (0, import_errors.handleFirebaseAuthError)(error);
130
- return {
131
- valid: false,
132
- uid: null,
133
- email: null,
134
- error: errorResponse
135
- };
136
- }
137
- }
138
- async function clearSessionCookie() {
139
- const cookieStore = await (0, import_headers.cookies)();
140
- cookieStore.delete("_session_cookie");
141
- cookieStore.delete("_session_token");
142
- cookieStore.delete("_session");
143
- try {
144
- const sessionCookie = cookieStore.get("_session_cookie")?.value;
145
- if (sessionCookie) {
146
- const decodedClaims = await import_admin_init.adminTernSecureAuth.verifySessionCookie(sessionCookie);
147
- await import_admin_init.adminTernSecureAuth.revokeRefreshTokens(decodedClaims.uid);
148
- }
149
- return { success: true, message: "Session cleared successfully" };
150
- } catch (error) {
151
- console.error("Error clearing session:", error);
152
- return { success: true, message: "Session cookies cleared" };
153
- }
154
- }
155
- // Annotate the CommonJS export names for ESM import in node:
156
- 0 && (module.exports = {
157
- clearSessionCookie,
158
- createSessionCookie,
159
- getIdToken,
160
- getServerSessionCookie,
161
- setServerSession,
162
- verifyTernIdToken,
163
- verifyTernSessionCookie
164
- });
165
- //# sourceMappingURL=sessionTernSecure.js.map
@@ -1 +0,0 @@
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,135 +0,0 @@
1
- "use server";
2
- import { cookies } from "next/headers";
3
- import { adminTernSecureAuth as adminAuth } from "../../utils/admin-init";
4
- import { handleFirebaseAuthError } from "../../errors";
5
- async function createSessionCookie(idToken) {
6
- try {
7
- const expiresIn = 60 * 60 * 24 * 5 * 1e3;
8
- const sessionCookie = await adminAuth.createSessionCookie(idToken, { expiresIn });
9
- const cookieStore = await cookies();
10
- cookieStore.set("_session_cookie", sessionCookie, {
11
- maxAge: expiresIn,
12
- httpOnly: true,
13
- secure: process.env.NODE_ENV === "production",
14
- path: "/"
15
- });
16
- return { success: true, message: "Session created" };
17
- } catch (error) {
18
- return { success: false, message: "Failed to create session" };
19
- }
20
- }
21
- async function getServerSessionCookie() {
22
- const cookieStore = await cookies();
23
- const sessionCookie = cookieStore.get("_session_cookie")?.value;
24
- if (!sessionCookie) {
25
- throw new Error("No session cookie found");
26
- }
27
- try {
28
- const decondeClaims = await adminAuth.verifySessionCookie(sessionCookie, true);
29
- return {
30
- token: sessionCookie,
31
- userId: decondeClaims.uid
32
- };
33
- } catch (error) {
34
- console.error("Error verifying session:", error);
35
- throw new Error("Invalid Session");
36
- }
37
- }
38
- async function getIdToken() {
39
- const cookieStore = await cookies();
40
- const token = cookieStore.get("_session_token")?.value;
41
- if (!token) {
42
- throw new Error("No session cookie found");
43
- }
44
- try {
45
- const decodedClaims = await adminAuth.verifyIdToken(token);
46
- return {
47
- token,
48
- userId: decodedClaims.uid
49
- };
50
- } catch (error) {
51
- console.error("Error verifying session:", error);
52
- throw new Error("Invalid Session");
53
- }
54
- }
55
- async function setServerSession(token) {
56
- try {
57
- const cookieStore = await cookies();
58
- cookieStore.set("_session_token", token, {
59
- httpOnly: true,
60
- secure: process.env.NODE_ENV === "production",
61
- sameSite: "strict",
62
- maxAge: 60 * 60,
63
- // 1 hour
64
- path: "/"
65
- });
66
- return { success: true, message: "Session created" };
67
- } catch {
68
- return { success: false, message: "Failed to create session" };
69
- }
70
- }
71
- async function verifyTernIdToken(token) {
72
- try {
73
- const decodedToken = await adminAuth.verifyIdToken(token);
74
- return {
75
- valid: true,
76
- uid: decodedToken.uid,
77
- email: decodedToken.email || null,
78
- authTime: decodedToken.auth_time
79
- };
80
- } catch (error) {
81
- const errorResponse = handleFirebaseAuthError(error);
82
- return {
83
- valid: false,
84
- uid: null,
85
- email: null,
86
- error: errorResponse
87
- };
88
- }
89
- }
90
- async function verifyTernSessionCookie(session) {
91
- try {
92
- const res = await adminAuth.verifySessionCookie(session);
93
- return {
94
- valid: true,
95
- uid: res.uid,
96
- email: res.email || null,
97
- authTime: res.auth_time
98
- };
99
- } catch (error) {
100
- const errorResponse = handleFirebaseAuthError(error);
101
- return {
102
- valid: false,
103
- uid: null,
104
- email: null,
105
- error: errorResponse
106
- };
107
- }
108
- }
109
- async function clearSessionCookie() {
110
- const cookieStore = await cookies();
111
- cookieStore.delete("_session_cookie");
112
- cookieStore.delete("_session_token");
113
- cookieStore.delete("_session");
114
- try {
115
- const sessionCookie = cookieStore.get("_session_cookie")?.value;
116
- if (sessionCookie) {
117
- const decodedClaims = await adminAuth.verifySessionCookie(sessionCookie);
118
- await adminAuth.revokeRefreshTokens(decodedClaims.uid);
119
- }
120
- return { success: true, message: "Session cleared successfully" };
121
- } catch (error) {
122
- console.error("Error clearing session:", error);
123
- return { success: true, message: "Session cookies cleared" };
124
- }
125
- }
126
- export {
127
- clearSessionCookie,
128
- createSessionCookie,
129
- getIdToken,
130
- getServerSessionCookie,
131
- setServerSession,
132
- verifyTernIdToken,
133
- verifyTernSessionCookie
134
- };
135
- //# sourceMappingURL=sessionTernSecure.js.map
@@ -1 +0,0 @@
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":[]}
@@ -1,39 +0,0 @@
1
- import { type AuthErrorResponse } from '../../errors';
2
- export interface User {
3
- uid: string | null;
4
- email: string | null;
5
- }
6
- export interface Session {
7
- user: User | null;
8
- token: string | null;
9
- error: Error | null;
10
- }
11
- interface TernVerificationResult extends User {
12
- valid: boolean;
13
- authTime?: number;
14
- error?: AuthErrorResponse;
15
- }
16
- export declare function createSessionCookie(idToken: string): Promise<{
17
- success: boolean;
18
- message: string;
19
- }>;
20
- export declare function getServerSessionCookie(): Promise<{
21
- token: string;
22
- userId: string;
23
- }>;
24
- export declare function getIdToken(): Promise<{
25
- token: string;
26
- userId: string;
27
- }>;
28
- export declare function setServerSession(token: string): Promise<{
29
- success: boolean;
30
- message: string;
31
- }>;
32
- export declare function verifyTernIdToken(token: string): Promise<TernVerificationResult>;
33
- export declare function verifyTernSessionCookie(session: string): Promise<TernVerificationResult>;
34
- export declare function clearSessionCookie(): Promise<{
35
- success: boolean;
36
- message: string;
37
- }>;
38
- export {};
39
- //# sourceMappingURL=sessionTernSecure.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sessionTernSecure.d.ts","sourceRoot":"","sources":["../../../../src/app-router/admin/sessionTernSecure.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAM/E,MAAM,WAAW,IAAI;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAEH,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACvB;AAED,UAAU,sBAAuB,SAAQ,IAAI;IAC3C,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,iBAAiB,CAAA;CAC1B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM;;;GAgBxD;AAID,wBAAsB,sBAAsB;;;GAkB3C;AAGD,wBAAsB,UAAU;;;GAkB/B;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM;;;GAcnD;AAEC,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAkBtF;AAGD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAkB9F;AAGD,wBAAsB,kBAAkB;;;GAwBvC"}