@tern-secure/nextjs 3.2.17 → 3.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/app-router/server/auth.js +71 -0
- package/dist/cjs/app-router/server/auth.js.map +1 -0
- package/dist/cjs/app-router/server/index.js +2 -2
- package/dist/cjs/app-router/server/index.js.map +1 -1
- package/dist/cjs/app-router/server/sessionTernSecure.js +6 -6
- package/dist/cjs/app-router/server/sessionTernSecure.js.map +1 -1
- package/dist/cjs/app-router/server/ternSecureMiddleware.js +18 -25
- package/dist/cjs/app-router/server/ternSecureMiddleware.js.map +1 -1
- package/dist/cjs/boundary/TernSecureClientProvider.js +0 -2
- package/dist/cjs/boundary/TernSecureClientProvider.js.map +1 -1
- package/dist/esm/app-router/server/auth.js +47 -0
- package/dist/esm/app-router/server/auth.js.map +1 -0
- package/dist/esm/app-router/server/index.js +2 -2
- package/dist/esm/app-router/server/index.js.map +1 -1
- package/dist/esm/app-router/server/sessionTernSecure.js +4 -4
- package/dist/esm/app-router/server/sessionTernSecure.js.map +1 -1
- package/dist/esm/app-router/server/ternSecureMiddleware.js +18 -25
- package/dist/esm/app-router/server/ternSecureMiddleware.js.map +1 -1
- package/dist/esm/boundary/TernSecureClientProvider.js +0 -2
- package/dist/esm/boundary/TernSecureClientProvider.js.map +1 -1
- package/dist/types/app-router/server/auth.d.ts +7 -0
- package/dist/types/app-router/server/auth.d.ts.map +1 -0
- package/dist/types/app-router/server/index.d.ts +1 -1
- package/dist/types/app-router/server/index.d.ts.map +1 -1
- package/dist/types/app-router/server/sessionTernSecure.d.ts +4 -8
- package/dist/types/app-router/server/sessionTernSecure.d.ts.map +1 -1
- package/dist/types/app-router/server/ternSecureMiddleware.d.ts +6 -3
- package/dist/types/app-router/server/ternSecureMiddleware.d.ts.map +1 -1
- package/dist/types/boundary/TernSecureClientProvider.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,71 @@
|
|
|
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 auth_exports = {};
|
|
21
|
+
__export(auth_exports, {
|
|
22
|
+
auth: () => auth
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(auth_exports);
|
|
25
|
+
var import_headers = require("next/headers");
|
|
26
|
+
var import_sessionTernSecure = require("./sessionTernSecure");
|
|
27
|
+
async function auth() {
|
|
28
|
+
var _a, _b;
|
|
29
|
+
try {
|
|
30
|
+
const cookieStore = await (0, import_headers.cookies)();
|
|
31
|
+
const sessionCookie = (_a = cookieStore.get("_session_cookie")) == null ? void 0 : _a.value;
|
|
32
|
+
if (sessionCookie) {
|
|
33
|
+
const sessionResult = await (0, import_sessionTernSecure.verifyTernSessionCookie)(sessionCookie);
|
|
34
|
+
if (sessionResult.valid) {
|
|
35
|
+
return {
|
|
36
|
+
userId: sessionResult.uid,
|
|
37
|
+
token: sessionCookie,
|
|
38
|
+
error: null
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const idToken = (_b = cookieStore.get("_session_token")) == null ? void 0 : _b.value;
|
|
43
|
+
if (idToken) {
|
|
44
|
+
const tokenResult = await (0, import_sessionTernSecure.verifyTernIDToken)(idToken);
|
|
45
|
+
if (tokenResult.valid) {
|
|
46
|
+
return {
|
|
47
|
+
userId: tokenResult.uid,
|
|
48
|
+
token: idToken,
|
|
49
|
+
error: null
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
userId: null,
|
|
55
|
+
token: null,
|
|
56
|
+
error: new Error("No valid session or token found")
|
|
57
|
+
};
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error("Error in auth function:", error);
|
|
60
|
+
return {
|
|
61
|
+
userId: null,
|
|
62
|
+
token: null,
|
|
63
|
+
error: error instanceof Error ? error : new Error("An unknown error occurred")
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
68
|
+
0 && (module.exports = {
|
|
69
|
+
auth
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/server/auth.ts"],"sourcesContent":["'use server'\r\n\r\nimport { cookies } from 'next/headers';\r\nimport { verifyTernIDToken, verifyTernSessionCookie } from './sessionTernSecure';\r\n\r\nexport interface AuthResult {\r\n userId: string | null;\r\n token: string | null;\r\n error: Error | null;\r\n}\r\n\r\nexport async function auth(): Promise<AuthResult> {\r\n try {\r\n const cookieStore = await cookies();\r\n const sessionCookie = cookieStore.get('_session_cookie')?.value;\r\n if (sessionCookie) {\r\n const sessionResult = await verifyTernSessionCookie(sessionCookie);\r\n if (sessionResult.valid) {\r\n return {\r\n userId: sessionResult.uid,\r\n token: sessionCookie,\r\n error: null\r\n };\r\n }\r\n }\r\n\r\n // If session cookie is not present or invalid, try the ID token\r\n const idToken = cookieStore.get('_session_token')?.value;\r\n if (idToken) {\r\n const tokenResult = await verifyTernIDToken(idToken);\r\n if (tokenResult.valid) {\r\n return {\r\n userId: tokenResult.uid,\r\n token: idToken,\r\n error: null\r\n };\r\n }\r\n }\r\n\r\n // If both checks fail, return null values\r\n return {\r\n userId: null,\r\n token: null,\r\n error: new Error('No valid session or token found')\r\n };\r\n } catch (error) {\r\n console.error('Error in auth function:', error);\r\n return {\r\n userId: null,\r\n token: null,\r\n error: error instanceof Error ? error : new Error('An unknown error occurred')\r\n };\r\n }\r\n}\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,qBAAwB;AACxB,+BAA4D;AAQ5D,eAAsB,OAA4B;AAXlD;AAYE,MAAI;AACF,UAAM,cAAc,UAAM,wBAAQ;AAClC,UAAM,iBAAgB,iBAAY,IAAI,iBAAiB,MAAjC,mBAAoC;AAC1D,QAAI,eAAe;AACjB,YAAM,gBAAgB,UAAM,kDAAwB,aAAa;AACjE,UAAI,cAAc,OAAO;AACvB,eAAO;AAAA,UACL,QAAQ,cAAc;AAAA,UACtB,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,UAAM,WAAU,iBAAY,IAAI,gBAAgB,MAAhC,mBAAmC;AACnD,QAAI,SAAS;AACX,YAAM,cAAc,UAAM,4CAAkB,OAAO;AACnD,UAAI,YAAY,OAAO;AACrB,eAAO;AAAA,UACL,QAAQ,YAAY;AAAA,UACpB,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO,IAAI,MAAM,iCAAiC;AAAA,IACpD;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,2BAA2B,KAAK;AAC9C,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,2BAA2B;AAAA,IAC/E;AAAA,EACF;AACF;","names":[]}
|
|
@@ -22,7 +22,7 @@ __export(server_exports, {
|
|
|
22
22
|
adminTernSecureDb: () => import_admin_init.adminTernSecureDb,
|
|
23
23
|
createSessionCookie: () => import_sessionTernSecure.createSessionCookie,
|
|
24
24
|
ternSecureMiddleware: () => import_ternSecureMiddleware.ternSecureMiddleware,
|
|
25
|
-
|
|
25
|
+
verifyTernSessionCookie: () => import_sessionTernSecure.verifyTernSessionCookie
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(server_exports);
|
|
28
28
|
var import_admin_init = require("../../utils/admin-init");
|
|
@@ -34,6 +34,6 @@ var import_sessionTernSecure = require("./sessionTernSecure");
|
|
|
34
34
|
adminTernSecureDb,
|
|
35
35
|
createSessionCookie,
|
|
36
36
|
ternSecureMiddleware,
|
|
37
|
-
|
|
37
|
+
verifyTernSessionCookie
|
|
38
38
|
});
|
|
39
39
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app-router/server/index.ts"],"sourcesContent":["export { adminTernSecureAuth, adminTernSecureDb } from '../../utils/admin-init'\r\nexport { ternSecureMiddleware } from './ternSecureMiddleware'\r\nexport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/server/index.ts"],"sourcesContent":["export { adminTernSecureAuth, adminTernSecureDb } from '../../utils/admin-init'\r\nexport { ternSecureMiddleware } from './ternSecureMiddleware'\r\nexport { verifyTernSessionCookie, createSessionCookie } from './sessionTernSecure'"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAuD;AACvD,kCAAqC;AACrC,+BAA6D;","names":[]}
|
|
@@ -23,8 +23,8 @@ __export(sessionTernSecure_exports, {
|
|
|
23
23
|
getIdToken: () => getIdToken,
|
|
24
24
|
getServerSessionCookie: () => getServerSessionCookie,
|
|
25
25
|
setServerSession: () => setServerSession,
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
verifyTernIDToken: () => verifyTernIDToken,
|
|
27
|
+
verifyTernSessionCookie: () => verifyTernSessionCookie
|
|
28
28
|
});
|
|
29
29
|
module.exports = __toCommonJS(sessionTernSecure_exports);
|
|
30
30
|
var import_headers = require("next/headers");
|
|
@@ -92,7 +92,7 @@ async function setServerSession(token) {
|
|
|
92
92
|
path: "/"
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
|
-
async function
|
|
95
|
+
async function verifyTernIDToken(token) {
|
|
96
96
|
try {
|
|
97
97
|
const res = await import_admin_init.adminTernSecureAuth.verifyIdToken(token);
|
|
98
98
|
if (res) {
|
|
@@ -104,7 +104,7 @@ async function verifyIDToken(token) {
|
|
|
104
104
|
return { error, valid: false };
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
async function
|
|
107
|
+
async function verifyTernSessionCookie(session) {
|
|
108
108
|
try {
|
|
109
109
|
const res = await import_admin_init.adminTernSecureAuth.verifySessionCookie(session);
|
|
110
110
|
if (res) {
|
|
@@ -122,7 +122,7 @@ async function verifySessionCookie(session) {
|
|
|
122
122
|
getIdToken,
|
|
123
123
|
getServerSessionCookie,
|
|
124
124
|
setServerSession,
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
verifyTernIDToken,
|
|
126
|
+
verifyTernSessionCookie
|
|
127
127
|
});
|
|
128
128
|
//# sourceMappingURL=sessionTernSecure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app-router/server/sessionTernSecure.ts"],"sourcesContent":["'use server'\r\n\r\nimport { cookies } from 'next/headers';\r\nimport { adminTernSecureAuth as adminAuth } from '../../utils/admin-init';\r\n\r\n\r\nexport interface User {\r\n uid: string;\r\n email: string;\r\n }\r\n\r\nexport interface Session {\r\n user: User | null;\r\n token: string | null;\r\n error: Error | null;\r\n}\r\n\r\nexport async function createSessionCookie(idToken: string) {\r\n try {\r\n const expiresIn = 60 * 60 * 24 * 5 * 1000;\r\n const sessionCookie = await adminAuth.createSessionCookie(idToken, { expiresIn });\r\n\r\n const cookieStore = await cookies();\r\n cookieStore.set('_session_cookie', sessionCookie, {\r\n maxAge: expiresIn,\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === 'production',\r\n path: '/',\r\n });\r\n return { success: true, message: 'Session created' };\r\n } catch (error) {\r\n return { success: false, message: 'Failed to create session' };\r\n }\r\n}\r\n\r\n\r\n\r\nexport async function getServerSessionCookie() {\r\n const cookieStore = await cookies();\r\n const sessionCookie = cookieStore.get('_session_cookie')?.value;\r\n\r\n if (!sessionCookie) {\r\n throw new Error('No session cookie found')\r\n }\r\n \r\n try {\r\n const decondeClaims = await adminAuth.verifySessionCookie(sessionCookie)\r\n return {\r\n token: sessionCookie,\r\n userId: decondeClaims.uid\r\n }\r\n } catch (error) {\r\n console.error('Error verifying session:', error)\r\n throw new Error('Invalid Session')\r\n }\r\n}\r\n\r\n\r\nexport async function getIdToken() {\r\n const cookieStore = await cookies();\r\n const token = cookieStore.get('_session_token')?.value;\r\n\r\n if (!token) {\r\n throw new Error('No session cookie found')\r\n }\r\n \r\n try {\r\n const decodedClaims = await adminAuth.verifyIdToken(token)\r\n return {\r\n token: token,\r\n userId: decodedClaims.uid\r\n }\r\n } catch (error) {\r\n console.error('Error verifying session:', error)\r\n throw new Error('Invalid Session')\r\n }\r\n}\r\n\r\nexport async function setServerSession(token: string) {\r\n const cookieStore = await cookies();\r\n cookieStore.set('_session', token, {\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === 'production',\r\n sameSite: 'strict',\r\n maxAge: 60 * 60, // 1 hour\r\n path: '/',\r\n });\r\n }\r\n\r\n export async function
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/server/sessionTernSecure.ts"],"sourcesContent":["'use server'\r\n\r\nimport { cookies } from 'next/headers';\r\nimport { adminTernSecureAuth as adminAuth } from '../../utils/admin-init';\r\n\r\n\r\nexport interface User {\r\n uid: string;\r\n email: string;\r\n }\r\n\r\nexport interface Session {\r\n user: User | null;\r\n token: string | null;\r\n error: Error | null;\r\n}\r\n\r\nexport async function createSessionCookie(idToken: string) {\r\n try {\r\n const expiresIn = 60 * 60 * 24 * 5 * 1000;\r\n const sessionCookie = await adminAuth.createSessionCookie(idToken, { expiresIn });\r\n\r\n const cookieStore = await cookies();\r\n cookieStore.set('_session_cookie', sessionCookie, {\r\n maxAge: expiresIn,\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === 'production',\r\n path: '/',\r\n });\r\n return { success: true, message: 'Session created' };\r\n } catch (error) {\r\n return { success: false, message: 'Failed to create session' };\r\n }\r\n}\r\n\r\n\r\n\r\nexport async function getServerSessionCookie() {\r\n const cookieStore = await cookies();\r\n const sessionCookie = cookieStore.get('_session_cookie')?.value;\r\n\r\n if (!sessionCookie) {\r\n throw new Error('No session cookie found')\r\n }\r\n \r\n try {\r\n const decondeClaims = await adminAuth.verifySessionCookie(sessionCookie)\r\n return {\r\n token: sessionCookie,\r\n userId: decondeClaims.uid\r\n }\r\n } catch (error) {\r\n console.error('Error verifying session:', error)\r\n throw new Error('Invalid Session')\r\n }\r\n}\r\n\r\n\r\nexport async function getIdToken() {\r\n const cookieStore = await cookies();\r\n const token = cookieStore.get('_session_token')?.value;\r\n\r\n if (!token) {\r\n throw new Error('No session cookie found')\r\n }\r\n \r\n try {\r\n const decodedClaims = await adminAuth.verifyIdToken(token)\r\n return {\r\n token: token,\r\n userId: decodedClaims.uid\r\n }\r\n } catch (error) {\r\n console.error('Error verifying session:', error)\r\n throw new Error('Invalid Session')\r\n }\r\n}\r\n\r\nexport async function setServerSession(token: string) {\r\n const cookieStore = await cookies();\r\n cookieStore.set('_session', token, {\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === 'production',\r\n sameSite: 'strict',\r\n maxAge: 60 * 60, // 1 hour\r\n path: '/',\r\n });\r\n }\r\n\r\n export async function verifyTernIDToken(token: string): Promise<{ valid: boolean; uid?: any; error?: any }>{\r\n try {\r\n const res = await adminAuth.verifyIdToken(token);\r\n if (res) {\r\n return { valid: true, uid: res.uid };\r\n } else {\r\n return { valid: false, error: 'Invalid token'};\r\n }\r\n } catch (error) {\r\n return {error: error, valid: false}\r\n }\r\n }\r\n\r\n export async function verifyTernSessionCookie(session: string): Promise<{ valid: boolean; uid?: any; error?: any }>{\r\n try {\r\n const res = await adminAuth.verifySessionCookie(session);\r\n if (res) {\r\n return { valid: true, uid: res.uid };\r\n } else {\r\n return { valid: false, error: 'Invalid session'};\r\n }\r\n } catch (error) {\r\n return {error: error, valid: false}\r\n }\r\n }\r\n\r\n\r\n\r\n/*\r\n export async function GET(request: NextRequest) {\r\n const cookieStore = await cookies();\r\n const sessionCookie = cookieStore.get('session')?.value\r\n \r\n if (!sessionCookie) {\r\n return NextResponse.json({ isAuthenticated: false }, { status: 401 })\r\n }\r\n \r\n try {\r\n const decodedClaims = await adminAuth.verifySessionCookie(sessionCookie, true)\r\n return NextResponse.json({ isAuthenticated: true, user: decodedClaims }, { status: 200 })\r\n } catch (error) {\r\n console.error('Error verifying session cookie:', error)\r\n return NextResponse.json({ isAuthenticated: false }, { status: 401 })\r\n }\r\n }\r\n\r\n*/"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,qBAAwB;AACxB,wBAAiD;AAcjD,eAAsB,oBAAoB,SAAiB;AACzD,MAAI;AACF,UAAM,YAAY,KAAK,KAAK,KAAK,IAAI;AACnC,UAAM,gBAAgB,MAAM,kBAAAA,oBAAU,oBAAoB,SAAS,EAAE,UAAU,CAAC;AAEhF,UAAM,cAAc,UAAM,wBAAQ;AAClC,gBAAY,IAAI,mBAAmB,eAAe;AAAA,MAC9C,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ,QAAQ,IAAI,aAAa;AAAA,MACjC,MAAM;AAAA,IACV,CAAC;AACD,WAAO,EAAE,SAAS,MAAM,SAAS,kBAAkB;AAAA,EACvD,SAAS,OAAO;AACZ,WAAO,EAAE,SAAS,OAAO,SAAS,2BAA2B;AAAA,EACjE;AACF;AAIA,eAAsB,yBAAyB;AArC/C;AAsCE,QAAM,cAAc,UAAM,wBAAQ;AAClC,QAAM,iBAAgB,iBAAY,IAAI,iBAAiB,MAAjC,mBAAoC;AAE1D,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,MAAI;AACF,UAAM,gBAAgB,MAAM,kBAAAA,oBAAU,oBAAoB,aAAa;AACvE,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,cAAc;AAAA,IACxB;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,4BAA4B,KAAK;AAC/C,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AACF;AAGA,eAAsB,aAAa;AA1DnC;AA2DE,QAAM,cAAc,UAAM,wBAAQ;AAClC,QAAM,SAAQ,iBAAY,IAAI,gBAAgB,MAAhC,mBAAmC;AAEjD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,MAAI;AACF,UAAM,gBAAgB,MAAM,kBAAAA,oBAAU,cAAc,KAAK;AACzD,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,cAAc;AAAA,IACxB;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,4BAA4B,KAAK;AAC/C,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AACF;AAEA,eAAsB,iBAAiB,OAAe;AAClD,QAAM,cAAc,UAAM,wBAAQ;AAClC,cAAY,IAAI,YAAY,OAAO;AAAA,IACjC,UAAU;AAAA,IACV,QAAQ,QAAQ,IAAI,aAAa;AAAA,IACjC,UAAU;AAAA,IACV,QAAQ,KAAK;AAAA;AAAA,IACb,MAAM;AAAA,EACR,CAAC;AACH;AAEA,eAAsB,kBAAkB,OAAmE;AACzG,MAAI;AACF,UAAM,MAAM,MAAM,kBAAAA,oBAAU,cAAc,KAAK;AAC/C,QAAI,KAAK;AACP,aAAO,EAAE,OAAO,MAAM,KAAK,IAAI,IAAI;AAAA,IACrC,OAAO;AACL,aAAO,EAAE,OAAO,OAAO,OAAO,gBAAe;AAAA,IAC/C;AAAA,EACF,SAAS,OAAO;AACd,WAAO,EAAC,OAAc,OAAO,MAAK;AAAA,EACpC;AACF;AAEA,eAAsB,wBAAwB,SAAqE;AACjH,MAAI;AACF,UAAM,MAAM,MAAM,kBAAAA,oBAAU,oBAAoB,OAAO;AACvD,QAAI,KAAK;AACP,aAAO,EAAE,OAAO,MAAM,KAAK,IAAI,IAAI;AAAA,IACrC,OAAO;AACL,aAAO,EAAE,OAAO,OAAO,OAAO,kBAAiB;AAAA,IACjD;AAAA,EACF,SAAS,OAAO;AACd,WAAO,EAAC,OAAc,OAAO,MAAK;AAAA,EACpC;AACF;","names":["adminAuth"]}
|
|
@@ -22,33 +22,26 @@ __export(ternSecureMiddleware_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(ternSecureMiddleware_exports);
|
|
24
24
|
var import_server = require("next/server");
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const session = (_a = req.cookies.get("_session_cookie")) == null ? void 0 : _a.value;
|
|
33
|
-
if (isPublicRoute) {
|
|
34
|
-
return import_server.NextResponse.next();
|
|
35
|
-
}
|
|
36
|
-
if (session) {
|
|
37
|
-
const { valid, uid } = await (0, import_sessionTernSecure.verifySessionCookie)(session);
|
|
38
|
-
if (!valid) {
|
|
39
|
-
const response = import_server.NextResponse.redirect(new URL(signIn[0], req.url));
|
|
40
|
-
response.cookies.delete("_session_cookie");
|
|
41
|
-
return response;
|
|
25
|
+
var import_auth = require("./auth");
|
|
26
|
+
function ternSecureMiddleware(options = {}) {
|
|
27
|
+
const { publicPaths = [], redirectTo = "/login" } = options;
|
|
28
|
+
return async function middleware(request) {
|
|
29
|
+
const { pathname } = request.nextUrl;
|
|
30
|
+
if (publicPaths.includes(pathname)) {
|
|
31
|
+
return import_server.NextResponse.next();
|
|
42
32
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
headers: requestHeaders
|
|
33
|
+
try {
|
|
34
|
+
const { userId, token, error } = await (0, import_auth.auth)();
|
|
35
|
+
if (error || !userId || !token) {
|
|
36
|
+
return import_server.NextResponse.redirect(new URL(redirectTo, request.url));
|
|
48
37
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
38
|
+
const response = import_server.NextResponse.next();
|
|
39
|
+
return response;
|
|
40
|
+
} catch (error) {
|
|
41
|
+
console.error("Error in ternSecureMiddleware:", error);
|
|
42
|
+
return import_server.NextResponse.redirect(new URL(redirectTo, request.url));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
52
45
|
}
|
|
53
46
|
// Annotate the CommonJS export names for ESM import in node:
|
|
54
47
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app-router/server/ternSecureMiddleware.ts"],"sourcesContent":["import { NextResponse } from 'next/server'
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/server/ternSecureMiddleware.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from './auth';\r\n\r\nexport interface TernSecureMiddlewareOptions {\r\n publicPaths?: string[];\r\n redirectTo?: string;\r\n}\r\n\r\nexport function ternSecureMiddleware(options: TernSecureMiddlewareOptions = {}) {\r\n const { publicPaths = [], redirectTo = '/login' } = options;\r\n\r\n return async function middleware(request: NextRequest) {\r\n const { pathname } = request.nextUrl;\r\n\r\n // Check if the path is public\r\n if (publicPaths.includes(pathname)) {\r\n return NextResponse.next();\r\n }\r\n\r\n try {\r\n const { userId, token, error } = await auth();\r\n\r\n if (error || !userId || !token) {\r\n // If there's no valid session, redirect to login\r\n return NextResponse.redirect(new URL(redirectTo, request.url));\r\n }\r\n\r\n // If there's a valid session, allow the request to proceed\r\n const response = NextResponse.next();\r\n \r\n // Optionally, you can set headers here if needed\r\n // response.headers.set('X-User-ID', userId);\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('Error in ternSecureMiddleware:', error);\r\n return NextResponse.redirect(new URL(redirectTo, request.url));\r\n }\r\n };\r\n}\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA0C;AAC1C,kBAAqB;AAOd,SAAS,qBAAqB,UAAuC,CAAC,GAAG;AAC9E,QAAM,EAAE,cAAc,CAAC,GAAG,aAAa,SAAS,IAAI;AAEpD,SAAO,eAAe,WAAW,SAAsB;AACrD,UAAM,EAAE,SAAS,IAAI,QAAQ;AAG7B,QAAI,YAAY,SAAS,QAAQ,GAAG;AAClC,aAAO,2BAAa,KAAK;AAAA,IAC3B;AAEA,QAAI;AACF,YAAM,EAAE,QAAQ,OAAO,MAAM,IAAI,UAAM,kBAAK;AAE5C,UAAI,SAAS,CAAC,UAAU,CAAC,OAAO;AAE9B,eAAO,2BAAa,SAAS,IAAI,IAAI,YAAY,QAAQ,GAAG,CAAC;AAAA,MAC/D;AAGA,YAAM,WAAW,2BAAa,KAAK;AAKnC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAM,kCAAkC,KAAK;AACrD,aAAO,2BAAa,SAAS,IAAI,IAAI,YAAY,QAAQ,GAAG,CAAC;AAAA,IAC/D;AAAA,EACF;AACF;","names":[]}
|
|
@@ -27,7 +27,6 @@ var import_react = require("react");
|
|
|
27
27
|
var import_client_init = require("../utils/client-init");
|
|
28
28
|
var import_auth = require("firebase/auth");
|
|
29
29
|
var import_TernSecureCtx = require("./TernSecureCtx");
|
|
30
|
-
var import_sign_in = require("../components/sign-in");
|
|
31
30
|
function TernSecureClientProvider({ children, onUserChanged }) {
|
|
32
31
|
const auth = (0, import_react.useMemo)(() => (0, import_client_init.TernSecureAuth)(), []);
|
|
33
32
|
const [authState, setAuthState] = (0, import_react.useState)(() => ({
|
|
@@ -39,7 +38,6 @@ function TernSecureClientProvider({ children, onUserChanged }) {
|
|
|
39
38
|
try {
|
|
40
39
|
if (!user) {
|
|
41
40
|
await auth.signOut();
|
|
42
|
-
return import_sign_in.SignIn;
|
|
43
41
|
}
|
|
44
42
|
if (onUserChanged) {
|
|
45
43
|
await onUserChanged(user);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/boundary/TernSecureClientProvider.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport React, { useState, useEffect, useMemo, useCallback } from 'react'\r\nimport { TernSecureAuth } from '../utils/client-init'\r\nimport { onAuthStateChanged, User } from \"firebase/auth\"\r\nimport { TernSecureCtx, TernSecureCtxValue, TernSecureState } from './TernSecureCtx'\r\
|
|
1
|
+
{"version":3,"sources":["../../../src/boundary/TernSecureClientProvider.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport React, { useState, useEffect, useMemo, useCallback } from 'react'\r\nimport { TernSecureAuth } from '../utils/client-init'\r\nimport { onAuthStateChanged, User } from \"firebase/auth\"\r\nimport { TernSecureCtx, TernSecureCtxValue, TernSecureState } from './TernSecureCtx'\r\n\r\ninterface TernSecureClientProviderProps {\r\n children: React.ReactNode;\r\n onUserChanged?: (user: User | null) => Promise<void>;\r\n}\r\n\r\nexport function TernSecureClientProvider({ children, onUserChanged }: TernSecureClientProviderProps) {\r\n const auth = useMemo(() => TernSecureAuth(), []);\r\n\r\n const [authState, setAuthState] = useState<TernSecureState>(() => ({\r\n user: auth.currentUser,\r\n isLoaded: false,\r\n error: null,\r\n }));\r\n\r\n const handleAuthStateChange = useCallback(async (user: User | null) => {\r\n try {\r\n if(!user) {\r\n await auth.signOut();\r\n }\r\n\r\n if (onUserChanged) {\r\n await onUserChanged(user);\r\n }\r\n setAuthState({\r\n isLoaded: true,\r\n user: user,\r\n error: null\r\n });\r\n } catch (error) {\r\n auth.signOut();\r\n setAuthState({\r\n isLoaded: true,\r\n user: null,\r\n error: error instanceof Error ? error : new Error('An unknown error occurred')\r\n });\r\n }\r\n }, [auth, onUserChanged]);\r\n\r\n useEffect(() => {\r\n const unsubscribe = onAuthStateChanged(auth, handleAuthStateChange);\r\n \r\n return () => unsubscribe();\r\n }, [auth, handleAuthStateChange]);\r\n\r\n const contextValue: TernSecureCtxValue = useMemo(() => ({\r\n ...authState\r\n }), [authState]);\r\n\r\n if (!authState.isLoaded) {\r\n return (\r\n <TernSecureCtx.Provider value={contextValue}>\r\n <div aria-live=\"polite\" aria-busy=\"true\">\r\n <span className=\"sr-only\">Loading authentication state...</span>\r\n </div>\r\n </TernSecureCtx.Provider>\r\n );\r\n }\r\n\r\n return (\r\n <TernSecureCtx.Provider value={contextValue}>\r\n {children}\r\n </TernSecureCtx.Provider>\r\n );\r\n}\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2DU;AAzDV,mBAAiE;AACjE,yBAA+B;AAC/B,kBAAyC;AACzC,2BAAmE;AAO5D,SAAS,yBAAyB,EAAE,UAAU,cAAc,GAAkC;AACnG,QAAM,WAAO,sBAAQ,UAAM,mCAAe,GAAG,CAAC,CAAC;AAE/C,QAAM,CAAC,WAAW,YAAY,QAAI,uBAA0B,OAAO;AAAA,IAC/D,MAAM,KAAK;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACX,EAAE;AAEF,QAAM,4BAAwB,0BAAY,OAAO,SAAsB;AACrE,QAAI;AACF,UAAG,CAAC,MAAM;AACR,cAAM,KAAK,QAAQ;AAAA,MACrB;AAEA,UAAI,eAAe;AACjB,cAAM,cAAc,IAAI;AAAA,MAC1B;AACA,mBAAa;AAAA,QACX,UAAU;AAAA,QACV;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH,SAAS,OAAO;AACd,WAAK,QAAQ;AACb,mBAAa;AAAA,QACX,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,2BAA2B;AAAA,MAC/E,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,MAAM,aAAa,CAAC;AAExB,8BAAU,MAAM;AACd,UAAM,kBAAc,gCAAmB,MAAM,qBAAqB;AAElE,WAAO,MAAM,YAAY;AAAA,EAC3B,GAAG,CAAC,MAAM,qBAAqB,CAAC;AAEhC,QAAM,mBAAmC,sBAAQ,OAAO;AAAA,IACtD,GAAG;AAAA,EACL,IAAI,CAAC,SAAS,CAAC;AAEf,MAAI,CAAC,UAAU,UAAU;AACvB,WACE,4CAAC,mCAAc,UAAd,EAAuB,OAAO,cAC7B,sDAAC,SAAI,aAAU,UAAS,aAAU,QAChC,sDAAC,UAAK,WAAU,WAAU,6CAA+B,GAC3D,GACF;AAAA,EAEJ;AAEA,SACE,4CAAC,mCAAc,UAAd,EAAuB,OAAO,cAC5B,UACH;AAEJ;","names":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use server";
|
|
2
|
+
import { cookies } from "next/headers";
|
|
3
|
+
import { verifyTernIDToken, verifyTernSessionCookie } from "./sessionTernSecure";
|
|
4
|
+
async function auth() {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
try {
|
|
7
|
+
const cookieStore = await cookies();
|
|
8
|
+
const sessionCookie = (_a = cookieStore.get("_session_cookie")) == null ? void 0 : _a.value;
|
|
9
|
+
if (sessionCookie) {
|
|
10
|
+
const sessionResult = await verifyTernSessionCookie(sessionCookie);
|
|
11
|
+
if (sessionResult.valid) {
|
|
12
|
+
return {
|
|
13
|
+
userId: sessionResult.uid,
|
|
14
|
+
token: sessionCookie,
|
|
15
|
+
error: null
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const idToken = (_b = cookieStore.get("_session_token")) == null ? void 0 : _b.value;
|
|
20
|
+
if (idToken) {
|
|
21
|
+
const tokenResult = await verifyTernIDToken(idToken);
|
|
22
|
+
if (tokenResult.valid) {
|
|
23
|
+
return {
|
|
24
|
+
userId: tokenResult.uid,
|
|
25
|
+
token: idToken,
|
|
26
|
+
error: null
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
userId: null,
|
|
32
|
+
token: null,
|
|
33
|
+
error: new Error("No valid session or token found")
|
|
34
|
+
};
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.error("Error in auth function:", error);
|
|
37
|
+
return {
|
|
38
|
+
userId: null,
|
|
39
|
+
token: null,
|
|
40
|
+
error: error instanceof Error ? error : new Error("An unknown error occurred")
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
auth
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/server/auth.ts"],"sourcesContent":["'use server'\r\n\r\nimport { cookies } from 'next/headers';\r\nimport { verifyTernIDToken, verifyTernSessionCookie } from './sessionTernSecure';\r\n\r\nexport interface AuthResult {\r\n userId: string | null;\r\n token: string | null;\r\n error: Error | null;\r\n}\r\n\r\nexport async function auth(): Promise<AuthResult> {\r\n try {\r\n const cookieStore = await cookies();\r\n const sessionCookie = cookieStore.get('_session_cookie')?.value;\r\n if (sessionCookie) {\r\n const sessionResult = await verifyTernSessionCookie(sessionCookie);\r\n if (sessionResult.valid) {\r\n return {\r\n userId: sessionResult.uid,\r\n token: sessionCookie,\r\n error: null\r\n };\r\n }\r\n }\r\n\r\n // If session cookie is not present or invalid, try the ID token\r\n const idToken = cookieStore.get('_session_token')?.value;\r\n if (idToken) {\r\n const tokenResult = await verifyTernIDToken(idToken);\r\n if (tokenResult.valid) {\r\n return {\r\n userId: tokenResult.uid,\r\n token: idToken,\r\n error: null\r\n };\r\n }\r\n }\r\n\r\n // If both checks fail, return null values\r\n return {\r\n userId: null,\r\n token: null,\r\n error: new Error('No valid session or token found')\r\n };\r\n } catch (error) {\r\n console.error('Error in auth function:', error);\r\n return {\r\n userId: null,\r\n token: null,\r\n error: error instanceof Error ? error : new Error('An unknown error occurred')\r\n };\r\n }\r\n}\r\n\r\n"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAU,mBAAmB,+BAA+B;AAQ5D,eAAsB,OAA4B;AAXlD;AAYE,MAAI;AACF,UAAM,cAAc,MAAM,QAAQ;AAClC,UAAM,iBAAgB,iBAAY,IAAI,iBAAiB,MAAjC,mBAAoC;AAC1D,QAAI,eAAe;AACjB,YAAM,gBAAgB,MAAM,wBAAwB,aAAa;AACjE,UAAI,cAAc,OAAO;AACvB,eAAO;AAAA,UACL,QAAQ,cAAc;AAAA,UACtB,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,UAAM,WAAU,iBAAY,IAAI,gBAAgB,MAAhC,mBAAmC;AACnD,QAAI,SAAS;AACX,YAAM,cAAc,MAAM,kBAAkB,OAAO;AACnD,UAAI,YAAY,OAAO;AACrB,eAAO;AAAA,UACL,QAAQ,YAAY;AAAA,UACpB,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO,IAAI,MAAM,iCAAiC;AAAA,IACpD;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,2BAA2B,KAAK;AAC9C,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,2BAA2B;AAAA,IAC/E;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { adminTernSecureAuth, adminTernSecureDb } from "../../utils/admin-init";
|
|
2
2
|
import { ternSecureMiddleware } from "./ternSecureMiddleware";
|
|
3
|
-
import {
|
|
3
|
+
import { verifyTernSessionCookie, createSessionCookie } from "./sessionTernSecure";
|
|
4
4
|
export {
|
|
5
5
|
adminTernSecureAuth,
|
|
6
6
|
adminTernSecureDb,
|
|
7
7
|
createSessionCookie,
|
|
8
8
|
ternSecureMiddleware,
|
|
9
|
-
|
|
9
|
+
verifyTernSessionCookie
|
|
10
10
|
};
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app-router/server/index.ts"],"sourcesContent":["export { adminTernSecureAuth, adminTernSecureDb } from '../../utils/admin-init'\r\nexport { ternSecureMiddleware } from './ternSecureMiddleware'\r\nexport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/server/index.ts"],"sourcesContent":["export { adminTernSecureAuth, adminTernSecureDb } from '../../utils/admin-init'\r\nexport { ternSecureMiddleware } from './ternSecureMiddleware'\r\nexport { verifyTernSessionCookie, createSessionCookie } from './sessionTernSecure'"],"mappings":"AAAA,SAAS,qBAAqB,yBAAyB;AACvD,SAAS,4BAA4B;AACrC,SAAS,yBAAyB,2BAA2B;","names":[]}
|
|
@@ -64,7 +64,7 @@ async function setServerSession(token) {
|
|
|
64
64
|
path: "/"
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
|
-
async function
|
|
67
|
+
async function verifyTernIDToken(token) {
|
|
68
68
|
try {
|
|
69
69
|
const res = await adminAuth.verifyIdToken(token);
|
|
70
70
|
if (res) {
|
|
@@ -76,7 +76,7 @@ async function verifyIDToken(token) {
|
|
|
76
76
|
return { error, valid: false };
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
async function
|
|
79
|
+
async function verifyTernSessionCookie(session) {
|
|
80
80
|
try {
|
|
81
81
|
const res = await adminAuth.verifySessionCookie(session);
|
|
82
82
|
if (res) {
|
|
@@ -93,7 +93,7 @@ export {
|
|
|
93
93
|
getIdToken,
|
|
94
94
|
getServerSessionCookie,
|
|
95
95
|
setServerSession,
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
verifyTernIDToken,
|
|
97
|
+
verifyTernSessionCookie
|
|
98
98
|
};
|
|
99
99
|
//# sourceMappingURL=sessionTernSecure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app-router/server/sessionTernSecure.ts"],"sourcesContent":["'use server'\r\n\r\nimport { cookies } from 'next/headers';\r\nimport { adminTernSecureAuth as adminAuth } from '../../utils/admin-init';\r\n\r\n\r\nexport interface User {\r\n uid: string;\r\n email: string;\r\n }\r\n\r\nexport interface Session {\r\n user: User | null;\r\n token: string | null;\r\n error: Error | null;\r\n}\r\n\r\nexport async function createSessionCookie(idToken: string) {\r\n try {\r\n const expiresIn = 60 * 60 * 24 * 5 * 1000;\r\n const sessionCookie = await adminAuth.createSessionCookie(idToken, { expiresIn });\r\n\r\n const cookieStore = await cookies();\r\n cookieStore.set('_session_cookie', sessionCookie, {\r\n maxAge: expiresIn,\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === 'production',\r\n path: '/',\r\n });\r\n return { success: true, message: 'Session created' };\r\n } catch (error) {\r\n return { success: false, message: 'Failed to create session' };\r\n }\r\n}\r\n\r\n\r\n\r\nexport async function getServerSessionCookie() {\r\n const cookieStore = await cookies();\r\n const sessionCookie = cookieStore.get('_session_cookie')?.value;\r\n\r\n if (!sessionCookie) {\r\n throw new Error('No session cookie found')\r\n }\r\n \r\n try {\r\n const decondeClaims = await adminAuth.verifySessionCookie(sessionCookie)\r\n return {\r\n token: sessionCookie,\r\n userId: decondeClaims.uid\r\n }\r\n } catch (error) {\r\n console.error('Error verifying session:', error)\r\n throw new Error('Invalid Session')\r\n }\r\n}\r\n\r\n\r\nexport async function getIdToken() {\r\n const cookieStore = await cookies();\r\n const token = cookieStore.get('_session_token')?.value;\r\n\r\n if (!token) {\r\n throw new Error('No session cookie found')\r\n }\r\n \r\n try {\r\n const decodedClaims = await adminAuth.verifyIdToken(token)\r\n return {\r\n token: token,\r\n userId: decodedClaims.uid\r\n }\r\n } catch (error) {\r\n console.error('Error verifying session:', error)\r\n throw new Error('Invalid Session')\r\n }\r\n}\r\n\r\nexport async function setServerSession(token: string) {\r\n const cookieStore = await cookies();\r\n cookieStore.set('_session', token, {\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === 'production',\r\n sameSite: 'strict',\r\n maxAge: 60 * 60, // 1 hour\r\n path: '/',\r\n });\r\n }\r\n\r\n export async function
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/server/sessionTernSecure.ts"],"sourcesContent":["'use server'\r\n\r\nimport { cookies } from 'next/headers';\r\nimport { adminTernSecureAuth as adminAuth } from '../../utils/admin-init';\r\n\r\n\r\nexport interface User {\r\n uid: string;\r\n email: string;\r\n }\r\n\r\nexport interface Session {\r\n user: User | null;\r\n token: string | null;\r\n error: Error | null;\r\n}\r\n\r\nexport async function createSessionCookie(idToken: string) {\r\n try {\r\n const expiresIn = 60 * 60 * 24 * 5 * 1000;\r\n const sessionCookie = await adminAuth.createSessionCookie(idToken, { expiresIn });\r\n\r\n const cookieStore = await cookies();\r\n cookieStore.set('_session_cookie', sessionCookie, {\r\n maxAge: expiresIn,\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === 'production',\r\n path: '/',\r\n });\r\n return { success: true, message: 'Session created' };\r\n } catch (error) {\r\n return { success: false, message: 'Failed to create session' };\r\n }\r\n}\r\n\r\n\r\n\r\nexport async function getServerSessionCookie() {\r\n const cookieStore = await cookies();\r\n const sessionCookie = cookieStore.get('_session_cookie')?.value;\r\n\r\n if (!sessionCookie) {\r\n throw new Error('No session cookie found')\r\n }\r\n \r\n try {\r\n const decondeClaims = await adminAuth.verifySessionCookie(sessionCookie)\r\n return {\r\n token: sessionCookie,\r\n userId: decondeClaims.uid\r\n }\r\n } catch (error) {\r\n console.error('Error verifying session:', error)\r\n throw new Error('Invalid Session')\r\n }\r\n}\r\n\r\n\r\nexport async function getIdToken() {\r\n const cookieStore = await cookies();\r\n const token = cookieStore.get('_session_token')?.value;\r\n\r\n if (!token) {\r\n throw new Error('No session cookie found')\r\n }\r\n \r\n try {\r\n const decodedClaims = await adminAuth.verifyIdToken(token)\r\n return {\r\n token: token,\r\n userId: decodedClaims.uid\r\n }\r\n } catch (error) {\r\n console.error('Error verifying session:', error)\r\n throw new Error('Invalid Session')\r\n }\r\n}\r\n\r\nexport async function setServerSession(token: string) {\r\n const cookieStore = await cookies();\r\n cookieStore.set('_session', token, {\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === 'production',\r\n sameSite: 'strict',\r\n maxAge: 60 * 60, // 1 hour\r\n path: '/',\r\n });\r\n }\r\n\r\n export async function verifyTernIDToken(token: string): Promise<{ valid: boolean; uid?: any; error?: any }>{\r\n try {\r\n const res = await adminAuth.verifyIdToken(token);\r\n if (res) {\r\n return { valid: true, uid: res.uid };\r\n } else {\r\n return { valid: false, error: 'Invalid token'};\r\n }\r\n } catch (error) {\r\n return {error: error, valid: false}\r\n }\r\n }\r\n\r\n export async function verifyTernSessionCookie(session: string): Promise<{ valid: boolean; uid?: any; error?: any }>{\r\n try {\r\n const res = await adminAuth.verifySessionCookie(session);\r\n if (res) {\r\n return { valid: true, uid: res.uid };\r\n } else {\r\n return { valid: false, error: 'Invalid session'};\r\n }\r\n } catch (error) {\r\n return {error: error, valid: false}\r\n }\r\n }\r\n\r\n\r\n\r\n/*\r\n export async function GET(request: NextRequest) {\r\n const cookieStore = await cookies();\r\n const sessionCookie = cookieStore.get('session')?.value\r\n \r\n if (!sessionCookie) {\r\n return NextResponse.json({ isAuthenticated: false }, { status: 401 })\r\n }\r\n \r\n try {\r\n const decodedClaims = await adminAuth.verifySessionCookie(sessionCookie, true)\r\n return NextResponse.json({ isAuthenticated: true, user: decodedClaims }, { status: 200 })\r\n } catch (error) {\r\n console.error('Error verifying session cookie:', error)\r\n return NextResponse.json({ isAuthenticated: false }, { status: 401 })\r\n }\r\n }\r\n\r\n*/"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAS,uBAAuB,iBAAiB;AAcjD,eAAsB,oBAAoB,SAAiB;AACzD,MAAI;AACF,UAAM,YAAY,KAAK,KAAK,KAAK,IAAI;AACnC,UAAM,gBAAgB,MAAM,UAAU,oBAAoB,SAAS,EAAE,UAAU,CAAC;AAEhF,UAAM,cAAc,MAAM,QAAQ;AAClC,gBAAY,IAAI,mBAAmB,eAAe;AAAA,MAC9C,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ,QAAQ,IAAI,aAAa;AAAA,MACjC,MAAM;AAAA,IACV,CAAC;AACD,WAAO,EAAE,SAAS,MAAM,SAAS,kBAAkB;AAAA,EACvD,SAAS,OAAO;AACZ,WAAO,EAAE,SAAS,OAAO,SAAS,2BAA2B;AAAA,EACjE;AACF;AAIA,eAAsB,yBAAyB;AArC/C;AAsCE,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,iBAAgB,iBAAY,IAAI,iBAAiB,MAAjC,mBAAoC;AAE1D,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,MAAI;AACF,UAAM,gBAAgB,MAAM,UAAU,oBAAoB,aAAa;AACvE,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,cAAc;AAAA,IACxB;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,4BAA4B,KAAK;AAC/C,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AACF;AAGA,eAAsB,aAAa;AA1DnC;AA2DE,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,SAAQ,iBAAY,IAAI,gBAAgB,MAAhC,mBAAmC;AAEjD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,MAAI;AACF,UAAM,gBAAgB,MAAM,UAAU,cAAc,KAAK;AACzD,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,cAAc;AAAA,IACxB;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,4BAA4B,KAAK;AAC/C,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AACF;AAEA,eAAsB,iBAAiB,OAAe;AAClD,QAAM,cAAc,MAAM,QAAQ;AAClC,cAAY,IAAI,YAAY,OAAO;AAAA,IACjC,UAAU;AAAA,IACV,QAAQ,QAAQ,IAAI,aAAa;AAAA,IACjC,UAAU;AAAA,IACV,QAAQ,KAAK;AAAA;AAAA,IACb,MAAM;AAAA,EACR,CAAC;AACH;AAEA,eAAsB,kBAAkB,OAAmE;AACzG,MAAI;AACF,UAAM,MAAM,MAAM,UAAU,cAAc,KAAK;AAC/C,QAAI,KAAK;AACP,aAAO,EAAE,OAAO,MAAM,KAAK,IAAI,IAAI;AAAA,IACrC,OAAO;AACL,aAAO,EAAE,OAAO,OAAO,OAAO,gBAAe;AAAA,IAC/C;AAAA,EACF,SAAS,OAAO;AACd,WAAO,EAAC,OAAc,OAAO,MAAK;AAAA,EACpC;AACF;AAEA,eAAsB,wBAAwB,SAAqE;AACjH,MAAI;AACF,UAAM,MAAM,MAAM,UAAU,oBAAoB,OAAO;AACvD,QAAI,KAAK;AACP,aAAO,EAAE,OAAO,MAAM,KAAK,IAAI,IAAI;AAAA,IACrC,OAAO;AACL,aAAO,EAAE,OAAO,OAAO,OAAO,kBAAiB;AAAA,IACjD;AAAA,EACF,SAAS,OAAO;AACd,WAAO,EAAC,OAAc,OAAO,MAAK;AAAA,EACpC;AACF;","names":[]}
|
|
@@ -1,31 +1,24 @@
|
|
|
1
1
|
import { NextResponse } from "next/server";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const session = (_a = req.cookies.get("_session_cookie")) == null ? void 0 : _a.value;
|
|
10
|
-
if (isPublicRoute) {
|
|
11
|
-
return NextResponse.next();
|
|
12
|
-
}
|
|
13
|
-
if (session) {
|
|
14
|
-
const { valid, uid } = await verifySessionCookie(session);
|
|
15
|
-
if (!valid) {
|
|
16
|
-
const response = NextResponse.redirect(new URL(signIn[0], req.url));
|
|
17
|
-
response.cookies.delete("_session_cookie");
|
|
18
|
-
return response;
|
|
2
|
+
import { auth } from "./auth";
|
|
3
|
+
function ternSecureMiddleware(options = {}) {
|
|
4
|
+
const { publicPaths = [], redirectTo = "/login" } = options;
|
|
5
|
+
return async function middleware(request) {
|
|
6
|
+
const { pathname } = request.nextUrl;
|
|
7
|
+
if (publicPaths.includes(pathname)) {
|
|
8
|
+
return NextResponse.next();
|
|
19
9
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
headers: requestHeaders
|
|
10
|
+
try {
|
|
11
|
+
const { userId, token, error } = await auth();
|
|
12
|
+
if (error || !userId || !token) {
|
|
13
|
+
return NextResponse.redirect(new URL(redirectTo, request.url));
|
|
25
14
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
15
|
+
const response = NextResponse.next();
|
|
16
|
+
return response;
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.error("Error in ternSecureMiddleware:", error);
|
|
19
|
+
return NextResponse.redirect(new URL(redirectTo, request.url));
|
|
20
|
+
}
|
|
21
|
+
};
|
|
29
22
|
}
|
|
30
23
|
export {
|
|
31
24
|
ternSecureMiddleware
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/app-router/server/ternSecureMiddleware.ts"],"sourcesContent":["import { NextResponse } from 'next/server'
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/server/ternSecureMiddleware.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from './auth';\r\n\r\nexport interface TernSecureMiddlewareOptions {\r\n publicPaths?: string[];\r\n redirectTo?: string;\r\n}\r\n\r\nexport function ternSecureMiddleware(options: TernSecureMiddlewareOptions = {}) {\r\n const { publicPaths = [], redirectTo = '/login' } = options;\r\n\r\n return async function middleware(request: NextRequest) {\r\n const { pathname } = request.nextUrl;\r\n\r\n // Check if the path is public\r\n if (publicPaths.includes(pathname)) {\r\n return NextResponse.next();\r\n }\r\n\r\n try {\r\n const { userId, token, error } = await auth();\r\n\r\n if (error || !userId || !token) {\r\n // If there's no valid session, redirect to login\r\n return NextResponse.redirect(new URL(redirectTo, request.url));\r\n }\r\n\r\n // If there's a valid session, allow the request to proceed\r\n const response = NextResponse.next();\r\n \r\n // Optionally, you can set headers here if needed\r\n // response.headers.set('X-User-ID', userId);\r\n\r\n return response;\r\n } catch (error) {\r\n console.error('Error in ternSecureMiddleware:', error);\r\n return NextResponse.redirect(new URL(redirectTo, request.url));\r\n }\r\n };\r\n}\r\n\r\n"],"mappings":"AAAA,SAAsB,oBAAoB;AAC1C,SAAS,YAAY;AAOd,SAAS,qBAAqB,UAAuC,CAAC,GAAG;AAC9E,QAAM,EAAE,cAAc,CAAC,GAAG,aAAa,SAAS,IAAI;AAEpD,SAAO,eAAe,WAAW,SAAsB;AACrD,UAAM,EAAE,SAAS,IAAI,QAAQ;AAG7B,QAAI,YAAY,SAAS,QAAQ,GAAG;AAClC,aAAO,aAAa,KAAK;AAAA,IAC3B;AAEA,QAAI;AACF,YAAM,EAAE,QAAQ,OAAO,MAAM,IAAI,MAAM,KAAK;AAE5C,UAAI,SAAS,CAAC,UAAU,CAAC,OAAO;AAE9B,eAAO,aAAa,SAAS,IAAI,IAAI,YAAY,QAAQ,GAAG,CAAC;AAAA,MAC/D;AAGA,YAAM,WAAW,aAAa,KAAK;AAKnC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAM,kCAAkC,KAAK;AACrD,aAAO,aAAa,SAAS,IAAI,IAAI,YAAY,QAAQ,GAAG,CAAC;AAAA,IAC/D;AAAA,EACF;AACF;","names":[]}
|
|
@@ -4,7 +4,6 @@ import { useState, useEffect, useMemo, useCallback } from "react";
|
|
|
4
4
|
import { TernSecureAuth } from "../utils/client-init";
|
|
5
5
|
import { onAuthStateChanged } from "firebase/auth";
|
|
6
6
|
import { TernSecureCtx } from "./TernSecureCtx";
|
|
7
|
-
import { SignIn } from "../components/sign-in";
|
|
8
7
|
function TernSecureClientProvider({ children, onUserChanged }) {
|
|
9
8
|
const auth = useMemo(() => TernSecureAuth(), []);
|
|
10
9
|
const [authState, setAuthState] = useState(() => ({
|
|
@@ -16,7 +15,6 @@ function TernSecureClientProvider({ children, onUserChanged }) {
|
|
|
16
15
|
try {
|
|
17
16
|
if (!user) {
|
|
18
17
|
await auth.signOut();
|
|
19
|
-
return SignIn;
|
|
20
18
|
}
|
|
21
19
|
if (onUserChanged) {
|
|
22
20
|
await onUserChanged(user);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/boundary/TernSecureClientProvider.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport React, { useState, useEffect, useMemo, useCallback } from 'react'\r\nimport { TernSecureAuth } from '../utils/client-init'\r\nimport { onAuthStateChanged, User } from \"firebase/auth\"\r\nimport { TernSecureCtx, TernSecureCtxValue, TernSecureState } from './TernSecureCtx'\r\
|
|
1
|
+
{"version":3,"sources":["../../../src/boundary/TernSecureClientProvider.tsx"],"sourcesContent":["\"use client\"\r\n\r\nimport React, { useState, useEffect, useMemo, useCallback } from 'react'\r\nimport { TernSecureAuth } from '../utils/client-init'\r\nimport { onAuthStateChanged, User } from \"firebase/auth\"\r\nimport { TernSecureCtx, TernSecureCtxValue, TernSecureState } from './TernSecureCtx'\r\n\r\ninterface TernSecureClientProviderProps {\r\n children: React.ReactNode;\r\n onUserChanged?: (user: User | null) => Promise<void>;\r\n}\r\n\r\nexport function TernSecureClientProvider({ children, onUserChanged }: TernSecureClientProviderProps) {\r\n const auth = useMemo(() => TernSecureAuth(), []);\r\n\r\n const [authState, setAuthState] = useState<TernSecureState>(() => ({\r\n user: auth.currentUser,\r\n isLoaded: false,\r\n error: null,\r\n }));\r\n\r\n const handleAuthStateChange = useCallback(async (user: User | null) => {\r\n try {\r\n if(!user) {\r\n await auth.signOut();\r\n }\r\n\r\n if (onUserChanged) {\r\n await onUserChanged(user);\r\n }\r\n setAuthState({\r\n isLoaded: true,\r\n user: user,\r\n error: null\r\n });\r\n } catch (error) {\r\n auth.signOut();\r\n setAuthState({\r\n isLoaded: true,\r\n user: null,\r\n error: error instanceof Error ? error : new Error('An unknown error occurred')\r\n });\r\n }\r\n }, [auth, onUserChanged]);\r\n\r\n useEffect(() => {\r\n const unsubscribe = onAuthStateChanged(auth, handleAuthStateChange);\r\n \r\n return () => unsubscribe();\r\n }, [auth, handleAuthStateChange]);\r\n\r\n const contextValue: TernSecureCtxValue = useMemo(() => ({\r\n ...authState\r\n }), [authState]);\r\n\r\n if (!authState.isLoaded) {\r\n return (\r\n <TernSecureCtx.Provider value={contextValue}>\r\n <div aria-live=\"polite\" aria-busy=\"true\">\r\n <span className=\"sr-only\">Loading authentication state...</span>\r\n </div>\r\n </TernSecureCtx.Provider>\r\n );\r\n }\r\n\r\n return (\r\n <TernSecureCtx.Provider value={contextValue}>\r\n {children}\r\n </TernSecureCtx.Provider>\r\n );\r\n}\r\n\r\n"],"mappings":";AA2DU;AAzDV,SAAgB,UAAU,WAAW,SAAS,mBAAmB;AACjE,SAAS,sBAAsB;AAC/B,SAAS,0BAAgC;AACzC,SAAS,qBAA0D;AAO5D,SAAS,yBAAyB,EAAE,UAAU,cAAc,GAAkC;AACnG,QAAM,OAAO,QAAQ,MAAM,eAAe,GAAG,CAAC,CAAC;AAE/C,QAAM,CAAC,WAAW,YAAY,IAAI,SAA0B,OAAO;AAAA,IAC/D,MAAM,KAAK;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,EACX,EAAE;AAEF,QAAM,wBAAwB,YAAY,OAAO,SAAsB;AACrE,QAAI;AACF,UAAG,CAAC,MAAM;AACR,cAAM,KAAK,QAAQ;AAAA,MACrB;AAEA,UAAI,eAAe;AACjB,cAAM,cAAc,IAAI;AAAA,MAC1B;AACA,mBAAa;AAAA,QACX,UAAU;AAAA,QACV;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH,SAAS,OAAO;AACd,WAAK,QAAQ;AACb,mBAAa;AAAA,QACX,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,2BAA2B;AAAA,MAC/E,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,MAAM,aAAa,CAAC;AAExB,YAAU,MAAM;AACd,UAAM,cAAc,mBAAmB,MAAM,qBAAqB;AAElE,WAAO,MAAM,YAAY;AAAA,EAC3B,GAAG,CAAC,MAAM,qBAAqB,CAAC;AAEhC,QAAM,eAAmC,QAAQ,OAAO;AAAA,IACtD,GAAG;AAAA,EACL,IAAI,CAAC,SAAS,CAAC;AAEf,MAAI,CAAC,UAAU,UAAU;AACvB,WACE,oBAAC,cAAc,UAAd,EAAuB,OAAO,cAC7B,8BAAC,SAAI,aAAU,UAAS,aAAU,QAChC,8BAAC,UAAK,WAAU,WAAU,6CAA+B,GAC3D,GACF;AAAA,EAEJ;AAEA,SACE,oBAAC,cAAc,UAAd,EAAuB,OAAO,cAC5B,UACH;AAEJ;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/app-router/server/auth.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,CA0ChD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { adminTernSecureAuth, adminTernSecureDb } from '../../utils/admin-init';
|
|
2
2
|
export { ternSecureMiddleware } from './ternSecureMiddleware';
|
|
3
|
-
export {
|
|
3
|
+
export { verifyTernSessionCookie, createSessionCookie } from './sessionTernSecure';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app-router/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app-router/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -20,16 +20,12 @@ export declare function getIdToken(): Promise<{
|
|
|
20
20
|
userId: string;
|
|
21
21
|
}>;
|
|
22
22
|
export declare function setServerSession(token: string): Promise<void>;
|
|
23
|
-
export declare function
|
|
23
|
+
export declare function verifyTernIDToken(token: string): Promise<{
|
|
24
24
|
valid: boolean;
|
|
25
|
-
uid
|
|
26
|
-
error?:
|
|
27
|
-
} | {
|
|
28
|
-
error: unknown;
|
|
29
|
-
valid: boolean;
|
|
30
|
-
uid?: undefined;
|
|
25
|
+
uid?: any;
|
|
26
|
+
error?: any;
|
|
31
27
|
}>;
|
|
32
|
-
export declare function
|
|
28
|
+
export declare function verifyTernSessionCookie(session: string): Promise<{
|
|
33
29
|
valid: boolean;
|
|
34
30
|
uid?: any;
|
|
35
31
|
error?: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionTernSecure.d.ts","sourceRoot":"","sources":["../../../../src/app-router/server/sessionTernSecure.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,IAAI;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;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,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM;;;GAgBxD;AAID,wBAAsB,sBAAsB;;;GAkB3C;AAGD,wBAAsB,UAAU;;;GAkB/B;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,iBASjD;AAED,wBAAsB,
|
|
1
|
+
{"version":3,"file":"sessionTernSecure.d.ts","sourceRoot":"","sources":["../../../../src/app-router/server/sessionTernSecure.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,IAAI;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;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,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM;;;GAgBxD;AAID,wBAAsB,sBAAsB;;;GAkB3C;AAGD,wBAAsB,UAAU;;;GAkB/B;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,iBASjD;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAW1G;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAWlH"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { NextResponse } from 'next/server';
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
export interface TernSecureMiddlewareOptions {
|
|
3
|
+
publicPaths?: string[];
|
|
4
|
+
redirectTo?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function ternSecureMiddleware(options?: TernSecureMiddlewareOptions): (request: NextRequest) => Promise<NextResponse<unknown>>;
|
|
4
7
|
//# sourceMappingURL=ternSecureMiddleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ternSecureMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/app-router/server/ternSecureMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"ternSecureMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/app-router/server/ternSecureMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,aAGlC,WAAW,oCA4BtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TernSecureClientProvider.d.ts","sourceRoot":"","sources":["../../../src/boundary/TernSecureClientProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAExE,OAAO,EAAsB,IAAI,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"TernSecureClientProvider.d.ts","sourceRoot":"","sources":["../../../src/boundary/TernSecureClientProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAExE,OAAO,EAAsB,IAAI,EAAE,MAAM,eAAe,CAAA;AAGxD,UAAU,6BAA6B;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,6BAA6B,2CA0DlG"}
|