@tern-secure/nextjs 5.2.0-canary.v20250919134427 → 5.2.0-canary.v20251002175916

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/cjs/app-router/admin/api/endpoints/abstract.js.map +1 -1
  2. package/dist/cjs/app-router/admin/{claude-authenticateRequestProcessor.js → c-authenticateRequestProcessor.js} +21 -7
  3. package/dist/cjs/app-router/admin/c-authenticateRequestProcessor.js.map +1 -0
  4. package/dist/cjs/app-router/admin/constants.js +18 -0
  5. package/dist/cjs/app-router/admin/constants.js.map +1 -1
  6. package/dist/cjs/app-router/admin/endpointRouter.js +10 -11
  7. package/dist/cjs/app-router/admin/endpointRouter.js.map +1 -1
  8. package/dist/cjs/app-router/admin/fnValidators.js +10 -24
  9. package/dist/cjs/app-router/admin/fnValidators.js.map +1 -1
  10. package/dist/cjs/app-router/admin/index.js +0 -5
  11. package/dist/cjs/app-router/admin/index.js.map +1 -1
  12. package/dist/cjs/app-router/admin/request.js +73 -0
  13. package/dist/cjs/app-router/admin/request.js.map +1 -0
  14. package/dist/cjs/app-router/admin/sessionHandlers.js +84 -123
  15. package/dist/cjs/app-router/admin/sessionHandlers.js.map +1 -1
  16. package/dist/cjs/app-router/admin/ternsecureNextjsHandler.js +21 -34
  17. package/dist/cjs/app-router/admin/ternsecureNextjsHandler.js.map +1 -1
  18. package/dist/cjs/app-router/admin/types.js +83 -6
  19. package/dist/cjs/app-router/admin/types.js.map +1 -1
  20. package/dist/cjs/server/constant.js +4 -1
  21. package/dist/cjs/server/constant.js.map +1 -1
  22. package/dist/cjs/server/ternSecureEdgeMiddleware.js +3 -23
  23. package/dist/cjs/server/ternSecureEdgeMiddleware.js.map +1 -1
  24. package/dist/cjs/server/ternsecureClient.js +44 -0
  25. package/dist/cjs/server/ternsecureClient.js.map +1 -0
  26. package/dist/esm/app-router/admin/api/endpoints/abstract.js.map +1 -1
  27. package/dist/esm/app-router/admin/{claude-authenticateRequestProcessor.js → c-authenticateRequestProcessor.js} +18 -4
  28. package/dist/esm/app-router/admin/c-authenticateRequestProcessor.js.map +1 -0
  29. package/dist/esm/app-router/admin/constants.js +12 -0
  30. package/dist/esm/app-router/admin/constants.js.map +1 -1
  31. package/dist/esm/app-router/admin/endpointRouter.js +11 -12
  32. package/dist/esm/app-router/admin/endpointRouter.js.map +1 -1
  33. package/dist/esm/app-router/admin/fnValidators.js +10 -23
  34. package/dist/esm/app-router/admin/fnValidators.js.map +1 -1
  35. package/dist/esm/app-router/admin/index.js +0 -3
  36. package/dist/esm/app-router/admin/index.js.map +1 -1
  37. package/dist/esm/app-router/admin/request.js +56 -0
  38. package/dist/esm/app-router/admin/request.js.map +1 -0
  39. package/dist/esm/app-router/admin/sessionHandlers.js +84 -111
  40. package/dist/esm/app-router/admin/sessionHandlers.js.map +1 -1
  41. package/dist/esm/app-router/admin/ternsecureNextjsHandler.js +22 -35
  42. package/dist/esm/app-router/admin/ternsecureNextjsHandler.js.map +1 -1
  43. package/dist/esm/app-router/admin/types.js +80 -5
  44. package/dist/esm/app-router/admin/types.js.map +1 -1
  45. package/dist/esm/server/constant.js +3 -1
  46. package/dist/esm/server/constant.js.map +1 -1
  47. package/dist/esm/server/ternSecureEdgeMiddleware.js +3 -24
  48. package/dist/esm/server/ternSecureEdgeMiddleware.js.map +1 -1
  49. package/dist/esm/server/ternsecureClient.js +22 -0
  50. package/dist/esm/server/ternsecureClient.js.map +1 -0
  51. package/dist/types/app-router/admin/api/endpoints/abstract.d.ts +6 -4
  52. package/dist/types/app-router/admin/api/endpoints/abstract.d.ts.map +1 -1
  53. package/dist/types/app-router/admin/{claude-authenticateRequestProcessor.d.ts → c-authenticateRequestProcessor.d.ts} +13 -5
  54. package/dist/types/app-router/admin/c-authenticateRequestProcessor.d.ts.map +1 -0
  55. package/dist/types/app-router/admin/constants.d.ts +6 -0
  56. package/dist/types/app-router/admin/constants.d.ts.map +1 -1
  57. package/dist/types/app-router/admin/endpointRouter.d.ts +7 -4
  58. package/dist/types/app-router/admin/endpointRouter.d.ts.map +1 -1
  59. package/dist/types/app-router/admin/fnValidators.d.ts +2 -11
  60. package/dist/types/app-router/admin/fnValidators.d.ts.map +1 -1
  61. package/dist/types/app-router/admin/index.d.ts +1 -3
  62. package/dist/types/app-router/admin/index.d.ts.map +1 -1
  63. package/dist/types/app-router/admin/request.d.ts +4 -0
  64. package/dist/types/app-router/admin/request.d.ts.map +1 -0
  65. package/dist/types/app-router/admin/sessionHandlers.d.ts +3 -24
  66. package/dist/types/app-router/admin/sessionHandlers.d.ts.map +1 -1
  67. package/dist/types/app-router/admin/ternsecureNextjsHandler.d.ts.map +1 -1
  68. package/dist/types/app-router/admin/types.d.ts +40 -64
  69. package/dist/types/app-router/admin/types.d.ts.map +1 -1
  70. package/dist/types/server/constant.d.ts +2 -1
  71. package/dist/types/server/constant.d.ts.map +1 -1
  72. package/dist/types/server/ternSecureEdgeMiddleware.d.ts.map +1 -1
  73. package/dist/types/server/ternsecureClient.d.ts +3 -0
  74. package/dist/types/server/ternsecureClient.d.ts.map +1 -0
  75. package/package.json +5 -5
  76. package/dist/cjs/app-router/admin/claude-authenticateRequestProcessor.js.map +0 -1
  77. package/dist/cjs/app-router/admin/handlerUtils.js +0 -63
  78. package/dist/cjs/app-router/admin/handlerUtils.js.map +0 -1
  79. package/dist/cjs/server/ternSecureFireMiddleware.js +0 -192
  80. package/dist/cjs/server/ternSecureFireMiddleware.js.map +0 -1
  81. package/dist/esm/app-router/admin/claude-authenticateRequestProcessor.js.map +0 -1
  82. package/dist/esm/app-router/admin/handlerUtils.js +0 -38
  83. package/dist/esm/app-router/admin/handlerUtils.js.map +0 -1
  84. package/dist/esm/server/ternSecureFireMiddleware.js +0 -179
  85. package/dist/esm/server/ternSecureFireMiddleware.js.map +0 -1
  86. package/dist/types/app-router/admin/claude-authenticateRequestProcessor.d.ts.map +0 -1
  87. package/dist/types/app-router/admin/handlerUtils.d.ts +0 -19
  88. package/dist/types/app-router/admin/handlerUtils.d.ts.map +0 -1
  89. package/dist/types/server/ternSecureFireMiddleware.d.ts +0 -47
  90. package/dist/types/server/ternSecureFireMiddleware.d.ts.map +0 -1
@@ -1,63 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var handlerUtils_exports = {};
20
- __export(handlerUtils_exports, {
21
- RequestContextBuilder: () => RequestContextBuilder,
22
- ValidationPipeline: () => ValidationPipeline
23
- });
24
- module.exports = __toCommonJS(handlerUtils_exports);
25
- var import_fnValidators = require("./fnValidators");
26
- class RequestContextBuilder {
27
- static create(request) {
28
- const context = (0, import_fnValidators.createRequestContext)(request);
29
- const { pathSegments } = context;
30
- return {
31
- request,
32
- pathSegments,
33
- endpoint: pathSegments[2],
34
- subEndpoint: pathSegments[3],
35
- method: request.method
36
- };
37
- }
38
- }
39
- class ValidationPipeline {
40
- config;
41
- context;
42
- constructor(config, context) {
43
- this.config = config;
44
- this.context = context;
45
- }
46
- async execute() {
47
- const validators = (0, import_fnValidators.createValidators)(this.context);
48
- const corsError = await validators.validateCors(this.config.cors);
49
- if (corsError) return corsError;
50
- if (this.context.method === "OPTIONS") {
51
- return validators.createCorsOptionsResponse(this.config.cors);
52
- }
53
- const securityError = await validators.validateSecurity(this.config.security);
54
- if (securityError) return securityError;
55
- return null;
56
- }
57
- }
58
- // Annotate the CommonJS export names for ESM import in node:
59
- 0 && (module.exports = {
60
- RequestContextBuilder,
61
- ValidationPipeline
62
- });
63
- //# sourceMappingURL=handlerUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app-router/admin/handlerUtils.ts"],"sourcesContent":["import type { RequestContext } from './fnValidators';\nimport { createRequestContext, createValidators } from './fnValidators';\nimport type {\n AuthEndpoint,\n SessionSubEndpoint,\n TernSecureHandlerOptions,\n} from './types';\n\nexport interface HandlerContext {\n request: Request;\n pathSegments: string[];\n endpoint: AuthEndpoint;\n subEndpoint: SessionSubEndpoint | undefined;\n method: string;\n}\n\nexport class RequestContextBuilder {\n static create(request: Request): HandlerContext {\n const context = createRequestContext(request);\n const { pathSegments } = context;\n\n return {\n request,\n pathSegments,\n endpoint: pathSegments[2] as AuthEndpoint,\n subEndpoint: pathSegments[3] as SessionSubEndpoint | undefined,\n method: request.method,\n };\n }\n}\n\nexport class ValidationPipeline {\n private readonly config: Required<TernSecureHandlerOptions>;\n private readonly context: RequestContext;\n\n constructor(\n config: Required<TernSecureHandlerOptions>,\n context: RequestContext,\n ) {\n this.config = config;\n this.context = context;\n }\n\n async execute(): Promise<Response | null> {\n const validators = createValidators(this.context);\n\n const corsError = await validators.validateCors(this.config.cors);\n if (corsError) return corsError;\n\n if (this.context.method === 'OPTIONS') {\n return validators.createCorsOptionsResponse(this.config.cors);\n }\n\n const securityError = await validators.validateSecurity(this.config.security);\n if (securityError) return securityError;\n\n return null;\n }\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,0BAAuD;AAehD,MAAM,sBAAsB;AAAA,EACjC,OAAO,OAAO,SAAkC;AAC9C,UAAM,cAAU,0CAAqB,OAAO;AAC5C,UAAM,EAAE,aAAa,IAAI;AAEzB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,UAAU,aAAa,CAAC;AAAA,MACxB,aAAa,aAAa,CAAC;AAAA,MAC3B,QAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AACF;AAEO,MAAM,mBAAmB;AAAA,EACb;AAAA,EACA;AAAA,EAEjB,YACE,QACA,SACA;AACA,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,UAAoC;AACxC,UAAM,iBAAa,sCAAiB,KAAK,OAAO;AAEhD,UAAM,YAAY,MAAM,WAAW,aAAa,KAAK,OAAO,IAAI;AAChE,QAAI,UAAW,QAAO;AAEtB,QAAI,KAAK,QAAQ,WAAW,WAAW;AACrC,aAAO,WAAW,0BAA0B,KAAK,OAAO,IAAI;AAAA,IAC9D;AAEA,UAAM,gBAAgB,MAAM,WAAW,iBAAiB,KAAK,OAAO,QAAQ;AAC5E,QAAI,cAAe,QAAO;AAE1B,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,192 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var 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
@@ -1 +0,0 @@
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":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,qBAIO;AAIP,wBAA2C;AAE3C,oBAA6B;AAE7B,sBAAsC;AACtC,gCAAuC;AACvC,sBAA8D;AAC9D,wBAQO;AACP,qBAA+C;AAC/C,sBAAiD;AAMjD,mBAAgC;AAoDhC,MAAM,8BAA8B;AAAA,EAClC,QAAQ;AAAA,EACR,YAAY;AACd;AAEA,MAAM,uBAAuB,YAAY;AACvC,SAAO,4BAA4B,CAAC,CAAC;AACvC;AAEA,MAAM,8BAAuD,aAAW;AACtE,aAAO,iCAAiB;AAAA,IACtB,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,gBAAgC,OAAOA,UAASC,WAAU;AAC9D,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,mBAAmB,MAAM,qBAAqB;AACpD,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,iBAAiC,OAAOA,UAASC,WAAU;AAC/D,cAAQ,IAAI,uCAAuCD,SAAQ,GAAG;AAC9D,cAAQ,IAAI,4CAA4CA,SAAQ,QAAQ,QAAQ;AAChF,aAAO,cAAcA,UAASC,MAAK;AAAA,IACrC;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,YACvB,QAAQ,QAAQ,SAAS,WAAW,MAAM;AAE9C,MAAM,cAAc,CAAC,YAAwC;AACzD,QAAM,iBAAkB,QAAQ,QAAQ,aAAa,IAAI,aAAa;AACtE,SAAO,iBAAiB,IAAI,IAAI,gBAAgB,QAAQ,GAAG,IAAI;AACnE;AAEA,MAAM,0BAA0B,CAAC,YAC7B,QAAQ,QAAQ,aAAa;AAKjC,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;","names":["request","event","nextjsNotFound"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app-router/admin/claude-authenticateRequestProcessor.ts"],"sourcesContent":["import type { TernSecureRequest } from '@tern-secure/backend';\nimport { constants } from '@tern-secure/backend';\n\nimport type { TernSecureHandlerOptions} from './types';\n\n/**\n * Request context for better type safety and clarity\n */\ninterface RequestProcessorContext extends TernSecureHandlerOptions {\n // header-based values\n sessionTokenInHeader: string | undefined;\n origin: string | undefined;\n host: string | undefined;\n forwardedHost: string | undefined;\n forwardedProto: string | undefined;\n referrer: string | undefined;\n userAgent: string | undefined;\n secFetchDest: string | undefined;\n accept: string | undefined;\n\n // cookie-based values\n sessionTokenInCookie: string | undefined;\n refreshTokenInCookie: string | undefined;\n csrfTokenInCookie: string | undefined;\n\n ternUrl: URL;\n}\n\n/**\n * Request processor utility class for common operations\n */\nclass RequestProcessorContext implements RequestProcessorContext {\n public constructor(\n private ternSecureRequest: TernSecureRequest,\n private options: TernSecureHandlerOptions,\n ) {\n this.initHeaderValues();\n this.initCookieValues();\n this.ternUrl = this.ternSecureRequest.ternUrl;\n }\n\n private initHeaderValues() {\n this.sessionTokenInHeader = this.parseAuthorizationHeader(\n this.getHeader(constants.Headers.Authorization),\n );\n this.origin = this.getHeader(constants.Headers.Origin);\n this.host = this.getHeader(constants.Headers.Host);\n this.forwardedHost = this.getHeader(constants.Headers.ForwardedHost);\n this.forwardedProto =\n this.getHeader(constants.Headers.CloudFrontForwardedProto) ||\n this.getHeader(constants.Headers.ForwardedProto);\n this.referrer = this.getHeader(constants.Headers.Referrer);\n this.userAgent = this.getHeader(constants.Headers.UserAgent);\n this.secFetchDest = this.getHeader(constants.Headers.SecFetchDest);\n this.accept = this.getHeader(constants.Headers.Accept);\n }\n\n private initCookieValues() {\n //this.sessionTokenInCookie = this.getCookie(this.options.cookies.name);\n this.csrfTokenInCookie = this.getCookie(constants.Cookies.CsrfToken);\n }\n\n private getQueryParam(name: string) {\n return this.ternSecureRequest.ternUrl.searchParams.get(name);\n }\n\n private getHeader(name: string) {\n return this.ternSecureRequest.headers.get(name) || undefined;\n }\n\n private getCookie(name: string) {\n return this.ternSecureRequest.cookies.get(name) || undefined;\n }\n\n private parseAuthorizationHeader(\n authorizationHeader: string | undefined | null,\n ): string | undefined {\n if (!authorizationHeader) {\n return undefined;\n }\n\n const [scheme, token] = authorizationHeader.split(' ', 2);\n\n if (!token) {\n // No scheme specified, treat the entire value as the token\n return scheme;\n }\n\n if (scheme === 'Bearer') {\n return token;\n }\n\n // Skip all other schemes\n return undefined;\n }\n}\n\nexport type { RequestProcessorContext };\n\nexport const createRequestProcessor = async (\n ternSecureRequest: TernSecureRequest,\n options: TernSecureHandlerOptions,\n): Promise<RequestProcessorContext> => {\n return new RequestProcessorContext(ternSecureRequest, options);\n};\n"],"mappings":"AACA,SAAS,iBAAiB;AA8B1B,MAAM,wBAA2D;AAAA,EACxD,YACG,mBACA,SACR;AAFQ;AACA;AAER,SAAK,iBAAiB;AACtB,SAAK,iBAAiB;AACtB,SAAK,UAAU,KAAK,kBAAkB;AAAA,EACxC;AAAA,EAEQ,mBAAmB;AACzB,SAAK,uBAAuB,KAAK;AAAA,MAC/B,KAAK,UAAU,UAAU,QAAQ,aAAa;AAAA,IAChD;AACA,SAAK,SAAS,KAAK,UAAU,UAAU,QAAQ,MAAM;AACrD,SAAK,OAAO,KAAK,UAAU,UAAU,QAAQ,IAAI;AACjD,SAAK,gBAAgB,KAAK,UAAU,UAAU,QAAQ,aAAa;AACnE,SAAK,iBACH,KAAK,UAAU,UAAU,QAAQ,wBAAwB,KACzD,KAAK,UAAU,UAAU,QAAQ,cAAc;AACjD,SAAK,WAAW,KAAK,UAAU,UAAU,QAAQ,QAAQ;AACzD,SAAK,YAAY,KAAK,UAAU,UAAU,QAAQ,SAAS;AAC3D,SAAK,eAAe,KAAK,UAAU,UAAU,QAAQ,YAAY;AACjE,SAAK,SAAS,KAAK,UAAU,UAAU,QAAQ,MAAM;AAAA,EACvD;AAAA,EAEQ,mBAAmB;AAEzB,SAAK,oBAAoB,KAAK,UAAU,UAAU,QAAQ,SAAS;AAAA,EACrE;AAAA,EAEQ,cAAc,MAAc;AAClC,WAAO,KAAK,kBAAkB,QAAQ,aAAa,IAAI,IAAI;AAAA,EAC7D;AAAA,EAEQ,UAAU,MAAc;AAC9B,WAAO,KAAK,kBAAkB,QAAQ,IAAI,IAAI,KAAK;AAAA,EACrD;AAAA,EAEQ,UAAU,MAAc;AAC9B,WAAO,KAAK,kBAAkB,QAAQ,IAAI,IAAI,KAAK;AAAA,EACrD;AAAA,EAEQ,yBACN,qBACoB;AACpB,QAAI,CAAC,qBAAqB;AACxB,aAAO;AAAA,IACT;AAEA,UAAM,CAAC,QAAQ,KAAK,IAAI,oBAAoB,MAAM,KAAK,CAAC;AAExD,QAAI,CAAC,OAAO;AAEV,aAAO;AAAA,IACT;AAEA,QAAI,WAAW,UAAU;AACvB,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT;AACF;AAIO,MAAM,yBAAyB,OACpC,mBACA,YACqC;AACrC,SAAO,IAAI,wBAAwB,mBAAmB,OAAO;AAC/D;","names":[]}
@@ -1,38 +0,0 @@
1
- import { createRequestContext, createValidators } from "./fnValidators";
2
- class RequestContextBuilder {
3
- static create(request) {
4
- const context = createRequestContext(request);
5
- const { pathSegments } = context;
6
- return {
7
- request,
8
- pathSegments,
9
- endpoint: pathSegments[2],
10
- subEndpoint: pathSegments[3],
11
- method: request.method
12
- };
13
- }
14
- }
15
- class ValidationPipeline {
16
- config;
17
- context;
18
- constructor(config, context) {
19
- this.config = config;
20
- this.context = context;
21
- }
22
- async execute() {
23
- const validators = createValidators(this.context);
24
- const corsError = await validators.validateCors(this.config.cors);
25
- if (corsError) return corsError;
26
- if (this.context.method === "OPTIONS") {
27
- return validators.createCorsOptionsResponse(this.config.cors);
28
- }
29
- const securityError = await validators.validateSecurity(this.config.security);
30
- if (securityError) return securityError;
31
- return null;
32
- }
33
- }
34
- export {
35
- RequestContextBuilder,
36
- ValidationPipeline
37
- };
38
- //# sourceMappingURL=handlerUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/app-router/admin/handlerUtils.ts"],"sourcesContent":["import type { RequestContext } from './fnValidators';\nimport { createRequestContext, createValidators } from './fnValidators';\nimport type {\n AuthEndpoint,\n SessionSubEndpoint,\n TernSecureHandlerOptions,\n} from './types';\n\nexport interface HandlerContext {\n request: Request;\n pathSegments: string[];\n endpoint: AuthEndpoint;\n subEndpoint: SessionSubEndpoint | undefined;\n method: string;\n}\n\nexport class RequestContextBuilder {\n static create(request: Request): HandlerContext {\n const context = createRequestContext(request);\n const { pathSegments } = context;\n\n return {\n request,\n pathSegments,\n endpoint: pathSegments[2] as AuthEndpoint,\n subEndpoint: pathSegments[3] as SessionSubEndpoint | undefined,\n method: request.method,\n };\n }\n}\n\nexport class ValidationPipeline {\n private readonly config: Required<TernSecureHandlerOptions>;\n private readonly context: RequestContext;\n\n constructor(\n config: Required<TernSecureHandlerOptions>,\n context: RequestContext,\n ) {\n this.config = config;\n this.context = context;\n }\n\n async execute(): Promise<Response | null> {\n const validators = createValidators(this.context);\n\n const corsError = await validators.validateCors(this.config.cors);\n if (corsError) return corsError;\n\n if (this.context.method === 'OPTIONS') {\n return validators.createCorsOptionsResponse(this.config.cors);\n }\n\n const securityError = await validators.validateSecurity(this.config.security);\n if (securityError) return securityError;\n\n return null;\n }\n}\n\n"],"mappings":"AACA,SAAS,sBAAsB,wBAAwB;AAehD,MAAM,sBAAsB;AAAA,EACjC,OAAO,OAAO,SAAkC;AAC9C,UAAM,UAAU,qBAAqB,OAAO;AAC5C,UAAM,EAAE,aAAa,IAAI;AAEzB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,UAAU,aAAa,CAAC;AAAA,MACxB,aAAa,aAAa,CAAC;AAAA,MAC3B,QAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AACF;AAEO,MAAM,mBAAmB;AAAA,EACb;AAAA,EACA;AAAA,EAEjB,YACE,QACA,SACA;AACA,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,UAAoC;AACxC,UAAM,aAAa,iBAAiB,KAAK,OAAO;AAEhD,UAAM,YAAY,MAAM,WAAW,aAAa,KAAK,OAAO,IAAI;AAChE,QAAI,UAAW,QAAO;AAEtB,QAAI,KAAK,QAAQ,WAAW,WAAW;AACrC,aAAO,WAAW,0BAA0B,KAAK,OAAO,IAAI;AAAA,IAC9D;AAEA,UAAM,gBAAgB,MAAM,WAAW,iBAAiB,KAAK,OAAO,QAAQ;AAC5E,QAAI,cAAe,QAAO;AAE1B,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,179 +0,0 @@
1
- import {
2
- constants,
3
- createFireClient,
4
- createTernSecureRequest
5
- } from "@tern-secure/backend";
6
- import { notFound as nextjsNotFound } from "next/navigation";
7
- import { NextResponse } from "next/server";
8
- import { isRedirect, setHeader } from "../utils/response";
9
- import { serverRedirectWithAuth } from "../utils/serverRedirectAuth";
10
- import { API_URL, API_VERSION, SIGN_IN_URL, SIGN_UP_URL } from "./constant";
11
- import {
12
- isNextjsNotFoundError,
13
- isNextjsRedirectError,
14
- isRedirectToSignInError,
15
- isRedirectToSignUpError,
16
- nextjsRedirectError,
17
- redirectToSignInError,
18
- redirectToSignUpError
19
- } from "./nextErrors";
20
- import { createProtect } from "./protect";
21
- import { createRedirect } from "./redirect";
22
- import { decorateRequest } from "./utils";
23
- const backendClientDefaultOptions = {
24
- apiUrl: API_URL,
25
- apiVersion: API_VERSION
26
- };
27
- const ternSecureFireClient = async () => {
28
- return createFireClientWithOptions({});
29
- };
30
- const createFireClientWithOptions = (options) => {
31
- return createFireClient({
32
- ...backendClientDefaultOptions,
33
- ...options
34
- });
35
- };
36
- const ternSecureMiddleware = (...args) => {
37
- const [request, event] = parseRequestAndEvent(args);
38
- const [handler, params] = parseHandlerAndOptions(args);
39
- const middleware = () => {
40
- const runMiddleware = async (request2, event2) => {
41
- const resolvedParams = typeof params === "function" ? await params(request2) : params;
42
- const signInUrl = resolvedParams.signInUrl || SIGN_IN_URL;
43
- const signUpUrl = resolvedParams.signUpUrl || SIGN_UP_URL;
44
- const options = {
45
- signInUrl,
46
- signUpUrl,
47
- ...resolvedParams
48
- };
49
- const reqBackendClient = await ternSecureFireClient();
50
- const ternSecureRequest = createTernSecureRequest(request2);
51
- const requestStateClient = await reqBackendClient.authenticateRequest(
52
- ternSecureRequest,
53
- options
54
- );
55
- const authObjectClient = requestStateClient.auth();
56
- const { redirectToSignIn } = createMiddlewareRedirects(ternSecureRequest);
57
- const { redirectToSignUp } = createMiddlewareRedirects(ternSecureRequest);
58
- const protect = await createMiddlewareProtect(
59
- ternSecureRequest,
60
- authObjectClient,
61
- redirectToSignIn
62
- );
63
- const authObj = Object.assign(authObjectClient, {
64
- redirectToSignIn,
65
- redirectToSignUp
66
- });
67
- const authHandler = () => Promise.resolve(authObj);
68
- authHandler.protect = protect;
69
- let handlerResult = NextResponse.next();
70
- try {
71
- const userHandlerResult = await handler?.(authHandler, request2, event2);
72
- handlerResult = userHandlerResult || handlerResult;
73
- } catch (error) {
74
- handlerResult = handleControlError(error, ternSecureRequest, request2);
75
- }
76
- if (requestStateClient.headers) {
77
- requestStateClient.headers.forEach((value, key) => {
78
- handlerResult.headers.append(key, value);
79
- });
80
- }
81
- if (isRedirect(handlerResult)) {
82
- return serverRedirectWithAuth(ternSecureRequest, handlerResult);
83
- }
84
- decorateRequest(ternSecureRequest, handlerResult, requestStateClient);
85
- return handlerResult;
86
- };
87
- const nextMiddleware = async (request2, event2) => {
88
- console.log("[TernSecureMiddleware] Request URL:", request2.url);
89
- console.log("[TernSecureMiddleware] Request pathname:", request2.nextUrl.pathname);
90
- return runMiddleware(request2, event2);
91
- };
92
- if (request && event) {
93
- return nextMiddleware(request, event);
94
- }
95
- return nextMiddleware;
96
- };
97
- return middleware();
98
- };
99
- const parseRequestAndEvent = (args) => {
100
- return [
101
- args[0] instanceof Request ? args[0] : void 0,
102
- args[0] instanceof Request ? args[1] : void 0
103
- ];
104
- };
105
- const parseHandlerAndOptions = (args) => {
106
- return [
107
- typeof args[0] === "function" ? args[0] : void 0,
108
- (args.length === 2 ? args[1] : typeof args[0] === "function" ? {} : args[0]) || {}
109
- ];
110
- };
111
- const isFirebaseRequest = (request) => request.nextUrl.pathname.startsWith("/__/");
112
- const finalTarget = (request) => {
113
- const finalTargetUrl = request.nextUrl.searchParams.get("finalTarget");
114
- return finalTargetUrl ? new URL(finalTargetUrl, request.url) : void 0;
115
- };
116
- const isFirebaseCookieRequest = (request) => request.nextUrl.pathname === "/__cookies__";
117
- const createMiddlewareRedirects = (ternSecureRequest) => {
118
- const redirectToSignIn = (opts = {}) => {
119
- const url = ternSecureRequest.ternUrl.toString();
120
- redirectToSignInError(url, opts.returnBackUrl);
121
- };
122
- const redirectToSignUp = (opts = {}) => {
123
- const url = ternSecureRequest.ternUrl.toString();
124
- redirectToSignUpError(url, opts.returnBackUrl);
125
- };
126
- return { redirectToSignIn, redirectToSignUp };
127
- };
128
- const createMiddlewareProtect = (ternSecureRequest, authObject, redirectToSignIn) => {
129
- return async (params, options) => {
130
- const notFound = () => nextjsNotFound();
131
- const redirect = (url) => nextjsRedirectError(url, {
132
- redirectUrl: url
133
- });
134
- return createProtect({
135
- request: ternSecureRequest,
136
- redirect,
137
- notFound,
138
- authObject,
139
- redirectToSignIn
140
- })(params, options);
141
- };
142
- };
143
- const redirectAdapter = (url) => {
144
- return NextResponse.redirect(url, {
145
- headers: { [constants.Headers.TernSecureRedirectTo]: "true" }
146
- });
147
- };
148
- const handleControlError = (error, ternSecureRequest, nextrequest) => {
149
- if (isNextjsNotFoundError(error)) {
150
- return setHeader(
151
- NextResponse.rewrite(new URL(`/tern_${Date.now()}`, nextrequest.url)),
152
- constants.Headers.AuthReason,
153
- "protect-rewrite"
154
- );
155
- }
156
- const isRedirectToSignIn = isRedirectToSignInError(error);
157
- const isRedirectToSignUp = isRedirectToSignUpError(error);
158
- if (isRedirectToSignIn || isRedirectToSignUp) {
159
- const redirect = createRedirect({
160
- redirectAdapter,
161
- baseUrl: ternSecureRequest.ternUrl,
162
- signInUrl: SIGN_IN_URL,
163
- signUpUrl: SIGN_UP_URL
164
- });
165
- const { returnBackUrl } = error;
166
- return redirect[isRedirectToSignIn ? "redirectToSignIn" : "redirectToSignUp"]({
167
- returnBackUrl
168
- });
169
- }
170
- if (isNextjsRedirectError(error)) {
171
- return redirectAdapter(error.redirectUrl);
172
- }
173
- throw error;
174
- };
175
- export {
176
- redirectAdapter,
177
- ternSecureMiddleware
178
- };
179
- //# sourceMappingURL=ternSecureFireMiddleware.js.map
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-authenticateRequestProcessor.d.ts","sourceRoot":"","sources":["../../../../src/app-router/admin/claude-authenticateRequestProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,KAAK,EAAE,wBAAwB,EAAC,MAAM,SAAS,CAAC;AAEvD;;GAEG;AACH,UAAU,uBAAwB,SAAQ,wBAAwB;IAEhE,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAG3B,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IAEtC,OAAO,EAAE,GAAG,CAAC;CACd;AAED;;GAEG;AACH,cAAM,uBAAwB,YAAW,uBAAuB;IAE5D,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,OAAO;gBADP,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,wBAAwB;IAO3C,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,wBAAwB;CAqBjC;AAED,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC,eAAO,MAAM,sBAAsB,GACjC,mBAAmB,iBAAiB,EACpC,SAAS,wBAAwB,KAChC,OAAO,CAAC,uBAAuB,CAEjC,CAAC"}
@@ -1,19 +0,0 @@
1
- import type { RequestContext } from './fnValidators';
2
- import type { AuthEndpoint, SessionSubEndpoint, TernSecureHandlerOptions } from './types';
3
- export interface HandlerContext {
4
- request: Request;
5
- pathSegments: string[];
6
- endpoint: AuthEndpoint;
7
- subEndpoint: SessionSubEndpoint | undefined;
8
- method: string;
9
- }
10
- export declare class RequestContextBuilder {
11
- static create(request: Request): HandlerContext;
12
- }
13
- export declare class ValidationPipeline {
14
- private readonly config;
15
- private readonly context;
16
- constructor(config: Required<TernSecureHandlerOptions>, context: RequestContext);
17
- execute(): Promise<Response | null>;
18
- }
19
- //# sourceMappingURL=handlerUtils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handlerUtils.d.ts","sourceRoot":"","sources":["../../../../src/app-router/admin/handlerUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,qBAAqB;IAChC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc;CAYhD;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;gBAGvC,MAAM,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAC1C,OAAO,EAAE,cAAc;IAMnB,OAAO,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAe1C"}
@@ -1,47 +0,0 @@
1
- import type { AuthObject, RequestOptions } from '@tern-secure/backend';
2
- import type { TernSecureConfig } from '@tern-secure/types';
3
- import type { NextMiddleware, NextRequest } from 'next/server';
4
- import { NextResponse } from 'next/server';
5
- import { type AuthProtect } from './protect';
6
- import { type RedirectFun } from './redirect';
7
- import type { NextMiddlewareEvtParam, NextMiddlewareRequestParam, NextMiddlewareReturn } from './types';
8
- export type MiddlewareAuthObject = AuthObject & {
9
- redirectToSignIn: RedirectFun<Response>;
10
- redirectToSignUp: RedirectFun<Response>;
11
- };
12
- export interface MiddlewareAuth {
13
- (): Promise<MiddlewareAuthObject>;
14
- protect: AuthProtect;
15
- }
16
- type MiddlewareHandler = (auth: MiddlewareAuth, request: NextMiddlewareRequestParam, event: NextMiddlewareEvtParam) => NextMiddlewareReturn;
17
- export interface MiddlewareOptions extends RequestOptions {
18
- debug?: boolean;
19
- firebaseOptions?: TernSecureConfig;
20
- }
21
- type MiddlewareOptionsCallback = (req: NextRequest) => MiddlewareOptions | Promise<MiddlewareOptions>;
22
- interface TernSecureMiddleware {
23
- /**
24
- * @example
25
- * export default ternSecureMiddleware((auth, request, event) => { ... }, options);
26
- */
27
- (handler: MiddlewareHandler, options?: MiddlewareOptions): NextMiddleware;
28
- /**
29
- * @example
30
- * export default ternSecureMiddleware((auth, request, event) => { ... }, (req) => options);
31
- */
32
- (handler: MiddlewareHandler, options?: MiddlewareOptionsCallback): NextMiddleware;
33
- /**
34
- * @example
35
- * export default ternSecureMiddleware(options);
36
- */
37
- (options?: MiddlewareOptions): NextMiddleware;
38
- /**
39
- * @example
40
- * export default ternSecureMiddleware;
41
- */
42
- (request: NextMiddlewareRequestParam, event: NextMiddlewareEvtParam): NextMiddlewareReturn;
43
- }
44
- export declare const ternSecureMiddleware: TernSecureMiddleware;
45
- export declare const redirectAdapter: (url: string | URL) => NextResponse<unknown>;
46
- export {};
47
- //# sourceMappingURL=ternSecureFireMiddleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ternSecureFireMiddleware.d.ts","sourceRoot":"","sources":["../../../src/server/ternSecureFireMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAM9B,OAAO,KAAK,EACV,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,cAAc,EAAC,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAc3C,OAAO,EAAE,KAAK,WAAW,EAAgB,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG;IAC9C,gBAAgB,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxC,gBAAgB,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAElC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,KAAK,iBAAiB,GAAG,CACvB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,0BAA0B,EACnC,KAAK,EAAE,sBAAsB,KAC1B,oBAAoB,CAAC;AAE1B,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,gBAAgB,CAAC;CACpC;AACD,KAAK,yBAAyB,GAAG,CAC/B,GAAG,EAAE,WAAW,KACb,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEpD,UAAU,oBAAoB;IAC5B;;;OAGG;IACH,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC;IAE1E;;;OAGG;IACH,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,cAAc,CAAC;IAElF;;;OAGG;IACH,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC;IAC9C;;;OAGG;IACH,CAAC,OAAO,EAAE,0BAA0B,EAAE,KAAK,EAAE,sBAAsB,GAAG,oBAAoB,CAAC;CAC5F;AAkBD,eAAO,MAAM,oBAAoB,EAkF3B,oBAAoB,CAAC;AAmE3B,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,GAAG,GAAG,0BAIhD,CAAC"}