@tern-secure/nextjs 5.1.8 → 5.1.9

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