@tern-secure/nextjs 5.1.8 → 5.1.10
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/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/index.d.ts +0 -2
- package/dist/types/app-router/admin/index.d.ts.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/TernSecureProvider.d.ts +0 -25
- package/dist/types/app-router/client/TernSecureProvider.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/app-router/route-handler/internal-route.d.ts +0 -2
- package/dist/types/app-router/route-handler/internal-route.d.ts.map +0 -1
- package/dist/types/boundary/components.d.ts +0 -2
- package/dist/types/boundary/components.d.ts.map +0 -1
- package/dist/types/boundary/hooks.d.ts +0 -2
- package/dist/types/boundary/hooks.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/errors.d.ts +0 -44
- package/dist/types/errors.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/server/auth.d.ts +0 -23
- package/dist/types/server/auth.d.ts.map +0 -1
- package/dist/types/server/crypto.d.ts +0 -3
- package/dist/types/server/crypto.d.ts.map +0 -1
- package/dist/types/server/ctx-store.d.ts +0 -24
- package/dist/types/server/ctx-store.d.ts.map +0 -1
- package/dist/types/server/edge-session.d.ts +0 -4
- package/dist/types/server/edge-session.d.ts.map +0 -1
- package/dist/types/server/index.d.ts +0 -4
- package/dist/types/server/index.d.ts.map +0 -1
- package/dist/types/server/jwt-edge.d.ts +0 -20
- package/dist/types/server/jwt-edge.d.ts.map +0 -1
- package/dist/types/server/jwt.d.ts +0 -20
- package/dist/types/server/jwt.d.ts.map +0 -1
- package/dist/types/server/session-store.d.ts +0 -30
- package/dist/types/server/session-store.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/server/types.d.ts +0 -26
- package/dist/types/server/types.d.ts.map +0 -1
- package/dist/types/server/utils.d.ts +0 -22
- package/dist/types/server/utils.d.ts.map +0 -1
- package/dist/types/types.d.ts +0 -112
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/utils/admin-init.d.ts +0 -2
- package/dist/types/utils/admin-init.d.ts.map +0 -1
- package/dist/types/utils/allNextProviderProps.d.ts +0 -6
- package/dist/types/utils/allNextProviderProps.d.ts.map +0 -1
- package/dist/types/utils/client-init.d.ts +0 -2
- package/dist/types/utils/client-init.d.ts.map +0 -1
- package/dist/types/utils/config.d.ts +0 -35
- package/dist/types/utils/config.d.ts.map +0 -1
- package/dist/types/utils/construct.d.ts +0 -38
- package/dist/types/utils/construct.d.ts.map +0 -1
- package/dist/types/utils/create-styles.d.ts +0 -99
- package/dist/types/utils/create-styles.d.ts.map +0 -1
- package/dist/types/utils/redirect.d.ts +0 -9
- package/dist/types/utils/redirect.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
- package/dist/types/utils/ternsecure-sw.d.ts +0 -8
- package/dist/types/utils/ternsecure-sw.d.ts.map +0 -1
|
@@ -0,0 +1,298 @@
|
|
|
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 ternSecureEdgeMiddleware_exports = {};
|
|
20
|
+
__export(ternSecureEdgeMiddleware_exports, {
|
|
21
|
+
redirectAdapter: () => redirectAdapter,
|
|
22
|
+
ternSecureMiddleware: () => ternSecureMiddleware
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(ternSecureEdgeMiddleware_exports);
|
|
25
|
+
var import_backend = require("@tern-secure/backend");
|
|
26
|
+
var import_navigation = require("next/navigation");
|
|
27
|
+
var import_server = require("next/server");
|
|
28
|
+
var import_response = require("../utils/response");
|
|
29
|
+
var import_serverRedirectAuth = require("../utils/serverRedirectAuth");
|
|
30
|
+
var import_withLogger = require("../utils/withLogger");
|
|
31
|
+
var import_constant = require("./constant");
|
|
32
|
+
var import_nextErrors = require("./nextErrors");
|
|
33
|
+
var import_protect = require("./protect");
|
|
34
|
+
var import_redirect = require("./redirect");
|
|
35
|
+
var import_utils = require("./utils");
|
|
36
|
+
const backendClientDefaultOptions = {
|
|
37
|
+
apiUrl: import_constant.API_URL,
|
|
38
|
+
apiVersion: import_constant.API_VERSION
|
|
39
|
+
};
|
|
40
|
+
const ternSecureBackendClient = async () => {
|
|
41
|
+
return createBackendClientWithOptions({});
|
|
42
|
+
};
|
|
43
|
+
const createBackendClientWithOptions = (options) => {
|
|
44
|
+
return (0, import_backend.createBackendInstanceClient)({
|
|
45
|
+
...backendClientDefaultOptions,
|
|
46
|
+
...options
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
const ternSecureMiddleware = (...args) => {
|
|
50
|
+
const [request, event] = parseRequestAndEvent(args);
|
|
51
|
+
const [handler, params] = parseHandlerAndOptions(args);
|
|
52
|
+
const middleware = () => {
|
|
53
|
+
const withAuthNextMiddleware = async (request2, event2) => {
|
|
54
|
+
const resolvedParams = typeof params === "function" ? await params(request2) : params;
|
|
55
|
+
const signInUrl = resolvedParams.signInUrl || import_constant.SIGN_IN_URL;
|
|
56
|
+
const signUpUrl = resolvedParams.signUpUrl || import_constant.SIGN_UP_URL;
|
|
57
|
+
const options = {
|
|
58
|
+
signInUrl,
|
|
59
|
+
signUpUrl,
|
|
60
|
+
...resolvedParams
|
|
61
|
+
};
|
|
62
|
+
const logger = (0, import_withLogger.createEdgeCompatibleLogger)(options.debug);
|
|
63
|
+
if (options.debug) {
|
|
64
|
+
(0, import_backend.enableDebugLogging)();
|
|
65
|
+
}
|
|
66
|
+
const reqBackendClient = await ternSecureBackendClient();
|
|
67
|
+
const ternSecureRequest = (0, import_backend.createTernSecureRequest)(request2);
|
|
68
|
+
const requestStateClient = await reqBackendClient.authenticateRequest(
|
|
69
|
+
ternSecureRequest,
|
|
70
|
+
options
|
|
71
|
+
);
|
|
72
|
+
const authObjectClient = requestStateClient.auth();
|
|
73
|
+
const { redirectToSignIn } = createMiddlewareRedirects(ternSecureRequest);
|
|
74
|
+
const { redirectToSignUp } = createMiddlewareRedirects(ternSecureRequest);
|
|
75
|
+
const protect = await createMiddlewareProtect(
|
|
76
|
+
ternSecureRequest,
|
|
77
|
+
authObjectClient,
|
|
78
|
+
redirectToSignIn
|
|
79
|
+
);
|
|
80
|
+
const authObj = Object.assign(authObjectClient, {
|
|
81
|
+
redirectToSignIn,
|
|
82
|
+
redirectToSignUp
|
|
83
|
+
});
|
|
84
|
+
const authHandler = () => Promise.resolve(authObj);
|
|
85
|
+
authHandler.protect = protect;
|
|
86
|
+
let handlerResult = import_server.NextResponse.next();
|
|
87
|
+
try {
|
|
88
|
+
const userHandlerResult = await handler?.(authHandler, request2, event2);
|
|
89
|
+
handlerResult = userHandlerResult || handlerResult;
|
|
90
|
+
} catch (error) {
|
|
91
|
+
handlerResult = handleControlError(error, ternSecureRequest, request2);
|
|
92
|
+
}
|
|
93
|
+
if (requestStateClient.headers) {
|
|
94
|
+
requestStateClient.headers.forEach((value, key) => {
|
|
95
|
+
handlerResult.headers.append(key, value);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if ((0, import_response.isRedirect)(handlerResult)) {
|
|
99
|
+
return (0, import_serverRedirectAuth.serverRedirectWithAuth)(ternSecureRequest, handlerResult);
|
|
100
|
+
}
|
|
101
|
+
(0, import_utils.decorateRequest)(ternSecureRequest, handlerResult, requestStateClient);
|
|
102
|
+
return handlerResult;
|
|
103
|
+
};
|
|
104
|
+
const fireNextMiddleware = async (request2) => {
|
|
105
|
+
console.log("[TernSecureMiddleware] Firebase Request URL:", request2.url);
|
|
106
|
+
if (isFirebaseCookieRequest(request2)) {
|
|
107
|
+
const options = typeof params === "function" ? await params(request2) : params;
|
|
108
|
+
rewriteFirebaseRequest(options, request2);
|
|
109
|
+
return handleFirebaseAuthRequest(request2);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const nextMiddleware = async (request2, event2) => {
|
|
113
|
+
if (isFirebaseRequest(request2)) {
|
|
114
|
+
return fireNextMiddleware(request2, event2);
|
|
115
|
+
}
|
|
116
|
+
return withAuthNextMiddleware(request2, event2);
|
|
117
|
+
};
|
|
118
|
+
if (request && event) {
|
|
119
|
+
return nextMiddleware(request, event);
|
|
120
|
+
}
|
|
121
|
+
return nextMiddleware;
|
|
122
|
+
};
|
|
123
|
+
return middleware();
|
|
124
|
+
};
|
|
125
|
+
const parseRequestAndEvent = (args) => {
|
|
126
|
+
return [
|
|
127
|
+
args[0] instanceof Request ? args[0] : void 0,
|
|
128
|
+
args[0] instanceof Request ? args[1] : void 0
|
|
129
|
+
];
|
|
130
|
+
};
|
|
131
|
+
const parseHandlerAndOptions = (args) => {
|
|
132
|
+
return [
|
|
133
|
+
typeof args[0] === "function" ? args[0] : void 0,
|
|
134
|
+
(args.length === 2 ? args[1] : typeof args[0] === "function" ? {} : args[0]) || {}
|
|
135
|
+
];
|
|
136
|
+
};
|
|
137
|
+
const isFirebaseRequest = (request) => request.nextUrl.pathname.startsWith("/__/");
|
|
138
|
+
const rewriteFirebaseRequest = (options, request) => {
|
|
139
|
+
const newUrl = new URL(request.url);
|
|
140
|
+
newUrl.host = options.firebaseOptions?.authDomain || "";
|
|
141
|
+
newUrl.port = "";
|
|
142
|
+
return import_server.NextResponse.rewrite(newUrl);
|
|
143
|
+
};
|
|
144
|
+
const finalTarget = (request) => {
|
|
145
|
+
const finalTargetUrl = request.nextUrl.searchParams.get("finalTarget");
|
|
146
|
+
return finalTargetUrl ? new URL(finalTargetUrl, request.url) : void 0;
|
|
147
|
+
};
|
|
148
|
+
const isFirebaseCookieRequest = (request) => request.nextUrl.pathname === "/__cookies__";
|
|
149
|
+
const createMiddlewareRedirects = (ternSecureRequest) => {
|
|
150
|
+
const redirectToSignIn = (opts = {}) => {
|
|
151
|
+
const url = ternSecureRequest.ternUrl.toString();
|
|
152
|
+
(0, import_nextErrors.redirectToSignInError)(url, opts.returnBackUrl);
|
|
153
|
+
};
|
|
154
|
+
const redirectToSignUp = (opts = {}) => {
|
|
155
|
+
const url = ternSecureRequest.ternUrl.toString();
|
|
156
|
+
(0, import_nextErrors.redirectToSignUpError)(url, opts.returnBackUrl);
|
|
157
|
+
};
|
|
158
|
+
return { redirectToSignIn, redirectToSignUp };
|
|
159
|
+
};
|
|
160
|
+
const createMiddlewareProtect = (ternSecureRequest, authObject, redirectToSignIn) => {
|
|
161
|
+
return async (params, options) => {
|
|
162
|
+
const notFound = () => (0, import_navigation.notFound)();
|
|
163
|
+
const redirect = (url) => (0, import_nextErrors.nextjsRedirectError)(url, {
|
|
164
|
+
redirectUrl: url
|
|
165
|
+
});
|
|
166
|
+
return (0, import_protect.createProtect)({
|
|
167
|
+
request: ternSecureRequest,
|
|
168
|
+
redirect,
|
|
169
|
+
notFound,
|
|
170
|
+
authObject,
|
|
171
|
+
redirectToSignIn
|
|
172
|
+
})(params, options);
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
const redirectAdapter = (url) => {
|
|
176
|
+
return import_server.NextResponse.redirect(url, {
|
|
177
|
+
headers: { [import_backend.constants.Headers.TernSecureRedirectTo]: "true" }
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
const handleControlError = (error, ternSecureRequest, nextrequest) => {
|
|
181
|
+
if ((0, import_nextErrors.isNextjsNotFoundError)(error)) {
|
|
182
|
+
return (0, import_response.setHeader)(
|
|
183
|
+
import_server.NextResponse.rewrite(new URL(`/tern_${Date.now()}`, nextrequest.url)),
|
|
184
|
+
import_backend.constants.Headers.AuthReason,
|
|
185
|
+
"protect-rewrite"
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
const isRedirectToSignIn = (0, import_nextErrors.isRedirectToSignInError)(error);
|
|
189
|
+
const isRedirectToSignUp = (0, import_nextErrors.isRedirectToSignUpError)(error);
|
|
190
|
+
if (isRedirectToSignIn || isRedirectToSignUp) {
|
|
191
|
+
const redirect = (0, import_redirect.createRedirect)({
|
|
192
|
+
redirectAdapter,
|
|
193
|
+
baseUrl: ternSecureRequest.ternUrl,
|
|
194
|
+
signInUrl: import_constant.SIGN_IN_URL,
|
|
195
|
+
signUpUrl: import_constant.SIGN_UP_URL
|
|
196
|
+
});
|
|
197
|
+
const { returnBackUrl } = error;
|
|
198
|
+
return redirect[isRedirectToSignIn ? "redirectToSignIn" : "redirectToSignUp"]({
|
|
199
|
+
returnBackUrl
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
if ((0, import_nextErrors.isNextjsRedirectError)(error)) {
|
|
203
|
+
return redirectAdapter(error.redirectUrl);
|
|
204
|
+
}
|
|
205
|
+
throw error;
|
|
206
|
+
};
|
|
207
|
+
const handleFirebaseAuthRequest = async (request) => {
|
|
208
|
+
console.log("Checking for __cookies__ path");
|
|
209
|
+
const isDevMode = process.env.NODE_ENV === "development";
|
|
210
|
+
const ID_TOKEN_COOKIE_NAME = isDevMode ? `__dev_FIREBASE_[DEFAULT]` : `__HOST-FIREBASE_[DEFAULT]`;
|
|
211
|
+
const REFRESH_TOKEN_COOKIE_NAME = isDevMode ? "__dev_FIREBASEID_[DEFAULT]" : `__HOST-FIREBASEID_[DEFAULT]`;
|
|
212
|
+
const ID_TOKEN_COOKIE = {
|
|
213
|
+
path: "/",
|
|
214
|
+
secure: !isDevMode,
|
|
215
|
+
sameSite: "strict",
|
|
216
|
+
partitioned: true,
|
|
217
|
+
name: ID_TOKEN_COOKIE_NAME,
|
|
218
|
+
maxAge: 3456e4,
|
|
219
|
+
priority: "high"
|
|
220
|
+
};
|
|
221
|
+
const REFRESH_TOKEN_COOKIE = {
|
|
222
|
+
...ID_TOKEN_COOKIE,
|
|
223
|
+
httpOnly: true,
|
|
224
|
+
name: REFRESH_TOKEN_COOKIE_NAME
|
|
225
|
+
};
|
|
226
|
+
if (request.nextUrl.pathname === "/__cookies__") {
|
|
227
|
+
console.log("Handling /__cookies__ request");
|
|
228
|
+
const method = request.method;
|
|
229
|
+
if (method === "DELETE") {
|
|
230
|
+
const response2 = new import_server.NextResponse("");
|
|
231
|
+
response2.cookies.delete({ ...ID_TOKEN_COOKIE, maxAge: 0 });
|
|
232
|
+
response2.cookies.delete({ ...REFRESH_TOKEN_COOKIE, maxAge: 0 });
|
|
233
|
+
return response2;
|
|
234
|
+
}
|
|
235
|
+
const headers = {};
|
|
236
|
+
const headerNames = [
|
|
237
|
+
"content-type",
|
|
238
|
+
"X-Firebase-Client",
|
|
239
|
+
"X-Firebase-gmpid",
|
|
240
|
+
"X-Firebase-AppCheck",
|
|
241
|
+
"X-Client-Version"
|
|
242
|
+
];
|
|
243
|
+
headerNames.forEach((headerName) => {
|
|
244
|
+
const headerValue = request.headers.get(headerName);
|
|
245
|
+
if (headerValue) {
|
|
246
|
+
headers[headerName] = headerValue;
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
const finalTargetParam = request.nextUrl.searchParams.get("finalTarget");
|
|
250
|
+
const url = new URL(finalTargetParam || "");
|
|
251
|
+
let body = request.body;
|
|
252
|
+
const isTokenRequest = !!url.pathname.match(/^(\/securetoken\.googleapis\.com)?\/v1\/token/);
|
|
253
|
+
const isSignInRequest = !!url.pathname.match(
|
|
254
|
+
/^(\/identitytoolkit\.googleapis\.com)?\/v1\/accounts:signInWith/
|
|
255
|
+
);
|
|
256
|
+
if (!isTokenRequest && !isSignInRequest)
|
|
257
|
+
throw new Error("Could not determine the request type to proxy");
|
|
258
|
+
if (isTokenRequest) {
|
|
259
|
+
body = await request.text();
|
|
260
|
+
const bodyParams = new URLSearchParams(body.trim());
|
|
261
|
+
if (bodyParams.has("refresh_token")) {
|
|
262
|
+
const refreshToken2 = request.cookies.get(REFRESH_TOKEN_COOKIE.name)?.value;
|
|
263
|
+
if (refreshToken2) {
|
|
264
|
+
bodyParams.set("refresh_token", refreshToken2);
|
|
265
|
+
body = bodyParams.toString();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const response = await fetch(url, { method, body, headers });
|
|
270
|
+
const json = await response.json();
|
|
271
|
+
if (!response.ok) {
|
|
272
|
+
return import_server.NextResponse.json(json, { status: response.status, statusText: response.statusText });
|
|
273
|
+
}
|
|
274
|
+
let refreshToken, idToken, maxAge;
|
|
275
|
+
if (isSignInRequest) {
|
|
276
|
+
refreshToken = json.refreshToken;
|
|
277
|
+
idToken = json.idToken;
|
|
278
|
+
maxAge = json.expiresIn;
|
|
279
|
+
json.refreshToken = "REDACTED";
|
|
280
|
+
} else {
|
|
281
|
+
refreshToken = json.refresh_token;
|
|
282
|
+
idToken = json.id_token;
|
|
283
|
+
maxAge = json.expires_in;
|
|
284
|
+
json.refresh_token = "REDACTED";
|
|
285
|
+
}
|
|
286
|
+
const nextResponse = import_server.NextResponse.json(json);
|
|
287
|
+
if (idToken) nextResponse.cookies.set({ ...ID_TOKEN_COOKIE, maxAge, value: idToken });
|
|
288
|
+
if (refreshToken) nextResponse.cookies.set({ ...REFRESH_TOKEN_COOKIE, value: refreshToken });
|
|
289
|
+
return nextResponse;
|
|
290
|
+
}
|
|
291
|
+
return null;
|
|
292
|
+
};
|
|
293
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
294
|
+
0 && (module.exports = {
|
|
295
|
+
redirectAdapter,
|
|
296
|
+
ternSecureMiddleware
|
|
297
|
+
});
|
|
298
|
+
//# sourceMappingURL=ternSecureEdgeMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/ternSecureEdgeMiddleware.ts"],"sourcesContent":["import type {\r\n AuthObject,\r\n RequestOptions,\r\n TernSecureRequest,\r\n} from '@tern-secure/backend';\r\nimport {\r\n constants,\r\n createBackendInstanceClient,\r\n createTernSecureRequest,\r\n enableDebugLogging,\r\n} from '@tern-secure/backend';\r\nimport type {\r\n TernSecureConfig,\r\n} from '@tern-secure/types';\r\nimport { notFound as nextjsNotFound } from 'next/navigation';\r\nimport type { NextMiddleware,NextRequest } from 'next/server';\r\nimport { NextResponse } from 'next/server';\r\n\r\nimport { isRedirect, setHeader } from '../utils/response';\r\nimport { serverRedirectWithAuth } from '../utils/serverRedirectAuth';\r\nimport { createEdgeCompatibleLogger } from '../utils/withLogger';\r\nimport { API_URL, API_VERSION,SIGN_IN_URL, SIGN_UP_URL } from './constant';\r\nimport {\r\n isNextjsNotFoundError,\r\n isNextjsRedirectError,\r\n isRedirectToSignInError,\r\n isRedirectToSignUpError,\r\n nextjsRedirectError,\r\n redirectToSignInError,\r\n redirectToSignUpError,\r\n} from './nextErrors';\r\nimport { type AuthProtect,createProtect } from './protect';\r\nimport { createRedirect, type RedirectFun } from './redirect';\r\nimport type {\r\n NextMiddlewareEvtParam,\r\n NextMiddlewareRequestParam,\r\n NextMiddlewareReturn,\r\n} from './types';\r\nimport { decorateRequest } from './utils';\r\n\r\nexport type MiddlewareAuthObject = AuthObject & {\r\n redirectToSignIn: RedirectFun<Response>;\r\n redirectToSignUp: RedirectFun<Response>;\r\n};\r\n\r\nexport interface MiddlewareAuth {\r\n (): Promise<MiddlewareAuthObject>;\r\n\r\n protect: AuthProtect;\r\n}\r\n\r\ntype MiddlewareHandler = (\r\n auth: MiddlewareAuth,\r\n request: NextMiddlewareRequestParam,\r\n event: NextMiddlewareEvtParam,\r\n) => NextMiddlewareReturn;\r\n\r\nexport interface MiddlewareOptions extends RequestOptions {\r\n debug?: boolean;\r\n firebaseOptions?: TernSecureConfig;\r\n}\r\ntype MiddlewareOptionsCallback = (\r\n req: NextRequest,\r\n) => MiddlewareOptions | Promise<MiddlewareOptions>;\r\n\r\ninterface TernSecureMiddleware {\r\n /**\r\n * @example\r\n * export default ternSecureMiddleware((auth, request, event) => { ... }, options);\r\n */\r\n (handler: MiddlewareHandler, options?: MiddlewareOptions): NextMiddleware;\r\n\r\n /**\r\n * @example\r\n * export default ternSecureMiddleware((auth, request, event) => { ... }, (req) => options);\r\n */\r\n (handler: MiddlewareHandler, options?: MiddlewareOptionsCallback): NextMiddleware;\r\n\r\n /**\r\n * @example\r\n * export default ternSecureMiddleware(options);\r\n */\r\n (options?: MiddlewareOptions): NextMiddleware;\r\n /**\r\n * @example\r\n * export default ternSecureMiddleware;\r\n */\r\n (request: NextMiddlewareRequestParam, event: NextMiddlewareEvtParam): NextMiddlewareReturn;\r\n}\r\n\r\nconst backendClientDefaultOptions = {\r\n apiUrl: API_URL,\r\n apiVersion: API_VERSION,\r\n};\r\n\r\nconst ternSecureBackendClient = async () => {\r\n return createBackendClientWithOptions({});\r\n};\r\n\r\nconst createBackendClientWithOptions: typeof createBackendInstanceClient = options => {\r\n return createBackendInstanceClient({\r\n ...backendClientDefaultOptions,\r\n ...options,\r\n });\r\n};\r\n\r\nexport const ternSecureMiddleware = ((\r\n ...args: unknown[]\r\n): NextMiddleware | NextMiddlewareReturn => {\r\n const [request, event] = parseRequestAndEvent(args);\r\n const [handler, params] = parseHandlerAndOptions(args);\r\n\r\n const middleware = () => {\r\n const withAuthNextMiddleware: NextMiddleware = async (request, event) => {\r\n const resolvedParams = typeof params === 'function' ? await params(request) : params;\r\n const signInUrl = resolvedParams.signInUrl || SIGN_IN_URL;\r\n const signUpUrl = resolvedParams.signUpUrl || SIGN_UP_URL;\r\n\r\n const options = {\r\n signInUrl,\r\n signUpUrl,\r\n ...resolvedParams,\r\n };\r\n\r\n const logger = createEdgeCompatibleLogger(options.debug);\r\n\r\n if (options.debug) {\r\n enableDebugLogging();\r\n }\r\n\r\n //const { authObject, headers: authHeaders } =\r\n // await authenticateMiddlewareRequest(request, checkRevoked, logger);\r\n\r\n //const reqBackend = await createBackendInstanceEdge(request, checkRevoked);\r\n const reqBackendClient = await ternSecureBackendClient();\r\n //const requestState = reqBackend.requestState;\r\n //const authObject = requestState.auth();\r\n //const authHeaders = requestState.headers;\r\n\r\n const ternSecureRequest = createTernSecureRequest(request);\r\n\r\n const requestStateClient = await reqBackendClient.authenticateRequest(\r\n ternSecureRequest,\r\n options,\r\n );\r\n\r\n const authObjectClient = requestStateClient.auth();\r\n\r\n const { redirectToSignIn } = createMiddlewareRedirects(ternSecureRequest);\r\n\r\n const { redirectToSignUp } = createMiddlewareRedirects(ternSecureRequest);\r\n\r\n const protect = await createMiddlewareProtect(\r\n ternSecureRequest,\r\n authObjectClient,\r\n redirectToSignIn,\r\n );\r\n\r\n const authObj: MiddlewareAuthObject = Object.assign(authObjectClient, {\r\n redirectToSignIn,\r\n redirectToSignUp,\r\n });\r\n\r\n const authHandler = () => Promise.resolve(authObj);\r\n authHandler.protect = protect;\r\n\r\n let handlerResult: Response = NextResponse.next();\r\n\r\n try {\r\n const userHandlerResult = await handler?.(authHandler, request, event);\r\n handlerResult = userHandlerResult || handlerResult;\r\n } catch (error: any) {\r\n handlerResult = handleControlError(error, ternSecureRequest, request);\r\n }\r\n\r\n if (requestStateClient.headers) {\r\n requestStateClient.headers.forEach((value, key) => {\r\n handlerResult.headers.append(key, value);\r\n });\r\n }\r\n\r\n if (isRedirect(handlerResult)) {\r\n return serverRedirectWithAuth(ternSecureRequest, handlerResult);\r\n }\r\n\r\n decorateRequest(ternSecureRequest, handlerResult, requestStateClient);\r\n return handlerResult;\r\n };\r\n\r\n const fireNextMiddleware: NextMiddleware = async (request) => {\r\n console.log('[TernSecureMiddleware] Firebase Request URL:', request.url);\r\n if (isFirebaseCookieRequest(request)) {\r\n const options = typeof params === 'function' ? await params(request) : params;\r\n rewriteFirebaseRequest(options, request);\r\n return handleFirebaseAuthRequest(request);\r\n }\r\n };\r\n\r\n const nextMiddleware: NextMiddleware = async (request, event) => {\r\n if (isFirebaseRequest(request)) {\r\n return fireNextMiddleware(request, event);\r\n }\r\n return withAuthNextMiddleware(request, event);\r\n };\r\n\r\n if (request && event) {\r\n return nextMiddleware(request, event);\r\n }\r\n\r\n return nextMiddleware;\r\n };\r\n return middleware();\r\n}) as TernSecureMiddleware;\r\n\r\nconst parseRequestAndEvent = (args: unknown[]) => {\r\n return [\r\n args[0] instanceof Request ? args[0] : undefined,\r\n args[0] instanceof Request ? args[1] : undefined,\r\n ] as [NextMiddlewareRequestParam | undefined, NextMiddlewareEvtParam | undefined];\r\n};\r\n\r\nconst parseHandlerAndOptions = (args: unknown[]) => {\r\n return [\r\n typeof args[0] === 'function' ? args[0] : undefined,\r\n (args.length === 2 ? args[1] : typeof args[0] === 'function' ? {} : args[0]) || {},\r\n ] as [MiddlewareHandler | undefined, MiddlewareOptions | MiddlewareOptionsCallback];\r\n};\r\n\r\nconst isFirebaseRequest = (request: NextMiddlewareRequestParam) =>\r\n request.nextUrl.pathname.startsWith('/__/');\r\n\r\nconst rewriteFirebaseRequest = (options: MiddlewareOptions, request: NextMiddlewareRequestParam) => {\r\n const newUrl = new URL(request.url);\r\n newUrl.host = options.firebaseOptions?.authDomain || '';\r\n newUrl.port = '';\r\n return NextResponse.rewrite(newUrl);\r\n}\r\n\r\nconst finalTarget = (request: NextMiddlewareRequestParam) => {\r\n const finalTargetUrl = request.nextUrl.searchParams.get('finalTarget');\r\n return finalTargetUrl ? new URL(finalTargetUrl, request.url) : undefined;\r\n};\r\n\r\nconst isFirebaseCookieRequest = (request: NextMiddlewareRequestParam) =>\r\n request.nextUrl.pathname === '/__cookies__';\r\n\r\n/**\r\n * Create middleware redirect functions\r\n */\r\nconst createMiddlewareRedirects = (ternSecureRequest: TernSecureRequest) => {\r\n const redirectToSignIn: MiddlewareAuthObject['redirectToSignIn'] = (opts = {}) => {\r\n const url = ternSecureRequest.ternUrl.toString();\r\n redirectToSignInError(url, opts.returnBackUrl);\r\n };\r\n\r\n const redirectToSignUp: MiddlewareAuthObject['redirectToSignUp'] = (opts = {}) => {\r\n const url = ternSecureRequest.ternUrl.toString();\r\n redirectToSignUpError(url, opts.returnBackUrl);\r\n };\r\n\r\n return { redirectToSignIn, redirectToSignUp };\r\n};\r\n\r\nconst createMiddlewareProtect = (\r\n ternSecureRequest: TernSecureRequest,\r\n authObject: AuthObject,\r\n redirectToSignIn: RedirectFun<Response>,\r\n) => {\r\n return (async (params: any, options: any) => {\r\n const notFound = () => nextjsNotFound();\r\n\r\n const redirect = (url: string) =>\r\n nextjsRedirectError(url, {\r\n redirectUrl: url,\r\n });\r\n\r\n return createProtect({\r\n request: ternSecureRequest,\r\n redirect,\r\n notFound,\r\n authObject,\r\n redirectToSignIn,\r\n })(params, options);\r\n }) as unknown as Promise<AuthProtect>;\r\n};\r\n\r\nexport const redirectAdapter = (url: string | URL) => {\r\n return NextResponse.redirect(url, {\r\n headers: { [constants.Headers.TernSecureRedirectTo]: 'true' },\r\n });\r\n};\r\n\r\n/**\r\n * Handle control flow errors in middleware\r\n */\r\nconst handleControlError = (\r\n error: any,\r\n ternSecureRequest: TernSecureRequest,\r\n nextrequest: NextRequest,\r\n): Response => {\r\n if (isNextjsNotFoundError(error)) {\r\n return setHeader(\r\n NextResponse.rewrite(new URL(`/tern_${Date.now()}`, nextrequest.url)),\r\n constants.Headers.AuthReason,\r\n 'protect-rewrite',\r\n );\r\n }\r\n\r\n const isRedirectToSignIn = isRedirectToSignInError(error);\r\n const isRedirectToSignUp = isRedirectToSignUpError(error);\r\n\r\n if (isRedirectToSignIn || isRedirectToSignUp) {\r\n const redirect = createRedirect({\r\n redirectAdapter,\r\n baseUrl: ternSecureRequest.ternUrl,\r\n signInUrl: SIGN_IN_URL,\r\n signUpUrl: SIGN_UP_URL,\r\n });\r\n\r\n const { returnBackUrl } = error;\r\n\r\n return redirect[isRedirectToSignIn ? 'redirectToSignIn' : 'redirectToSignUp']({\r\n returnBackUrl,\r\n });\r\n }\r\n\r\n if (isNextjsRedirectError(error)) {\r\n return redirectAdapter(error.redirectUrl);\r\n }\r\n\r\n throw error;\r\n};\r\n\r\nconst handleFirebaseAuthRequest = async (\r\n request: NextRequest,\r\n): Promise<NextResponse | null> => {\r\n\r\n console.log('Checking for __cookies__ path');\r\n\r\n const isDevMode = process.env.NODE_ENV === 'development';\r\n const ID_TOKEN_COOKIE_NAME = isDevMode ? `__dev_FIREBASE_[DEFAULT]` : `__HOST-FIREBASE_[DEFAULT]`;\r\n const REFRESH_TOKEN_COOKIE_NAME = isDevMode\r\n ? '__dev_FIREBASEID_[DEFAULT]'\r\n : `__HOST-FIREBASEID_[DEFAULT]`;\r\n const ID_TOKEN_COOKIE = {\r\n path: '/',\r\n secure: !isDevMode,\r\n sameSite: 'strict',\r\n partitioned: true,\r\n name: ID_TOKEN_COOKIE_NAME,\r\n maxAge: 34560000,\r\n priority: 'high',\r\n } as const;\r\n const REFRESH_TOKEN_COOKIE = {\r\n ...ID_TOKEN_COOKIE,\r\n httpOnly: true,\r\n name: REFRESH_TOKEN_COOKIE_NAME,\r\n } as const;\r\n\r\n if (request.nextUrl.pathname === '/__cookies__') {\r\n console.log('Handling /__cookies__ request');\r\n const method = request.method;\r\n if (method === 'DELETE') {\r\n const response = new NextResponse('');\r\n response.cookies.delete({ ...ID_TOKEN_COOKIE, maxAge: 0 });\r\n response.cookies.delete({ ...REFRESH_TOKEN_COOKIE, maxAge: 0 });\r\n return response;\r\n }\r\n\r\n const headers: Record<string, string> = {};\r\n const headerNames = [\r\n 'content-type',\r\n 'X-Firebase-Client',\r\n 'X-Firebase-gmpid',\r\n 'X-Firebase-AppCheck',\r\n 'X-Client-Version',\r\n ];\r\n\r\n headerNames.forEach(headerName => {\r\n const headerValue = request.headers.get(headerName);\r\n if (headerValue) {\r\n headers[headerName] = headerValue;\r\n }\r\n });\r\n\r\n const finalTargetParam = request.nextUrl.searchParams.get('finalTarget');\r\n\r\n const url = new URL(finalTargetParam || '');\r\n let body: ReadableStream<any> | string | null = request.body;\r\n\r\n const isTokenRequest = !!url.pathname.match(/^(\\/securetoken\\.googleapis\\.com)?\\/v1\\/token/);\r\n const isSignInRequest = !!url.pathname.match(\r\n /^(\\/identitytoolkit\\.googleapis\\.com)?\\/v1\\/accounts:signInWith/,\r\n );\r\n\r\n if (!isTokenRequest && !isSignInRequest)\r\n throw new Error('Could not determine the request type to proxy');\r\n\r\n if (isTokenRequest) {\r\n body = await request.text();\r\n const bodyParams = new URLSearchParams(body.trim());\r\n if (bodyParams.has('refresh_token')) {\r\n const refreshToken = request.cookies.get(REFRESH_TOKEN_COOKIE.name)?.value;\r\n if (refreshToken) {\r\n bodyParams.set('refresh_token', refreshToken);\r\n body = bodyParams.toString();\r\n }\r\n }\r\n }\r\n\r\n const response = await fetch(url, { method, body, headers });\r\n const json = await response.json();\r\n\r\n if (!response.ok) {\r\n return NextResponse.json(json, { status: response.status, statusText: response.statusText });\r\n }\r\n\r\n let refreshToken, idToken, maxAge;\r\n if (isSignInRequest) {\r\n refreshToken = json.refreshToken;\r\n idToken = json.idToken;\r\n maxAge = json.expiresIn;\r\n json.refreshToken = 'REDACTED';\r\n } else {\r\n refreshToken = json.refresh_token;\r\n idToken = json.id_token;\r\n maxAge = json.expires_in;\r\n json.refresh_token = 'REDACTED';\r\n }\r\n\r\n const nextResponse = NextResponse.json(json);\r\n if (idToken) nextResponse.cookies.set({ ...ID_TOKEN_COOKIE, maxAge, value: idToken });\r\n if (refreshToken) nextResponse.cookies.set({ ...REFRESH_TOKEN_COOKIE, value: refreshToken });\r\n return nextResponse;\r\n }\r\n return null;\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,qBAKO;AAIP,wBAA2C;AAE3C,oBAA6B;AAE7B,sBAAsC;AACtC,gCAAuC;AACvC,wBAA2C;AAC3C,sBAA8D;AAC9D,wBAQO;AACP,qBAA+C;AAC/C,sBAAiD;AAMjD,mBAAgC;AAoDhC,MAAM,8BAA8B;AAAA,EAClC,QAAQ;AAAA,EACR,YAAY;AACd;AAEA,MAAM,0BAA0B,YAAY;AAC1C,SAAO,+BAA+B,CAAC,CAAC;AAC1C;AAEA,MAAM,iCAAqE,aAAW;AACpF,aAAO,4CAA4B;AAAA,IACjC,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AACH;AAEO,MAAM,uBAAwB,IAChC,SACuC;AAC1C,QAAM,CAAC,SAAS,KAAK,IAAI,qBAAqB,IAAI;AAClD,QAAM,CAAC,SAAS,MAAM,IAAI,uBAAuB,IAAI;AAErD,QAAM,aAAa,MAAM;AACvB,UAAM,yBAAyC,OAAOA,UAASC,WAAU;AACvE,YAAM,iBAAiB,OAAO,WAAW,aAAa,MAAM,OAAOD,QAAO,IAAI;AAC9E,YAAM,YAAY,eAAe,aAAa;AAC9C,YAAM,YAAY,eAAe,aAAa;AAE9C,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL;AAEA,YAAM,aAAS,8CAA2B,QAAQ,KAAK;AAEvD,UAAI,QAAQ,OAAO;AACjB,+CAAmB;AAAA,MACrB;AAMA,YAAM,mBAAmB,MAAM,wBAAwB;AAKvD,YAAM,wBAAoB,wCAAwBA,QAAO;AAEzD,YAAM,qBAAqB,MAAM,iBAAiB;AAAA,QAChD;AAAA,QACA;AAAA,MACF;AAEA,YAAM,mBAAmB,mBAAmB,KAAK;AAEjD,YAAM,EAAE,iBAAiB,IAAI,0BAA0B,iBAAiB;AAExE,YAAM,EAAE,iBAAiB,IAAI,0BAA0B,iBAAiB;AAExE,YAAM,UAAU,MAAM;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,UAAgC,OAAO,OAAO,kBAAkB;AAAA,QACpE;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,cAAc,MAAM,QAAQ,QAAQ,OAAO;AACjD,kBAAY,UAAU;AAEtB,UAAI,gBAA0B,2BAAa,KAAK;AAEhD,UAAI;AACF,cAAM,oBAAoB,MAAM,UAAU,aAAaA,UAASC,MAAK;AACrE,wBAAgB,qBAAqB;AAAA,MACvC,SAAS,OAAY;AACnB,wBAAgB,mBAAmB,OAAO,mBAAmBD,QAAO;AAAA,MACtE;AAEA,UAAI,mBAAmB,SAAS;AAC9B,2BAAmB,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACjD,wBAAc,QAAQ,OAAO,KAAK,KAAK;AAAA,QACzC,CAAC;AAAA,MACH;AAEA,cAAI,4BAAW,aAAa,GAAG;AAC7B,mBAAO,kDAAuB,mBAAmB,aAAa;AAAA,MAChE;AAEA,wCAAgB,mBAAmB,eAAe,kBAAkB;AACpE,aAAO;AAAA,IACT;AAEA,UAAM,qBAAqC,OAAOA,aAAY;AAC5D,cAAQ,IAAI,gDAAgDA,SAAQ,GAAG;AACvE,UAAI,wBAAwBA,QAAO,GAAG;AACpC,cAAM,UAAU,OAAO,WAAW,aAAa,MAAM,OAAOA,QAAO,IAAI;AACvE,+BAAuB,SAASA,QAAO;AACvC,eAAO,0BAA0BA,QAAO;AAAA,MAC1C;AAAA,IACF;AAEA,UAAM,iBAAiC,OAAOA,UAASC,WAAU;AAC9D,UAAI,kBAAkBD,QAAO,GAAG;AAC/B,eAAO,mBAAmBA,UAASC,MAAK;AAAA,MACzC;AACD,aAAO,uBAAuBD,UAASC,MAAK;AAAA,IAC9C;AAEA,QAAI,WAAW,OAAO;AACpB,aAAO,eAAe,SAAS,KAAK;AAAA,IACtC;AAEA,WAAO;AAAA,EACT;AACA,SAAO,WAAW;AACpB;AAEA,MAAM,uBAAuB,CAAC,SAAoB;AAChD,SAAO;AAAA,IACL,KAAK,CAAC,aAAa,UAAU,KAAK,CAAC,IAAI;AAAA,IACvC,KAAK,CAAC,aAAa,UAAU,KAAK,CAAC,IAAI;AAAA,EACzC;AACF;AAEA,MAAM,yBAAyB,CAAC,SAAoB;AAClD,SAAO;AAAA,IACL,OAAO,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,IAAI;AAAA,KACzC,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;AAAA,EACnF;AACF;AAEA,MAAM,oBAAoB,CAAC,YACzB,QAAQ,QAAQ,SAAS,WAAW,MAAM;AAE5C,MAAM,yBAAyB,CAAC,SAA4B,YAAwC;AAClG,QAAM,SAAS,IAAI,IAAI,QAAQ,GAAG;AAClC,SAAO,OAAO,QAAQ,iBAAiB,cAAc;AACrD,SAAO,OAAO;AACd,SAAO,2BAAa,QAAQ,MAAM;AACpC;AAEA,MAAM,cAAc,CAAC,YAAwC;AAC3D,QAAM,iBAAiB,QAAQ,QAAQ,aAAa,IAAI,aAAa;AACrE,SAAO,iBAAiB,IAAI,IAAI,gBAAgB,QAAQ,GAAG,IAAI;AACjE;AAEA,MAAM,0BAA0B,CAAC,YAC/B,QAAQ,QAAQ,aAAa;AAK/B,MAAM,4BAA4B,CAAC,sBAAyC;AAC1E,QAAM,mBAA6D,CAAC,OAAO,CAAC,MAAM;AAChF,UAAM,MAAM,kBAAkB,QAAQ,SAAS;AAC/C,iDAAsB,KAAK,KAAK,aAAa;AAAA,EAC/C;AAEA,QAAM,mBAA6D,CAAC,OAAO,CAAC,MAAM;AAChF,UAAM,MAAM,kBAAkB,QAAQ,SAAS;AAC/C,iDAAsB,KAAK,KAAK,aAAa;AAAA,EAC/C;AAEA,SAAO,EAAE,kBAAkB,iBAAiB;AAC9C;AAEA,MAAM,0BAA0B,CAC9B,mBACA,YACA,qBACG;AACH,SAAQ,OAAO,QAAa,YAAiB;AAC3C,UAAM,WAAW,UAAM,kBAAAC,UAAe;AAEtC,UAAM,WAAW,CAAC,YAChB,uCAAoB,KAAK;AAAA,MACvB,aAAa;AAAA,IACf,CAAC;AAEH,eAAO,8BAAc;AAAA,MACnB,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC,EAAE,QAAQ,OAAO;AAAA,EACpB;AACF;AAEO,MAAM,kBAAkB,CAAC,QAAsB;AACpD,SAAO,2BAAa,SAAS,KAAK;AAAA,IAChC,SAAS,EAAE,CAAC,yBAAU,QAAQ,oBAAoB,GAAG,OAAO;AAAA,EAC9D,CAAC;AACH;AAKA,MAAM,qBAAqB,CACzB,OACA,mBACA,gBACa;AACb,UAAI,yCAAsB,KAAK,GAAG;AAChC,eAAO;AAAA,MACL,2BAAa,QAAQ,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,YAAY,GAAG,CAAC;AAAA,MACpE,yBAAU,QAAQ;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,yBAAqB,2CAAwB,KAAK;AACxD,QAAM,yBAAqB,2CAAwB,KAAK;AAExD,MAAI,sBAAsB,oBAAoB;AAC5C,UAAM,eAAW,gCAAe;AAAA,MAC9B;AAAA,MACA,SAAS,kBAAkB;AAAA,MAC3B,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC;AAED,UAAM,EAAE,cAAc,IAAI;AAE1B,WAAO,SAAS,qBAAqB,qBAAqB,kBAAkB,EAAE;AAAA,MAC5E;AAAA,IACF,CAAC;AAAA,EACH;AAEA,UAAI,yCAAsB,KAAK,GAAG;AAChC,WAAO,gBAAgB,MAAM,WAAW;AAAA,EAC1C;AAEA,QAAM;AACR;AAEA,MAAM,4BAA4B,OAChC,YACiC;AAEjC,UAAQ,IAAI,+BAA+B;AAE3C,QAAM,YAAY,QAAQ,IAAI,aAAa;AAC3C,QAAM,uBAAuB,YAAY,6BAA6B;AACtE,QAAM,4BAA4B,YAC9B,+BACA;AACJ,QAAM,kBAAkB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AACA,QAAM,uBAAuB;AAAA,IAC3B,GAAG;AAAA,IACH,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AAEA,MAAI,QAAQ,QAAQ,aAAa,gBAAgB;AAC/C,YAAQ,IAAI,+BAA+B;AAC3C,UAAM,SAAS,QAAQ;AACvB,QAAI,WAAW,UAAU;AACvB,YAAMC,YAAW,IAAI,2BAAa,EAAE;AACpC,MAAAA,UAAS,QAAQ,OAAO,EAAE,GAAG,iBAAiB,QAAQ,EAAE,CAAC;AACzD,MAAAA,UAAS,QAAQ,OAAO,EAAE,GAAG,sBAAsB,QAAQ,EAAE,CAAC;AAC9D,aAAOA;AAAA,IACT;AAEA,UAAM,UAAkC,CAAC;AACrC,UAAM,cAAc;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,gBAAY,QAAQ,gBAAc;AAChC,YAAM,cAAc,QAAQ,QAAQ,IAAI,UAAU;AAClD,UAAI,aAAa;AACf,gBAAQ,UAAU,IAAI;AAAA,MACxB;AAAA,IACF,CAAC;AAED,UAAM,mBAAmB,QAAQ,QAAQ,aAAa,IAAI,aAAa;AAEvE,UAAM,MAAM,IAAI,IAAI,oBAAoB,EAAE;AAC1C,QAAI,OAA4C,QAAQ;AAExD,UAAM,iBAAiB,CAAC,CAAC,IAAI,SAAS,MAAM,+CAA+C;AAC3F,UAAM,kBAAkB,CAAC,CAAC,IAAI,SAAS;AAAA,MACrC;AAAA,IACF;AAEA,QAAI,CAAC,kBAAkB,CAAC;AACtB,YAAM,IAAI,MAAM,+CAA+C;AAEjE,QAAI,gBAAgB;AAClB,aAAO,MAAM,QAAQ,KAAK;AAC1B,YAAM,aAAa,IAAI,gBAAgB,KAAK,KAAK,CAAC;AAClD,UAAI,WAAW,IAAI,eAAe,GAAG;AACnC,cAAMC,gBAAe,QAAQ,QAAQ,IAAI,qBAAqB,IAAI,GAAG;AACrE,YAAIA,eAAc;AAChB,qBAAW,IAAI,iBAAiBA,aAAY;AAC5C,iBAAO,WAAW,SAAS;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,MAAM,QAAQ,CAAC;AAC3D,UAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO,2BAAa,KAAK,MAAM,EAAE,QAAQ,SAAS,QAAQ,YAAY,SAAS,WAAW,CAAC;AAAA,IAC7F;AAEA,QAAI,cAAc,SAAS;AAC3B,QAAI,iBAAiB;AACnB,qBAAe,KAAK;AACpB,gBAAU,KAAK;AACf,eAAS,KAAK;AACd,WAAK,eAAe;AAAA,IACtB,OAAO;AACL,qBAAe,KAAK;AACpB,gBAAU,KAAK;AACf,eAAS,KAAK;AACd,WAAK,gBAAgB;AAAA,IACvB;AAEA,UAAM,eAAe,2BAAa,KAAK,IAAI;AAC3C,QAAI,QAAS,cAAa,QAAQ,IAAI,EAAE,GAAG,iBAAiB,QAAQ,OAAO,QAAQ,CAAC;AACpF,QAAI,aAAc,cAAa,QAAQ,IAAI,EAAE,GAAG,sBAAsB,OAAO,aAAa,CAAC;AAC3F,WAAO;AAAA,EACT;AACA,SAAO;AACT;","names":["request","event","nextjsNotFound","response","refreshToken"]}
|
|
@@ -0,0 +1,192 @@
|
|
|
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 ternSecureFireMiddleware_exports = {};
|
|
20
|
+
__export(ternSecureFireMiddleware_exports, {
|
|
21
|
+
redirectAdapter: () => redirectAdapter,
|
|
22
|
+
ternSecureMiddleware: () => ternSecureMiddleware
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(ternSecureFireMiddleware_exports);
|
|
25
|
+
var import_backend = require("@tern-secure/backend");
|
|
26
|
+
var import_navigation = require("next/navigation");
|
|
27
|
+
var import_server = require("next/server");
|
|
28
|
+
var import_response = require("../utils/response");
|
|
29
|
+
var import_serverRedirectAuth = require("../utils/serverRedirectAuth");
|
|
30
|
+
var import_constant = require("./constant");
|
|
31
|
+
var import_nextErrors = require("./nextErrors");
|
|
32
|
+
var import_protect = require("./protect");
|
|
33
|
+
var import_redirect = require("./redirect");
|
|
34
|
+
var import_utils = require("./utils");
|
|
35
|
+
const backendClientDefaultOptions = {
|
|
36
|
+
apiUrl: import_constant.API_URL,
|
|
37
|
+
apiVersion: import_constant.API_VERSION
|
|
38
|
+
};
|
|
39
|
+
const ternSecureFireClient = async () => {
|
|
40
|
+
return createFireClientWithOptions({});
|
|
41
|
+
};
|
|
42
|
+
const createFireClientWithOptions = (options) => {
|
|
43
|
+
return (0, import_backend.createFireClient)({
|
|
44
|
+
...backendClientDefaultOptions,
|
|
45
|
+
...options
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
const ternSecureMiddleware = (...args) => {
|
|
49
|
+
const [request, event] = parseRequestAndEvent(args);
|
|
50
|
+
const [handler, params] = parseHandlerAndOptions(args);
|
|
51
|
+
const middleware = () => {
|
|
52
|
+
const runMiddleware = async (request2, event2) => {
|
|
53
|
+
const resolvedParams = typeof params === "function" ? await params(request2) : params;
|
|
54
|
+
const signInUrl = resolvedParams.signInUrl || import_constant.SIGN_IN_URL;
|
|
55
|
+
const signUpUrl = resolvedParams.signUpUrl || import_constant.SIGN_UP_URL;
|
|
56
|
+
const options = {
|
|
57
|
+
signInUrl,
|
|
58
|
+
signUpUrl,
|
|
59
|
+
...resolvedParams
|
|
60
|
+
};
|
|
61
|
+
const reqBackendClient = await ternSecureFireClient();
|
|
62
|
+
const ternSecureRequest = (0, import_backend.createTernSecureRequest)(request2);
|
|
63
|
+
const requestStateClient = await reqBackendClient.authenticateRequest(
|
|
64
|
+
ternSecureRequest,
|
|
65
|
+
options
|
|
66
|
+
);
|
|
67
|
+
const authObjectClient = requestStateClient.auth();
|
|
68
|
+
const { redirectToSignIn } = createMiddlewareRedirects(ternSecureRequest);
|
|
69
|
+
const { redirectToSignUp } = createMiddlewareRedirects(ternSecureRequest);
|
|
70
|
+
const protect = await createMiddlewareProtect(
|
|
71
|
+
ternSecureRequest,
|
|
72
|
+
authObjectClient,
|
|
73
|
+
redirectToSignIn
|
|
74
|
+
);
|
|
75
|
+
const authObj = Object.assign(authObjectClient, {
|
|
76
|
+
redirectToSignIn,
|
|
77
|
+
redirectToSignUp
|
|
78
|
+
});
|
|
79
|
+
const authHandler = () => Promise.resolve(authObj);
|
|
80
|
+
authHandler.protect = protect;
|
|
81
|
+
let handlerResult = import_server.NextResponse.next();
|
|
82
|
+
try {
|
|
83
|
+
const userHandlerResult = await handler?.(authHandler, request2, event2);
|
|
84
|
+
handlerResult = userHandlerResult || handlerResult;
|
|
85
|
+
} catch (error) {
|
|
86
|
+
handlerResult = handleControlError(error, ternSecureRequest, request2);
|
|
87
|
+
}
|
|
88
|
+
if (requestStateClient.headers) {
|
|
89
|
+
requestStateClient.headers.forEach((value, key) => {
|
|
90
|
+
handlerResult.headers.append(key, value);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if ((0, import_response.isRedirect)(handlerResult)) {
|
|
94
|
+
return (0, import_serverRedirectAuth.serverRedirectWithAuth)(ternSecureRequest, handlerResult);
|
|
95
|
+
}
|
|
96
|
+
(0, import_utils.decorateRequest)(ternSecureRequest, handlerResult, requestStateClient);
|
|
97
|
+
return handlerResult;
|
|
98
|
+
};
|
|
99
|
+
const nextMiddleware = async (request2, event2) => {
|
|
100
|
+
console.log("[TernSecureMiddleware] Request URL:", request2.url);
|
|
101
|
+
console.log("[TernSecureMiddleware] Request pathname:", request2.nextUrl.pathname);
|
|
102
|
+
return runMiddleware(request2, event2);
|
|
103
|
+
};
|
|
104
|
+
if (request && event) {
|
|
105
|
+
return nextMiddleware(request, event);
|
|
106
|
+
}
|
|
107
|
+
return nextMiddleware;
|
|
108
|
+
};
|
|
109
|
+
return middleware();
|
|
110
|
+
};
|
|
111
|
+
const parseRequestAndEvent = (args) => {
|
|
112
|
+
return [
|
|
113
|
+
args[0] instanceof Request ? args[0] : void 0,
|
|
114
|
+
args[0] instanceof Request ? args[1] : void 0
|
|
115
|
+
];
|
|
116
|
+
};
|
|
117
|
+
const parseHandlerAndOptions = (args) => {
|
|
118
|
+
return [
|
|
119
|
+
typeof args[0] === "function" ? args[0] : void 0,
|
|
120
|
+
(args.length === 2 ? args[1] : typeof args[0] === "function" ? {} : args[0]) || {}
|
|
121
|
+
];
|
|
122
|
+
};
|
|
123
|
+
const isFirebaseRequest = (request) => request.nextUrl.pathname.startsWith("/__/");
|
|
124
|
+
const finalTarget = (request) => {
|
|
125
|
+
const finalTargetUrl = request.nextUrl.searchParams.get("finalTarget");
|
|
126
|
+
return finalTargetUrl ? new URL(finalTargetUrl, request.url) : void 0;
|
|
127
|
+
};
|
|
128
|
+
const isFirebaseCookieRequest = (request) => request.nextUrl.pathname === "/__cookies__";
|
|
129
|
+
const createMiddlewareRedirects = (ternSecureRequest) => {
|
|
130
|
+
const redirectToSignIn = (opts = {}) => {
|
|
131
|
+
const url = ternSecureRequest.ternUrl.toString();
|
|
132
|
+
(0, import_nextErrors.redirectToSignInError)(url, opts.returnBackUrl);
|
|
133
|
+
};
|
|
134
|
+
const redirectToSignUp = (opts = {}) => {
|
|
135
|
+
const url = ternSecureRequest.ternUrl.toString();
|
|
136
|
+
(0, import_nextErrors.redirectToSignUpError)(url, opts.returnBackUrl);
|
|
137
|
+
};
|
|
138
|
+
return { redirectToSignIn, redirectToSignUp };
|
|
139
|
+
};
|
|
140
|
+
const createMiddlewareProtect = (ternSecureRequest, authObject, redirectToSignIn) => {
|
|
141
|
+
return async (params, options) => {
|
|
142
|
+
const notFound = () => (0, import_navigation.notFound)();
|
|
143
|
+
const redirect = (url) => (0, import_nextErrors.nextjsRedirectError)(url, {
|
|
144
|
+
redirectUrl: url
|
|
145
|
+
});
|
|
146
|
+
return (0, import_protect.createProtect)({
|
|
147
|
+
request: ternSecureRequest,
|
|
148
|
+
redirect,
|
|
149
|
+
notFound,
|
|
150
|
+
authObject,
|
|
151
|
+
redirectToSignIn
|
|
152
|
+
})(params, options);
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
const redirectAdapter = (url) => {
|
|
156
|
+
return import_server.NextResponse.redirect(url, {
|
|
157
|
+
headers: { [import_backend.constants.Headers.TernSecureRedirectTo]: "true" }
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
const handleControlError = (error, ternSecureRequest, nextrequest) => {
|
|
161
|
+
if ((0, import_nextErrors.isNextjsNotFoundError)(error)) {
|
|
162
|
+
return (0, import_response.setHeader)(
|
|
163
|
+
import_server.NextResponse.rewrite(new URL(`/tern_${Date.now()}`, nextrequest.url)),
|
|
164
|
+
import_backend.constants.Headers.AuthReason,
|
|
165
|
+
"protect-rewrite"
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
const isRedirectToSignIn = (0, import_nextErrors.isRedirectToSignInError)(error);
|
|
169
|
+
const isRedirectToSignUp = (0, import_nextErrors.isRedirectToSignUpError)(error);
|
|
170
|
+
if (isRedirectToSignIn || isRedirectToSignUp) {
|
|
171
|
+
const redirect = (0, import_redirect.createRedirect)({
|
|
172
|
+
redirectAdapter,
|
|
173
|
+
baseUrl: ternSecureRequest.ternUrl,
|
|
174
|
+
signInUrl: import_constant.SIGN_IN_URL,
|
|
175
|
+
signUpUrl: import_constant.SIGN_UP_URL
|
|
176
|
+
});
|
|
177
|
+
const { returnBackUrl } = error;
|
|
178
|
+
return redirect[isRedirectToSignIn ? "redirectToSignIn" : "redirectToSignUp"]({
|
|
179
|
+
returnBackUrl
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
if ((0, import_nextErrors.isNextjsRedirectError)(error)) {
|
|
183
|
+
return redirectAdapter(error.redirectUrl);
|
|
184
|
+
}
|
|
185
|
+
throw error;
|
|
186
|
+
};
|
|
187
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
188
|
+
0 && (module.exports = {
|
|
189
|
+
redirectAdapter,
|
|
190
|
+
ternSecureMiddleware
|
|
191
|
+
});
|
|
192
|
+
//# sourceMappingURL=ternSecureFireMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/server/ternSecureFireMiddleware.ts"],"sourcesContent":["import type {\n AuthObject,\n RequestOptions,\n TernSecureRequest,\n} from '@tern-secure/backend';\nimport {\n constants,\n createFireClient,\n createTernSecureRequest,\n} from '@tern-secure/backend';\nimport type {\n TernSecureConfig,\n} from '@tern-secure/types';\nimport { notFound as nextjsNotFound } from 'next/navigation';\nimport type { NextMiddleware,NextRequest } from 'next/server';\nimport { NextResponse } from 'next/server';\n\nimport { isRedirect, setHeader } from '../utils/response';\nimport { serverRedirectWithAuth } from '../utils/serverRedirectAuth';\nimport { API_URL, API_VERSION,SIGN_IN_URL, SIGN_UP_URL } from './constant';\nimport {\n isNextjsNotFoundError,\n isNextjsRedirectError,\n isRedirectToSignInError,\n isRedirectToSignUpError,\n nextjsRedirectError,\n redirectToSignInError,\n redirectToSignUpError,\n} from './nextErrors';\nimport { type AuthProtect,createProtect } from './protect';\nimport { createRedirect, type RedirectFun } from './redirect';\nimport type {\n NextMiddlewareEvtParam,\n NextMiddlewareRequestParam,\n NextMiddlewareReturn,\n} from './types';\nimport { decorateRequest } from './utils';\n\nexport type MiddlewareAuthObject = AuthObject & {\n redirectToSignIn: RedirectFun<Response>;\n redirectToSignUp: RedirectFun<Response>;\n};\n\nexport interface MiddlewareAuth {\n (): Promise<MiddlewareAuthObject>;\n\n protect: AuthProtect;\n}\n\ntype MiddlewareHandler = (\n auth: MiddlewareAuth,\n request: NextMiddlewareRequestParam,\n event: NextMiddlewareEvtParam,\n) => NextMiddlewareReturn;\n\nexport interface MiddlewareOptions extends RequestOptions {\n debug?: boolean;\n firebaseOptions?: TernSecureConfig;\n}\ntype MiddlewareOptionsCallback = (\n req: NextRequest,\n) => MiddlewareOptions | Promise<MiddlewareOptions>;\n\ninterface TernSecureMiddleware {\n /**\n * @example\n * export default ternSecureMiddleware((auth, request, event) => { ... }, options);\n */\n (handler: MiddlewareHandler, options?: MiddlewareOptions): NextMiddleware;\n\n /**\n * @example\n * export default ternSecureMiddleware((auth, request, event) => { ... }, (req) => options);\n */\n (handler: MiddlewareHandler, options?: MiddlewareOptionsCallback): NextMiddleware;\n\n /**\n * @example\n * export default ternSecureMiddleware(options);\n */\n (options?: MiddlewareOptions): NextMiddleware;\n /**\n * @example\n * export default ternSecureMiddleware;\n */\n (request: NextMiddlewareRequestParam, event: NextMiddlewareEvtParam): NextMiddlewareReturn;\n}\n\nconst backendClientDefaultOptions = {\n apiUrl: API_URL,\n apiVersion: API_VERSION,\n};\n\nconst ternSecureFireClient = async () => {\n return createFireClientWithOptions({});\n};\n\nconst createFireClientWithOptions: typeof createFireClient = options => {\n return createFireClient({\n ...backendClientDefaultOptions,\n ...options,\n });\n};\n\nexport const ternSecureMiddleware = ((\n ...args: unknown[]\n): NextMiddleware | NextMiddlewareReturn => {\n const [request, event] = parseRequestAndEvent(args);\n const [handler, params] = parseHandlerAndOptions(args);\n\n const middleware = () => {\n const runMiddleware: NextMiddleware = async (request, event) => {\n const resolvedParams = typeof params === 'function' ? await params(request) : params;\n const signInUrl = resolvedParams.signInUrl || SIGN_IN_URL;\n const signUpUrl = resolvedParams.signUpUrl || SIGN_UP_URL;\n\n const options = {\n signInUrl,\n signUpUrl,\n ...resolvedParams,\n };\n\n const reqBackendClient = await ternSecureFireClient();\n const ternSecureRequest = createTernSecureRequest(request);\n\n const requestStateClient = await reqBackendClient.authenticateRequest(\n ternSecureRequest,\n options,\n );\n\n const authObjectClient = requestStateClient.auth();\n\n const { redirectToSignIn } = createMiddlewareRedirects(ternSecureRequest);\n\n const { redirectToSignUp } = createMiddlewareRedirects(ternSecureRequest);\n\n const protect = await createMiddlewareProtect(\n ternSecureRequest,\n authObjectClient,\n redirectToSignIn,\n );\n\n const authObj: MiddlewareAuthObject = Object.assign(authObjectClient, {\n redirectToSignIn,\n redirectToSignUp,\n });\n\n const authHandler = () => Promise.resolve(authObj);\n authHandler.protect = protect;\n\n let handlerResult: Response = NextResponse.next();\n\n try {\n const userHandlerResult = await handler?.(authHandler, request, event);\n handlerResult = userHandlerResult || handlerResult;\n } catch (error: any) {\n handlerResult = handleControlError(error, ternSecureRequest, request);\n }\n\n if (requestStateClient.headers) {\n requestStateClient.headers.forEach((value, key) => {\n handlerResult.headers.append(key, value);\n });\n }\n\n if (isRedirect(handlerResult)) {\n return serverRedirectWithAuth(ternSecureRequest, handlerResult);\n }\n\n decorateRequest(ternSecureRequest, handlerResult, requestStateClient);\n return handlerResult;\n };\n\n const nextMiddleware: NextMiddleware = async (request, event) => {\n console.log('[TernSecureMiddleware] Request URL:', request.url);\n console.log('[TernSecureMiddleware] Request pathname:', request.nextUrl.pathname);\n return runMiddleware(request, event);\n };\n\n if (request && event) {\n return nextMiddleware(request, event);\n }\n\n return nextMiddleware;\n };\n return middleware();\n}) as TernSecureMiddleware;\n\nconst parseRequestAndEvent = (args: unknown[]) => {\n return [\n args[0] instanceof Request ? args[0] : undefined,\n args[0] instanceof Request ? args[1] : undefined,\n ] as [NextMiddlewareRequestParam | undefined, NextMiddlewareEvtParam | undefined];\n};\n\nconst parseHandlerAndOptions = (args: unknown[]) => {\n return [\n typeof args[0] === 'function' ? args[0] : undefined,\n (args.length === 2 ? args[1] : typeof args[0] === 'function' ? {} : args[0]) || {},\n ] as [MiddlewareHandler | undefined, MiddlewareOptions | MiddlewareOptionsCallback];\n};\n\nconst isFirebaseRequest = (request: NextMiddlewareRequestParam) => \n request.nextUrl.pathname.startsWith('/__/');\n\nconst finalTarget = (request: NextMiddlewareRequestParam) => {\n const finalTargetUrl = request.nextUrl.searchParams.get('finalTarget');\n return finalTargetUrl ? new URL(finalTargetUrl, request.url) : undefined;\n}\n\nconst isFirebaseCookieRequest = (request: NextMiddlewareRequestParam) => \n request.nextUrl.pathname === '/__cookies__';\n\n/**\n * Create middleware redirect functions\n */\nconst createMiddlewareRedirects = (ternSecureRequest: TernSecureRequest) => {\n const redirectToSignIn: MiddlewareAuthObject['redirectToSignIn'] = (opts = {}) => {\n const url = ternSecureRequest.ternUrl.toString();\n redirectToSignInError(url, opts.returnBackUrl);\n };\n\n const redirectToSignUp: MiddlewareAuthObject['redirectToSignUp'] = (opts = {}) => {\n const url = ternSecureRequest.ternUrl.toString();\n redirectToSignUpError(url, opts.returnBackUrl);\n };\n\n return { redirectToSignIn, redirectToSignUp };\n};\n\nconst createMiddlewareProtect = (\n ternSecureRequest: TernSecureRequest,\n authObject: AuthObject,\n redirectToSignIn: RedirectFun<Response>,\n) => {\n return (async (params: any, options: any) => {\n const notFound = () => nextjsNotFound();\n\n const redirect = (url: string) =>\n nextjsRedirectError(url, {\n redirectUrl: url,\n });\n\n return createProtect({\n request: ternSecureRequest,\n redirect,\n notFound,\n authObject,\n redirectToSignIn,\n })(params, options);\n }) as unknown as Promise<AuthProtect>;\n};\n\nexport const redirectAdapter = (url: string | URL) => {\n return NextResponse.redirect(url, {\n headers: { [constants.Headers.TernSecureRedirectTo]: 'true' },\n });\n};\n\n/**\n * Handle control flow errors in middleware\n */\nconst handleControlError = (\n error: any,\n ternSecureRequest: TernSecureRequest,\n nextrequest: NextRequest,\n): Response => {\n if (isNextjsNotFoundError(error)) {\n return setHeader(\n NextResponse.rewrite(new URL(`/tern_${Date.now()}`, nextrequest.url)),\n constants.Headers.AuthReason,\n 'protect-rewrite',\n );\n }\n\n const isRedirectToSignIn = isRedirectToSignInError(error);\n const isRedirectToSignUp = isRedirectToSignUpError(error);\n\n if (isRedirectToSignIn || isRedirectToSignUp) {\n const redirect = createRedirect({\n redirectAdapter,\n baseUrl: ternSecureRequest.ternUrl,\n signInUrl: SIGN_IN_URL,\n signUpUrl: SIGN_UP_URL,\n });\n\n const { returnBackUrl } = error;\n\n return redirect[isRedirectToSignIn ? 'redirectToSignIn' : 'redirectToSignUp']({\n returnBackUrl,\n });\n }\n\n if (isNextjsRedirectError(error)) {\n return redirectAdapter(error.redirectUrl);\n }\n\n throw error;\n};\n"],"mappings":"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","names":["request","event","nextjsNotFound"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/server/types.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/server/types.ts"],"sourcesContent":["import type { TernSecureUser } from \"@tern-secure/types\"\r\nimport type { IncomingMessage } from \"http\";\r\nimport type { NextApiRequest } from \"next\";\r\nimport type { NextApiRequestCookies } from \"next/dist/server/api-utils\";\r\nimport type { NextMiddleware, NextRequest } from \"next/server\";\r\n\r\n// Request contained in GetServerSidePropsContext, has cookies but not query\r\ntype GsspRequest = IncomingMessage & { cookies: NextApiRequestCookies };\r\n\r\nexport type RequestLike = NextRequest | NextApiRequest | GsspRequest;\r\n\r\nexport type NextMiddlewareRequestParam = Parameters<NextMiddleware>[\"0\"];\r\nexport type NextMiddlewareReturn = ReturnType<NextMiddleware>;\r\nexport type NextMiddlewareEvtParam = Parameters<NextMiddleware>[\"1\"];\r\n\r\n\r\nexport interface User {\r\n uid: string\r\n email: string | null\r\n emailVerified?: boolean\r\n authTime?: number\r\n disabled?: boolean\r\n}\r\n\r\nexport interface BaseUser {\r\n uid: string\r\n email: string | null\r\n emailVerified?: boolean\r\n tenantId: string | null\r\n authTime?: number\r\n disabled?: boolean\r\n}\r\n\r\nexport interface SessionUser {\r\n uid: string\r\n email: string | null\r\n emailVerified: boolean\r\n disabled?: boolean\r\n}\r\n\r\nexport interface SessionResult {\r\n isAuthenticated: boolean\r\n user: BaseUser | null\r\n error?: string\r\n}\r\n\r\nexport type { TernSecureUser };"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|