@tern-secure/nextjs 5.1.8 → 5.1.9
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/__tests__/gemini_fnTernSecureNextHandler.bench.js +31 -0
- package/dist/cjs/__tests__/gemini_fnTernSecureNextHandler.bench.js.map +1 -0
- package/dist/cjs/app-router/admin/actions.js +62 -0
- package/dist/cjs/app-router/admin/actions.js.map +1 -0
- package/dist/cjs/app-router/admin/constants.js +29 -0
- package/dist/cjs/app-router/admin/constants.js.map +1 -0
- package/dist/cjs/app-router/admin/fnValidators.js +295 -0
- package/dist/cjs/app-router/admin/fnValidators.js.map +1 -0
- package/dist/cjs/app-router/admin/index.js +16 -3
- package/dist/cjs/app-router/admin/index.js.map +1 -1
- package/dist/cjs/app-router/admin/responses.js +120 -0
- package/dist/cjs/app-router/admin/responses.js.map +1 -0
- package/dist/cjs/app-router/admin/sessionHandlers.js +167 -0
- package/dist/cjs/app-router/admin/sessionHandlers.js.map +1 -0
- package/dist/cjs/app-router/admin/ternsecureNextjsHandler.js +84 -0
- package/dist/cjs/app-router/admin/ternsecureNextjsHandler.js.map +1 -0
- package/dist/cjs/app-router/admin/types.js +127 -0
- package/dist/cjs/app-router/admin/types.js.map +1 -0
- package/dist/cjs/app-router/admin/utils.js +107 -0
- package/dist/cjs/app-router/admin/utils.js.map +1 -0
- package/dist/cjs/app-router/admin/validators.js +217 -0
- package/dist/cjs/app-router/admin/validators.js.map +1 -0
- package/dist/cjs/app-router/client/TernSecureProvider.js +2 -6
- package/dist/cjs/app-router/client/TernSecureProvider.js.map +1 -1
- package/dist/cjs/app-router/server/auth.js +100 -0
- package/dist/cjs/app-router/server/auth.js.map +1 -0
- package/dist/cjs/app-router/server/utils.js +87 -0
- package/dist/cjs/app-router/server/utils.js.map +1 -0
- package/dist/cjs/boundary/components.js +4 -7
- package/dist/cjs/boundary/components.js.map +1 -1
- package/dist/cjs/{components/uiComponents.js → constants.js} +17 -18
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.js +4 -9
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server/constant.js +38 -0
- package/dist/cjs/server/constant.js.map +1 -0
- package/dist/cjs/server/edge-session.js +118 -24
- package/dist/cjs/server/edge-session.js.map +1 -1
- package/dist/cjs/server/headers-utils.js +70 -0
- package/dist/cjs/server/headers-utils.js.map +1 -0
- package/dist/cjs/server/index.js +8 -6
- package/dist/cjs/server/index.js.map +1 -1
- package/dist/cjs/server/jwt-edge.js +47 -19
- package/dist/cjs/server/jwt-edge.js.map +1 -1
- package/dist/cjs/server/jwt.js +11 -4
- package/dist/cjs/server/jwt.js.map +1 -1
- package/dist/cjs/server/nextErrors.js +131 -0
- package/dist/cjs/server/nextErrors.js.map +1 -0
- package/dist/cjs/server/nextFetcher.js +31 -0
- package/dist/cjs/server/nextFetcher.js.map +1 -0
- package/dist/cjs/server/node/SessionTernSecure.js +55 -0
- package/dist/cjs/server/node/SessionTernSecure.js.map +1 -0
- package/dist/cjs/server/{auth.js → node/auth.js} +11 -20
- package/dist/cjs/server/node/auth.js.map +1 -0
- package/dist/cjs/server/node/index.js +40 -0
- package/dist/cjs/server/node/index.js.map +1 -0
- package/dist/cjs/server/node/node-session.js +60 -0
- package/dist/cjs/server/node/node-session.js.map +1 -0
- package/dist/cjs/server/node/ternSecureNodeMiddleware.js +182 -0
- package/dist/cjs/server/node/ternSecureNodeMiddleware.js.map +1 -0
- package/dist/cjs/server/protect.js +90 -0
- package/dist/cjs/server/protect.js.map +1 -0
- package/dist/cjs/server/redirect.js +84 -0
- package/dist/cjs/server/redirect.js.map +1 -0
- package/dist/cjs/server/routeMatcher.js +36 -0
- package/dist/cjs/server/routeMatcher.js.map +1 -0
- package/dist/cjs/server/sdk-versions.js +43 -0
- package/dist/cjs/server/sdk-versions.js.map +1 -0
- package/dist/cjs/server/session-store.js.map +1 -1
- package/dist/cjs/server/ternSecureEdgeMiddleware.js +298 -0
- package/dist/cjs/server/ternSecureEdgeMiddleware.js.map +1 -0
- package/dist/cjs/server/ternSecureFireMiddleware.js +192 -0
- package/dist/cjs/server/ternSecureFireMiddleware.js.map +1 -0
- package/dist/cjs/server/types.js.map +1 -1
- package/dist/cjs/server/utils.js +115 -2
- package/dist/cjs/server/utils.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/NextCookieAdapter.js +44 -0
- package/dist/cjs/utils/NextCookieAdapter.js.map +1 -0
- package/dist/cjs/utils/allNextProviderProps.js +10 -24
- package/dist/cjs/utils/allNextProviderProps.js.map +1 -1
- package/dist/cjs/utils/config.js +38 -2
- package/dist/cjs/utils/config.js.map +1 -1
- package/dist/cjs/utils/construct.js.map +1 -1
- package/dist/cjs/utils/fireconfig.js +38 -0
- package/dist/cjs/utils/fireconfig.js.map +1 -0
- package/dist/cjs/utils/logger.js +101 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/cjs/utils/redis.js +33 -0
- package/dist/cjs/utils/redis.js.map +1 -0
- package/dist/cjs/utils/response.js +38 -0
- package/dist/cjs/utils/response.js.map +1 -0
- package/dist/cjs/utils/serverRedirectAuth.js +39 -0
- package/dist/cjs/utils/serverRedirectAuth.js.map +1 -0
- package/dist/cjs/utils/ternsecure-sw.js +1 -1
- package/dist/cjs/utils/ternsecure-sw.js.map +1 -1
- package/dist/cjs/utils/withLogger.js +82 -0
- package/dist/cjs/utils/withLogger.js.map +1 -0
- package/dist/esm/__tests__/gemini_fnTernSecureNextHandler.bench.js +30 -0
- package/dist/esm/__tests__/gemini_fnTernSecureNextHandler.bench.js.map +1 -0
- package/dist/esm/app-router/admin/actions.js +40 -0
- package/dist/esm/app-router/admin/actions.js.map +1 -0
- package/dist/esm/app-router/admin/constants.js +5 -0
- package/dist/esm/app-router/admin/constants.js.map +1 -0
- package/dist/esm/app-router/admin/fnValidators.js +270 -0
- package/dist/esm/app-router/admin/fnValidators.js.map +1 -0
- package/dist/esm/app-router/admin/index.js +16 -2
- package/dist/esm/app-router/admin/index.js.map +1 -1
- package/dist/esm/app-router/admin/responses.js +93 -0
- package/dist/esm/app-router/admin/responses.js.map +1 -0
- package/dist/esm/app-router/admin/sessionHandlers.js +131 -0
- package/dist/esm/app-router/admin/sessionHandlers.js.map +1 -0
- package/dist/esm/app-router/admin/ternsecureNextjsHandler.js +62 -0
- package/dist/esm/app-router/admin/ternsecureNextjsHandler.js.map +1 -0
- package/dist/esm/app-router/admin/types.js +98 -0
- package/dist/esm/app-router/admin/types.js.map +1 -0
- package/dist/esm/app-router/admin/utils.js +80 -0
- package/dist/esm/app-router/admin/utils.js.map +1 -0
- package/dist/esm/app-router/admin/validators.js +189 -0
- package/dist/esm/app-router/admin/validators.js.map +1 -0
- package/dist/esm/app-router/client/TernSecureProvider.js +2 -6
- package/dist/esm/app-router/client/TernSecureProvider.js.map +1 -1
- package/dist/esm/app-router/server/auth.js +81 -0
- package/dist/esm/app-router/server/auth.js.map +1 -0
- package/dist/esm/app-router/server/utils.js +51 -0
- package/dist/esm/app-router/server/utils.js.map +1 -0
- package/dist/esm/boundary/components.js +4 -7
- package/dist/esm/boundary/components.js.map +1 -1
- package/dist/esm/constants.js +17 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.js +5 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server/constant.js +11 -0
- package/dist/esm/server/constant.js.map +1 -0
- package/dist/esm/server/edge-session.js +113 -22
- package/dist/esm/server/edge-session.js.map +1 -1
- package/dist/esm/server/headers-utils.js +41 -0
- package/dist/esm/server/headers-utils.js.map +1 -0
- package/dist/esm/server/index.js +9 -3
- package/dist/esm/server/index.js.map +1 -1
- package/dist/esm/server/jwt-edge.js +48 -20
- package/dist/esm/server/jwt-edge.js.map +1 -1
- package/dist/esm/server/jwt.js +12 -5
- package/dist/esm/server/jwt.js.map +1 -1
- package/dist/esm/server/nextErrors.js +97 -0
- package/dist/esm/server/nextErrors.js.map +1 -0
- package/dist/esm/server/nextFetcher.js +7 -0
- package/dist/esm/server/nextFetcher.js.map +1 -0
- package/dist/esm/server/node/SessionTernSecure.js +31 -0
- package/dist/esm/server/node/SessionTernSecure.js.map +1 -0
- package/dist/esm/server/{auth.js → node/auth.js} +11 -20
- package/dist/esm/server/node/auth.js.map +1 -0
- package/dist/esm/server/node/index.js +19 -0
- package/dist/esm/server/node/index.js.map +1 -0
- package/dist/esm/server/node/node-session.js +36 -0
- package/dist/esm/server/node/node-session.js.map +1 -0
- package/dist/esm/server/node/ternSecureNodeMiddleware.js +165 -0
- package/dist/esm/server/node/ternSecureNodeMiddleware.js.map +1 -0
- package/dist/esm/server/protect.js +66 -0
- package/dist/esm/server/protect.js.map +1 -0
- package/dist/esm/server/redirect.js +60 -0
- package/dist/esm/server/redirect.js.map +1 -0
- package/dist/esm/server/routeMatcher.js +12 -0
- package/dist/esm/server/routeMatcher.js.map +1 -0
- package/dist/esm/server/sdk-versions.js +8 -0
- package/dist/esm/server/sdk-versions.js.map +1 -0
- package/dist/esm/server/session-store.js.map +1 -1
- package/dist/esm/server/ternSecureEdgeMiddleware.js +286 -0
- package/dist/esm/server/ternSecureEdgeMiddleware.js.map +1 -0
- package/dist/esm/server/ternSecureFireMiddleware.js +179 -0
- package/dist/esm/server/ternSecureFireMiddleware.js.map +1 -0
- package/dist/esm/server/utils.js +99 -1
- package/dist/esm/server/utils.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/NextCookieAdapter.js +20 -0
- package/dist/esm/utils/NextCookieAdapter.js.map +1 -0
- package/dist/esm/utils/allNextProviderProps.js +10 -24
- package/dist/esm/utils/allNextProviderProps.js.map +1 -1
- package/dist/esm/utils/config.js +34 -1
- package/dist/esm/utils/config.js.map +1 -1
- package/dist/esm/utils/construct.js +1 -1
- package/dist/esm/utils/construct.js.map +1 -1
- package/dist/esm/utils/fireconfig.js +14 -0
- package/dist/esm/utils/fireconfig.js.map +1 -0
- package/dist/esm/utils/logger.js +74 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/redis.js +9 -0
- package/dist/esm/utils/redis.js.map +1 -0
- package/dist/esm/utils/response.js +13 -0
- package/dist/esm/utils/response.js.map +1 -0
- package/dist/esm/utils/serverRedirectAuth.js +17 -0
- package/dist/esm/utils/serverRedirectAuth.js.map +1 -0
- package/dist/esm/utils/ternsecure-sw.js +1 -1
- package/dist/esm/utils/ternsecure-sw.js.map +1 -1
- package/dist/esm/utils/withLogger.js +57 -0
- package/dist/esm/utils/withLogger.js.map +1 -0
- package/dist/types/app-router/admin/actions.d.ts +19 -0
- package/dist/types/app-router/admin/actions.d.ts.map +1 -0
- package/dist/types/app-router/admin/constants.d.ts +2 -0
- package/dist/types/app-router/admin/constants.d.ts.map +1 -0
- package/dist/types/app-router/admin/fnValidators.d.ts +35 -0
- package/dist/types/app-router/admin/fnValidators.d.ts.map +1 -0
- package/dist/types/app-router/admin/index.d.ts +3 -1
- package/dist/types/app-router/admin/index.d.ts.map +1 -1
- package/dist/types/app-router/admin/responses.d.ts +28 -0
- package/dist/types/app-router/admin/responses.d.ts.map +1 -0
- package/dist/types/app-router/admin/sessionHandlers.d.ts +26 -0
- package/dist/types/app-router/admin/sessionHandlers.d.ts.map +1 -0
- package/dist/types/app-router/admin/ternsecureNextjsHandler.d.ts +7 -0
- package/dist/types/app-router/admin/ternsecureNextjsHandler.d.ts.map +1 -0
- package/dist/types/app-router/admin/types.d.ts +105 -0
- package/dist/types/app-router/admin/types.d.ts.map +1 -0
- package/dist/types/app-router/admin/utils.d.ts +53 -0
- package/dist/types/app-router/admin/utils.d.ts.map +1 -0
- package/dist/types/app-router/admin/validators.d.ts +46 -0
- package/dist/types/app-router/admin/validators.d.ts.map +1 -0
- package/dist/types/app-router/client/TernSecureProvider.d.ts.map +1 -1
- package/dist/types/app-router/server/auth.d.ts +26 -0
- package/dist/types/app-router/server/auth.d.ts.map +1 -0
- package/dist/types/app-router/server/utils.d.ts +5 -0
- package/dist/types/app-router/server/utils.d.ts.map +1 -0
- package/dist/types/boundary/components.d.ts +1 -1
- package/dist/types/boundary/components.d.ts.map +1 -1
- package/dist/types/constants.d.ts +11 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/errors.d.ts +1 -1
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/server/constant.d.ts +5 -0
- package/dist/types/server/constant.d.ts.map +1 -0
- package/dist/types/server/edge-session.d.ts +13 -1
- package/dist/types/server/edge-session.d.ts.map +1 -1
- package/dist/types/server/headers-utils.d.ts +10 -0
- package/dist/types/server/headers-utils.d.ts.map +1 -0
- package/dist/types/server/index.d.ts +6 -3
- package/dist/types/server/index.d.ts.map +1 -1
- package/dist/types/server/jwt-edge.d.ts +12 -18
- package/dist/types/server/jwt-edge.d.ts.map +1 -1
- package/dist/types/server/jwt.d.ts +12 -18
- package/dist/types/server/jwt.d.ts.map +1 -1
- package/dist/types/server/nextErrors.d.ts +54 -0
- package/dist/types/server/nextErrors.d.ts.map +1 -0
- package/dist/types/server/nextFetcher.d.ts +26 -0
- package/dist/types/server/nextFetcher.d.ts.map +1 -0
- package/dist/types/server/node/SessionTernSecure.d.ts +3 -0
- package/dist/types/server/node/SessionTernSecure.d.ts.map +1 -0
- package/dist/types/server/{auth.d.ts → node/auth.d.ts} +5 -5
- package/dist/types/server/node/auth.d.ts.map +1 -0
- package/dist/types/server/node/index.d.ts +3 -0
- package/dist/types/server/node/index.d.ts.map +1 -0
- package/dist/types/server/node/node-session.d.ts +4 -0
- package/dist/types/server/node/node-session.d.ts.map +1 -0
- package/dist/types/server/node/ternSecureNodeMiddleware.d.ts +54 -0
- package/dist/types/server/node/ternSecureNodeMiddleware.d.ts.map +1 -0
- package/dist/types/server/protect.d.ts +26 -0
- package/dist/types/server/protect.d.ts.map +1 -0
- package/dist/types/server/redirect.d.ts +20 -0
- package/dist/types/server/redirect.d.ts.map +1 -0
- package/dist/types/server/routeMatcher.d.ts +13 -0
- package/dist/types/server/routeMatcher.d.ts.map +1 -0
- package/dist/types/server/sdk-versions.d.ts +8 -0
- package/dist/types/server/sdk-versions.d.ts.map +1 -0
- package/dist/types/server/session-store.d.ts.map +1 -1
- package/dist/types/server/ternSecureEdgeMiddleware.d.ts +47 -0
- package/dist/types/server/ternSecureEdgeMiddleware.d.ts.map +1 -0
- package/dist/types/server/ternSecureFireMiddleware.d.ts +47 -0
- package/dist/types/server/ternSecureFireMiddleware.d.ts.map +1 -0
- package/dist/types/server/types.d.ts +16 -2
- package/dist/types/server/types.d.ts.map +1 -1
- package/dist/types/server/utils.d.ts +7 -0
- package/dist/types/server/utils.d.ts.map +1 -1
- package/dist/types/types.d.ts +33 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/NextCookieAdapter.d.ts +9 -0
- package/dist/types/utils/NextCookieAdapter.d.ts.map +1 -0
- package/dist/types/utils/allNextProviderProps.d.ts +1 -1
- package/dist/types/utils/allNextProviderProps.d.ts.map +1 -1
- package/dist/types/utils/config.d.ts +17 -1
- package/dist/types/utils/config.d.ts.map +1 -1
- package/dist/types/utils/fireconfig.d.ts +4 -0
- package/dist/types/utils/fireconfig.d.ts.map +1 -0
- package/dist/types/utils/logger.d.ts +27 -0
- package/dist/types/utils/logger.d.ts.map +1 -0
- package/dist/types/utils/redis.d.ts +8 -0
- package/dist/types/utils/redis.d.ts.map +1 -0
- package/dist/types/utils/response.d.ts +3 -0
- package/dist/types/utils/response.d.ts.map +1 -0
- package/dist/types/utils/serverRedirectAuth.d.ts +6 -0
- package/dist/types/utils/serverRedirectAuth.d.ts.map +1 -0
- package/dist/types/utils/withLogger.d.ts +17 -0
- package/dist/types/utils/withLogger.d.ts.map +1 -0
- package/package.json +21 -7
- package/server/node/package.json +5 -0
- package/server/package.json +5 -0
- package/dist/cjs/app-router/admin/sessionHandler.js +0 -74
- package/dist/cjs/app-router/admin/sessionHandler.js.map +0 -1
- package/dist/cjs/app-router/client/actions.js +0 -4
- package/dist/cjs/app-router/client/actions.js.map +0 -1
- package/dist/cjs/components/uiComponents.js.map +0 -1
- package/dist/cjs/server/auth.js.map +0 -1
- package/dist/cjs/server/ternSecureMiddleware.js +0 -95
- package/dist/cjs/server/ternSecureMiddleware.js.map +0 -1
- package/dist/cjs/utils/tern-ui-script.js +0 -78
- package/dist/cjs/utils/tern-ui-script.js.map +0 -1
- package/dist/esm/app-router/admin/sessionHandler.js +0 -50
- package/dist/esm/app-router/admin/sessionHandler.js.map +0 -1
- package/dist/esm/app-router/client/actions.js +0 -3
- package/dist/esm/app-router/client/actions.js.map +0 -1
- package/dist/esm/components/uiComponents.js +0 -21
- package/dist/esm/components/uiComponents.js.map +0 -1
- package/dist/esm/server/auth.js.map +0 -1
- package/dist/esm/server/ternSecureMiddleware.js +0 -69
- package/dist/esm/server/ternSecureMiddleware.js.map +0 -1
- package/dist/esm/utils/tern-ui-script.js +0 -44
- package/dist/esm/utils/tern-ui-script.js.map +0 -1
- package/dist/types/app-router/admin/sessionHandler.d.ts +0 -3
- package/dist/types/app-router/admin/sessionHandler.d.ts.map +0 -1
- package/dist/types/app-router/client/actions.d.ts +0 -2
- package/dist/types/app-router/client/actions.d.ts.map +0 -1
- package/dist/types/components/uiComponents.d.ts +0 -6
- package/dist/types/components/uiComponents.d.ts.map +0 -1
- package/dist/types/server/auth.d.ts.map +0 -1
- package/dist/types/server/ternSecureMiddleware.d.ts +0 -20
- package/dist/types/server/ternSecureMiddleware.d.ts.map +0 -1
- package/dist/types/utils/tern-ui-script.d.ts +0 -9
- package/dist/types/utils/tern-ui-script.d.ts.map +0 -1
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var sessionHandlers_exports = {};
|
|
30
|
+
__export(sessionHandlers_exports, {
|
|
31
|
+
SessionEndpointHandler: () => SessionEndpointHandler,
|
|
32
|
+
SessionGetHandler: () => SessionGetHandler,
|
|
33
|
+
SessionPostHandler: () => SessionPostHandler
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(sessionHandlers_exports);
|
|
36
|
+
var import_admin = require("@tern-secure/backend/admin");
|
|
37
|
+
var import_jwt = require("@tern-secure/backend/jwt");
|
|
38
|
+
var import_NextCookieAdapter = require("../../utils/NextCookieAdapter");
|
|
39
|
+
var import_responses = require("./responses");
|
|
40
|
+
var import_validators = require("./validators");
|
|
41
|
+
class SessionGetHandler {
|
|
42
|
+
static async handle(request, subEndpoint, _config) {
|
|
43
|
+
switch (subEndpoint) {
|
|
44
|
+
case "verify":
|
|
45
|
+
return this.handleVerify(request);
|
|
46
|
+
default:
|
|
47
|
+
return import_responses.HttpResponseHelper.createNotFoundResponse();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
static async handleVerify(request) {
|
|
51
|
+
try {
|
|
52
|
+
const sessionCookie = request.cookies.get("_session_cookie")?.value;
|
|
53
|
+
if (!sessionCookie) {
|
|
54
|
+
return import_responses.SessionResponseHelper.createUnauthorizedResponse();
|
|
55
|
+
}
|
|
56
|
+
const decodedSession = (0, import_jwt.ternDecodeJwtUnguarded)(sessionCookie);
|
|
57
|
+
if (decodedSession.errors) {
|
|
58
|
+
return import_responses.SessionResponseHelper.createUnauthorizedResponse();
|
|
59
|
+
}
|
|
60
|
+
return import_responses.SessionResponseHelper.createVerificationResponse(decodedSession);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
return import_responses.SessionResponseHelper.createUnauthorizedResponse();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
class SessionPostHandler {
|
|
67
|
+
static async handle(request, subEndpoint, _config) {
|
|
68
|
+
const cookieStore = new import_NextCookieAdapter.NextCookieStore();
|
|
69
|
+
const { idToken, csrfToken, error } = await import_validators.RequestValidator.validateSessionRequest(request);
|
|
70
|
+
if (error) return error;
|
|
71
|
+
const csrfCookieValue = request.cookies.get("_session_terncf")?.value;
|
|
72
|
+
const csrfValidationError = import_validators.CsrfValidator.validate(csrfToken || "", csrfCookieValue);
|
|
73
|
+
if (csrfValidationError) return csrfValidationError;
|
|
74
|
+
const options = {
|
|
75
|
+
tenantId: _config.tenantId
|
|
76
|
+
};
|
|
77
|
+
switch (subEndpoint) {
|
|
78
|
+
case "createsession":
|
|
79
|
+
return this.handleCreateSession(options, idToken, cookieStore);
|
|
80
|
+
case "refresh":
|
|
81
|
+
return this.handleRefreshSession(request, cookieStore);
|
|
82
|
+
case "revoke":
|
|
83
|
+
return this.handleRevokeSession(cookieStore);
|
|
84
|
+
default:
|
|
85
|
+
return import_responses.HttpResponseHelper.createSubEndpointNotSupportedResponse();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
static async handleCreateSession(options, idToken, cookieStore) {
|
|
89
|
+
const validationError = import_validators.RequestValidator.validateIdToken(idToken);
|
|
90
|
+
if (validationError) return validationError;
|
|
91
|
+
if (!idToken) {
|
|
92
|
+
return (0, import_responses.createApiErrorResponse)("ID_TOKEN_REQUIRED", "ID token is required", 400);
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const res = await (0, import_admin.createSessionCookie)(idToken, cookieStore, options);
|
|
96
|
+
return import_responses.SessionResponseHelper.createSessionCreationResponse(res);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
return (0, import_responses.createApiErrorResponse)("SESSION_CREATION_FAILED", "Session creation failed", 500);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
static async handleRefreshSession(request, cookieStore) {
|
|
102
|
+
const currentSessionCookie = request.cookies.get("__session")?.value;
|
|
103
|
+
if (!currentSessionCookie) {
|
|
104
|
+
return (0, import_responses.createApiErrorResponse)("NO_SESSION", "No session to refresh", 401);
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const decodedSession = (0, import_jwt.ternDecodeJwtUnguarded)(currentSessionCookie);
|
|
108
|
+
if (decodedSession.errors) {
|
|
109
|
+
return (0, import_responses.createApiErrorResponse)("INVALID_SESSION", "Invalid session for refresh", 401);
|
|
110
|
+
}
|
|
111
|
+
const refreshRes = await (0, import_admin.createSessionCookie)(
|
|
112
|
+
decodedSession.data?.payload?.sub || "",
|
|
113
|
+
cookieStore
|
|
114
|
+
);
|
|
115
|
+
return import_responses.SessionResponseHelper.createRefreshResponse(refreshRes);
|
|
116
|
+
} catch (error) {
|
|
117
|
+
return (0, import_responses.createApiErrorResponse)("REFRESH_FAILED", "Session refresh failed", 500);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
static async handleRevokeSession(cookieStore) {
|
|
121
|
+
const res = await (0, import_admin.clearSessionCookie)(cookieStore);
|
|
122
|
+
return import_responses.SessionResponseHelper.createRevokeResponse(res);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
class SessionEndpointHandler {
|
|
126
|
+
static async handle(request, method, subEndpoint, config) {
|
|
127
|
+
const sessionsConfig = config.endpoints.sessions;
|
|
128
|
+
if (!subEndpoint) {
|
|
129
|
+
return (0, import_responses.createApiErrorResponse)("SUB_ENDPOINT_REQUIRED", "Session sub-endpoint required", 400);
|
|
130
|
+
}
|
|
131
|
+
const subEndpointConfig = sessionsConfig?.subEndpoints?.[subEndpoint];
|
|
132
|
+
const subEndpointValidation = this.validateSubEndpoint(subEndpoint, subEndpointConfig, method);
|
|
133
|
+
if (subEndpointValidation) return subEndpointValidation;
|
|
134
|
+
if (subEndpointConfig?.security) {
|
|
135
|
+
const { SecurityValidator } = await import("./validators.js");
|
|
136
|
+
const securityResult = await SecurityValidator.validate(request, subEndpointConfig.security);
|
|
137
|
+
if (securityResult) return securityResult;
|
|
138
|
+
}
|
|
139
|
+
switch (method) {
|
|
140
|
+
case "GET":
|
|
141
|
+
return SessionGetHandler.handle(request, subEndpoint, config);
|
|
142
|
+
case "POST":
|
|
143
|
+
return SessionPostHandler.handle(request, subEndpoint, config);
|
|
144
|
+
default:
|
|
145
|
+
return import_responses.HttpResponseHelper.createMethodNotAllowedResponse();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
static validateSubEndpoint(subEndpoint, subEndpointConfig, method) {
|
|
149
|
+
if (!subEndpoint) {
|
|
150
|
+
return (0, import_responses.createApiErrorResponse)("SUB_ENDPOINT_REQUIRED", "Session sub-endpoint required", 400);
|
|
151
|
+
}
|
|
152
|
+
if (!subEndpointConfig || !subEndpointConfig.enabled) {
|
|
153
|
+
return (0, import_responses.createApiErrorResponse)("ENDPOINT_NOT_FOUND", "Endpoint not found", 404);
|
|
154
|
+
}
|
|
155
|
+
if (!subEndpointConfig.methods?.includes(method)) {
|
|
156
|
+
return (0, import_responses.createApiErrorResponse)("METHOD_NOT_ALLOWED", "Method not allowed", 405);
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
162
|
+
0 && (module.exports = {
|
|
163
|
+
SessionEndpointHandler,
|
|
164
|
+
SessionGetHandler,
|
|
165
|
+
SessionPostHandler
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=sessionHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/admin/sessionHandlers.ts"],"sourcesContent":["import type { RequestOptions } from '@tern-secure/backend';\nimport { clearSessionCookie, createSessionCookie } from '@tern-secure/backend/admin';\nimport { ternDecodeJwtUnguarded } from '@tern-secure/backend/jwt';\nimport type { NextRequest, NextResponse } from 'next/server';\n\nimport { NextCookieStore } from '../../utils/NextCookieAdapter';\nimport { createApiErrorResponse, HttpResponseHelper, SessionResponseHelper } from './responses';\nimport type {\n SessionSubEndpoint,\n TernSecureHandlerOptions,\n TernSecureInternalHandlerConfig,\n} from './types';\nimport { CsrfValidator, RequestValidator } from './validators';\n\n/**\n * Session GET request handlers\n */\nexport class SessionGetHandler {\n static async handle(\n request: NextRequest,\n subEndpoint: SessionSubEndpoint,\n _config: Required<TernSecureHandlerOptions>,\n ): Promise<NextResponse> {\n switch (subEndpoint) {\n case 'verify':\n return this.handleVerify(request);\n default:\n return HttpResponseHelper.createNotFoundResponse();\n }\n }\n\n private static async handleVerify(request: NextRequest): Promise<NextResponse> {\n try {\n const sessionCookie = request.cookies.get('_session_cookie')?.value;\n if (!sessionCookie) {\n return SessionResponseHelper.createUnauthorizedResponse();\n }\n\n const decodedSession = ternDecodeJwtUnguarded(sessionCookie);\n if (decodedSession.errors) {\n return SessionResponseHelper.createUnauthorizedResponse();\n }\n\n return SessionResponseHelper.createVerificationResponse(decodedSession);\n } catch (error) {\n return SessionResponseHelper.createUnauthorizedResponse();\n }\n }\n}\n\n/**\n * Session POST request handlers\n */\nexport class SessionPostHandler {\n static async handle(\n request: NextRequest,\n subEndpoint: SessionSubEndpoint,\n _config: TernSecureInternalHandlerConfig,\n ): Promise<NextResponse> {\n const cookieStore = new NextCookieStore();\n\n const { idToken, csrfToken, error } = await RequestValidator.validateSessionRequest(request);\n if (error) return error;\n\n const csrfCookieValue = request.cookies.get('_session_terncf')?.value;\n const csrfValidationError = CsrfValidator.validate(csrfToken || '', csrfCookieValue);\n if (csrfValidationError) return csrfValidationError;\n\n const options = {\n tenantId: _config.tenantId,\n };\n\n switch (subEndpoint) {\n case 'createsession':\n return this.handleCreateSession(options, idToken, cookieStore);\n case 'refresh':\n return this.handleRefreshSession(request, cookieStore);\n case 'revoke':\n return this.handleRevokeSession(cookieStore);\n default:\n return HttpResponseHelper.createSubEndpointNotSupportedResponse();\n }\n }\n\n private static async handleCreateSession(\n options: RequestOptions,\n idToken: string | undefined,\n cookieStore: NextCookieStore,\n ): Promise<NextResponse> {\n const validationError = RequestValidator.validateIdToken(idToken);\n if (validationError) return validationError;\n if (!idToken) {\n return createApiErrorResponse('ID_TOKEN_REQUIRED', 'ID token is required', 400);\n }\n\n try {\n const res = await createSessionCookie(idToken, cookieStore, options);\n return SessionResponseHelper.createSessionCreationResponse(res);\n } catch (error) {\n return createApiErrorResponse('SESSION_CREATION_FAILED', 'Session creation failed', 500);\n }\n }\n\n private static async handleRefreshSession(\n request: NextRequest,\n cookieStore: NextCookieStore,\n ): Promise<NextResponse> {\n const currentSessionCookie = request.cookies.get('__session')?.value;\n if (!currentSessionCookie) {\n return createApiErrorResponse('NO_SESSION', 'No session to refresh', 401);\n }\n\n try {\n const decodedSession = ternDecodeJwtUnguarded(currentSessionCookie);\n if (decodedSession.errors) {\n return createApiErrorResponse('INVALID_SESSION', 'Invalid session for refresh', 401);\n }\n\n const refreshRes = await createSessionCookie(\n decodedSession.data?.payload?.sub || '',\n cookieStore,\n );\n\n return SessionResponseHelper.createRefreshResponse(refreshRes);\n } catch (error) {\n return createApiErrorResponse('REFRESH_FAILED', 'Session refresh failed', 500);\n }\n }\n\n private static async handleRevokeSession(cookieStore: NextCookieStore): Promise<NextResponse> {\n const res = await clearSessionCookie(cookieStore);\n return SessionResponseHelper.createRevokeResponse(res);\n }\n}\n\n/**\n * Main session endpoint orchestrator\n */\nexport class SessionEndpointHandler {\n static async handle(\n request: NextRequest,\n method: string,\n subEndpoint: SessionSubEndpoint | undefined,\n config: Required<TernSecureHandlerOptions>,\n ): Promise<NextResponse> {\n const sessionsConfig = config.endpoints.sessions;\n\n if (!subEndpoint) {\n return createApiErrorResponse('SUB_ENDPOINT_REQUIRED', 'Session sub-endpoint required', 400);\n }\n\n const subEndpointConfig = sessionsConfig?.subEndpoints?.[subEndpoint];\n\n const subEndpointValidation = this.validateSubEndpoint(subEndpoint, subEndpointConfig, method);\n if (subEndpointValidation) return subEndpointValidation;\n\n if (subEndpointConfig?.security) {\n const { SecurityValidator } = await import('./validators.js');\n const securityResult = await SecurityValidator.validate(request, subEndpointConfig.security);\n if (securityResult) return securityResult;\n }\n\n switch (method) {\n case 'GET':\n return SessionGetHandler.handle(request, subEndpoint, config);\n case 'POST':\n return SessionPostHandler.handle(request, subEndpoint, config);\n default:\n return HttpResponseHelper.createMethodNotAllowedResponse();\n }\n }\n\n private static validateSubEndpoint(\n subEndpoint: SessionSubEndpoint | undefined,\n subEndpointConfig: any,\n method: string,\n ): NextResponse | null {\n if (!subEndpoint) {\n return createApiErrorResponse('SUB_ENDPOINT_REQUIRED', 'Session sub-endpoint required', 400);\n }\n\n if (!subEndpointConfig || !subEndpointConfig.enabled) {\n return createApiErrorResponse('ENDPOINT_NOT_FOUND', 'Endpoint not found', 404);\n }\n\n if (!subEndpointConfig.methods?.includes(method as any)) {\n return createApiErrorResponse('METHOD_NOT_ALLOWED', 'Method not allowed', 405);\n }\n\n return null;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,84 @@
|
|
|
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 ternsecureNextjsHandler_exports = {};
|
|
20
|
+
__export(ternsecureNextjsHandler_exports, {
|
|
21
|
+
createTernSecureNextJsHandler: () => createTernSecureNextJsHandler
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(ternsecureNextjsHandler_exports);
|
|
24
|
+
var import_constants = require("./constants");
|
|
25
|
+
var import_fnValidators = require("./fnValidators");
|
|
26
|
+
var import_responses = require("./responses");
|
|
27
|
+
var import_sessionHandlers = require("./sessionHandlers");
|
|
28
|
+
var import_types = require("./types");
|
|
29
|
+
var import_utils = require("./utils");
|
|
30
|
+
async function applyGlobalValidations(config, context) {
|
|
31
|
+
const { validateCors, validateSecurity, createCorsOptionsResponse } = (0, import_fnValidators.createValidators)(context);
|
|
32
|
+
const corsError = await validateCors(config.cors);
|
|
33
|
+
if (corsError) return corsError;
|
|
34
|
+
if (context.method === "OPTIONS") {
|
|
35
|
+
return createCorsOptionsResponse(config.cors);
|
|
36
|
+
}
|
|
37
|
+
const securityError = await validateSecurity(config.security);
|
|
38
|
+
if (securityError) return securityError;
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
async function routeToEndpointHandler(request, endpoint, subEndpoint, config) {
|
|
42
|
+
switch (endpoint) {
|
|
43
|
+
case "sessions":
|
|
44
|
+
return import_sessionHandlers.SessionEndpointHandler.handle(request, request.method, subEndpoint, config);
|
|
45
|
+
default:
|
|
46
|
+
return (0, import_responses.createApiErrorResponse)("ENDPOINT_NOT_FOUND", "Endpoint not found", 404);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function createTernSecureNextJsHandler(options) {
|
|
50
|
+
const baseConfig = import_utils.ConfigUtils.mergeWithDefaults(
|
|
51
|
+
import_types.DEFAULT_HANDLER_OPTIONS,
|
|
52
|
+
options
|
|
53
|
+
);
|
|
54
|
+
const internalConfig = {
|
|
55
|
+
...baseConfig,
|
|
56
|
+
tenantId: import_constants.TENANT_ID
|
|
57
|
+
};
|
|
58
|
+
const handler = async (request) => {
|
|
59
|
+
const context = (0, import_fnValidators.createRequestContext)(request);
|
|
60
|
+
const { pathSegments } = context;
|
|
61
|
+
const endpoint = pathSegments[2];
|
|
62
|
+
const subEndpoint = pathSegments[3];
|
|
63
|
+
import_utils.LoggingUtils.logRequest(request, "Handler");
|
|
64
|
+
try {
|
|
65
|
+
const validationResult = await applyGlobalValidations(internalConfig, context);
|
|
66
|
+
if (validationResult) {
|
|
67
|
+
return validationResult;
|
|
68
|
+
}
|
|
69
|
+
return await routeToEndpointHandler(request, endpoint, subEndpoint, internalConfig);
|
|
70
|
+
} catch (error) {
|
|
71
|
+
import_utils.LoggingUtils.logError(error, "Handler");
|
|
72
|
+
return (0, import_responses.createApiErrorResponse)("INTERNAL_SERVER_ERROR", "Internal server error", 500);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
return {
|
|
76
|
+
GET: handler,
|
|
77
|
+
POST: handler
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
81
|
+
0 && (module.exports = {
|
|
82
|
+
createTernSecureNextJsHandler
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=ternsecureNextjsHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/admin/ternsecureNextjsHandler.ts"],"sourcesContent":["import type { NextRequest, NextResponse } from 'next/server';\n\nimport { TENANT_ID } from './constants';\nimport type { RequestContext } from './fnValidators';\nimport { createRequestContext, createValidators } from './fnValidators';\nimport { createApiErrorResponse } from './responses';\nimport { SessionEndpointHandler } from './sessionHandlers';\nimport type {\n AuthEndpoint,\n SessionSubEndpoint,\n TernSecureHandlerOptions,\n TernSecureInternalHandlerConfig} from './types';\nimport {\n DEFAULT_HANDLER_OPTIONS\n} from './types';\nimport { ConfigUtils, LoggingUtils } from './utils';\n\n/**\n * Apply all global validations in a clean, sequential manner\n */\nasync function applyGlobalValidations(\n config: Required<TernSecureHandlerOptions>,\n context: RequestContext,\n): Promise<NextResponse | null> {\n const { validateCors, validateSecurity, createCorsOptionsResponse } = createValidators(context);\n const corsError = await validateCors(config.cors);\n if (corsError) return corsError;\n\n if (context.method === 'OPTIONS') {\n return createCorsOptionsResponse(config.cors);\n }\n\n const securityError = await validateSecurity(config.security);\n if (securityError) return securityError;\n\n return null;\n}\n\n/**\n * Route to appropriate endpoint handler based on endpoint type\n */\nasync function routeToEndpointHandler(\n request: NextRequest,\n endpoint: AuthEndpoint,\n subEndpoint: SessionSubEndpoint,\n config: TernSecureInternalHandlerConfig,\n): Promise<NextResponse> {\n switch (endpoint) {\n case 'sessions':\n return SessionEndpointHandler.handle(request, request.method, subEndpoint, config);\n default:\n return createApiErrorResponse('ENDPOINT_NOT_FOUND', 'Endpoint not found', 404);\n }\n}\n\nexport function createTernSecureNextJsHandler(options?: TernSecureHandlerOptions) {\n const baseConfig: Required<TernSecureHandlerOptions> = ConfigUtils.mergeWithDefaults(\n DEFAULT_HANDLER_OPTIONS,\n options,\n );\n\n const internalConfig: TernSecureInternalHandlerConfig = {\n ...baseConfig,\n tenantId: TENANT_ID,\n };\n\n const handler = async (request: NextRequest): Promise<NextResponse> => {\n const context = createRequestContext(request);\n const { pathSegments } = context;\n\n const endpoint = pathSegments[2] as AuthEndpoint;\n const subEndpoint = pathSegments[3] as SessionSubEndpoint;\n\n LoggingUtils.logRequest(request, 'Handler');\n\n try {\n const validationResult = await applyGlobalValidations(internalConfig, context);\n if (validationResult) {\n return validationResult;\n }\n\n return await routeToEndpointHandler(request, endpoint, subEndpoint, internalConfig);\n } catch (error) {\n LoggingUtils.logError(error, 'Handler');\n return createApiErrorResponse('INTERNAL_SERVER_ERROR', 'Internal server error', 500);\n }\n };\n\n return {\n GET: handler,\n POST: handler,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,uBAA0B;AAE1B,0BAAuD;AACvD,uBAAuC;AACvC,6BAAuC;AAMvC,mBAEO;AACP,mBAA0C;AAK1C,eAAe,uBACb,QACA,SAC8B;AAC9B,QAAM,EAAE,cAAc,kBAAkB,0BAA0B,QAAI,sCAAiB,OAAO;AAC9F,QAAM,YAAY,MAAM,aAAa,OAAO,IAAI;AAChD,MAAI,UAAW,QAAO;AAEtB,MAAI,QAAQ,WAAW,WAAW;AAChC,WAAO,0BAA0B,OAAO,IAAI;AAAA,EAC9C;AAEA,QAAM,gBAAgB,MAAM,iBAAiB,OAAO,QAAQ;AAC5D,MAAI,cAAe,QAAO;AAE1B,SAAO;AACT;AAKA,eAAe,uBACb,SACA,UACA,aACA,QACuB;AACvB,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO,8CAAuB,OAAO,SAAS,QAAQ,QAAQ,aAAa,MAAM;AAAA,IACnF;AACE,iBAAO,yCAAuB,sBAAsB,sBAAsB,GAAG;AAAA,EACjF;AACF;AAEO,SAAS,8BAA8B,SAAoC;AAChF,QAAM,aAAiD,yBAAY;AAAA,IACjE;AAAA,IACA;AAAA,EACF;AAEA,QAAM,iBAAkD;AAAA,IACtD,GAAG;AAAA,IACH,UAAU;AAAA,EACZ;AAEA,QAAM,UAAU,OAAO,YAAgD;AACrE,UAAM,cAAU,0CAAqB,OAAO;AAC5C,UAAM,EAAE,aAAa,IAAI;AAEzB,UAAM,WAAW,aAAa,CAAC;AAC/B,UAAM,cAAc,aAAa,CAAC;AAElC,8BAAa,WAAW,SAAS,SAAS;AAE1C,QAAI;AACF,YAAM,mBAAmB,MAAM,uBAAuB,gBAAgB,OAAO;AAC7E,UAAI,kBAAkB;AACpB,eAAO;AAAA,MACT;AAEA,aAAO,MAAM,uBAAuB,SAAS,UAAU,aAAa,cAAc;AAAA,IACpF,SAAS,OAAO;AACd,gCAAa,SAAS,OAAO,SAAS;AACtC,iBAAO,yCAAuB,yBAAyB,yBAAyB,GAAG;AAAA,IACrF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AACF;","names":[]}
|
|
@@ -0,0 +1,127 @@
|
|
|
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 types_exports = {};
|
|
20
|
+
__export(types_exports, {
|
|
21
|
+
DEFAULT_COOKIE_OPTIONS: () => DEFAULT_COOKIE_OPTIONS,
|
|
22
|
+
DEFAULT_CORS_OPTIONS: () => DEFAULT_CORS_OPTIONS,
|
|
23
|
+
DEFAULT_ENDPOINT_CONFIG: () => DEFAULT_ENDPOINT_CONFIG,
|
|
24
|
+
DEFAULT_HANDLER_OPTIONS: () => DEFAULT_HANDLER_OPTIONS,
|
|
25
|
+
DEFAULT_SECURITY_OPTIONS: () => DEFAULT_SECURITY_OPTIONS,
|
|
26
|
+
DEFAULT_SESSIONS_CONFIG: () => DEFAULT_SESSIONS_CONFIG
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(types_exports);
|
|
29
|
+
const DEFAULT_CORS_OPTIONS = {
|
|
30
|
+
allowedOrigins: [],
|
|
31
|
+
allowedMethods: ["GET", "POST"],
|
|
32
|
+
allowedHeaders: ["Content-Type", "Authorization", "X-Requested-With"],
|
|
33
|
+
allowCredentials: true,
|
|
34
|
+
maxAge: 86400
|
|
35
|
+
// 24 hours
|
|
36
|
+
};
|
|
37
|
+
const DEFAULT_COOKIE_OPTIONS = {
|
|
38
|
+
name: "__session",
|
|
39
|
+
path: "/",
|
|
40
|
+
secure: true,
|
|
41
|
+
httpOnly: true,
|
|
42
|
+
sameSite: "lax",
|
|
43
|
+
maxAge: 3600 * 24 * 7
|
|
44
|
+
// 7 days
|
|
45
|
+
};
|
|
46
|
+
const DEFAULT_SECURITY_OPTIONS = {
|
|
47
|
+
requireCSRF: true,
|
|
48
|
+
allowedReferers: [],
|
|
49
|
+
requiredHeaders: {},
|
|
50
|
+
ipWhitelist: [],
|
|
51
|
+
userAgent: {
|
|
52
|
+
block: [],
|
|
53
|
+
allow: []
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const DEFAULT_ENDPOINT_CONFIG = {
|
|
57
|
+
enabled: true,
|
|
58
|
+
methods: ["GET", "POST"],
|
|
59
|
+
requireAuth: false,
|
|
60
|
+
security: DEFAULT_SECURITY_OPTIONS
|
|
61
|
+
};
|
|
62
|
+
const DEFAULT_SESSIONS_CONFIG = {
|
|
63
|
+
...DEFAULT_ENDPOINT_CONFIG,
|
|
64
|
+
subEndpoints: {
|
|
65
|
+
verify: {
|
|
66
|
+
enabled: true,
|
|
67
|
+
methods: ["GET"],
|
|
68
|
+
requireAuth: false,
|
|
69
|
+
security: {
|
|
70
|
+
requireCSRF: true,
|
|
71
|
+
allowedReferers: []
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
createsession: {
|
|
75
|
+
enabled: true,
|
|
76
|
+
methods: ["POST"],
|
|
77
|
+
requireAuth: false,
|
|
78
|
+
security: {
|
|
79
|
+
requireCSRF: true
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
refresh: {
|
|
83
|
+
enabled: true,
|
|
84
|
+
methods: ["POST"],
|
|
85
|
+
requireAuth: true,
|
|
86
|
+
security: {
|
|
87
|
+
requireCSRF: true
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
revoke: {
|
|
91
|
+
enabled: true,
|
|
92
|
+
methods: ["POST"],
|
|
93
|
+
requireAuth: true,
|
|
94
|
+
security: {
|
|
95
|
+
requireCSRF: true
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const DEFAULT_HANDLER_OPTIONS = {
|
|
101
|
+
cors: DEFAULT_CORS_OPTIONS,
|
|
102
|
+
cookies: DEFAULT_COOKIE_OPTIONS,
|
|
103
|
+
rateLimit: {
|
|
104
|
+
windowMs: 15 * 60 * 1e3,
|
|
105
|
+
// 15 minutes
|
|
106
|
+
maxRequests: 100,
|
|
107
|
+
skipSuccessful: false,
|
|
108
|
+
skipFailedRequests: false
|
|
109
|
+
},
|
|
110
|
+
security: DEFAULT_SECURITY_OPTIONS,
|
|
111
|
+
endpoints: {
|
|
112
|
+
sessions: DEFAULT_SESSIONS_CONFIG
|
|
113
|
+
},
|
|
114
|
+
debug: false,
|
|
115
|
+
environment: "production",
|
|
116
|
+
basePath: "/api/auth"
|
|
117
|
+
};
|
|
118
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
119
|
+
0 && (module.exports = {
|
|
120
|
+
DEFAULT_COOKIE_OPTIONS,
|
|
121
|
+
DEFAULT_CORS_OPTIONS,
|
|
122
|
+
DEFAULT_ENDPOINT_CONFIG,
|
|
123
|
+
DEFAULT_HANDLER_OPTIONS,
|
|
124
|
+
DEFAULT_SECURITY_OPTIONS,
|
|
125
|
+
DEFAULT_SESSIONS_CONFIG
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/admin/types.ts"],"sourcesContent":["import { type NextResponse } from 'next/server';\n\nexport interface CorsOptions {\n allowedOrigins: string[] | '*';\n allowedMethods?: string[];\n allowedHeaders?: string[];\n allowCredentials?: boolean;\n maxAge?: number;\n skipSameOrigin?: boolean;\n}\n\nexport interface CookieOptions {\n name?: string;\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n maxAge?: number;\n}\n\nexport interface RateLimitOptions {\n windowMs?: number;\n maxRequests?: number;\n skipSuccessful?: boolean;\n skipFailedRequests?: boolean;\n}\n\nexport interface SecurityOptions {\n requireCSRF?: boolean;\n allowedReferers?: string[];\n requiredHeaders?: Record<string, string>;\n ipWhitelist?: string[];\n userAgent?: {\n block?: string[];\n allow?: string[];\n };\n}\n\nexport interface EndpointConfig {\n enabled: boolean;\n methods: ('GET' | 'POST' | 'PUT' | 'DELETE')[];\n requireAuth?: boolean;\n rateLimit?: RateLimitOptions;\n security?: SecurityOptions;\n cors?: Partial<CorsOptions>;\n}\n\nexport interface SessionEndpointConfig extends EndpointConfig {\n subEndpoints?: {\n [K in SessionSubEndpoint]?: Partial<EndpointConfig>;\n };\n}\n\nexport interface TernSecureHandlerOptions {\n cors?: CorsOptions;\n cookies?: CookieOptions;\n rateLimit?: RateLimitOptions;\n security?: SecurityOptions;\n endpoints?: {\n sessions?: SessionEndpointConfig;\n };\n\n debug?: boolean;\n environment?: 'development' | 'production' | 'test';\n basePath?: string;\n}\n\n/**\n * Define an internal config type that extends the public options\n * with server-side only values like tenantId.\n */\nexport type TernSecureInternalHandlerConfig = Required<TernSecureHandlerOptions> & {\n tenantId?: string;\n};\n\nexport type AuthEndpoint = 'sessions' | 'users';\nexport type SessionSubEndpoint = 'verify' | 'createsession' | 'refresh' | 'revoke';\n\nexport const DEFAULT_CORS_OPTIONS: CorsOptions = {\n allowedOrigins: [],\n allowedMethods: ['GET', 'POST'],\n allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'],\n allowCredentials: true,\n maxAge: 86400, // 24 hours\n};\n\nexport const DEFAULT_COOKIE_OPTIONS: CookieOptions = {\n name: '__session',\n path: '/',\n secure: true,\n httpOnly: true,\n sameSite: 'lax',\n maxAge: 3600 * 24 * 7, // 7 days\n};\n\nexport const DEFAULT_SECURITY_OPTIONS: SecurityOptions = {\n requireCSRF: true,\n allowedReferers: [],\n requiredHeaders: {},\n ipWhitelist: [],\n userAgent: {\n block: [],\n allow: [],\n },\n};\n\nexport const DEFAULT_ENDPOINT_CONFIG: EndpointConfig = {\n enabled: true,\n methods: ['GET', 'POST'],\n requireAuth: false,\n security: DEFAULT_SECURITY_OPTIONS,\n};\n\nexport const DEFAULT_SESSIONS_CONFIG: SessionEndpointConfig = {\n ...DEFAULT_ENDPOINT_CONFIG,\n subEndpoints: {\n verify: {\n enabled: true,\n methods: ['GET'],\n requireAuth: false,\n security: {\n requireCSRF: true,\n allowedReferers: [],\n },\n },\n createsession: {\n enabled: true,\n methods: ['POST'],\n requireAuth: false,\n security: {\n requireCSRF: true,\n },\n },\n refresh: {\n enabled: true,\n methods: ['POST'],\n requireAuth: true,\n security: {\n requireCSRF: true,\n },\n },\n revoke: {\n enabled: true,\n methods: ['POST'],\n requireAuth: true,\n security: {\n requireCSRF: true,\n },\n },\n },\n};\n\nexport const DEFAULT_HANDLER_OPTIONS: Required<TernSecureHandlerOptions> & {\n endpoints: Required<NonNullable<TernSecureHandlerOptions['endpoints']>>;\n} = {\n cors: DEFAULT_CORS_OPTIONS,\n cookies: DEFAULT_COOKIE_OPTIONS,\n rateLimit: {\n windowMs: 15 * 60 * 1000, // 15 minutes\n maxRequests: 100,\n skipSuccessful: false,\n skipFailedRequests: false,\n },\n security: DEFAULT_SECURITY_OPTIONS,\n endpoints: {\n sessions: DEFAULT_SESSIONS_CONFIG,\n },\n debug: false,\n environment: 'production',\n basePath: '/api/auth',\n};\n\n\nexport interface ValidationResult {\n error?: NextResponse;\n data?: any;\n}\n\nexport interface ValidationConfig {\n cors?: CorsOptions;\n security?: SecurityOptions;\n endpoint?: {\n name: AuthEndpoint;\n config: EndpointConfig;\n };\n subEndpoint?: {\n name: SessionSubEndpoint;\n config: EndpointConfig;\n };\n requireIdToken?: boolean;\n requireCsrfToken?: boolean;\n}\n\nexport interface ComprehensiveValidationResult {\n isValid: boolean;\n error?: NextResponse;\n corsResponse?: NextResponse;\n sessionData?: {\n body: any;\n idToken?: string;\n csrfToken?: string;\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+EO,MAAM,uBAAoC;AAAA,EAC/C,gBAAgB,CAAC;AAAA,EACjB,gBAAgB,CAAC,OAAO,MAAM;AAAA,EAC9B,gBAAgB,CAAC,gBAAgB,iBAAiB,kBAAkB;AAAA,EACpE,kBAAkB;AAAA,EAClB,QAAQ;AAAA;AACV;AAEO,MAAM,yBAAwC;AAAA,EACnD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ,OAAO,KAAK;AAAA;AACtB;AAEO,MAAM,2BAA4C;AAAA,EACvD,aAAa;AAAA,EACb,iBAAiB,CAAC;AAAA,EAClB,iBAAiB,CAAC;AAAA,EAClB,aAAa,CAAC;AAAA,EACd,WAAW;AAAA,IACT,OAAO,CAAC;AAAA,IACR,OAAO,CAAC;AAAA,EACV;AACF;AAEO,MAAM,0BAA0C;AAAA,EACrD,SAAS;AAAA,EACT,SAAS,CAAC,OAAO,MAAM;AAAA,EACvB,aAAa;AAAA,EACb,UAAU;AACZ;AAEO,MAAM,0BAAiD;AAAA,EAC5D,GAAG;AAAA,EACH,cAAc;AAAA,IACZ,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,KAAK;AAAA,MACf,aAAa;AAAA,MACb,UAAU;AAAA,QACR,aAAa;AAAA,QACb,iBAAiB,CAAC;AAAA,MACpB;AAAA,IACF;AAAA,IACA,eAAe;AAAA,MACb,SAAS;AAAA,MACT,SAAS,CAAC,MAAM;AAAA,MAChB,aAAa;AAAA,MACb,UAAU;AAAA,QACR,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS,CAAC,MAAM;AAAA,MAChB,aAAa;AAAA,MACb,UAAU;AAAA,QACR,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,SAAS,CAAC,MAAM;AAAA,MAChB,aAAa;AAAA,MACb,UAAU;AAAA,QACR,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,0BAET;AAAA,EACF,MAAM;AAAA,EACN,SAAS;AAAA,EACT,WAAW;AAAA,IACT,UAAU,KAAK,KAAK;AAAA;AAAA,IACpB,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,EACtB;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,IACT,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,EACP,aAAa;AAAA,EACb,UAAU;AACZ;","names":[]}
|
|
@@ -0,0 +1,107 @@
|
|
|
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 utils_exports = {};
|
|
20
|
+
__export(utils_exports, {
|
|
21
|
+
ConfigUtils: () => ConfigUtils,
|
|
22
|
+
CookieUtils: () => CookieUtils,
|
|
23
|
+
HttpUtils: () => HttpUtils,
|
|
24
|
+
LoggingUtils: () => LoggingUtils
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(utils_exports);
|
|
27
|
+
class HttpUtils {
|
|
28
|
+
/**
|
|
29
|
+
* Extract client IP address from various headers
|
|
30
|
+
*/
|
|
31
|
+
static getClientIP(request) {
|
|
32
|
+
const forwarded = request.headers.get("x-forwarded-for");
|
|
33
|
+
const realIP = request.headers.get("x-real-ip");
|
|
34
|
+
const clientIP = request.headers.get("x-client-ip");
|
|
35
|
+
if (forwarded) {
|
|
36
|
+
return forwarded.split(",")[0].trim();
|
|
37
|
+
}
|
|
38
|
+
return realIP || clientIP || "unknown";
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Parse URL path segments for routing
|
|
42
|
+
*/
|
|
43
|
+
static parsePathSegments(url) {
|
|
44
|
+
return url.pathname.split("/").filter(Boolean);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Extract authentication headers
|
|
48
|
+
*/
|
|
49
|
+
static extractAuthHeaders(request) {
|
|
50
|
+
return {
|
|
51
|
+
origin: request.headers.get("origin"),
|
|
52
|
+
host: request.headers.get("host"),
|
|
53
|
+
referer: request.headers.get("referer"),
|
|
54
|
+
userAgent: request.headers.get("user-agent") || "",
|
|
55
|
+
authorization: request.headers.get("authorization"),
|
|
56
|
+
xRequestedWith: request.headers.get("x-requested-with")
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
class ConfigUtils {
|
|
61
|
+
/**
|
|
62
|
+
* Deep merge handler options with defaults
|
|
63
|
+
*/
|
|
64
|
+
static mergeWithDefaults(defaults, options) {
|
|
65
|
+
if (!options) return defaults;
|
|
66
|
+
const result = { ...defaults };
|
|
67
|
+
for (const key in options) {
|
|
68
|
+
const value = options[key];
|
|
69
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
70
|
+
result[key] = this.mergeWithDefaults(defaults[key] || {}, value);
|
|
71
|
+
} else {
|
|
72
|
+
result[key] = value;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
class CookieUtils {
|
|
79
|
+
static extractSessionCookies(request) {
|
|
80
|
+
return {
|
|
81
|
+
sessionCookie: request.cookies.get("_session_cookie")?.value,
|
|
82
|
+
csrfCookie: request.cookies.get("_session_terncf")?.value,
|
|
83
|
+
mainSession: request.cookies.get("__session")?.value
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
class LoggingUtils {
|
|
88
|
+
static logRequest(request, context) {
|
|
89
|
+
if (process.env.NODE_ENV === "development") {
|
|
90
|
+
console.log(`[TernSecure${context ? ` ${context}` : ""}] ${request.method} ${request.url}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
static logError(error, context) {
|
|
94
|
+
console.error(`[TernSecure${context ? ` ${context}` : ""} Error]`, error);
|
|
95
|
+
}
|
|
96
|
+
static logWarning(message, context) {
|
|
97
|
+
console.warn(`[TernSecure${context ? ` ${context}` : ""} Warning]`, message);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
101
|
+
0 && (module.exports = {
|
|
102
|
+
ConfigUtils,
|
|
103
|
+
CookieUtils,
|
|
104
|
+
HttpUtils,
|
|
105
|
+
LoggingUtils
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/app-router/admin/utils.ts"],"sourcesContent":["import type { NextRequest } from 'next/server';\n\n/**\n * HTTP utilities\n */\nexport class HttpUtils {\n /**\n * Extract client IP address from various headers\n */\n static getClientIP(request: NextRequest): string {\n const forwarded = request.headers.get('x-forwarded-for');\n const realIP = request.headers.get('x-real-ip');\n const clientIP = request.headers.get('x-client-ip');\n\n if (forwarded) {\n return forwarded.split(',')[0].trim();\n }\n\n return realIP || clientIP || 'unknown';\n }\n\n /**\n * Parse URL path segments for routing\n */\n static parsePathSegments(url: URL): string[] {\n return url.pathname.split('/').filter(Boolean);\n }\n\n /**\n * Extract authentication headers\n */\n static extractAuthHeaders(request: NextRequest) {\n return {\n origin: request.headers.get('origin'),\n host: request.headers.get('host'),\n referer: request.headers.get('referer'),\n userAgent: request.headers.get('user-agent') || '',\n authorization: request.headers.get('authorization'),\n xRequestedWith: request.headers.get('x-requested-with'),\n };\n }\n}\n\n/**\n * Configuration utilities\n */\nexport class ConfigUtils {\n /**\n * Deep merge handler options with defaults\n */\n static mergeWithDefaults(\n defaults: any,\n options?: any\n ): any {\n if (!options) return defaults;\n\n const result = { ...defaults };\n \n for (const key in options) {\n const value = options[key];\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n result[key] = this.mergeWithDefaults(defaults[key] || {}, value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n }\n}\n\n/**\n * Cookie utilities\n */\nexport class CookieUtils {\n static extractSessionCookies(request: NextRequest) {\n return {\n sessionCookie: request.cookies.get('_session_cookie')?.value,\n csrfCookie: request.cookies.get('_session_terncf')?.value,\n mainSession: request.cookies.get('__session')?.value,\n };\n }\n}\n\n/**\n * Logging utilities for debugging\n */\nexport class LoggingUtils {\n static logRequest(request: NextRequest, context?: string) {\n if (process.env.NODE_ENV === 'development') {\n console.log(`[TernSecure${context ? ` ${context}` : ''}] ${request.method} ${request.url}`);\n }\n }\n\n static logError(error: any, context?: string) {\n console.error(`[TernSecure${context ? ` ${context}` : ''} Error]`, error);\n }\n\n static logWarning(message: string, context?: string) {\n console.warn(`[TernSecure${context ? ` ${context}` : ''} Warning]`, message);\n }\n}"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA,EAIrB,OAAO,YAAY,SAA8B;AAC/C,UAAM,YAAY,QAAQ,QAAQ,IAAI,iBAAiB;AACvD,UAAM,SAAS,QAAQ,QAAQ,IAAI,WAAW;AAC9C,UAAM,WAAW,QAAQ,QAAQ,IAAI,aAAa;AAElD,QAAI,WAAW;AACb,aAAO,UAAU,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AAAA,IACtC;AAEA,WAAO,UAAU,YAAY;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,kBAAkB,KAAoB;AAC3C,WAAO,IAAI,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,mBAAmB,SAAsB;AAC9C,WAAO;AAAA,MACL,QAAQ,QAAQ,QAAQ,IAAI,QAAQ;AAAA,MACpC,MAAM,QAAQ,QAAQ,IAAI,MAAM;AAAA,MAChC,SAAS,QAAQ,QAAQ,IAAI,SAAS;AAAA,MACtC,WAAW,QAAQ,QAAQ,IAAI,YAAY,KAAK;AAAA,MAChD,eAAe,QAAQ,QAAQ,IAAI,eAAe;AAAA,MAClD,gBAAgB,QAAQ,QAAQ,IAAI,kBAAkB;AAAA,IACxD;AAAA,EACF;AACF;AAKO,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA,EAIvB,OAAO,kBACL,UACA,SACK;AACL,QAAI,CAAC,QAAS,QAAO;AAErB,UAAM,SAAS,EAAE,GAAG,SAAS;AAE7B,eAAW,OAAO,SAAS;AACzB,YAAM,QAAQ,QAAQ,GAAG;AACzB,UAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,eAAO,GAAG,IAAI,KAAK,kBAAkB,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK;AAAA,MACjE,OAAO;AACL,eAAO,GAAG,IAAI;AAAA,MAChB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAKO,MAAM,YAAY;AAAA,EACvB,OAAO,sBAAsB,SAAsB;AACjD,WAAO;AAAA,MACL,eAAe,QAAQ,QAAQ,IAAI,iBAAiB,GAAG;AAAA,MACvD,YAAY,QAAQ,QAAQ,IAAI,iBAAiB,GAAG;AAAA,MACpD,aAAa,QAAQ,QAAQ,IAAI,WAAW,GAAG;AAAA,IACjD;AAAA,EACF;AACF;AAKO,MAAM,aAAa;AAAA,EACxB,OAAO,WAAW,SAAsB,SAAkB;AACxD,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAQ,IAAI,cAAc,UAAU,IAAI,OAAO,KAAK,EAAE,KAAK,QAAQ,MAAM,IAAI,QAAQ,GAAG,EAAE;AAAA,IAC5F;AAAA,EACF;AAAA,EAEA,OAAO,SAAS,OAAY,SAAkB;AAC5C,YAAQ,MAAM,cAAc,UAAU,IAAI,OAAO,KAAK,EAAE,WAAW,KAAK;AAAA,EAC1E;AAAA,EAEA,OAAO,WAAW,SAAiB,SAAkB;AACnD,YAAQ,KAAK,cAAc,UAAU,IAAI,OAAO,KAAK,EAAE,aAAa,OAAO;AAAA,EAC7E;AACF;","names":[]}
|