@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.
Files changed (284) hide show
  1. package/dist/cjs/__tests__/gemini_fnTernSecureNextHandler.bench.js +31 -0
  2. package/dist/cjs/__tests__/gemini_fnTernSecureNextHandler.bench.js.map +1 -0
  3. package/dist/cjs/app-router/admin/actions.js +62 -0
  4. package/dist/cjs/app-router/admin/actions.js.map +1 -0
  5. package/dist/cjs/app-router/admin/constants.js +29 -0
  6. package/dist/cjs/app-router/admin/constants.js.map +1 -0
  7. package/dist/cjs/app-router/admin/fnValidators.js +295 -0
  8. package/dist/cjs/app-router/admin/fnValidators.js.map +1 -0
  9. package/dist/cjs/app-router/admin/index.js +16 -3
  10. package/dist/cjs/app-router/admin/index.js.map +1 -1
  11. package/dist/cjs/app-router/admin/responses.js +120 -0
  12. package/dist/cjs/app-router/admin/responses.js.map +1 -0
  13. package/dist/cjs/app-router/admin/sessionHandlers.js +167 -0
  14. package/dist/cjs/app-router/admin/sessionHandlers.js.map +1 -0
  15. package/dist/cjs/app-router/admin/ternsecureNextjsHandler.js +84 -0
  16. package/dist/cjs/app-router/admin/ternsecureNextjsHandler.js.map +1 -0
  17. package/dist/cjs/app-router/admin/types.js +127 -0
  18. package/dist/cjs/app-router/admin/types.js.map +1 -0
  19. package/dist/cjs/app-router/admin/utils.js +107 -0
  20. package/dist/cjs/app-router/admin/utils.js.map +1 -0
  21. package/dist/cjs/app-router/admin/validators.js +217 -0
  22. package/dist/cjs/app-router/admin/validators.js.map +1 -0
  23. package/dist/cjs/app-router/client/TernSecureProvider.js +2 -6
  24. package/dist/cjs/app-router/client/TernSecureProvider.js.map +1 -1
  25. package/dist/cjs/app-router/server/auth.js +100 -0
  26. package/dist/cjs/app-router/server/auth.js.map +1 -0
  27. package/dist/cjs/app-router/server/utils.js +87 -0
  28. package/dist/cjs/app-router/server/utils.js.map +1 -0
  29. package/dist/cjs/boundary/components.js +4 -7
  30. package/dist/cjs/boundary/components.js.map +1 -1
  31. package/dist/cjs/{components/uiComponents.js → constants.js} +17 -18
  32. package/dist/cjs/constants.js.map +1 -0
  33. package/dist/cjs/errors.js.map +1 -1
  34. package/dist/cjs/index.js +4 -9
  35. package/dist/cjs/index.js.map +1 -1
  36. package/dist/cjs/server/constant.js +38 -0
  37. package/dist/cjs/server/constant.js.map +1 -0
  38. package/dist/cjs/server/edge-session.js +118 -24
  39. package/dist/cjs/server/edge-session.js.map +1 -1
  40. package/dist/cjs/server/headers-utils.js +70 -0
  41. package/dist/cjs/server/headers-utils.js.map +1 -0
  42. package/dist/cjs/server/index.js +8 -6
  43. package/dist/cjs/server/index.js.map +1 -1
  44. package/dist/cjs/server/jwt-edge.js +47 -19
  45. package/dist/cjs/server/jwt-edge.js.map +1 -1
  46. package/dist/cjs/server/jwt.js +11 -4
  47. package/dist/cjs/server/jwt.js.map +1 -1
  48. package/dist/cjs/server/nextErrors.js +131 -0
  49. package/dist/cjs/server/nextErrors.js.map +1 -0
  50. package/dist/cjs/server/nextFetcher.js +31 -0
  51. package/dist/cjs/server/nextFetcher.js.map +1 -0
  52. package/dist/cjs/server/node/SessionTernSecure.js +55 -0
  53. package/dist/cjs/server/node/SessionTernSecure.js.map +1 -0
  54. package/dist/cjs/server/{auth.js → node/auth.js} +11 -20
  55. package/dist/cjs/server/node/auth.js.map +1 -0
  56. package/dist/cjs/server/node/index.js +40 -0
  57. package/dist/cjs/server/node/index.js.map +1 -0
  58. package/dist/cjs/server/node/node-session.js +60 -0
  59. package/dist/cjs/server/node/node-session.js.map +1 -0
  60. package/dist/cjs/server/node/ternSecureNodeMiddleware.js +182 -0
  61. package/dist/cjs/server/node/ternSecureNodeMiddleware.js.map +1 -0
  62. package/dist/cjs/server/protect.js +90 -0
  63. package/dist/cjs/server/protect.js.map +1 -0
  64. package/dist/cjs/server/redirect.js +84 -0
  65. package/dist/cjs/server/redirect.js.map +1 -0
  66. package/dist/cjs/server/routeMatcher.js +36 -0
  67. package/dist/cjs/server/routeMatcher.js.map +1 -0
  68. package/dist/cjs/server/sdk-versions.js +43 -0
  69. package/dist/cjs/server/sdk-versions.js.map +1 -0
  70. package/dist/cjs/server/session-store.js.map +1 -1
  71. package/dist/cjs/server/ternSecureEdgeMiddleware.js +298 -0
  72. package/dist/cjs/server/ternSecureEdgeMiddleware.js.map +1 -0
  73. package/dist/cjs/server/ternSecureFireMiddleware.js +192 -0
  74. package/dist/cjs/server/ternSecureFireMiddleware.js.map +1 -0
  75. package/dist/cjs/server/types.js.map +1 -1
  76. package/dist/cjs/server/utils.js +115 -2
  77. package/dist/cjs/server/utils.js.map +1 -1
  78. package/dist/cjs/types.js.map +1 -1
  79. package/dist/cjs/utils/NextCookieAdapter.js +44 -0
  80. package/dist/cjs/utils/NextCookieAdapter.js.map +1 -0
  81. package/dist/cjs/utils/allNextProviderProps.js +10 -24
  82. package/dist/cjs/utils/allNextProviderProps.js.map +1 -1
  83. package/dist/cjs/utils/config.js +38 -2
  84. package/dist/cjs/utils/config.js.map +1 -1
  85. package/dist/cjs/utils/construct.js.map +1 -1
  86. package/dist/cjs/utils/fireconfig.js +38 -0
  87. package/dist/cjs/utils/fireconfig.js.map +1 -0
  88. package/dist/cjs/utils/logger.js +101 -0
  89. package/dist/cjs/utils/logger.js.map +1 -0
  90. package/dist/cjs/utils/redis.js +33 -0
  91. package/dist/cjs/utils/redis.js.map +1 -0
  92. package/dist/cjs/utils/response.js +38 -0
  93. package/dist/cjs/utils/response.js.map +1 -0
  94. package/dist/cjs/utils/serverRedirectAuth.js +39 -0
  95. package/dist/cjs/utils/serverRedirectAuth.js.map +1 -0
  96. package/dist/cjs/utils/ternsecure-sw.js +1 -1
  97. package/dist/cjs/utils/ternsecure-sw.js.map +1 -1
  98. package/dist/cjs/utils/withLogger.js +82 -0
  99. package/dist/cjs/utils/withLogger.js.map +1 -0
  100. package/dist/esm/__tests__/gemini_fnTernSecureNextHandler.bench.js +30 -0
  101. package/dist/esm/__tests__/gemini_fnTernSecureNextHandler.bench.js.map +1 -0
  102. package/dist/esm/app-router/admin/actions.js +40 -0
  103. package/dist/esm/app-router/admin/actions.js.map +1 -0
  104. package/dist/esm/app-router/admin/constants.js +5 -0
  105. package/dist/esm/app-router/admin/constants.js.map +1 -0
  106. package/dist/esm/app-router/admin/fnValidators.js +270 -0
  107. package/dist/esm/app-router/admin/fnValidators.js.map +1 -0
  108. package/dist/esm/app-router/admin/index.js +16 -2
  109. package/dist/esm/app-router/admin/index.js.map +1 -1
  110. package/dist/esm/app-router/admin/responses.js +93 -0
  111. package/dist/esm/app-router/admin/responses.js.map +1 -0
  112. package/dist/esm/app-router/admin/sessionHandlers.js +131 -0
  113. package/dist/esm/app-router/admin/sessionHandlers.js.map +1 -0
  114. package/dist/esm/app-router/admin/ternsecureNextjsHandler.js +62 -0
  115. package/dist/esm/app-router/admin/ternsecureNextjsHandler.js.map +1 -0
  116. package/dist/esm/app-router/admin/types.js +98 -0
  117. package/dist/esm/app-router/admin/types.js.map +1 -0
  118. package/dist/esm/app-router/admin/utils.js +80 -0
  119. package/dist/esm/app-router/admin/utils.js.map +1 -0
  120. package/dist/esm/app-router/admin/validators.js +189 -0
  121. package/dist/esm/app-router/admin/validators.js.map +1 -0
  122. package/dist/esm/app-router/client/TernSecureProvider.js +2 -6
  123. package/dist/esm/app-router/client/TernSecureProvider.js.map +1 -1
  124. package/dist/esm/app-router/server/auth.js +81 -0
  125. package/dist/esm/app-router/server/auth.js.map +1 -0
  126. package/dist/esm/app-router/server/utils.js +51 -0
  127. package/dist/esm/app-router/server/utils.js.map +1 -0
  128. package/dist/esm/boundary/components.js +4 -7
  129. package/dist/esm/boundary/components.js.map +1 -1
  130. package/dist/esm/constants.js +17 -0
  131. package/dist/esm/constants.js.map +1 -0
  132. package/dist/esm/errors.js.map +1 -1
  133. package/dist/esm/index.js +5 -11
  134. package/dist/esm/index.js.map +1 -1
  135. package/dist/esm/server/constant.js +11 -0
  136. package/dist/esm/server/constant.js.map +1 -0
  137. package/dist/esm/server/edge-session.js +113 -22
  138. package/dist/esm/server/edge-session.js.map +1 -1
  139. package/dist/esm/server/headers-utils.js +41 -0
  140. package/dist/esm/server/headers-utils.js.map +1 -0
  141. package/dist/esm/server/index.js +9 -3
  142. package/dist/esm/server/index.js.map +1 -1
  143. package/dist/esm/server/jwt-edge.js +48 -20
  144. package/dist/esm/server/jwt-edge.js.map +1 -1
  145. package/dist/esm/server/jwt.js +12 -5
  146. package/dist/esm/server/jwt.js.map +1 -1
  147. package/dist/esm/server/nextErrors.js +97 -0
  148. package/dist/esm/server/nextErrors.js.map +1 -0
  149. package/dist/esm/server/nextFetcher.js +7 -0
  150. package/dist/esm/server/nextFetcher.js.map +1 -0
  151. package/dist/esm/server/node/SessionTernSecure.js +31 -0
  152. package/dist/esm/server/node/SessionTernSecure.js.map +1 -0
  153. package/dist/esm/server/{auth.js → node/auth.js} +11 -20
  154. package/dist/esm/server/node/auth.js.map +1 -0
  155. package/dist/esm/server/node/index.js +19 -0
  156. package/dist/esm/server/node/index.js.map +1 -0
  157. package/dist/esm/server/node/node-session.js +36 -0
  158. package/dist/esm/server/node/node-session.js.map +1 -0
  159. package/dist/esm/server/node/ternSecureNodeMiddleware.js +165 -0
  160. package/dist/esm/server/node/ternSecureNodeMiddleware.js.map +1 -0
  161. package/dist/esm/server/protect.js +66 -0
  162. package/dist/esm/server/protect.js.map +1 -0
  163. package/dist/esm/server/redirect.js +60 -0
  164. package/dist/esm/server/redirect.js.map +1 -0
  165. package/dist/esm/server/routeMatcher.js +12 -0
  166. package/dist/esm/server/routeMatcher.js.map +1 -0
  167. package/dist/esm/server/sdk-versions.js +8 -0
  168. package/dist/esm/server/sdk-versions.js.map +1 -0
  169. package/dist/esm/server/session-store.js.map +1 -1
  170. package/dist/esm/server/ternSecureEdgeMiddleware.js +286 -0
  171. package/dist/esm/server/ternSecureEdgeMiddleware.js.map +1 -0
  172. package/dist/esm/server/ternSecureFireMiddleware.js +179 -0
  173. package/dist/esm/server/ternSecureFireMiddleware.js.map +1 -0
  174. package/dist/esm/server/utils.js +99 -1
  175. package/dist/esm/server/utils.js.map +1 -1
  176. package/dist/esm/types.js.map +1 -1
  177. package/dist/esm/utils/NextCookieAdapter.js +20 -0
  178. package/dist/esm/utils/NextCookieAdapter.js.map +1 -0
  179. package/dist/esm/utils/allNextProviderProps.js +10 -24
  180. package/dist/esm/utils/allNextProviderProps.js.map +1 -1
  181. package/dist/esm/utils/config.js +34 -1
  182. package/dist/esm/utils/config.js.map +1 -1
  183. package/dist/esm/utils/construct.js +1 -1
  184. package/dist/esm/utils/construct.js.map +1 -1
  185. package/dist/esm/utils/fireconfig.js +14 -0
  186. package/dist/esm/utils/fireconfig.js.map +1 -0
  187. package/dist/esm/utils/logger.js +74 -0
  188. package/dist/esm/utils/logger.js.map +1 -0
  189. package/dist/esm/utils/redis.js +9 -0
  190. package/dist/esm/utils/redis.js.map +1 -0
  191. package/dist/esm/utils/response.js +13 -0
  192. package/dist/esm/utils/response.js.map +1 -0
  193. package/dist/esm/utils/serverRedirectAuth.js +17 -0
  194. package/dist/esm/utils/serverRedirectAuth.js.map +1 -0
  195. package/dist/esm/utils/ternsecure-sw.js +1 -1
  196. package/dist/esm/utils/ternsecure-sw.js.map +1 -1
  197. package/dist/esm/utils/withLogger.js +57 -0
  198. package/dist/esm/utils/withLogger.js.map +1 -0
  199. package/package.json +21 -7
  200. package/server/node/package.json +5 -0
  201. package/server/package.json +5 -0
  202. package/dist/cjs/app-router/admin/sessionHandler.js +0 -74
  203. package/dist/cjs/app-router/admin/sessionHandler.js.map +0 -1
  204. package/dist/cjs/app-router/client/actions.js +0 -4
  205. package/dist/cjs/app-router/client/actions.js.map +0 -1
  206. package/dist/cjs/components/uiComponents.js.map +0 -1
  207. package/dist/cjs/server/auth.js.map +0 -1
  208. package/dist/cjs/server/ternSecureMiddleware.js +0 -95
  209. package/dist/cjs/server/ternSecureMiddleware.js.map +0 -1
  210. package/dist/cjs/utils/tern-ui-script.js +0 -78
  211. package/dist/cjs/utils/tern-ui-script.js.map +0 -1
  212. package/dist/esm/app-router/admin/sessionHandler.js +0 -50
  213. package/dist/esm/app-router/admin/sessionHandler.js.map +0 -1
  214. package/dist/esm/app-router/client/actions.js +0 -3
  215. package/dist/esm/app-router/client/actions.js.map +0 -1
  216. package/dist/esm/components/uiComponents.js +0 -21
  217. package/dist/esm/components/uiComponents.js.map +0 -1
  218. package/dist/esm/server/auth.js.map +0 -1
  219. package/dist/esm/server/ternSecureMiddleware.js +0 -69
  220. package/dist/esm/server/ternSecureMiddleware.js.map +0 -1
  221. package/dist/esm/utils/tern-ui-script.js +0 -44
  222. package/dist/esm/utils/tern-ui-script.js.map +0 -1
  223. package/dist/types/app-router/admin/index.d.ts +0 -2
  224. package/dist/types/app-router/admin/index.d.ts.map +0 -1
  225. package/dist/types/app-router/admin/sessionHandler.d.ts +0 -3
  226. package/dist/types/app-router/admin/sessionHandler.d.ts.map +0 -1
  227. package/dist/types/app-router/client/TernSecureProvider.d.ts +0 -25
  228. package/dist/types/app-router/client/TernSecureProvider.d.ts.map +0 -1
  229. package/dist/types/app-router/client/actions.d.ts +0 -2
  230. package/dist/types/app-router/client/actions.d.ts.map +0 -1
  231. package/dist/types/app-router/route-handler/internal-route.d.ts +0 -2
  232. package/dist/types/app-router/route-handler/internal-route.d.ts.map +0 -1
  233. package/dist/types/boundary/components.d.ts +0 -2
  234. package/dist/types/boundary/components.d.ts.map +0 -1
  235. package/dist/types/boundary/hooks.d.ts +0 -2
  236. package/dist/types/boundary/hooks.d.ts.map +0 -1
  237. package/dist/types/components/uiComponents.d.ts +0 -6
  238. package/dist/types/components/uiComponents.d.ts.map +0 -1
  239. package/dist/types/errors.d.ts +0 -44
  240. package/dist/types/errors.d.ts.map +0 -1
  241. package/dist/types/index.d.ts +0 -5
  242. package/dist/types/index.d.ts.map +0 -1
  243. package/dist/types/server/auth.d.ts +0 -23
  244. package/dist/types/server/auth.d.ts.map +0 -1
  245. package/dist/types/server/crypto.d.ts +0 -3
  246. package/dist/types/server/crypto.d.ts.map +0 -1
  247. package/dist/types/server/ctx-store.d.ts +0 -24
  248. package/dist/types/server/ctx-store.d.ts.map +0 -1
  249. package/dist/types/server/edge-session.d.ts +0 -4
  250. package/dist/types/server/edge-session.d.ts.map +0 -1
  251. package/dist/types/server/index.d.ts +0 -4
  252. package/dist/types/server/index.d.ts.map +0 -1
  253. package/dist/types/server/jwt-edge.d.ts +0 -20
  254. package/dist/types/server/jwt-edge.d.ts.map +0 -1
  255. package/dist/types/server/jwt.d.ts +0 -20
  256. package/dist/types/server/jwt.d.ts.map +0 -1
  257. package/dist/types/server/session-store.d.ts +0 -30
  258. package/dist/types/server/session-store.d.ts.map +0 -1
  259. package/dist/types/server/ternSecureMiddleware.d.ts +0 -20
  260. package/dist/types/server/ternSecureMiddleware.d.ts.map +0 -1
  261. package/dist/types/server/types.d.ts +0 -26
  262. package/dist/types/server/types.d.ts.map +0 -1
  263. package/dist/types/server/utils.d.ts +0 -22
  264. package/dist/types/server/utils.d.ts.map +0 -1
  265. package/dist/types/types.d.ts +0 -112
  266. package/dist/types/types.d.ts.map +0 -1
  267. package/dist/types/utils/admin-init.d.ts +0 -2
  268. package/dist/types/utils/admin-init.d.ts.map +0 -1
  269. package/dist/types/utils/allNextProviderProps.d.ts +0 -6
  270. package/dist/types/utils/allNextProviderProps.d.ts.map +0 -1
  271. package/dist/types/utils/client-init.d.ts +0 -2
  272. package/dist/types/utils/client-init.d.ts.map +0 -1
  273. package/dist/types/utils/config.d.ts +0 -35
  274. package/dist/types/utils/config.d.ts.map +0 -1
  275. package/dist/types/utils/construct.d.ts +0 -38
  276. package/dist/types/utils/construct.d.ts.map +0 -1
  277. package/dist/types/utils/create-styles.d.ts +0 -99
  278. package/dist/types/utils/create-styles.d.ts.map +0 -1
  279. package/dist/types/utils/redirect.d.ts +0 -9
  280. package/dist/types/utils/redirect.d.ts.map +0 -1
  281. package/dist/types/utils/tern-ui-script.d.ts +0 -9
  282. package/dist/types/utils/tern-ui-script.d.ts.map +0 -1
  283. package/dist/types/utils/ternsecure-sw.d.ts +0 -8
  284. package/dist/types/utils/ternsecure-sw.d.ts.map +0 -1
@@ -0,0 +1,182 @@
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 ternSecureNodeMiddleware_exports = {};
20
+ __export(ternSecureNodeMiddleware_exports, {
21
+ createRouteMatcher: () => createRouteMatcher,
22
+ ternSecureMiddleware: () => ternSecureMiddleware
23
+ });
24
+ module.exports = __toCommonJS(ternSecureNodeMiddleware_exports);
25
+ var import_backend = require("@tern-secure/backend");
26
+ var import_admin = require("@tern-secure/backend/admin");
27
+ var import_server = require("next/server");
28
+ var import_constant = require("../constant");
29
+ var import_nextErrors = require("../nextErrors");
30
+ var import_redirect = require("../redirect");
31
+ const createRouteMatcher = (patterns) => {
32
+ return (request) => {
33
+ const { pathname } = request.nextUrl;
34
+ return patterns.some((pattern) => {
35
+ const regexPattern = pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/\\\*/g, ".*");
36
+ return new RegExp(`^${regexPattern}$`).test(pathname);
37
+ });
38
+ };
39
+ };
40
+ const authenticateMiddlewareRequest = async (request) => {
41
+ try {
42
+ const requestState = await (0, import_admin.createBackendInstance)(request);
43
+ const authResult = requestState.requestState.auth();
44
+ return {
45
+ user: {
46
+ uid: authResult.session.uid,
47
+ email: authResult.session.email || null,
48
+ tenantId: authResult.session.firebase?.tenant || "default",
49
+ authTime: authResult.session.auth_time
50
+ },
51
+ session: requestState.requestState.token
52
+ };
53
+ } catch (error) {
54
+ console.error(
55
+ "Auth check error:",
56
+ error instanceof Error ? error.message : "Unknown error"
57
+ );
58
+ return {
59
+ user: null,
60
+ session: null
61
+ };
62
+ }
63
+ };
64
+ const ternSecureMiddleware = (...args) => {
65
+ const [request, event] = parseRequestAndEvent(args);
66
+ const [handler, params] = parseHandlerAndOptions(args);
67
+ const middleware = () => {
68
+ const withAuthNextMiddleware = async (request2, event2) => {
69
+ const resolvedParams = typeof params === "function" ? await params(request2) : params;
70
+ const signInUrl = resolvedParams.signInUrl || import_constant.SIGN_IN_URL;
71
+ const signUpUrl = resolvedParams.signUpUrl || import_constant.SIGN_UP_URL;
72
+ let handlerResult = import_server.NextResponse.next();
73
+ if (handler) {
74
+ const createAuthHandler = async () => {
75
+ const authObject = await authenticateMiddlewareRequest(request2);
76
+ const getAuth = async () => {
77
+ const ternSecureRequest = (0, import_backend.createTernSecureRequest)(request2);
78
+ const { redirectToSignIn, redirectToSignUp } = createMiddlewareRedirects(
79
+ ternSecureRequest,
80
+ signInUrl,
81
+ signUpUrl
82
+ );
83
+ return {
84
+ ...authObject,
85
+ redirectToSignIn,
86
+ redirectToSignUp
87
+ };
88
+ };
89
+ const protect = async () => {
90
+ if (!authObject.user || !authObject.session) {
91
+ const redirectUrl = new URL(signInUrl || "/sign-in", request2.url);
92
+ redirectUrl.searchParams.set(
93
+ "redirect",
94
+ request2.nextUrl.pathname
95
+ );
96
+ (0, import_nextErrors.redirectToSignInError)(redirectUrl.toString());
97
+ }
98
+ };
99
+ const authHandler = Object.assign(getAuth, {
100
+ protect,
101
+ user: authObject.user,
102
+ session: authObject.session
103
+ });
104
+ return authHandler;
105
+ };
106
+ try {
107
+ const auth = await createAuthHandler();
108
+ const userHandlerResult = await handler(auth, request2, event2);
109
+ handlerResult = userHandlerResult || handlerResult;
110
+ } catch (error) {
111
+ const ternSecureRequest = (0, import_backend.createTernSecureRequest)(request2);
112
+ handlerResult = handleControlError(error, ternSecureRequest, request2);
113
+ }
114
+ return handlerResult;
115
+ }
116
+ return handlerResult;
117
+ };
118
+ const nextMiddleware = async (request2, event2) => {
119
+ return withAuthNextMiddleware(request2, event2);
120
+ };
121
+ if (request && event) {
122
+ return nextMiddleware(request, event);
123
+ }
124
+ return nextMiddleware;
125
+ };
126
+ return middleware();
127
+ };
128
+ const parseRequestAndEvent = (args) => {
129
+ return [
130
+ args[0] instanceof Request ? args[0] : void 0,
131
+ args[0] instanceof Request ? args[1] : void 0
132
+ ];
133
+ };
134
+ const parseHandlerAndOptions = (args) => {
135
+ return [
136
+ typeof args[0] === "function" ? args[0] : void 0,
137
+ (args.length === 2 ? args[1] : typeof args[0] === "function" ? {} : args[0]) || {}
138
+ ];
139
+ };
140
+ const createMiddlewareRedirects = (ternSecureRequest, signInUrl, signUpUrl) => {
141
+ const redirectToSignIn = (opts = {}) => {
142
+ const url = signInUrl || ternSecureRequest.ternUrl.toString();
143
+ (0, import_nextErrors.redirectToSignInError)(url, opts.returnBackUrl);
144
+ };
145
+ const redirectToSignUp = (opts = {}) => {
146
+ const url = signUpUrl || ternSecureRequest.ternUrl.toString();
147
+ (0, import_nextErrors.redirectToSignUpError)(url, opts.returnBackUrl);
148
+ };
149
+ return { redirectToSignIn, redirectToSignUp };
150
+ };
151
+ const handleControlError = (error, ternSecureRequest, nextrequest) => {
152
+ if ((0, import_nextErrors.isNextjsNotFoundError)(error)) {
153
+ return import_server.NextResponse.rewrite(new URL("/404", nextrequest.url));
154
+ }
155
+ if ((0, import_nextErrors.isRedirectToSignInError)(error)) {
156
+ const redirectAdapter = (url) => import_server.NextResponse.redirect(new URL(url, nextrequest.url));
157
+ const { redirectToSignIn } = (0, import_redirect.createRedirect)({
158
+ redirectAdapter,
159
+ baseUrl: ternSecureRequest.ternUrl.origin,
160
+ signInUrl: import_constant.SIGN_IN_URL,
161
+ signUpUrl: import_constant.SIGN_UP_URL
162
+ });
163
+ return redirectToSignIn({ returnBackUrl: error.returnBackUrl });
164
+ }
165
+ if ((0, import_nextErrors.isRedirectToSignUpError)(error)) {
166
+ const redirectAdapter = (url) => import_server.NextResponse.redirect(new URL(url, nextrequest.url));
167
+ const { redirectToSignUp } = (0, import_redirect.createRedirect)({
168
+ redirectAdapter,
169
+ baseUrl: ternSecureRequest.ternUrl.origin,
170
+ signInUrl: import_constant.SIGN_IN_URL,
171
+ signUpUrl: import_constant.SIGN_UP_URL
172
+ });
173
+ return redirectToSignUp({ returnBackUrl: error.returnBackUrl });
174
+ }
175
+ throw error;
176
+ };
177
+ // Annotate the CommonJS export names for ESM import in node:
178
+ 0 && (module.exports = {
179
+ createRouteMatcher,
180
+ ternSecureMiddleware
181
+ });
182
+ //# sourceMappingURL=ternSecureNodeMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/server/node/ternSecureNodeMiddleware.ts"],"sourcesContent":["import {createTernSecureRequest, type TernSecureRequest } from \"@tern-secure/backend\";\nimport {\n createBackendInstance,\n} from \"@tern-secure/backend/admin\";\nimport type { NextMiddleware,NextRequest } from \"next/server\";\nimport {NextResponse } from \"next/server\";\n\nimport { SIGN_IN_URL, SIGN_UP_URL } from \"../constant\";\nimport {\n isNextjsNotFoundError,\n isRedirectToSignInError,\n isRedirectToSignUpError,\n redirectToSignInError,\n redirectToSignUpError,\n} from \"../nextErrors\";\nimport { createRedirect } from \"../redirect\";\nimport type { BaseUser ,\n NextMiddlewareEvtParam,\n NextMiddlewareRequestParam,\n NextMiddlewareReturn,\n} from \"../types\";\n\ntype RedirectToParams = { returnBackUrl?: string | URL | null };\nexport type RedirectFun<ReturnType> = (params?: RedirectToParams) => ReturnType;\n\nexport type AuthObject = {\n user: BaseUser | null;\n session: string | null;\n};\n\nexport interface MiddlewareAuth extends AuthObject {\n (): Promise<MiddlewareAuthObject>;\n protect: () => Promise<void>;\n}\n\ntype MiddlewareHandler = (\n auth: MiddlewareAuth,\n request: NextMiddlewareRequestParam,\n event: NextMiddlewareEvtParam\n) => NextMiddlewareReturn;\n\nexport type MiddlewareAuthObject = AuthObject & {\n redirectToSignIn: RedirectFun<Response>;\n redirectToSignUp: RedirectFun<Response>;\n};\n\n/**\n * Create a route matcher function for public paths\n */\nexport const createRouteMatcher = (patterns: string[]) => {\n return (request: NextRequest): boolean => {\n const { pathname } = request.nextUrl;\n return patterns.some((pattern) => {\n const regexPattern = pattern\n .replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(/\\\\\\*/g, \".*\");\n\n return new RegExp(`^${regexPattern}$`).test(pathname);\n });\n };\n};\n\nconst authenticateMiddlewareRequest = async (\n request: NextRequest\n): Promise<AuthObject> => {\n try {\n const requestState = await createBackendInstance(request);\n const authResult = requestState.requestState.auth();\n\n return {\n user: {\n uid: authResult.session.uid,\n email: authResult.session.email || null,\n tenantId: authResult.session.firebase?.tenant || \"default\",\n authTime: authResult.session.auth_time,\n },\n session: requestState.requestState.token,\n };\n } catch (error) {\n console.error(\n \"Auth check error:\",\n error instanceof Error ? error.message : \"Unknown error\"\n );\n return {\n user: null,\n session: null,\n };\n }\n};\n\nexport interface MiddlewareOptions {\n signInUrl?: string;\n signUpUrl?: string;\n debug?: boolean;\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 (\n handler: MiddlewareHandler,\n options?: MiddlewareOptionsCallback\n ): NextMiddleware;\n\n /**\n * @example\n * export default ternSecureMiddleware(options);\n */\n (options?: MiddlewareOptions): NextMiddleware;\n /**\n * @example\n * export default ternSecureMiddleware;\n */\n (\n request: NextMiddlewareRequestParam,\n event: NextMiddlewareEvtParam\n ): NextMiddlewareReturn;\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 withAuthNextMiddleware: NextMiddleware = async (request, event) => {\n const resolvedParams =\n typeof params === \"function\" ? await params(request) : params;\n\n const signInUrl = resolvedParams.signInUrl || SIGN_IN_URL;\n const signUpUrl = resolvedParams.signUpUrl || SIGN_UP_URL;\n\n let handlerResult: Response = NextResponse.next();\n\n if (handler) {\n const createAuthHandler = async (): Promise<MiddlewareAuth> => {\n const authObject = await authenticateMiddlewareRequest(request);\n\n const getAuth = async (): Promise<MiddlewareAuthObject> => {\n const ternSecureRequest = createTernSecureRequest(request);\n const { redirectToSignIn, redirectToSignUp } =\n createMiddlewareRedirects(\n ternSecureRequest,\n signInUrl,\n signUpUrl\n );\n\n return {\n ...authObject,\n redirectToSignIn,\n redirectToSignUp,\n };\n };\n\n const protect = async (): Promise<void> => {\n if (!authObject.user || !authObject.session) {\n const redirectUrl = new URL(signInUrl || \"/sign-in\", request.url);\n redirectUrl.searchParams.set(\n \"redirect\",\n request.nextUrl.pathname\n );\n redirectToSignInError(redirectUrl.toString());\n }\n };\n\n // Return the MiddlewareAuth object with direct property access\n const authHandler = Object.assign(getAuth, {\n protect,\n user: authObject.user,\n session: authObject.session,\n });\n\n return authHandler as MiddlewareAuth;\n };\n\n try {\n const auth = await createAuthHandler();\n const userHandlerResult = await handler(auth, request, event);\n handlerResult = userHandlerResult || handlerResult;\n } catch (error) {\n const ternSecureRequest = createTernSecureRequest(request);\n handlerResult = handleControlError(error, ternSecureRequest, request);\n }\n\n return handlerResult;\n }\n\n return handlerResult;\n };\n\n const nextMiddleware: NextMiddleware = async (request, event) => {\n return withAuthNextMiddleware(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 [\n NextMiddlewareRequestParam | undefined,\n NextMiddlewareEvtParam | undefined,\n ];\n};\n\nconst parseHandlerAndOptions = (args: unknown[]) => {\n return [\n typeof args[0] === \"function\" ? args[0] : undefined,\n (args.length === 2\n ? args[1]\n : typeof args[0] === \"function\"\n ? {}\n : args[0]) || {},\n ] as [\n MiddlewareHandler | undefined,\n MiddlewareOptions | MiddlewareOptionsCallback,\n ];\n};\n\n/**\n * Create middleware redirect functions\n */\nconst createMiddlewareRedirects = (\n ternSecureRequest: TernSecureRequest,\n signInUrl: string,\n signUpUrl: string\n) => {\n const redirectToSignIn: MiddlewareAuthObject[\"redirectToSignIn\"] = (\n opts = {}\n ) => {\n const url = signInUrl || ternSecureRequest.ternUrl.toString();\n redirectToSignInError(url, opts.returnBackUrl);\n };\n\n const redirectToSignUp: MiddlewareAuthObject[\"redirectToSignUp\"] = (\n opts = {}\n ) => {\n const url = signUpUrl || ternSecureRequest.ternUrl.toString();\n redirectToSignUpError(url, opts.returnBackUrl);\n };\n\n return { redirectToSignIn, redirectToSignUp };\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 NextResponse.rewrite(new URL(\"/404\", nextrequest.url));\n }\n\n // Handle redirect to sign in errors\n if (isRedirectToSignInError(error)) {\n const redirectAdapter = (url: string) =>\n NextResponse.redirect(new URL(url, nextrequest.url));\n const { redirectToSignIn } = createRedirect({\n redirectAdapter,\n baseUrl: ternSecureRequest.ternUrl.origin,\n signInUrl: SIGN_IN_URL,\n signUpUrl: SIGN_UP_URL,\n });\n\n return redirectToSignIn({ returnBackUrl: error.returnBackUrl });\n }\n\n // Handle redirect to sign up errors\n if (isRedirectToSignUpError(error)) {\n const redirectAdapter = (url: string) =>\n NextResponse.redirect(new URL(url, nextrequest.url));\n const { redirectToSignUp } = createRedirect({\n redirectAdapter,\n baseUrl: ternSecureRequest.ternUrl.origin,\n signInUrl: SIGN_IN_URL,\n signUpUrl: SIGN_UP_URL,\n });\n\n return redirectToSignUp({ returnBackUrl: error.returnBackUrl });\n }\n\n throw error;\n};\n"],"mappings":"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","names":["request","event"]}
@@ -0,0 +1,90 @@
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 protect_exports = {};
20
+ __export(protect_exports, {
21
+ createProtect: () => createProtect
22
+ });
23
+ module.exports = __toCommonJS(protect_exports);
24
+ var import_backend = require("@tern-secure/backend");
25
+ var import_constants = require("../constants");
26
+ var import_nextFetcher = require("./nextFetcher");
27
+ function createProtect(opts) {
28
+ const { redirectToSignIn, authObject, redirect, notFound, request } = opts;
29
+ return async (...args) => {
30
+ const optionValuesAsParam = args[0]?.unauthenticatedUrl || args[0]?.unauthorizedUrl;
31
+ const paramsOrFunction = optionValuesAsParam ? void 0 : args[0];
32
+ const unauthenticatedUrl = args[0]?.unauthenticatedUrl || args[1]?.unauthenticatedUrl;
33
+ const unauthorizedUrl = args[0]?.unauthorizedUrl || args[1]?.unauthorizedUrl;
34
+ const handleUnauthenticated = () => {
35
+ if (unauthenticatedUrl) {
36
+ redirect(unauthenticatedUrl);
37
+ }
38
+ if (isPageRequest(request)) {
39
+ return redirectToSignIn();
40
+ }
41
+ return notFound();
42
+ };
43
+ const handleUnauthorized = () => {
44
+ if (unauthorizedUrl) {
45
+ redirect(unauthorizedUrl);
46
+ }
47
+ notFound();
48
+ };
49
+ if (!authObject.userId) {
50
+ handleUnauthenticated();
51
+ }
52
+ if (!paramsOrFunction) {
53
+ return authObject;
54
+ }
55
+ if (typeof paramsOrFunction === "function") {
56
+ if (paramsOrFunction(authObject.require)) {
57
+ return authObject;
58
+ }
59
+ return handleUnauthorized();
60
+ }
61
+ if (authObject.require(paramsOrFunction)) {
62
+ return authObject;
63
+ }
64
+ };
65
+ }
66
+ const isServerActionRequest = (req) => {
67
+ return !!req.headers.get(import_constants.constants.Headers.NextUrl) && (req.headers.get(import_backend.constants.Headers.Accept)?.includes("text/x-component") || req.headers.get(import_backend.constants.Headers.ContentType)?.includes("multipart/form-data") || !!req.headers.get(import_constants.constants.Headers.NextAction));
68
+ };
69
+ const isPageRequest = (req) => {
70
+ return req.headers.get(import_backend.constants.Headers.SecFetchDest) === "document" || req.headers.get(import_backend.constants.Headers.SecFetchDest) === "iframe" || req.headers.get(import_backend.constants.Headers.Accept)?.includes("text/html") || isAppRouterInternalNavigation(req) || isPagesRouterInternalNavigation(req);
71
+ };
72
+ const isAppRouterInternalNavigation = (req) => !!req.headers.get(import_constants.constants.Headers.NextUrl) && !isServerActionRequest(req) || isPagePathAvailable();
73
+ const isPagePathAvailable = () => {
74
+ const __fetch = globalThis.fetch;
75
+ if (!(0, import_nextFetcher.isNextFetcher)(__fetch)) {
76
+ return false;
77
+ }
78
+ const { page, pagePath } = __fetch.__nextGetStaticStore().getStore() || {};
79
+ return Boolean(
80
+ // available on next@14
81
+ pagePath || // available on next@15
82
+ page
83
+ );
84
+ };
85
+ const isPagesRouterInternalNavigation = (req) => !!req.headers.get(import_constants.constants.Headers.NextjsData);
86
+ // Annotate the CommonJS export names for ESM import in node:
87
+ 0 && (module.exports = {
88
+ createProtect
89
+ });
90
+ //# sourceMappingURL=protect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/protect.ts"],"sourcesContent":["import type { AuthObject, SignedInAuthObject } from \"@tern-secure/backend\";\nimport { constants } from \"@tern-secure/backend\";\nimport type { CheckAuthorizationFromSessionClaims } from \"@tern-secure/types\";\n\nimport { constants as nextConstants } from \"../constants\";\nimport { isNextFetcher } from \"./nextFetcher\";\nimport type { RedirectFun } from \"./redirect\";\n\ntype AuthProtectOptions = {\n /**\n * The URL to redirect the user to if they are not authorized.\n */\n unauthorizedUrl?: string;\n /**\n * The URL to redirect the user to if they are not authenticated.\n */\n unauthenticatedUrl?: string;\n};\n\nexport interface AuthProtect {\n (\n params?: (require: CheckAuthorizationFromSessionClaims) => boolean,\n options?: AuthProtectOptions\n ): Promise<SignedInAuthObject>;\n (options?: AuthProtectOptions): Promise<SignedInAuthObject>;\n}\n\nexport function createProtect(opts: {\n request: Request;\n authObject: AuthObject;\n notFound: () => never;\n redirect: (url: string) => void;\n redirectToSignIn: RedirectFun<unknown>;\n}): AuthProtect {\n const { redirectToSignIn, authObject, redirect, notFound, request } = opts;\n\n return (async (...args: any[]) => {\n const optionValuesAsParam =\n args[0]?.unauthenticatedUrl || args[0]?.unauthorizedUrl;\n const paramsOrFunction = optionValuesAsParam ? undefined : (args[0] as \n | CheckAuthorizationFromSessionClaims\n | ((require: CheckAuthorizationFromSessionClaims) => boolean));\n const unauthenticatedUrl = (args[0]?.unauthenticatedUrl ||\n args[1]?.unauthenticatedUrl) as string | undefined;\n const unauthorizedUrl = (args[0]?.unauthorizedUrl ||\n args[1]?.unauthorizedUrl) as string | undefined;\n\n const handleUnauthenticated = () => {\n if (unauthenticatedUrl) {\n redirect(unauthenticatedUrl);\n }\n if (isPageRequest(request)) {\n return redirectToSignIn();\n }\n return notFound();\n };\n\n const handleUnauthorized = () => {\n if (unauthorizedUrl) {\n redirect(unauthorizedUrl);\n }\n notFound();\n };\n\n if (!authObject.userId) {\n handleUnauthenticated();\n }\n\n if (!paramsOrFunction) {\n return authObject;\n }\n\n if (typeof paramsOrFunction === \"function\") {\n if (paramsOrFunction(authObject.require)) {\n return authObject;\n }\n return handleUnauthorized();\n }\n\n if (authObject.require(paramsOrFunction)) {\n return authObject;\n }\n }) as AuthProtect;\n}\n\nconst isServerActionRequest = (req: Request) => {\n return (\n !!req.headers.get(nextConstants.Headers.NextUrl) &&\n (req.headers.get(constants.Headers.Accept)?.includes(\"text/x-component\") ||\n req.headers\n .get(constants.Headers.ContentType)\n ?.includes(\"multipart/form-data\") ||\n !!req.headers.get(nextConstants.Headers.NextAction))\n );\n};\n\nconst isPageRequest = (req: Request): boolean => {\n return (\n req.headers.get(constants.Headers.SecFetchDest) === \"document\" ||\n req.headers.get(constants.Headers.SecFetchDest) === \"iframe\" ||\n req.headers.get(constants.Headers.Accept)?.includes(\"text/html\") ||\n isAppRouterInternalNavigation(req) ||\n isPagesRouterInternalNavigation(req)\n );\n};\n\nconst isAppRouterInternalNavigation = (req: Request) =>\n (!!req.headers.get(nextConstants.Headers.NextUrl) &&\n !isServerActionRequest(req)) ||\n isPagePathAvailable();\n\nconst isPagePathAvailable = () => {\n const __fetch = globalThis.fetch;\n\n if (!isNextFetcher(__fetch)) {\n return false;\n }\n\n const { page, pagePath } = __fetch.__nextGetStaticStore().getStore() || {};\n\n return Boolean(\n // available on next@14\n pagePath ||\n // available on next@15\n page\n );\n};\n\nconst isPagesRouterInternalNavigation = (req: Request) =>\n !!req.headers.get(nextConstants.Headers.NextjsData);\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAA0B;AAG1B,uBAA2C;AAC3C,yBAA8B;AAsBvB,SAAS,cAAc,MAMd;AACd,QAAM,EAAE,kBAAkB,YAAY,UAAU,UAAU,QAAQ,IAAI;AAEtE,SAAQ,UAAU,SAAgB;AAChC,UAAM,sBACJ,KAAK,CAAC,GAAG,sBAAsB,KAAK,CAAC,GAAG;AAC1C,UAAM,mBAAmB,sBAAsB,SAAa,KAAK,CAAC;AAGlE,UAAM,qBAAsB,KAAK,CAAC,GAAG,sBACnC,KAAK,CAAC,GAAG;AACX,UAAM,kBAAmB,KAAK,CAAC,GAAG,mBAChC,KAAK,CAAC,GAAG;AAEX,UAAM,wBAAwB,MAAM;AAClC,UAAI,oBAAoB;AACtB,iBAAS,kBAAkB;AAAA,MAC7B;AACA,UAAI,cAAc,OAAO,GAAG;AAC1B,eAAO,iBAAiB;AAAA,MAC1B;AACA,aAAO,SAAS;AAAA,IAClB;AAEA,UAAM,qBAAqB,MAAM;AAC/B,UAAI,iBAAiB;AACnB,iBAAS,eAAe;AAAA,MAC1B;AACA,eAAS;AAAA,IACX;AAEA,QAAI,CAAC,WAAW,QAAQ;AACtB,4BAAsB;AAAA,IACxB;AAEA,QAAI,CAAC,kBAAkB;AACrB,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,qBAAqB,YAAY;AAC1C,UAAI,iBAAiB,WAAW,OAAO,GAAG;AACxC,eAAO;AAAA,MACT;AACA,aAAO,mBAAmB;AAAA,IAC5B;AAEA,QAAI,WAAW,QAAQ,gBAAgB,GAAG;AACxC,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,MAAM,wBAAwB,CAAC,QAAiB;AAC9C,SACE,CAAC,CAAC,IAAI,QAAQ,IAAI,iBAAAA,UAAc,QAAQ,OAAO,MAC9C,IAAI,QAAQ,IAAI,yBAAU,QAAQ,MAAM,GAAG,SAAS,kBAAkB,KACrE,IAAI,QACD,IAAI,yBAAU,QAAQ,WAAW,GAChC,SAAS,qBAAqB,KAClC,CAAC,CAAC,IAAI,QAAQ,IAAI,iBAAAA,UAAc,QAAQ,UAAU;AAExD;AAEA,MAAM,gBAAgB,CAAC,QAA0B;AAC/C,SACE,IAAI,QAAQ,IAAI,yBAAU,QAAQ,YAAY,MAAM,cACpD,IAAI,QAAQ,IAAI,yBAAU,QAAQ,YAAY,MAAM,YACpD,IAAI,QAAQ,IAAI,yBAAU,QAAQ,MAAM,GAAG,SAAS,WAAW,KAC/D,8BAA8B,GAAG,KACjC,gCAAgC,GAAG;AAEvC;AAEA,MAAM,gCAAgC,CAAC,QACpC,CAAC,CAAC,IAAI,QAAQ,IAAI,iBAAAA,UAAc,QAAQ,OAAO,KAC9C,CAAC,sBAAsB,GAAG,KAC5B,oBAAoB;AAEtB,MAAM,sBAAsB,MAAM;AAChC,QAAM,UAAU,WAAW;AAE3B,MAAI,KAAC,kCAAc,OAAO,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,MAAM,SAAS,IAAI,QAAQ,qBAAqB,EAAE,SAAS,KAAK,CAAC;AAEzE,SAAO;AAAA;AAAA,IAEL;AAAA,IAEE;AAAA,EACJ;AACF;AAEA,MAAM,kCAAkC,CAAC,QACvC,CAAC,CAAC,IAAI,QAAQ,IAAI,iBAAAA,UAAc,QAAQ,UAAU;","names":["nextConstants"]}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var redirect_exports = {};
20
+ __export(redirect_exports, {
21
+ createRedirect: () => createRedirect
22
+ });
23
+ module.exports = __toCommonJS(redirect_exports);
24
+ const buildUrl = (_baseUrl, _targetUrl, _returnBackUrl) => {
25
+ if (_baseUrl === "") {
26
+ return legacyBuildUrl(_targetUrl.toString(), _returnBackUrl?.toString());
27
+ }
28
+ const baseUrl = new URL(_baseUrl);
29
+ const returnBackUrl = _returnBackUrl ? new URL(_returnBackUrl, baseUrl) : void 0;
30
+ const res = new URL(_targetUrl, baseUrl);
31
+ if (returnBackUrl) {
32
+ res.searchParams.set("redirect_url", returnBackUrl.toString());
33
+ }
34
+ return res.toString();
35
+ };
36
+ const legacyBuildUrl = (targetUrl, redirectUrl) => {
37
+ let url;
38
+ if (!targetUrl.startsWith("http")) {
39
+ if (!redirectUrl || !redirectUrl.startsWith("http")) {
40
+ throw new Error("destination url or return back url should be an absolute path url!");
41
+ }
42
+ const baseURL = new URL(redirectUrl);
43
+ url = new URL(targetUrl, baseURL.origin);
44
+ } else {
45
+ url = new URL(targetUrl);
46
+ }
47
+ if (redirectUrl) {
48
+ url.searchParams.set("redirect_url", redirectUrl);
49
+ }
50
+ return url.toString();
51
+ };
52
+ const createRedirect = (params) => {
53
+ const { redirectAdapter, signInUrl, signUpUrl, baseUrl } = params;
54
+ const redirectToSignUp = ({ returnBackUrl } = {}) => {
55
+ if (!signUpUrl) {
56
+ throw new Error("SignUp URL is not defined");
57
+ }
58
+ const pathToSignUpUrl = `${baseUrl}/sign-up`;
59
+ function buildSignUpUrl(signIn) {
60
+ if (!signIn) {
61
+ return;
62
+ }
63
+ const url = new URL(signIn, baseUrl);
64
+ url.pathname = `${url.pathname}/create`;
65
+ return url.toString();
66
+ }
67
+ const targetUrl = signUpUrl || buildSignUpUrl(signInUrl) || pathToSignUpUrl;
68
+ return redirectAdapter(buildUrl(baseUrl, targetUrl, returnBackUrl));
69
+ };
70
+ const redirectToSignIn = ({ returnBackUrl } = {}) => {
71
+ if (!signInUrl) {
72
+ throw new Error("SignIn URL is not defined");
73
+ }
74
+ const pathToSignInUrl = `${baseUrl}/sign-in`;
75
+ const targetUrl = signInUrl || pathToSignInUrl;
76
+ return redirectAdapter(buildUrl(baseUrl, targetUrl, returnBackUrl));
77
+ };
78
+ return { redirectToSignUp, redirectToSignIn };
79
+ };
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ createRedirect
83
+ });
84
+ //# sourceMappingURL=redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/redirect.ts"],"sourcesContent":["\nconst buildUrl = (\n _baseUrl: string | URL,\n _targetUrl: string | URL,\n _returnBackUrl?: string | URL | null,\n) => {\n if (_baseUrl === '') {\n return legacyBuildUrl(_targetUrl.toString(), _returnBackUrl?.toString());\n }\n\n const baseUrl = new URL(_baseUrl);\n const returnBackUrl = _returnBackUrl ? new URL(_returnBackUrl, baseUrl) : undefined;\n const res = new URL(_targetUrl, baseUrl);\n\n if (returnBackUrl) {\n res.searchParams.set('redirect_url', returnBackUrl.toString());\n }\n return res.toString();\n};\n\n\n\nconst legacyBuildUrl = (targetUrl: string, redirectUrl?: string) => {\n let url;\n if (!targetUrl.startsWith('http')) {\n if (!redirectUrl || !redirectUrl.startsWith('http')) {\n throw new Error('destination url or return back url should be an absolute path url!');\n }\n\n const baseURL = new URL(redirectUrl);\n url = new URL(targetUrl, baseURL.origin);\n } else {\n url = new URL(targetUrl);\n }\n\n if (redirectUrl) {\n url.searchParams.set('redirect_url', redirectUrl);\n }\n\n return url.toString();\n};\n\n\ntype RedirectAdapter<RedirectReturn> = (url: string) => RedirectReturn;\ntype RedirectToParams = { returnBackUrl?: string | URL | null };\nexport type RedirectFun<ReturnType> = (params?: RedirectToParams) => ReturnType;\n\n/**\n * @internal\n */\ntype CreateRedirect = <ReturnType>(params: {\n redirectAdapter: RedirectAdapter<ReturnType>;\n baseUrl: URL | string;\n signInUrl?: URL | string;\n signUpUrl?: URL | string;\n}) => {\n redirectToSignIn: RedirectFun<ReturnType>;\n redirectToSignUp: RedirectFun<ReturnType>;\n};\n\n\nexport const createRedirect: CreateRedirect = params => {\n const { redirectAdapter, signInUrl, signUpUrl, baseUrl } = params;\n\n const redirectToSignUp = ({ returnBackUrl }: RedirectToParams = {}) => {\n if (!signUpUrl) {\n throw new Error(\"SignUp URL is not defined\");\n }\n\n const pathToSignUpUrl = `${baseUrl}/sign-up`;\n \n function buildSignUpUrl(signIn: string | URL | undefined) {\n if (!signIn) {\n return;\n }\n const url = new URL(signIn, baseUrl);\n url.pathname = `${url.pathname}/create`;\n return url.toString();\n }\n\n const targetUrl = signUpUrl || buildSignUpUrl(signInUrl) || pathToSignUpUrl;\n\n\n return redirectAdapter(buildUrl(baseUrl, targetUrl, returnBackUrl));\n };\n\n const redirectToSignIn = ({ returnBackUrl }: RedirectToParams = {}) => {\n if (!signInUrl) {\n throw new Error(\"SignIn URL is not defined\");\n }\n\n const pathToSignInUrl = `${baseUrl}/sign-in`;\n const targetUrl = signInUrl || pathToSignInUrl;\n\n return redirectAdapter(buildUrl(baseUrl, targetUrl, returnBackUrl));\n };\n\n return { redirectToSignUp, redirectToSignIn };\n};"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,MAAM,WAAW,CACf,UACA,YACA,mBACG;AACH,MAAI,aAAa,IAAI;AACnB,WAAO,eAAe,WAAW,SAAS,GAAG,gBAAgB,SAAS,CAAC;AAAA,EACzE;AAEA,QAAM,UAAU,IAAI,IAAI,QAAQ;AAChC,QAAM,gBAAgB,iBAAiB,IAAI,IAAI,gBAAgB,OAAO,IAAI;AAC1E,QAAM,MAAM,IAAI,IAAI,YAAY,OAAO;AAEvC,MAAI,eAAe;AACjB,QAAI,aAAa,IAAI,gBAAgB,cAAc,SAAS,CAAC;AAAA,EAC/D;AACA,SAAO,IAAI,SAAS;AACtB;AAIA,MAAM,iBAAiB,CAAC,WAAmB,gBAAyB;AAClE,MAAI;AACJ,MAAI,CAAC,UAAU,WAAW,MAAM,GAAG;AACjC,QAAI,CAAC,eAAe,CAAC,YAAY,WAAW,MAAM,GAAG;AACnD,YAAM,IAAI,MAAM,oEAAoE;AAAA,IACtF;AAEA,UAAM,UAAU,IAAI,IAAI,WAAW;AACnC,UAAM,IAAI,IAAI,WAAW,QAAQ,MAAM;AAAA,EACzC,OAAO;AACL,UAAM,IAAI,IAAI,SAAS;AAAA,EACzB;AAEA,MAAI,aAAa;AACf,QAAI,aAAa,IAAI,gBAAgB,WAAW;AAAA,EAClD;AAEA,SAAO,IAAI,SAAS;AACtB;AAqBO,MAAM,iBAAiC,YAAU;AACtD,QAAM,EAAE,iBAAiB,WAAW,WAAW,QAAQ,IAAI;AAE3D,QAAM,mBAAmB,CAAC,EAAE,cAAc,IAAsB,CAAC,MAAM;AACrE,QAAI,CAAC,WAAW;AACZ,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC/C;AAEA,UAAM,kBAAkB,GAAG,OAAO;AAElC,aAAS,eAAe,QAAkC;AACxD,UAAI,CAAC,QAAQ;AACX;AAAA,MACF;AACA,YAAM,MAAM,IAAI,IAAI,QAAQ,OAAO;AACnC,UAAI,WAAW,GAAG,IAAI,QAAQ;AAC9B,aAAO,IAAI,SAAS;AAAA,IACtB;AAEA,UAAM,YAAY,aAAa,eAAe,SAAS,KAAK;AAG5D,WAAO,gBAAgB,SAAS,SAAS,WAAW,aAAa,CAAC;AAAA,EACpE;AAEA,QAAM,mBAAmB,CAAC,EAAE,cAAc,IAAsB,CAAC,MAAM;AACrE,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AAEA,UAAM,kBAAkB,GAAG,OAAO;AAClC,UAAM,YAAY,aAAa;AAE/B,WAAO,gBAAgB,SAAS,SAAS,WAAW,aAAa,CAAC;AAAA,EACpE;AAEA,SAAO,EAAE,kBAAkB,iBAAiB;AAC9C;","names":[]}
@@ -0,0 +1,36 @@
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 routeMatcher_exports = {};
20
+ __export(routeMatcher_exports, {
21
+ createRouteMatcher: () => createRouteMatcher
22
+ });
23
+ module.exports = __toCommonJS(routeMatcher_exports);
24
+ var import_pathMatcher = require("@tern-secure/shared/pathMatcher");
25
+ const createRouteMatcher = (routes) => {
26
+ if (typeof routes === "function") {
27
+ return (request) => routes(request);
28
+ }
29
+ const pathMatcher = (0, import_pathMatcher.createPathMatcher)(routes);
30
+ return (request) => pathMatcher(request.nextUrl.pathname);
31
+ };
32
+ // Annotate the CommonJS export names for ESM import in node:
33
+ 0 && (module.exports = {
34
+ createRouteMatcher
35
+ });
36
+ //# sourceMappingURL=routeMatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/routeMatcher.ts"],"sourcesContent":["import { createPathMatcher, type WithPathPatternWildcard } from '@tern-secure/shared/pathMatcher';\nimport type { Autocomplete } from '@tern-secure/types';\nimport type Link from 'next/link';\nimport type { NextRequest } from 'next/server';\n\ntype NextTypedRoute<T = Parameters<typeof Link>['0']['href']> = T extends string ? T : never;\ntype RouteMatcherWithNextTypedRoutes = Autocomplete<\n WithPathPatternWildcard<NextTypedRoute> | NextTypedRoute\n>;\n\nexport type RouteMatcherParams =\n | Array<RegExp | RouteMatcherWithNextTypedRoutes>\n | RouteMatcherWithNextTypedRoutes\n | RegExp\n | ((req: NextRequest) => boolean);\n/**\n * Create a route matcher function for public paths\n */\nexport const createRouteMatcher = (routes: RouteMatcherParams) => {\n if (typeof routes === 'function') {\n return (request: NextRequest) => routes(request);\n }\n\n const pathMatcher = createPathMatcher(routes);\n return (request: NextRequest) => pathMatcher(request.nextUrl.pathname);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAgE;AAkBzD,MAAM,qBAAqB,CAAC,WAA+B;AAChE,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,CAAC,YAAyB,OAAO,OAAO;AAAA,EACjD;AAEA,QAAM,kBAAc,sCAAkB,MAAM;AAC5C,SAAO,CAAC,YAAyB,YAAY,QAAQ,QAAQ,QAAQ;AACvE;","names":[]}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var sdk_versions_exports = {};
30
+ __export(sdk_versions_exports, {
31
+ isNext13: () => isNext13,
32
+ isNextWithUnstableServerActions: () => isNextWithUnstableServerActions
33
+ });
34
+ module.exports = __toCommonJS(sdk_versions_exports);
35
+ var import_package = __toESM(require("next/package.json"));
36
+ const isNext13 = import_package.default.version.startsWith("13.");
37
+ const isNextWithUnstableServerActions = isNext13 || import_package.default.version.startsWith("14.0");
38
+ // Annotate the CommonJS export names for ESM import in node:
39
+ 0 && (module.exports = {
40
+ isNext13,
41
+ isNextWithUnstableServerActions
42
+ });
43
+ //# sourceMappingURL=sdk-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/sdk-versions.ts"],"sourcesContent":["import nextPkg from 'next/package.json';\n\nconst isNext13 = nextPkg.version.startsWith('13.');\n\n/**\n * Those versions are affected by a bundling issue that will break the application if `node:fs` is used inside a server function.\n * The affected versions are >=next@13.5.4 and <=next@14.0.4\n */\nconst isNextWithUnstableServerActions = isNext13 || nextPkg.version.startsWith('14.0');\n\nexport { isNext13, isNextWithUnstableServerActions };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AAEpB,MAAM,WAAW,eAAAA,QAAQ,QAAQ,WAAW,KAAK;AAMjD,MAAM,kCAAkC,YAAY,eAAAA,QAAQ,QAAQ,WAAW,MAAM;","names":["nextPkg"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/server/session-store.ts"],"sourcesContent":["import { cache } from \"react\"\r\nimport type { User } from \"./types\"\r\n\r\n/**\r\n * Simple in-memory session store\r\n * In a real app, this would be backed by Redis/etc\r\n */\r\nclass SessionStore {\r\n private static instance: SessionStore\r\n private sessions: Map<string, User>\r\n private currentSessionId: string | null = null\r\n\r\n private constructor() {\r\n this.sessions = new Map()\r\n }\r\n\r\n static getInstance(): SessionStore {\r\n if (!SessionStore.instance) {\r\n SessionStore.instance = new SessionStore()\r\n }\r\n return SessionStore.instance\r\n }\r\n\r\n setUser(sessionId: string, user: User) {\r\n console.log(\"SessionStore: Setting user:\", { sessionId, user })\r\n this.sessions.set(sessionId, user)\r\n this.currentSessionId = sessionId\r\n }\r\n\r\n getUser(sessionId: string): User | null {\r\n return this.sessions.get(sessionId) || null\r\n }\r\n\r\n getCurrentUser(): User | null {\r\n if (!this.currentSessionId) return null\r\n return this.sessions.get(this.currentSessionId) || null\r\n }\r\n\r\n removeUser(sessionId: string) {\r\n this.sessions.delete(sessionId)\r\n }\r\n\r\n clear() {\r\n this.sessions.clear()\r\n }\r\n\r\n debug() {\r\n return {\r\n sessionsCount: this.sessions.size,\r\n currentSessionId: this.currentSessionId,\r\n sessions: Array.from(this.sessions.entries())\r\n }\r\n}\r\n}\r\n\r\n// Export singleton instance\r\nexport const sessionStore = SessionStore.getInstance()\r\n\r\n/**\r\n * Cached function to get user from session store\r\n * Uses React cache for SSR optimization\r\n */\r\nexport const getVerifiedUser = cache((sessionId: string): User | null => {\r\n return sessionStore.getUser(sessionId)\r\n})\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsB;AAOtB,MAAM,aAAa;AAAA,EACjB,OAAe;AAAA,EACP;AAAA,EACA,mBAAkC;AAAA,EAElC,cAAc;AACpB,SAAK,WAAW,oBAAI,IAAI;AAAA,EAC1B;AAAA,EAEA,OAAO,cAA4B;AACjC,QAAI,CAAC,aAAa,UAAU;AAC1B,mBAAa,WAAW,IAAI,aAAa;AAAA,IAC3C;AACA,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,QAAQ,WAAmB,MAAY;AACrC,YAAQ,IAAI,+BAA+B,EAAE,WAAW,KAAK,CAAC;AAC9D,SAAK,SAAS,IAAI,WAAW,IAAI;AACjC,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,QAAQ,WAAgC;AACtC,WAAO,KAAK,SAAS,IAAI,SAAS,KAAK;AAAA,EACzC;AAAA,EAEA,iBAA8B;AAC5B,QAAI,CAAC,KAAK,iBAAkB,QAAO;AACnC,WAAO,KAAK,SAAS,IAAI,KAAK,gBAAgB,KAAK;AAAA,EACrD;AAAA,EAEA,WAAW,WAAmB;AAC5B,SAAK,SAAS,OAAO,SAAS;AAAA,EAChC;AAAA,EAEA,QAAQ;AACN,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA,EAEA,QAAQ;AACN,WAAO;AAAA,MACL,eAAe,KAAK,SAAS;AAAA,MAC7B,kBAAkB,KAAK;AAAA,MACvB,UAAU,MAAM,KAAK,KAAK,SAAS,QAAQ,CAAC;AAAA,IAC9C;AAAA,EACJ;AACA;AAGO,MAAM,eAAe,aAAa,YAAY;AAM9C,MAAM,sBAAkB,oBAAM,CAAC,cAAmC;AACvE,SAAO,aAAa,QAAQ,SAAS;AACvC,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/server/session-store.ts"],"sourcesContent":["import { cache } from \"react\"\r\n\r\nimport type { User } from \"./types\"\r\n\r\n/**\r\n * Simple in-memory session store\r\n * In a real app, this would be backed by Redis/etc\r\n */\r\nclass SessionStore {\r\n private static instance: SessionStore\r\n private sessions: Map<string, User>\r\n private currentSessionId: string | null = null\r\n\r\n private constructor() {\r\n this.sessions = new Map()\r\n }\r\n\r\n static getInstance(): SessionStore {\r\n if (!SessionStore.instance) {\r\n SessionStore.instance = new SessionStore()\r\n }\r\n return SessionStore.instance\r\n }\r\n\r\n setUser(sessionId: string, user: User) {\r\n console.log(\"SessionStore: Setting user:\", { sessionId, user })\r\n this.sessions.set(sessionId, user)\r\n this.currentSessionId = sessionId\r\n }\r\n\r\n getUser(sessionId: string): User | null {\r\n return this.sessions.get(sessionId) || null\r\n }\r\n\r\n getCurrentUser(): User | null {\r\n if (!this.currentSessionId) return null\r\n return this.sessions.get(this.currentSessionId) || null\r\n }\r\n\r\n removeUser(sessionId: string) {\r\n this.sessions.delete(sessionId)\r\n }\r\n\r\n clear() {\r\n this.sessions.clear()\r\n }\r\n\r\n debug() {\r\n return {\r\n sessionsCount: this.sessions.size,\r\n currentSessionId: this.currentSessionId,\r\n sessions: Array.from(this.sessions.entries())\r\n }\r\n}\r\n}\r\n\r\n// Export singleton instance\r\nexport const sessionStore = SessionStore.getInstance()\r\n\r\n/**\r\n * Cached function to get user from session store\r\n * Uses React cache for SSR optimization\r\n */\r\nexport const getVerifiedUser = cache((sessionId: string): User | null => {\r\n return sessionStore.getUser(sessionId)\r\n})\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsB;AAQtB,MAAM,aAAa;AAAA,EACjB,OAAe;AAAA,EACP;AAAA,EACA,mBAAkC;AAAA,EAElC,cAAc;AACpB,SAAK,WAAW,oBAAI,IAAI;AAAA,EAC1B;AAAA,EAEA,OAAO,cAA4B;AACjC,QAAI,CAAC,aAAa,UAAU;AAC1B,mBAAa,WAAW,IAAI,aAAa;AAAA,IAC3C;AACA,WAAO,aAAa;AAAA,EACtB;AAAA,EAEA,QAAQ,WAAmB,MAAY;AACrC,YAAQ,IAAI,+BAA+B,EAAE,WAAW,KAAK,CAAC;AAC9D,SAAK,SAAS,IAAI,WAAW,IAAI;AACjC,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,QAAQ,WAAgC;AACtC,WAAO,KAAK,SAAS,IAAI,SAAS,KAAK;AAAA,EACzC;AAAA,EAEA,iBAA8B;AAC5B,QAAI,CAAC,KAAK,iBAAkB,QAAO;AACnC,WAAO,KAAK,SAAS,IAAI,KAAK,gBAAgB,KAAK;AAAA,EACrD;AAAA,EAEA,WAAW,WAAmB;AAC5B,SAAK,SAAS,OAAO,SAAS;AAAA,EAChC;AAAA,EAEA,QAAQ;AACN,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA,EAEA,QAAQ;AACN,WAAO;AAAA,MACL,eAAe,KAAK,SAAS;AAAA,MAC7B,kBAAkB,KAAK;AAAA,MACvB,UAAU,MAAM,KAAK,KAAK,SAAS,QAAQ,CAAC;AAAA,IAC9C;AAAA,EACJ;AACA;AAGO,MAAM,eAAe,aAAa,YAAY;AAM9C,MAAM,sBAAkB,oBAAM,CAAC,cAAmC;AACvE,SAAO,aAAa,QAAQ,SAAS;AACvC,CAAC;","names":[]}