@tern-secure/nextjs 4.1.0 → 4.2.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 (79) hide show
  1. package/dist/cjs/app-router/{server → admin}/index.js +4 -10
  2. package/dist/cjs/app-router/admin/index.js.map +1 -0
  3. package/dist/cjs/app-router/{server → admin}/sessionTernSecure.js +14 -9
  4. package/dist/cjs/app-router/admin/sessionTernSecure.js.map +1 -0
  5. package/dist/cjs/components/sign-in.js +1 -1
  6. package/dist/cjs/components/sign-in.js.map +1 -1
  7. package/dist/cjs/components/sign-out-button.js +1 -1
  8. package/dist/cjs/components/sign-out-button.js.map +1 -1
  9. package/dist/cjs/components/sign-out.js +1 -1
  10. package/dist/cjs/components/sign-out.js.map +1 -1
  11. package/dist/cjs/{app-router/server → server}/auth.js +42 -28
  12. package/dist/cjs/server/auth.js.map +1 -0
  13. package/dist/cjs/server/edge-session.js +78 -0
  14. package/dist/cjs/server/edge-session.js.map +1 -0
  15. package/dist/cjs/server/index.js +36 -0
  16. package/dist/cjs/server/index.js.map +1 -0
  17. package/dist/cjs/server/jwt-edge.js +88 -0
  18. package/dist/cjs/server/jwt-edge.js.map +1 -0
  19. package/dist/cjs/server/jwt.js +141 -0
  20. package/dist/cjs/server/jwt.js.map +1 -0
  21. package/dist/cjs/server/ternSecureMiddleware.js +117 -0
  22. package/dist/cjs/server/ternSecureMiddleware.js.map +1 -0
  23. package/dist/esm/app-router/{server → admin}/index.js +1 -5
  24. package/dist/esm/app-router/admin/index.js.map +1 -0
  25. package/dist/esm/app-router/{server → admin}/sessionTernSecure.js +14 -9
  26. package/dist/esm/app-router/admin/sessionTernSecure.js.map +1 -0
  27. package/dist/esm/components/sign-in.js +1 -1
  28. package/dist/esm/components/sign-in.js.map +1 -1
  29. package/dist/esm/components/sign-out-button.js +1 -1
  30. package/dist/esm/components/sign-out-button.js.map +1 -1
  31. package/dist/esm/components/sign-out.js +1 -1
  32. package/dist/esm/components/sign-out.js.map +1 -1
  33. package/dist/esm/server/auth.js +59 -0
  34. package/dist/esm/server/auth.js.map +1 -0
  35. package/dist/esm/server/edge-session.js +54 -0
  36. package/dist/esm/server/edge-session.js.map +1 -0
  37. package/dist/esm/server/index.js +9 -0
  38. package/dist/esm/server/index.js.map +1 -0
  39. package/dist/esm/server/jwt-edge.js +64 -0
  40. package/dist/esm/server/jwt-edge.js.map +1 -0
  41. package/dist/esm/server/jwt.js +117 -0
  42. package/dist/esm/server/jwt.js.map +1 -0
  43. package/dist/esm/server/ternSecureMiddleware.js +91 -0
  44. package/dist/esm/server/ternSecureMiddleware.js.map +1 -0
  45. package/dist/types/app-router/{server → admin}/index.d.ts +1 -3
  46. package/dist/types/app-router/admin/index.d.ts.map +1 -0
  47. package/dist/types/app-router/{server → admin}/sessionTernSecure.d.ts +4 -1
  48. package/dist/types/app-router/admin/sessionTernSecure.d.ts.map +1 -0
  49. package/dist/types/server/auth.d.ts +19 -0
  50. package/dist/types/server/auth.d.ts.map +1 -0
  51. package/dist/types/server/edge-session.d.ts +15 -0
  52. package/dist/types/server/edge-session.d.ts.map +1 -0
  53. package/dist/types/server/index.d.ts +4 -0
  54. package/dist/types/server/index.d.ts.map +1 -0
  55. package/dist/types/server/jwt-edge.d.ts +16 -0
  56. package/dist/types/server/jwt-edge.d.ts.map +1 -0
  57. package/dist/types/server/jwt.d.ts +20 -0
  58. package/dist/types/server/jwt.d.ts.map +1 -0
  59. package/dist/types/server/ternSecureMiddleware.d.ts +20 -0
  60. package/dist/types/server/ternSecureMiddleware.d.ts.map +1 -0
  61. package/package.json +13 -5
  62. package/server/package.json +5 -0
  63. package/dist/cjs/app-router/server/auth.js.map +0 -1
  64. package/dist/cjs/app-router/server/index.js.map +0 -1
  65. package/dist/cjs/app-router/server/sessionTernSecure.js.map +0 -1
  66. package/dist/cjs/app-router/server/ternSecureMiddleware.js +0 -50
  67. package/dist/cjs/app-router/server/ternSecureMiddleware.js.map +0 -1
  68. package/dist/esm/app-router/server/auth.js +0 -47
  69. package/dist/esm/app-router/server/auth.js.map +0 -1
  70. package/dist/esm/app-router/server/index.js.map +0 -1
  71. package/dist/esm/app-router/server/sessionTernSecure.js.map +0 -1
  72. package/dist/esm/app-router/server/ternSecureMiddleware.js +0 -26
  73. package/dist/esm/app-router/server/ternSecureMiddleware.js.map +0 -1
  74. package/dist/types/app-router/server/auth.d.ts +0 -7
  75. package/dist/types/app-router/server/auth.d.ts.map +0 -1
  76. package/dist/types/app-router/server/index.d.ts.map +0 -1
  77. package/dist/types/app-router/server/sessionTernSecure.d.ts.map +0 -1
  78. package/dist/types/app-router/server/ternSecureMiddleware.d.ts +0 -7
  79. package/dist/types/app-router/server/ternSecureMiddleware.d.ts.map +0 -1
@@ -1,50 +0,0 @@
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 ternSecureMiddleware_exports = {};
20
- __export(ternSecureMiddleware_exports, {
21
- ternSecureMiddleware: () => ternSecureMiddleware
22
- });
23
- module.exports = __toCommonJS(ternSecureMiddleware_exports);
24
- var import_server = require("next/server");
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();
32
- }
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));
37
- }
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
- };
45
- }
46
- // Annotate the CommonJS export names for ESM import in node:
47
- 0 && (module.exports = {
48
- ternSecureMiddleware
49
- });
50
- //# sourceMappingURL=ternSecureMiddleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app-router/server/ternSecureMiddleware.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\nimport { auth } from './auth';\n\nexport interface TernSecureMiddlewareOptions {\n publicPaths?: string[];\n redirectTo?: string;\n}\n\nexport function ternSecureMiddleware(options: TernSecureMiddlewareOptions = {}) {\n const { publicPaths = [], redirectTo = '/login' } = options;\n\n return async function middleware(request: NextRequest) {\n const { pathname } = request.nextUrl;\n\n // Check if the path is public\n if (publicPaths.includes(pathname)) {\n return NextResponse.next();\n }\n\n try {\n const { userId, token, error } = await auth();\n\n if (error || !userId || !token) {\n // If there's no valid session, redirect to login\n return NextResponse.redirect(new URL(redirectTo, request.url));\n }\n\n // If there's a valid session, allow the request to proceed\n const response = NextResponse.next();\n \n // Optionally, you can set headers here if needed\n // response.headers.set('X-User-ID', userId);\n\n return response;\n } catch (error) {\n console.error('Error in ternSecureMiddleware:', error);\n return NextResponse.redirect(new URL(redirectTo, request.url));\n }\n };\n}\n\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":[]}
@@ -1,47 +0,0 @@
1
- "use server";
2
- import { cookies } from "next/headers";
3
- import { verifyTernIdToken, verifyTernSessionCookie } from "./sessionTernSecure";
4
- async function auth() {
5
- var _a, _b, _c;
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: (_c = tokenResult.uid) != null ? _c : null,
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
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app-router/server/auth.ts"],"sourcesContent":["'use server'\n\nimport { cookies } from 'next/headers';\nimport { verifyTernIdToken, verifyTernSessionCookie } from './sessionTernSecure';\n\nexport interface AuthResult {\n userId: string | null;\n token: string | null;\n error: Error | null;\n}\n\nexport async function auth(): Promise<AuthResult> {\n try {\n const cookieStore = await cookies();\n const sessionCookie = cookieStore.get('_session_cookie')?.value;\n if (sessionCookie) {\n const sessionResult = await verifyTernSessionCookie(sessionCookie);\n if (sessionResult.valid) {\n return {\n userId: sessionResult.uid,\n token: sessionCookie,\n error: null\n };\n }\n }\n\n // If session cookie is not present or invalid, try the ID token\n const idToken = cookieStore.get('_session_token')?.value;\n if (idToken) {\n const tokenResult = await verifyTernIdToken(idToken);\n if (tokenResult.valid) {\n return {\n userId: tokenResult.uid ?? null,\n token: idToken,\n error: null\n };\n }\n }\n\n /// If both checks fail, return null values\n return {\n userId: null,\n token: null,\n error: new Error('No valid session or token found')\n };\n } catch (error) {\n console.error('Error in auth function:', error);\n return {\n userId: null,\n token: null,\n error: error instanceof Error ? error : new Error('An unknown error occurred')\n };\n }\n}\n\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,SAAQ,iBAAY,QAAZ,YAAmB;AAAA,UAC3B,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 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app-router/server/index.ts"],"sourcesContent":["export { adminTernSecureAuth, adminTernSecureDb } from '../../utils/admin-init'\nexport { ternSecureMiddleware } from './ternSecureMiddleware'\nexport { verifyTernSessionCookie, createSessionCookie } from './sessionTernSecure'\nexport { auth } from './auth'"],"mappings":"AAAA,SAAS,qBAAqB,yBAAyB;AACvD,SAAS,4BAA4B;AACrC,SAAS,yBAAyB,2BAA2B;AAC7D,SAAS,YAAY;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app-router/server/sessionTernSecure.ts"],"sourcesContent":["'use server'\n\nimport { cookies } from 'next/headers';\nimport { adminTernSecureAuth as adminAuth } from '../../utils/admin-init';\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\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 const cookieStore = await cookies();\n cookieStore.set('_session', token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'strict',\n maxAge: 60 * 60, // 1 hour\n path: '/',\n });\n }\n\n export async function verifyTernIdToken(token: string): Promise<{ valid: boolean; uid?: string; error?: string }> {\n try {\n const decodedToken = await adminAuth.verifyIdToken(token, true);\n return { valid: true, uid: decodedToken.uid };\n } catch (error) {\n if (error instanceof Error) {\n const firebaseError = error as FirebaseAuthError;\n if (error.name === 'FirebaseAuthError') {\n // Handle specific Firebase Auth errors\n switch (firebaseError.code) {\n case 'auth/id-token-expired':\n return { valid: false, error: 'Token has expired' };\n case 'auth/id-token-revoked':\n return { valid: false, error: 'Token has been revoked' };\n case 'auth/user-disabled':\n return { valid: false, error: 'User account has been disabled' };\n default:\n return { valid: false, error: 'Invalid token' };\n }\n }\n }\n return { valid: false, error: 'Error verifying token' };\n }\n }\n \n\n export async function verifyTernSessionCookie(session: string): Promise<{ valid: boolean; uid?: any; error?: any }>{\n try {\n const res = await adminAuth.verifySessionCookie(session, true);\n if (res) {\n return { valid: true, uid: res.uid };\n } else {\n return { valid: false, error: 'Invalid session'};\n }\n } catch (error) {\n return {error: error, valid: false}\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,26 +0,0 @@
1
- import { NextResponse } from "next/server";
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();
9
- }
10
- try {
11
- const { userId, token, error } = await auth();
12
- if (error || !userId || !token) {
13
- return NextResponse.redirect(new URL(redirectTo, request.url));
14
- }
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
- };
22
- }
23
- export {
24
- ternSecureMiddleware
25
- };
26
- //# sourceMappingURL=ternSecureMiddleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app-router/server/ternSecureMiddleware.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\nimport { auth } from './auth';\n\nexport interface TernSecureMiddlewareOptions {\n publicPaths?: string[];\n redirectTo?: string;\n}\n\nexport function ternSecureMiddleware(options: TernSecureMiddlewareOptions = {}) {\n const { publicPaths = [], redirectTo = '/login' } = options;\n\n return async function middleware(request: NextRequest) {\n const { pathname } = request.nextUrl;\n\n // Check if the path is public\n if (publicPaths.includes(pathname)) {\n return NextResponse.next();\n }\n\n try {\n const { userId, token, error } = await auth();\n\n if (error || !userId || !token) {\n // If there's no valid session, redirect to login\n return NextResponse.redirect(new URL(redirectTo, request.url));\n }\n\n // If there's a valid session, allow the request to proceed\n const response = NextResponse.next();\n \n // Optionally, you can set headers here if needed\n // response.headers.set('X-User-ID', userId);\n\n return response;\n } catch (error) {\n console.error('Error in ternSecureMiddleware:', error);\n return NextResponse.redirect(new URL(redirectTo, request.url));\n }\n };\n}\n\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":[]}
@@ -1,7 +0,0 @@
1
- export interface AuthResult {
2
- userId: string | null;
3
- token: string | null;
4
- error: Error | null;
5
- }
6
- export declare function auth(): Promise<AuthResult>;
7
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
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 +0,0 @@
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;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sessionTernSecure.d.ts","sourceRoot":"","sources":["../../../../src/app-router/server/sessionTernSecure.ts"],"names":[],"mappings":"AASA,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,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,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBhH;AAGD,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;AAGD,wBAAsB,kBAAkB;;;GAwBvC"}
@@ -1,7 +0,0 @@
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>>;
7
- //# sourceMappingURL=ternSecureMiddleware.d.ts.map
@@ -1 +0,0 @@
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"}