@cabin-id/nextjs 1.0.0 → 1.0.2

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 (301) hide show
  1. package/dist/cjs/api/endpoints/AbstractApi.js +38 -0
  2. package/dist/cjs/api/endpoints/AbstractApi.js.map +1 -0
  3. package/dist/cjs/api/endpoints/UserApi.js +40 -0
  4. package/dist/cjs/api/endpoints/UserApi.js.map +1 -0
  5. package/dist/cjs/api/endpoints/index.js +32 -0
  6. package/dist/cjs/api/endpoints/index.js.map +1 -0
  7. package/dist/cjs/api/factory.js +60 -0
  8. package/dist/cjs/api/factory.js.map +1 -0
  9. package/dist/cjs/api/request.js +97 -0
  10. package/dist/cjs/api/request.js.map +1 -0
  11. package/dist/cjs/component.client.js +32 -0
  12. package/dist/cjs/component.client.js.map +1 -0
  13. package/dist/cjs/component.server.js +32 -0
  14. package/dist/cjs/component.server.js.map +1 -0
  15. package/dist/cjs/components/SignInButton.js +67 -0
  16. package/dist/cjs/components/SignInButton.js.map +1 -0
  17. package/dist/cjs/components/index.js +29 -0
  18. package/dist/cjs/components/index.js.map +1 -0
  19. package/dist/cjs/constants.js +122 -0
  20. package/dist/cjs/constants.js.map +1 -0
  21. package/dist/cjs/hooks/createContextAndHook.js +62 -0
  22. package/dist/cjs/hooks/createContextAndHook.js.map +1 -0
  23. package/dist/cjs/hooks/index.js +29 -0
  24. package/dist/cjs/hooks/index.js.map +1 -0
  25. package/dist/cjs/hooks/useSafeLayoutEffect.js +40 -0
  26. package/dist/cjs/hooks/useSafeLayoutEffect.js.map +1 -0
  27. package/dist/cjs/hooks/useUser.js +70 -0
  28. package/dist/cjs/hooks/useUser.js.map +1 -0
  29. package/dist/cjs/icons/logo.js +98 -0
  30. package/dist/cjs/icons/logo.js.map +1 -0
  31. package/dist/cjs/index.js +45 -0
  32. package/dist/cjs/index.js.map +1 -0
  33. package/dist/cjs/package.json +9 -0
  34. package/dist/cjs/provider/context.js +62 -0
  35. package/dist/cjs/provider/context.js.map +1 -0
  36. package/dist/cjs/provider/core.provider.js +49 -0
  37. package/dist/cjs/provider/core.provider.js.map +1 -0
  38. package/dist/cjs/provider/main.provider.js +45 -0
  39. package/dist/cjs/provider/main.provider.js.map +1 -0
  40. package/dist/cjs/server/auth.js +61 -0
  41. package/dist/cjs/server/auth.js.map +1 -0
  42. package/dist/cjs/server/client.js +35 -0
  43. package/dist/cjs/server/client.js.map +1 -0
  44. package/dist/cjs/server/createGetAuth.js +45 -0
  45. package/dist/cjs/server/createGetAuth.js.map +1 -0
  46. package/dist/cjs/server/createRedirect.js +90 -0
  47. package/dist/cjs/server/createRedirect.js.map +1 -0
  48. package/dist/cjs/server/errors.js +110 -0
  49. package/dist/cjs/server/errors.js.map +1 -0
  50. package/dist/cjs/server/getCurrentUser.js +36 -0
  51. package/dist/cjs/server/getCurrentUser.js.map +1 -0
  52. package/dist/cjs/server/index.js +32 -0
  53. package/dist/cjs/server/index.js.map +1 -0
  54. package/dist/cjs/server/middleware.js +193 -0
  55. package/dist/cjs/server/middleware.js.map +1 -0
  56. package/dist/cjs/server/protect.js +69 -0
  57. package/dist/cjs/server/protect.js.map +1 -0
  58. package/dist/cjs/server/routeMatcher.js +42 -0
  59. package/dist/cjs/server/routeMatcher.js.map +1 -0
  60. package/dist/cjs/server/serverRedirectWithAuth.js +39 -0
  61. package/dist/cjs/server/serverRedirectWithAuth.js.map +1 -0
  62. package/dist/cjs/server/type.js +17 -0
  63. package/dist/cjs/server/type.js.map +1 -0
  64. package/dist/cjs/server/utils.js +165 -0
  65. package/dist/cjs/server/utils.js.map +1 -0
  66. package/dist/cjs/styles/global.css +420 -0
  67. package/dist/cjs/styles/global.css.map +1 -0
  68. package/dist/cjs/tokens/authObjects.js +45 -0
  69. package/dist/cjs/tokens/authObjects.js.map +1 -0
  70. package/dist/cjs/tokens/authStatus.js +86 -0
  71. package/dist/cjs/tokens/authStatus.js.map +1 -0
  72. package/dist/cjs/tokens/authenticateContext.js +69 -0
  73. package/dist/cjs/tokens/authenticateContext.js.map +1 -0
  74. package/dist/cjs/tokens/cabinIdRequest.js +79 -0
  75. package/dist/cjs/tokens/cabinIdRequest.js.map +1 -0
  76. package/dist/cjs/tokens/cabinIdUrl.js +36 -0
  77. package/dist/cjs/tokens/cabinIdUrl.js.map +1 -0
  78. package/dist/cjs/tokens/request.js +58 -0
  79. package/dist/cjs/tokens/request.js.map +1 -0
  80. package/dist/cjs/types.js +17 -0
  81. package/dist/cjs/types.js.map +1 -0
  82. package/dist/cjs/utils/assertValidSecretKey.js +35 -0
  83. package/dist/cjs/utils/assertValidSecretKey.js.map +1 -0
  84. package/dist/cjs/utils/createCabinIdClient.js +38 -0
  85. package/dist/cjs/utils/createCabinIdClient.js.map +1 -0
  86. package/dist/cjs/utils/http.js +31 -0
  87. package/dist/cjs/utils/http.js.map +1 -0
  88. package/dist/cjs/utils/initial.js +45 -0
  89. package/dist/cjs/utils/initial.js.map +1 -0
  90. package/dist/cjs/utils/isomorphicAtob.js +36 -0
  91. package/dist/cjs/utils/isomorphicAtob.js.map +1 -0
  92. package/dist/cjs/utils/isomorphicBtoa.js +36 -0
  93. package/dist/cjs/utils/isomorphicBtoa.js.map +1 -0
  94. package/dist/cjs/utils/key.js +49 -0
  95. package/dist/cjs/utils/key.js.map +1 -0
  96. package/dist/cjs/utils/path.js +33 -0
  97. package/dist/cjs/utils/path.js.map +1 -0
  98. package/dist/cjs/utils/response.js +76 -0
  99. package/dist/cjs/utils/response.js.map +1 -0
  100. package/dist/cjs/utils.js +52 -0
  101. package/dist/cjs/utils.js.map +1 -0
  102. package/dist/esm/api/endpoints/AbstractApi.js +14 -0
  103. package/dist/esm/api/endpoints/AbstractApi.js.map +1 -0
  104. package/dist/esm/api/endpoints/UserApi.js +16 -0
  105. package/dist/esm/api/endpoints/UserApi.js.map +1 -0
  106. package/dist/esm/api/endpoints/index.js +7 -0
  107. package/dist/esm/api/endpoints/index.js.map +1 -0
  108. package/dist/esm/api/factory.js +35 -0
  109. package/dist/esm/api/factory.js.map +1 -0
  110. package/dist/esm/api/request.js +63 -0
  111. package/dist/esm/api/request.js.map +1 -0
  112. package/dist/esm/component.client.js +7 -0
  113. package/dist/esm/component.client.js.map +1 -0
  114. package/dist/esm/component.server.js +7 -0
  115. package/dist/esm/component.server.js.map +1 -0
  116. package/dist/esm/components/SignInButton.js +33 -0
  117. package/dist/esm/components/SignInButton.js.map +1 -0
  118. package/dist/esm/components/index.js +5 -0
  119. package/dist/esm/components/index.js.map +1 -0
  120. package/dist/esm/constants.js +88 -0
  121. package/dist/esm/constants.js.map +1 -0
  122. package/dist/esm/hooks/createContextAndHook.js +27 -0
  123. package/dist/esm/hooks/createContextAndHook.js.map +1 -0
  124. package/dist/esm/hooks/index.js +5 -0
  125. package/dist/esm/hooks/index.js.map +1 -0
  126. package/dist/esm/hooks/useSafeLayoutEffect.js +6 -0
  127. package/dist/esm/hooks/useSafeLayoutEffect.js.map +1 -0
  128. package/dist/esm/hooks/useUser.js +54 -0
  129. package/dist/esm/hooks/useUser.js.map +1 -0
  130. package/dist/esm/icons/logo.js +64 -0
  131. package/dist/esm/icons/logo.js.map +1 -0
  132. package/dist/esm/index.js +16 -0
  133. package/dist/esm/index.js.map +1 -0
  134. package/dist/esm/package.json +9 -0
  135. package/dist/esm/provider/context.js +24 -0
  136. package/dist/esm/provider/context.js.map +1 -0
  137. package/dist/esm/provider/core.provider.js +15 -0
  138. package/dist/esm/provider/core.provider.js.map +1 -0
  139. package/dist/esm/provider/main.provider.js +11 -0
  140. package/dist/esm/provider/main.provider.js.map +1 -0
  141. package/dist/esm/server/auth.js +37 -0
  142. package/dist/esm/server/auth.js.map +1 -0
  143. package/dist/esm/server/client.js +11 -0
  144. package/dist/esm/server/client.js.map +1 -0
  145. package/dist/esm/server/createGetAuth.js +23 -0
  146. package/dist/esm/server/createGetAuth.js.map +1 -0
  147. package/dist/esm/server/createRedirect.js +66 -0
  148. package/dist/esm/server/createRedirect.js.map +1 -0
  149. package/dist/esm/server/errors.js +78 -0
  150. package/dist/esm/server/errors.js.map +1 -0
  151. package/dist/esm/server/getCurrentUser.js +12 -0
  152. package/dist/esm/server/getCurrentUser.js.map +1 -0
  153. package/dist/esm/server/index.js +7 -0
  154. package/dist/esm/server/index.js.map +1 -0
  155. package/dist/esm/server/middleware.js +175 -0
  156. package/dist/esm/server/middleware.js.map +1 -0
  157. package/dist/esm/server/protect.js +45 -0
  158. package/dist/esm/server/protect.js.map +1 -0
  159. package/dist/esm/server/routeMatcher.js +18 -0
  160. package/dist/esm/server/routeMatcher.js.map +1 -0
  161. package/dist/esm/server/serverRedirectWithAuth.js +15 -0
  162. package/dist/esm/server/serverRedirectWithAuth.js.map +1 -0
  163. package/dist/esm/server/type.js +1 -0
  164. package/dist/esm/server/type.js.map +1 -0
  165. package/dist/esm/server/utils.js +132 -0
  166. package/dist/esm/server/utils.js.map +1 -0
  167. package/dist/esm/styles/global.css +420 -0
  168. package/dist/esm/styles/global.css.map +1 -0
  169. package/dist/esm/tokens/authObjects.js +20 -0
  170. package/dist/esm/tokens/authObjects.js.map +1 -0
  171. package/dist/esm/tokens/authStatus.js +59 -0
  172. package/dist/esm/tokens/authStatus.js.map +1 -0
  173. package/dist/esm/tokens/authenticateContext.js +45 -0
  174. package/dist/esm/tokens/authenticateContext.js.map +1 -0
  175. package/dist/esm/tokens/cabinIdRequest.js +55 -0
  176. package/dist/esm/tokens/cabinIdRequest.js.map +1 -0
  177. package/dist/esm/tokens/cabinIdUrl.js +12 -0
  178. package/dist/esm/tokens/cabinIdUrl.js.map +1 -0
  179. package/dist/esm/tokens/request.js +34 -0
  180. package/dist/esm/tokens/request.js.map +1 -0
  181. package/dist/esm/types.js +1 -0
  182. package/dist/esm/types.js.map +1 -0
  183. package/dist/esm/utils/assertValidSecretKey.js +11 -0
  184. package/dist/esm/utils/assertValidSecretKey.js.map +1 -0
  185. package/dist/esm/utils/createCabinIdClient.js +17 -0
  186. package/dist/esm/utils/createCabinIdClient.js.map +1 -0
  187. package/dist/esm/utils/http.js +7 -0
  188. package/dist/esm/utils/http.js.map +1 -0
  189. package/dist/esm/utils/initial.js +21 -0
  190. package/dist/esm/utils/initial.js.map +1 -0
  191. package/dist/esm/utils/isomorphicAtob.js +12 -0
  192. package/dist/esm/utils/isomorphicAtob.js.map +1 -0
  193. package/dist/esm/utils/isomorphicBtoa.js +12 -0
  194. package/dist/esm/utils/isomorphicBtoa.js.map +1 -0
  195. package/dist/esm/utils/key.js +24 -0
  196. package/dist/esm/utils/key.js.map +1 -0
  197. package/dist/esm/utils/path.js +9 -0
  198. package/dist/esm/utils/path.js.map +1 -0
  199. package/dist/esm/utils/response.js +49 -0
  200. package/dist/esm/utils/response.js.map +1 -0
  201. package/dist/esm/utils.js +27 -0
  202. package/dist/esm/utils.js.map +1 -0
  203. package/dist/types/api/endpoints/AbstractApi.d.ts +7 -0
  204. package/dist/types/api/endpoints/AbstractApi.d.ts.map +1 -0
  205. package/dist/types/api/endpoints/UserApi.d.ts +6 -0
  206. package/dist/types/api/endpoints/UserApi.d.ts.map +1 -0
  207. package/dist/types/api/endpoints/index.d.ts +3 -0
  208. package/dist/types/api/endpoints/index.d.ts.map +1 -0
  209. package/dist/types/api/factory.d.ts +35 -0
  210. package/dist/types/api/factory.d.ts.map +1 -0
  211. package/dist/types/api/request.d.ts +33 -0
  212. package/dist/types/api/request.d.ts.map +1 -0
  213. package/dist/types/component.client.d.ts +3 -0
  214. package/dist/types/component.client.d.ts.map +1 -0
  215. package/dist/types/component.server.d.ts +3 -0
  216. package/dist/types/component.server.d.ts.map +1 -0
  217. package/dist/types/components/SignInButton.d.ts +3 -0
  218. package/dist/types/components/SignInButton.d.ts.map +1 -0
  219. package/dist/types/components/index.d.ts +2 -0
  220. package/dist/types/components/index.d.ts.map +1 -0
  221. package/dist/types/constants.d.ts +69 -0
  222. package/dist/types/constants.d.ts.map +1 -0
  223. package/dist/types/hooks/createContextAndHook.d.ts +18 -0
  224. package/dist/types/hooks/createContextAndHook.d.ts.map +1 -0
  225. package/dist/types/hooks/index.d.ts +2 -0
  226. package/dist/types/hooks/index.d.ts.map +1 -0
  227. package/dist/types/hooks/useSafeLayoutEffect.d.ts +3 -0
  228. package/dist/types/hooks/useSafeLayoutEffect.d.ts.map +1 -0
  229. package/dist/types/hooks/useUser.d.ts +36 -0
  230. package/dist/types/hooks/useUser.d.ts.map +1 -0
  231. package/dist/types/icons/logo.d.ts +3 -0
  232. package/dist/types/icons/logo.d.ts.map +1 -0
  233. package/dist/types/index.d.ts +8 -0
  234. package/dist/types/index.d.ts.map +1 -0
  235. package/dist/types/provider/context.d.ts +15 -0
  236. package/dist/types/provider/context.d.ts.map +1 -0
  237. package/dist/types/provider/core.provider.d.ts +6 -0
  238. package/dist/types/provider/core.provider.d.ts.map +1 -0
  239. package/dist/types/provider/main.provider.d.ts +5 -0
  240. package/dist/types/provider/main.provider.d.ts.map +1 -0
  241. package/dist/types/server/auth.d.ts +11 -0
  242. package/dist/types/server/auth.d.ts.map +1 -0
  243. package/dist/types/server/client.d.ts +3 -0
  244. package/dist/types/server/client.d.ts.map +1 -0
  245. package/dist/types/server/createGetAuth.d.ts +5 -0
  246. package/dist/types/server/createGetAuth.d.ts.map +1 -0
  247. package/dist/types/server/createRedirect.d.ts +21 -0
  248. package/dist/types/server/createRedirect.d.ts.map +1 -0
  249. package/dist/types/server/errors.d.ts +10 -0
  250. package/dist/types/server/errors.d.ts.map +1 -0
  251. package/dist/types/server/getCurrentUser.d.ts +3 -0
  252. package/dist/types/server/getCurrentUser.d.ts.map +1 -0
  253. package/dist/types/server/index.d.ts +3 -0
  254. package/dist/types/server/index.d.ts.map +1 -0
  255. package/dist/types/server/middleware.d.ts +33 -0
  256. package/dist/types/server/middleware.d.ts.map +1 -0
  257. package/dist/types/server/protect.d.ts +34 -0
  258. package/dist/types/server/protect.d.ts.map +1 -0
  259. package/dist/types/server/routeMatcher.d.ts +10 -0
  260. package/dist/types/server/routeMatcher.d.ts.map +1 -0
  261. package/dist/types/server/serverRedirectWithAuth.d.ts +3 -0
  262. package/dist/types/server/serverRedirectWithAuth.d.ts.map +1 -0
  263. package/dist/types/server/type.d.ts +14 -0
  264. package/dist/types/server/type.d.ts.map +1 -0
  265. package/dist/types/server/utils.d.ts +17 -0
  266. package/dist/types/server/utils.d.ts.map +1 -0
  267. package/dist/types/tokens/authObjects.d.ts +37 -0
  268. package/dist/types/tokens/authObjects.d.ts.map +1 -0
  269. package/dist/types/tokens/authStatus.d.ts +51 -0
  270. package/dist/types/tokens/authStatus.d.ts.map +1 -0
  271. package/dist/types/tokens/authenticateContext.d.ts +40 -0
  272. package/dist/types/tokens/authenticateContext.d.ts.map +1 -0
  273. package/dist/types/tokens/cabinIdRequest.d.ts +24 -0
  274. package/dist/types/tokens/cabinIdRequest.d.ts.map +1 -0
  275. package/dist/types/tokens/cabinIdUrl.d.ts +18 -0
  276. package/dist/types/tokens/cabinIdUrl.d.ts.map +1 -0
  277. package/dist/types/tokens/request.d.ts +4 -0
  278. package/dist/types/tokens/request.d.ts.map +1 -0
  279. package/dist/types/types.d.ts +34 -0
  280. package/dist/types/types.d.ts.map +1 -0
  281. package/dist/types/utils/assertValidSecretKey.d.ts +2 -0
  282. package/dist/types/utils/assertValidSecretKey.d.ts.map +1 -0
  283. package/dist/types/utils/createCabinIdClient.d.ts +5 -0
  284. package/dist/types/utils/createCabinIdClient.d.ts.map +1 -0
  285. package/dist/types/utils/http.d.ts +4 -0
  286. package/dist/types/utils/http.d.ts.map +1 -0
  287. package/dist/types/utils/initial.d.ts +5 -0
  288. package/dist/types/utils/initial.d.ts.map +1 -0
  289. package/dist/types/utils/isomorphicAtob.d.ts +6 -0
  290. package/dist/types/utils/isomorphicAtob.d.ts.map +1 -0
  291. package/dist/types/utils/isomorphicBtoa.d.ts +2 -0
  292. package/dist/types/utils/isomorphicBtoa.d.ts.map +1 -0
  293. package/dist/types/utils/key.d.ts +5 -0
  294. package/dist/types/utils/key.d.ts.map +1 -0
  295. package/dist/types/utils/path.d.ts +4 -0
  296. package/dist/types/utils/path.d.ts.map +1 -0
  297. package/dist/types/utils/response.d.ts +13 -0
  298. package/dist/types/utils/response.d.ts.map +1 -0
  299. package/dist/types/utils.d.ts +5 -0
  300. package/dist/types/utils.d.ts.map +1 -0
  301. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ {
2
+ "sideEffects": false,
3
+ "imports": {
4
+ "#components": {
5
+ "react-server": "./components.server.js",
6
+ "default": "./components.client.js"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ import { createContextAndHook } from "../hooks/createContextAndHook";
3
+ const [CabinIdInstanceContext, useCabinIDInstanceContext] = createContextAndHook("CabinIdInstanceContext");
4
+ const [UserContext, useUserContext] = createContextAndHook("UserContext");
5
+ function useAssertWrappedByCabinIdProvider(displayNameOrFn) {
6
+ const ctx = React.useContext(CabinIdInstanceContext);
7
+ if (!ctx) {
8
+ if (typeof displayNameOrFn === "function") {
9
+ displayNameOrFn();
10
+ return;
11
+ }
12
+ throw new Error(
13
+ `${displayNameOrFn} can only be used within the <CabinIDProvider /> component.`
14
+ );
15
+ }
16
+ }
17
+ export {
18
+ CabinIdInstanceContext,
19
+ UserContext,
20
+ useAssertWrappedByCabinIdProvider,
21
+ useCabinIDInstanceContext,
22
+ useUserContext
23
+ };
24
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/provider/context.tsx"],"sourcesContent":["import React from 'react';\nimport { createContextAndHook } from '../hooks/createContextAndHook';\nimport { User } from '../types';\n\nexport type LoadedCabinId = {\n user: User | null;\n userId: string | null;\n};\n\nconst [CabinIdInstanceContext, useCabinIDInstanceContext] =\n createContextAndHook<LoadedCabinId>('CabinIdInstanceContext');\nconst [UserContext, useUserContext] = createContextAndHook<\n User | null | undefined\n>('UserContext');\n\nfunction useAssertWrappedByCabinIdProvider(\n displayNameOrFn: string | (() => void)\n): void {\n const ctx = React.useContext(CabinIdInstanceContext);\n\n if (!ctx) {\n if (typeof displayNameOrFn === 'function') {\n displayNameOrFn();\n return;\n }\n\n throw new Error(\n `${displayNameOrFn} can only be used within the <CabinIDProvider /> component.`\n );\n }\n}\n\nexport {\n CabinIdInstanceContext,\n UserContext,\n useCabinIDInstanceContext,\n useUserContext,\n useAssertWrappedByCabinIdProvider,\n};\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,4BAA4B;AAQrC,MAAM,CAAC,wBAAwB,yBAAyB,IACtD,qBAAoC,wBAAwB;AAC9D,MAAM,CAAC,aAAa,cAAc,IAAI,qBAEpC,aAAa;AAEf,SAAS,kCACP,iBACM;AACN,QAAM,MAAM,MAAM,WAAW,sBAAsB;AAEnD,MAAI,CAAC,KAAK;AACR,QAAI,OAAO,oBAAoB,YAAY;AACzC,sBAAgB;AAChB;AAAA,IACF;AAEA,UAAM,IAAI;AAAA,MACR,GAAG,eAAe;AAAA,IACpB;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import React from "react";
3
+ import { CabinIdInstanceContext, UserContext } from "./context";
4
+ const CabinIDCoreProvider = ({
5
+ children,
6
+ ...rest
7
+ }) => {
8
+ const { user } = rest;
9
+ const userCtx = React.useMemo(() => ({ value: user }), [user]);
10
+ return /* @__PURE__ */ React.createElement(CabinIdInstanceContext.Provider, { value: { value: rest } }, /* @__PURE__ */ React.createElement(UserContext.Provider, { value: userCtx }, children));
11
+ };
12
+ export {
13
+ CabinIDCoreProvider
14
+ };
15
+ //# sourceMappingURL=core.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/provider/core.provider.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { CabinIdInstanceContext, LoadedCabinId, UserContext } from './context';\n\nconst CabinIDCoreProvider = ({\n children,\n ...rest\n}: PropsWithChildren<LoadedCabinId>) => {\n const { user } = rest;\n\n const userCtx = React.useMemo(() => ({ value: user }), [user]);\n\n return (\n <CabinIdInstanceContext.Provider value={{ value: rest }}>\n <UserContext.Provider value={userCtx}>{children}</UserContext.Provider>\n </CabinIdInstanceContext.Provider>\n );\n};\n\nexport { CabinIDCoreProvider };\n"],"mappings":";AAEA,OAAO,WAAW;AAElB,SAAS,wBAAuC,mBAAmB;AAEnE,MAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA,GAAG;AACL,MAAwC;AACtC,QAAM,EAAE,KAAK,IAAI;AAEjB,QAAM,UAAU,MAAM,QAAQ,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC;AAE7D,SACE,oCAAC,uBAAuB,UAAvB,EAAgC,OAAO,EAAE,OAAO,KAAK,KACpD,oCAAC,YAAY,UAAZ,EAAqB,OAAO,WAAU,QAAS,CAClD;AAEJ;","names":[]}
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import { CabinIDCoreProvider } from "./core.provider";
3
+ import { initialState } from "../utils/initial";
4
+ const CabinIDProvider = async ({ children }) => {
5
+ const state = await initialState();
6
+ return /* @__PURE__ */ React.createElement(CabinIDCoreProvider, { ...state }, children);
7
+ };
8
+ export {
9
+ CabinIDProvider
10
+ };
11
+ //# sourceMappingURL=main.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/provider/main.provider.tsx"],"sourcesContent":["import React from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { CabinIDCoreProvider } from './core.provider';\nimport { initialState } from '../utils/initial';\n\nconst CabinIDProvider = async ({ children }: PropsWithChildren<any>) => {\n const state = await initialState();\n return <CabinIDCoreProvider {...state}>{children}</CabinIDCoreProvider>;\n};\n\nexport { CabinIDProvider };\n"],"mappings":"AAAA,OAAO,WAAW;AAElB,SAAS,2BAA2B;AACpC,SAAS,oBAAoB;AAE7B,MAAM,kBAAkB,OAAO,EAAE,SAAS,MAA8B;AACtE,QAAM,QAAQ,MAAM,aAAa;AACjC,SAAO,oCAAC,uBAAqB,GAAG,SAAQ,QAAS;AACnD;","names":[]}
@@ -0,0 +1,37 @@
1
+ import { notFound, redirect } from "next/navigation";
2
+ import { createRedirect } from "./createRedirect";
3
+ import { createProtect } from "./protect";
4
+ import { buildRequestLike, getAuthKeyFromRequest } from "./utils";
5
+ import { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from "../constants";
6
+ import { createCabinIdRequest } from "../tokens/cabinIdRequest";
7
+ import { createGetAuth } from "./createGetAuth";
8
+ const auth = () => {
9
+ const request = buildRequestLike();
10
+ const authObject = createGetAuth()(request);
11
+ const cabinIdUrl = getAuthKeyFromRequest(request, "CabinIdUrl");
12
+ const redirectToSignIn = (opts = {}) => {
13
+ return createRedirect({
14
+ redirectAdapter: redirect,
15
+ baseUrl: createCabinIdRequest(request).cabinIdUrl.toString(),
16
+ // TODO: Support runtime-value configuration of these options
17
+ // via setting and reading headers from clerkMiddleware
18
+ publishableKey: PUBLISHABLE_KEY,
19
+ signInUrl: SIGN_IN_URL,
20
+ signUpUrl: SIGN_UP_URL
21
+ }).redirectToSignIn({
22
+ returnBackUrl: opts.returnBackUrl === null ? "" : opts.returnBackUrl || (cabinIdUrl == null ? void 0 : cabinIdUrl.toString())
23
+ });
24
+ };
25
+ const protect = createProtect({
26
+ request,
27
+ authObject,
28
+ redirectToSignIn,
29
+ notFound,
30
+ redirect
31
+ });
32
+ return Object.assign(authObject, { protect, redirectToSignIn });
33
+ };
34
+ export {
35
+ auth
36
+ };
37
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/auth.ts"],"sourcesContent":["import { notFound, redirect } from 'next/navigation';\nimport { AuthObject } from '../tokens/authObjects';\nimport { createRedirect, RedirectFun } from './createRedirect';\nimport { AuthProtect, createProtect } from './protect';\nimport { buildRequestLike, getAuthKeyFromRequest } from './utils';\nimport { PUBLISHABLE_KEY, SIGN_IN_URL, SIGN_UP_URL } from '../constants';\nimport { createCabinIdRequest } from '../tokens/cabinIdRequest';\nimport { createGetAuth } from './createGetAuth';\n\ntype Auth = AuthObject & {\n protect: AuthProtect;\n redirectToSignIn: RedirectFun<ReturnType<typeof redirect>>;\n};\n\nexport const auth = (): Auth => {\n const request = buildRequestLike();\n const authObject = createGetAuth()(request);\n\n const cabinIdUrl = getAuthKeyFromRequest(request, 'CabinIdUrl');\n\n const redirectToSignIn: RedirectFun<never> = (opts = {}) => {\n return createRedirect({\n redirectAdapter: redirect,\n baseUrl: createCabinIdRequest(request).cabinIdUrl.toString(),\n // TODO: Support runtime-value configuration of these options\n // via setting and reading headers from clerkMiddleware\n publishableKey: PUBLISHABLE_KEY,\n signInUrl: SIGN_IN_URL,\n signUpUrl: SIGN_UP_URL,\n }).redirectToSignIn({\n returnBackUrl:\n opts.returnBackUrl === null\n ? ''\n : opts.returnBackUrl || cabinIdUrl?.toString(),\n });\n };\n\n const protect = createProtect({\n request,\n authObject,\n redirectToSignIn,\n notFound,\n redirect,\n });\n\n return Object.assign(authObject, { protect, redirectToSignIn });\n};\n"],"mappings":"AAAA,SAAS,UAAU,gBAAgB;AAEnC,SAAS,sBAAmC;AAC5C,SAAsB,qBAAqB;AAC3C,SAAS,kBAAkB,6BAA6B;AACxD,SAAS,iBAAiB,aAAa,mBAAmB;AAC1D,SAAS,4BAA4B;AACrC,SAAS,qBAAqB;AAOvB,MAAM,OAAO,MAAY;AAC9B,QAAM,UAAU,iBAAiB;AACjC,QAAM,aAAa,cAAc,EAAE,OAAO;AAE1C,QAAM,aAAa,sBAAsB,SAAS,YAAY;AAE9D,QAAM,mBAAuC,CAAC,OAAO,CAAC,MAAM;AAC1D,WAAO,eAAe;AAAA,MACpB,iBAAiB;AAAA,MACjB,SAAS,qBAAqB,OAAO,EAAE,WAAW,SAAS;AAAA;AAAA;AAAA,MAG3D,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC,EAAE,iBAAiB;AAAA,MAClB,eACE,KAAK,kBAAkB,OACnB,KACA,KAAK,kBAAiB,yCAAY;AAAA,IAC1C,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,cAAc;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,OAAO,OAAO,YAAY,EAAE,SAAS,iBAAiB,CAAC;AAChE;","names":[]}
@@ -0,0 +1,11 @@
1
+ import { API_URL, API_VERSION, SECRET_KEY } from "../constants";
2
+ import { createCabinIdClient } from "../utils/createCabinIdClient";
3
+ const cabinIdClient = createCabinIdClient({
4
+ apiUrl: API_URL,
5
+ apiVersion: API_VERSION,
6
+ secretKey: SECRET_KEY
7
+ });
8
+ export {
9
+ cabinIdClient
10
+ };
11
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/client.ts"],"sourcesContent":["import { API_URL, API_VERSION, SECRET_KEY } from '../constants';\nimport { createCabinIdClient } from '../utils/createCabinIdClient';\n\nconst cabinIdClient = createCabinIdClient({\n apiUrl: API_URL,\n apiVersion: API_VERSION,\n secretKey: SECRET_KEY,\n});\n\nexport { cabinIdClient };\n"],"mappings":"AAAA,SAAS,SAAS,aAAa,kBAAkB;AACjD,SAAS,2BAA2B;AAEpC,MAAM,gBAAgB,oBAAoB;AAAA,EACxC,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,WAAW;AACb,CAAC;","names":[]}
@@ -0,0 +1,23 @@
1
+ import {
2
+ signedInAuthObject,
3
+ signedOutAuthObject
4
+ } from "../tokens/authObjects";
5
+ import { constants } from "../constants";
6
+ import { getCookie } from "./utils";
7
+ const createGetAuth = () => (req) => {
8
+ const authToken = getCookie(req, constants.Cookies.Client);
9
+ const userId = getCookie(req, constants.Cookies.User);
10
+ if (authToken && userId) {
11
+ return signedInAuthObject({
12
+ sessionToken: authToken || "",
13
+ userId: userId || ""
14
+ });
15
+ }
16
+ return signedOutAuthObject();
17
+ };
18
+ const getAuth = createGetAuth();
19
+ export {
20
+ createGetAuth,
21
+ getAuth
22
+ };
23
+ //# sourceMappingURL=createGetAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/createGetAuth.ts"],"sourcesContent":["import {\n AuthObject,\n signedInAuthObject,\n signedOutAuthObject,\n} from '../tokens/authObjects';\nimport { constants } from '../constants';\nimport { getCookie } from './utils';\nimport { RequestLike } from './type';\n\nexport const createGetAuth =\n () =>\n (req: RequestLike): AuthObject => {\n const authToken = getCookie(req, constants.Cookies.Client);\n const userId = getCookie(req, constants.Cookies.User);\n if (authToken && userId) {\n return signedInAuthObject({\n sessionToken: authToken || '',\n userId: userId || '',\n });\n }\n\n return signedOutAuthObject();\n };\n\nexport const getAuth = createGetAuth();\n"],"mappings":"AAAA;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAGnB,MAAM,gBACX,MACA,CAAC,QAAiC;AAChC,QAAM,YAAY,UAAU,KAAK,UAAU,QAAQ,MAAM;AACzD,QAAM,SAAS,UAAU,KAAK,UAAU,QAAQ,IAAI;AACpD,MAAI,aAAa,QAAQ;AACvB,WAAO,mBAAmB;AAAA,MACxB,cAAc,aAAa;AAAA,MAC3B,QAAQ,UAAU;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,SAAO,oBAAoB;AAC7B;AAEK,MAAM,UAAU,cAAc;","names":[]}
@@ -0,0 +1,66 @@
1
+ import { parsePublishableKey } from "../utils/key";
2
+ const buildUrl = (_baseUrl, _targetUrl, _returnBackUrl) => {
3
+ if (!!_baseUrl) {
4
+ const baseUrl = new URL(_baseUrl);
5
+ const returnBackUrl = _returnBackUrl ? new URL(_returnBackUrl, baseUrl) : void 0;
6
+ const res = new URL(_targetUrl, baseUrl);
7
+ if (returnBackUrl) {
8
+ res.searchParams.set("redirect_url", returnBackUrl.toString());
9
+ }
10
+ return res.toString();
11
+ } else {
12
+ const returnBackUrl = _returnBackUrl ? new URL(_returnBackUrl) : void 0;
13
+ const res = new URL(_targetUrl);
14
+ if (returnBackUrl) {
15
+ res.searchParams.set("redirect_url", returnBackUrl.toString());
16
+ }
17
+ return res.toString();
18
+ }
19
+ };
20
+ const buildAccountsBaseUrl = (frontendApi) => {
21
+ if (!frontendApi) {
22
+ return "";
23
+ }
24
+ const accountsBaseUrl = frontendApi;
25
+ return `https://${accountsBaseUrl}`;
26
+ };
27
+ const createRedirect = (params) => {
28
+ const { publishableKey, redirectAdapter, signInUrl, signUpUrl, baseUrl } = params;
29
+ const frontendApi = parsePublishableKey(publishableKey);
30
+ const accountsBaseUrl = buildAccountsBaseUrl(frontendApi);
31
+ const redirectToSignUp = ({ returnBackUrl } = {}) => {
32
+ if (!signUpUrl && !accountsBaseUrl) {
33
+ throw new Error("Publish Key is not exist");
34
+ }
35
+ const accountsSignUpUrl = `${accountsBaseUrl}/sign-up`;
36
+ let redirect = null;
37
+ if (signUpUrl) {
38
+ redirect = redirectAdapter(buildUrl(baseUrl, signUpUrl));
39
+ } else {
40
+ redirect = redirectAdapter(
41
+ buildUrl(null, accountsSignUpUrl, returnBackUrl)
42
+ );
43
+ }
44
+ return redirect;
45
+ };
46
+ const redirectToSignIn = ({ returnBackUrl } = {}) => {
47
+ if (!signInUrl && !accountsBaseUrl) {
48
+ throw new Error("Publish Key is not exist");
49
+ }
50
+ const accountsSignInUrl = `${accountsBaseUrl}/sign-in`;
51
+ let redirect = null;
52
+ if (signInUrl) {
53
+ redirect = redirectAdapter(buildUrl(baseUrl, signInUrl));
54
+ } else {
55
+ redirect = redirectAdapter(
56
+ buildUrl(null, accountsSignInUrl, returnBackUrl)
57
+ );
58
+ }
59
+ return redirect;
60
+ };
61
+ return { redirectToSignUp, redirectToSignIn };
62
+ };
63
+ export {
64
+ createRedirect
65
+ };
66
+ //# sourceMappingURL=createRedirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/createRedirect.ts"],"sourcesContent":["import { parsePublishableKey } from '../utils/key';\n\ntype RedirectAdapter<RedirectReturn> = (url: string) => RedirectReturn;\ntype RedirectToParams = { returnBackUrl?: string | URL | null };\nexport type RedirectFun<ReturnType> = (params?: RedirectToParams) => ReturnType;\n\nconst buildUrl = (\n _baseUrl: string | URL | null,\n _targetUrl: string | URL,\n _returnBackUrl?: string | URL | null\n) => {\n if (!!_baseUrl) {\n const baseUrl = new URL(_baseUrl);\n const returnBackUrl = _returnBackUrl\n ? new URL(_returnBackUrl, baseUrl)\n : 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 } else {\n const returnBackUrl = _returnBackUrl ? new URL(_returnBackUrl) : undefined;\n const res = new URL(_targetUrl);\n\n if (returnBackUrl) {\n res.searchParams.set('redirect_url', returnBackUrl.toString());\n }\n return res.toString();\n }\n};\n\nconst buildAccountsBaseUrl = (frontendApi: string | null) => {\n if (!frontendApi) {\n return '';\n }\n\n // convert url from FAPI to accounts for Kima and legacy (prod & dev) instances\n const accountsBaseUrl = frontendApi;\n return `https://${accountsBaseUrl}`;\n};\n\n/**\n * @internal\n */\ntype CreateRedirect = <ReturnType>(params: {\n publishableKey: string;\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\nexport const createRedirect: CreateRedirect = (params) => {\n const { publishableKey, redirectAdapter, signInUrl, signUpUrl, baseUrl } =\n params;\n const frontendApi = parsePublishableKey(publishableKey);\n const accountsBaseUrl = buildAccountsBaseUrl(frontendApi);\n\n const redirectToSignUp = ({ returnBackUrl }: RedirectToParams = {}) => {\n if (!signUpUrl && !accountsBaseUrl) {\n throw new Error('Publish Key is not exist');\n }\n const accountsSignUpUrl = `${accountsBaseUrl}/sign-up`;\n let redirect = null;\n\n if (signUpUrl) {\n redirect = redirectAdapter(buildUrl(baseUrl, signUpUrl));\n } else {\n redirect = redirectAdapter(\n buildUrl(null, accountsSignUpUrl, returnBackUrl)\n );\n }\n return redirect;\n };\n\n const redirectToSignIn = ({ returnBackUrl }: RedirectToParams = {}) => {\n if (!signInUrl && !accountsBaseUrl) {\n throw new Error('Publish Key is not exist');\n }\n const accountsSignInUrl = `${accountsBaseUrl}/sign-in`;\n\n let redirect = null;\n if (signInUrl) {\n redirect = redirectAdapter(buildUrl(baseUrl, signInUrl));\n } else {\n redirect = redirectAdapter(\n buildUrl(null, accountsSignInUrl, returnBackUrl)\n );\n }\n\n return redirect;\n };\n\n return { redirectToSignUp, redirectToSignIn };\n};\n"],"mappings":"AAAA,SAAS,2BAA2B;AAMpC,MAAM,WAAW,CACf,UACA,YACA,mBACG;AACH,MAAI,CAAC,CAAC,UAAU;AACd,UAAM,UAAU,IAAI,IAAI,QAAQ;AAChC,UAAM,gBAAgB,iBAClB,IAAI,IAAI,gBAAgB,OAAO,IAC/B;AACJ,UAAM,MAAM,IAAI,IAAI,YAAY,OAAO;AAEvC,QAAI,eAAe;AACjB,UAAI,aAAa,IAAI,gBAAgB,cAAc,SAAS,CAAC;AAAA,IAC/D;AACA,WAAO,IAAI,SAAS;AAAA,EACtB,OAAO;AACL,UAAM,gBAAgB,iBAAiB,IAAI,IAAI,cAAc,IAAI;AACjE,UAAM,MAAM,IAAI,IAAI,UAAU;AAE9B,QAAI,eAAe;AACjB,UAAI,aAAa,IAAI,gBAAgB,cAAc,SAAS,CAAC;AAAA,IAC/D;AACA,WAAO,IAAI,SAAS;AAAA,EACtB;AACF;AAEA,MAAM,uBAAuB,CAAC,gBAA+B;AAC3D,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAGA,QAAM,kBAAkB;AACxB,SAAO,WAAW,eAAe;AACnC;AAgBO,MAAM,iBAAiC,CAAC,WAAW;AACxD,QAAM,EAAE,gBAAgB,iBAAiB,WAAW,WAAW,QAAQ,IACrE;AACF,QAAM,cAAc,oBAAoB,cAAc;AACtD,QAAM,kBAAkB,qBAAqB,WAAW;AAExD,QAAM,mBAAmB,CAAC,EAAE,cAAc,IAAsB,CAAC,MAAM;AACrE,QAAI,CAAC,aAAa,CAAC,iBAAiB;AAClC,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,UAAM,oBAAoB,GAAG,eAAe;AAC5C,QAAI,WAAW;AAEf,QAAI,WAAW;AACb,iBAAW,gBAAgB,SAAS,SAAS,SAAS,CAAC;AAAA,IACzD,OAAO;AACL,iBAAW;AAAA,QACT,SAAS,MAAM,mBAAmB,aAAa;AAAA,MACjD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,CAAC,EAAE,cAAc,IAAsB,CAAC,MAAM;AACrE,QAAI,CAAC,aAAa,CAAC,iBAAiB;AAClC,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,UAAM,oBAAoB,GAAG,eAAe;AAE5C,QAAI,WAAW;AACf,QAAI,WAAW;AACb,iBAAW,gBAAgB,SAAS,SAAS,SAAS,CAAC;AAAA,IACzD,OAAO;AACL,iBAAW;AAAA,QACT,SAAS,MAAM,mBAAmB,aAAa;AAAA,MACjD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,kBAAkB,iBAAiB;AAC9C;","names":[]}
@@ -0,0 +1,78 @@
1
+ const missingDomainAndProxy = `
2
+ Missing domain and proxyUrl. A satellite application needs to specify a domain or a proxyUrl.
3
+
4
+ 1) With middleware
5
+ e.g. export default clerkMiddleware({domain:'YOUR_DOMAIN',isSatellite:true}); // or the deprecated authMiddleware()
6
+ 2) With environment variables e.g.
7
+ NEXT_PUBLIC_CLERK_DOMAIN='YOUR_DOMAIN'
8
+ NEXT_PUBLIC_CLERK_IS_SATELLITE='true'
9
+ `;
10
+ const missingSignInUrlInDev = `
11
+ Invalid signInUrl. A satellite application requires a signInUrl for development instances.
12
+ Check if signInUrl is missing from your configuration or if it is not an absolute URL
13
+
14
+ 1) With middleware
15
+ e.g. export default clerkMiddleware({signInUrl:'SOME_URL', isSatellite:true}); // or the deprecated authMiddleware()
16
+ 2) With environment variables e.g.
17
+ NEXT_PUBLIC_CLERK_SIGN_IN_URL='SOME_URL'
18
+ NEXT_PUBLIC_CLERK_IS_SATELLITE='true'`;
19
+ const receivedRequestForIgnoredRoute = (url, matcher) => `Clerk: The middleware was skipped for this request URL: ${url}. For performance reasons, it's recommended to your middleware matcher to:
20
+ export const config = {
21
+ matcher: ${matcher},
22
+ };
23
+
24
+ Alternatively, you can set your own ignoredRoutes. See https://clerk.com/docs/nextjs/middleware
25
+ (This log only appears in development mode)
26
+ `;
27
+ const getAuthAuthHeaderMissing = () => authAuthHeaderMissing("getAuth");
28
+ const authAuthHeaderMissing = (helperName = "auth") => `CabinID: ${helperName}() was called but CabinID can't detect usage of authMiddleware(). Please ensure the following:
29
+ - clerkMiddleware() authMiddleware is used in your Next.js Middleware.
30
+ - Your Middleware matcher is configured to match this route or page.
31
+ - If you are using the src directory, make sure the Middleware file is inside of it.
32
+ `;
33
+ const clockSkewDetected = (verifyMessage) => `Clerk: Clock skew detected. This usually means that your system clock is inaccurate. Clerk will continuously try to issue new tokens, as the existing ones will be treated as "expired" due to clock skew.
34
+
35
+ To resolve this issue, make sure your system's clock is set to the correct time (e.g. turn off and on automatic time synchronization).
36
+
37
+ ---
38
+
39
+ ${verifyMessage}`;
40
+ const infiniteRedirectLoopDetected = () => `Clerk: Infinite redirect loop detected. That usually means that we were not able to determine the auth state for this request. A list of common causes and solutions follows.
41
+
42
+ Reason 1:
43
+ Your Clerk instance keys are incorrect, or you recently changed keys (Publishable Key, Secret Key).
44
+ How to resolve:
45
+ -> Make sure you're using the correct keys from the Clerk Dashboard. If you changed keys recently, make sure to clear your browser application data and cookies.
46
+
47
+ Reason 2:
48
+ A bug that may have already been fixed in the latest version of Clerk NextJS package.
49
+ How to resolve:
50
+ -> Make sure you are using the latest version of '@clerk/nextjs' and 'next'.
51
+ `;
52
+ const informAboutProtectedRouteInfo = (path, hasPublicRoutes, hasIgnoredRoutes, isApiRoute, defaultIgnoredRoutes) => {
53
+ const infoText = isApiRoute ? `INFO: Clerk: The request to ${path} is being protected (401) because there is no signed-in user, and the path is included in \`apiRoutes\`. To prevent this behavior, choose one of:` : `INFO: Clerk: The request to ${path} is being redirected because there is no signed-in user, and the path is not included in \`ignoredRoutes\` or \`publicRoutes\`. To prevent this behavior, choose one of:`;
54
+ const apiRoutesText = isApiRoute ? `To prevent Clerk authentication from protecting (401) the api route, remove the rule matching "${path}" from the \`apiRoutes\` array passed to authMiddleware` : void 0;
55
+ const publicRoutesText = hasPublicRoutes ? `To make the route accessible to both signed in and signed out users, add "${path}" to the \`publicRoutes\` array passed to authMiddleware` : `To make the route accessible to both signed in and signed out users, pass \`publicRoutes: ["${path}"]\` to authMiddleware`;
56
+ const ignoredRoutes = [...defaultIgnoredRoutes, path].map((r) => `"${r}"`).join(", ");
57
+ const ignoredRoutesText = hasIgnoredRoutes ? `To prevent Clerk authentication from running at all, add "${path}" to the \`ignoredRoutes\` array passed to authMiddleware` : `To prevent Clerk authentication from running at all, pass \`ignoredRoutes: [${ignoredRoutes}]\` to authMiddleware`;
58
+ const afterAuthText = "Pass a custom `afterAuth` to authMiddleware, and replace Clerk's default behavior of redirecting unless a route is included in publicRoutes";
59
+ return `${infoText}
60
+
61
+ ${[apiRoutesText, publicRoutesText, ignoredRoutesText, afterAuthText].filter(Boolean).map((text, index) => `${index + 1}. ${text}`).join("\n")}
62
+
63
+ For additional information about middleware, please visit https://clerk.com/docs/nextjs/middleware
64
+ (This log only appears in development mode, or if \`debug: true\` is passed to authMiddleware)`;
65
+ };
66
+ const authSignatureInvalid = `Clerk: Unable to verify request, this usually means the Clerk middleware did not run. Ensure Clerk's middleware is properly integrated and matches the current route. For more information, see: https://clerk.com/docs/nextjs/middleware. (code=auth_signature_invalid)`;
67
+ export {
68
+ authAuthHeaderMissing,
69
+ authSignatureInvalid,
70
+ clockSkewDetected,
71
+ getAuthAuthHeaderMissing,
72
+ infiniteRedirectLoopDetected,
73
+ informAboutProtectedRouteInfo,
74
+ missingDomainAndProxy,
75
+ missingSignInUrlInDev,
76
+ receivedRequestForIgnoredRoute
77
+ };
78
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/errors.ts"],"sourcesContent":["export const missingDomainAndProxy = `\nMissing domain and proxyUrl. A satellite application needs to specify a domain or a proxyUrl.\n\n1) With middleware\n e.g. export default clerkMiddleware({domain:'YOUR_DOMAIN',isSatellite:true}); // or the deprecated authMiddleware()\n2) With environment variables e.g.\n NEXT_PUBLIC_CLERK_DOMAIN='YOUR_DOMAIN'\n NEXT_PUBLIC_CLERK_IS_SATELLITE='true'\n `;\n\nexport const missingSignInUrlInDev = `\nInvalid signInUrl. A satellite application requires a signInUrl for development instances.\nCheck if signInUrl is missing from your configuration or if it is not an absolute URL\n\n1) With middleware\n e.g. export default clerkMiddleware({signInUrl:'SOME_URL', isSatellite:true}); // or the deprecated authMiddleware()\n2) With environment variables e.g.\n NEXT_PUBLIC_CLERK_SIGN_IN_URL='SOME_URL'\n NEXT_PUBLIC_CLERK_IS_SATELLITE='true'`;\n\nexport const receivedRequestForIgnoredRoute = (url: string, matcher: string) =>\n `Clerk: The middleware was skipped for this request URL: ${url}. For performance reasons, it's recommended to your middleware matcher to:\nexport const config = {\n matcher: ${matcher},\n};\n\nAlternatively, you can set your own ignoredRoutes. See https://clerk.com/docs/nextjs/middleware\n(This log only appears in development mode)\n`;\n\nexport const getAuthAuthHeaderMissing = () => authAuthHeaderMissing('getAuth');\n\nexport const authAuthHeaderMissing = (helperName = 'auth') =>\n `CabinID: ${helperName}() was called but CabinID can't detect usage of authMiddleware(). Please ensure the following:\n- clerkMiddleware() authMiddleware is used in your Next.js Middleware.\n- Your Middleware matcher is configured to match this route or page.\n- If you are using the src directory, make sure the Middleware file is inside of it.\n`;\n\nexport const clockSkewDetected = (verifyMessage: string) =>\n `Clerk: Clock skew detected. This usually means that your system clock is inaccurate. Clerk will continuously try to issue new tokens, as the existing ones will be treated as \"expired\" due to clock skew.\n\nTo resolve this issue, make sure your system's clock is set to the correct time (e.g. turn off and on automatic time synchronization).\n\n---\n\n${verifyMessage}`;\n\nexport const infiniteRedirectLoopDetected = () =>\n `Clerk: Infinite redirect loop detected. That usually means that we were not able to determine the auth state for this request. A list of common causes and solutions follows.\n\nReason 1:\nYour Clerk instance keys are incorrect, or you recently changed keys (Publishable Key, Secret Key).\nHow to resolve:\n-> Make sure you're using the correct keys from the Clerk Dashboard. If you changed keys recently, make sure to clear your browser application data and cookies.\n\nReason 2:\nA bug that may have already been fixed in the latest version of Clerk NextJS package.\nHow to resolve:\n-> Make sure you are using the latest version of '@clerk/nextjs' and 'next'.\n`;\n\nexport const informAboutProtectedRouteInfo = (\n path: string,\n hasPublicRoutes: boolean,\n hasIgnoredRoutes: boolean,\n isApiRoute: boolean,\n defaultIgnoredRoutes: string[]\n) => {\n const infoText = isApiRoute\n ? `INFO: Clerk: The request to ${path} is being protected (401) because there is no signed-in user, and the path is included in \\`apiRoutes\\`. To prevent this behavior, choose one of:`\n : `INFO: Clerk: The request to ${path} is being redirected because there is no signed-in user, and the path is not included in \\`ignoredRoutes\\` or \\`publicRoutes\\`. To prevent this behavior, choose one of:`;\n const apiRoutesText = isApiRoute\n ? `To prevent Clerk authentication from protecting (401) the api route, remove the rule matching \"${path}\" from the \\`apiRoutes\\` array passed to authMiddleware`\n : undefined;\n const publicRoutesText = hasPublicRoutes\n ? `To make the route accessible to both signed in and signed out users, add \"${path}\" to the \\`publicRoutes\\` array passed to authMiddleware`\n : `To make the route accessible to both signed in and signed out users, pass \\`publicRoutes: [\"${path}\"]\\` to authMiddleware`;\n const ignoredRoutes = [...defaultIgnoredRoutes, path]\n .map((r) => `\"${r}\"`)\n .join(', ');\n const ignoredRoutesText = hasIgnoredRoutes\n ? `To prevent Clerk authentication from running at all, add \"${path}\" to the \\`ignoredRoutes\\` array passed to authMiddleware`\n : `To prevent Clerk authentication from running at all, pass \\`ignoredRoutes: [${ignoredRoutes}]\\` to authMiddleware`;\n const afterAuthText =\n \"Pass a custom `afterAuth` to authMiddleware, and replace Clerk's default behavior of redirecting unless a route is included in publicRoutes\";\n\n return `${infoText}\n\n${[apiRoutesText, publicRoutesText, ignoredRoutesText, afterAuthText]\n .filter(Boolean)\n .map((text, index) => `${index + 1}. ${text}`)\n .join('\\n')}\n\nFor additional information about middleware, please visit https://clerk.com/docs/nextjs/middleware\n(This log only appears in development mode, or if \\`debug: true\\` is passed to authMiddleware)`;\n};\n\nexport const authSignatureInvalid = `Clerk: Unable to verify request, this usually means the Clerk middleware did not run. Ensure Clerk's middleware is properly integrated and matches the current route. For more information, see: https://clerk.com/docs/nextjs/middleware. (code=auth_signature_invalid)`;\n"],"mappings":"AAAO,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU9B,MAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU9B,MAAM,iCAAiC,CAAC,KAAa,YAC1D,2DAA2D,GAAG;AAAA;AAAA,aAEnD,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOb,MAAM,2BAA2B,MAAM,sBAAsB,SAAS;AAEtE,MAAM,wBAAwB,CAAC,aAAa,WACjD,YAAY,UAAU;AAAA;AAAA;AAAA;AAAA;AAMjB,MAAM,oBAAoB,CAAC,kBAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa;AAER,MAAM,+BAA+B,MAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaK,MAAM,gCAAgC,CAC3C,MACA,iBACA,kBACA,YACA,yBACG;AACH,QAAM,WAAW,aACb,+BAA+B,IAAI,sJACnC,+BAA+B,IAAI;AACvC,QAAM,gBAAgB,aAClB,kGAAkG,IAAI,4DACtG;AACJ,QAAM,mBAAmB,kBACrB,6EAA6E,IAAI,6DACjF,+FAA+F,IAAI;AACvG,QAAM,gBAAgB,CAAC,GAAG,sBAAsB,IAAI,EACjD,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EACnB,KAAK,IAAI;AACZ,QAAM,oBAAoB,mBACtB,6DAA6D,IAAI,8DACjE,+EAA+E,aAAa;AAChG,QAAM,gBACJ;AAEF,SAAO,GAAG,QAAQ;AAAA;AAAA,EAElB,CAAC,eAAe,kBAAkB,mBAAmB,aAAa,EACjE,OAAO,OAAO,EACd,IAAI,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,EAC5C,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAIb;AAEO,MAAM,uBAAuB;","names":[]}
@@ -0,0 +1,12 @@
1
+ import { auth } from "./auth";
2
+ import { client } from "../utils/http";
3
+ async function currentUser() {
4
+ const { userId } = auth();
5
+ if (!userId)
6
+ return null;
7
+ return client.users.getUser(userId);
8
+ }
9
+ export {
10
+ currentUser
11
+ };
12
+ //# sourceMappingURL=getCurrentUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/getCurrentUser.ts"],"sourcesContent":["import { User } from '../types';\nimport { auth } from './auth';\nimport { client } from '../utils/http';\n\nexport async function currentUser(): Promise<User | null> {\n const { userId } = auth();\n if (!userId) return null;\n return client.users.getUser(userId);\n}\n"],"mappings":"AACA,SAAS,YAAY;AACrB,SAAS,cAAc;AAEvB,eAAsB,cAAoC;AACxD,QAAM,EAAE,OAAO,IAAI,KAAK;AACxB,MAAI,CAAC;AAAQ,WAAO;AACpB,SAAO,OAAO,MAAM,QAAQ,MAAM;AACpC;","names":[]}
@@ -0,0 +1,7 @@
1
+ import { auth } from "./auth";
2
+ import { createRouteMatcher } from "./routeMatcher";
3
+ export {
4
+ auth,
5
+ createRouteMatcher
6
+ };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/index.ts"],"sourcesContent":["export { auth } from './auth';\nexport { createRouteMatcher } from './routeMatcher';\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,0BAA0B;","names":[]}
@@ -0,0 +1,175 @@
1
+ import { NextResponse } from "next/server";
2
+ import {
3
+ constants,
4
+ PUBLISHABLE_KEY,
5
+ SECRET_KEY,
6
+ SIGN_IN_URL,
7
+ SIGN_UP_URL
8
+ } from "../constants";
9
+ import { assertKey, decorateRequest, redirectAdapter } from "./utils";
10
+ import { cabinIdClient } from "./client";
11
+ import { createCabinIdRequest } from "../tokens/cabinIdRequest";
12
+ import { createProtect } from "./protect";
13
+ import { createRedirect } from "./createRedirect";
14
+ import { isRedirect, setHeader } from "../utils/response";
15
+ import { serverRedirectWithAuth } from "./serverRedirectWithAuth";
16
+ const CONTROL_FLOW_ERROR = {
17
+ FORCE_NOT_FOUND: "CABIN_ID_PROTECT_REWRITE",
18
+ REDIRECT_TO_URL: "CABIN_ID_PROTECT_REDIRECT_TO_URL",
19
+ REDIRECT_TO_SIGN_IN: "CABIN_ID_PROTECT_REDIRECT_TO_SIGN_IN"
20
+ };
21
+ const setCookieWithDefaults = (response, name, value, options = {}) => {
22
+ response.cookies.set(name, value, {
23
+ maxAge: options.maxAge || 60 * 60 * 24 * 30,
24
+ // 30 days mặc định
25
+ sameSite: "lax",
26
+ secure: true
27
+ });
28
+ };
29
+ const parseRequestAndEvent = (args) => {
30
+ return [
31
+ args[0] instanceof Request ? args[0] : void 0,
32
+ args[0] instanceof Request ? args[1] : void 0
33
+ ];
34
+ };
35
+ const parseHandlerAndOptions = (args) => {
36
+ return [
37
+ typeof args[0] === "function" ? args[0] : void 0,
38
+ (args.length === 2 ? args[1] : typeof args[0] === "function" ? {} : args[0]) || {}
39
+ ];
40
+ };
41
+ const authMiddleware = (...args) => {
42
+ const [request, event] = parseRequestAndEvent(args);
43
+ const [handler, params] = parseHandlerAndOptions(args);
44
+ const publishableKey = assertKey(
45
+ params.publishableKey || PUBLISHABLE_KEY,
46
+ () => {
47
+ throw new Error("Publish Key is not exist");
48
+ }
49
+ );
50
+ const secretKey = assertKey(params.secretKey || SECRET_KEY, () => {
51
+ throw new Error("Secret Key is not valid");
52
+ });
53
+ const signInUrl = params.signInUrl || SIGN_IN_URL;
54
+ const signUpUrl = params.signUpUrl || SIGN_UP_URL;
55
+ const options = {
56
+ ...params,
57
+ publishableKey,
58
+ secretKey,
59
+ signInUrl,
60
+ signUpUrl
61
+ };
62
+ const nextMiddleware = async (_request, _event) => {
63
+ const accessToken = _request.nextUrl.searchParams.get(
64
+ constants.QueryParams.Token
65
+ );
66
+ const userId = _request.nextUrl.searchParams.get(
67
+ constants.QueryParams.UserId
68
+ );
69
+ if (accessToken && userId) {
70
+ const url = _request.nextUrl;
71
+ const path = url.pathname;
72
+ const response = NextResponse.redirect(
73
+ new URL(path || "/", _request.url)
74
+ );
75
+ setCookieWithDefaults(response, constants.Cookies.Client, accessToken);
76
+ setCookieWithDefaults(response, constants.Cookies.User, userId);
77
+ return response;
78
+ }
79
+ const cabinIdRequest = createCabinIdRequest(_request);
80
+ const requestState = await cabinIdClient.authenticateRequest(
81
+ cabinIdRequest,
82
+ options
83
+ );
84
+ const authObject = requestState.toAuth();
85
+ const redirectToSignIn = createMiddlewareRedirectToSignIn(cabinIdRequest);
86
+ const protect = createMiddlewareProtect(
87
+ cabinIdRequest,
88
+ authObject,
89
+ redirectToSignIn
90
+ );
91
+ const authObjWithMethods = Object.assign(
92
+ authObject,
93
+ { protect, redirectToSignIn }
94
+ );
95
+ let handlerResult = NextResponse.next();
96
+ try {
97
+ handlerResult = await (handler == null ? void 0 : handler(() => authObjWithMethods, _request, _event)) || handlerResult;
98
+ } catch (e) {
99
+ handlerResult = handleControlFlowErrors(e, cabinIdRequest, requestState);
100
+ }
101
+ if (isRedirect(handlerResult)) {
102
+ return serverRedirectWithAuth(cabinIdRequest, handlerResult);
103
+ }
104
+ decorateRequest(
105
+ cabinIdRequest,
106
+ handlerResult,
107
+ requestState,
108
+ options.secretKey
109
+ );
110
+ if (requestState.headers) {
111
+ requestState.headers.forEach((value, key) => {
112
+ handlerResult.headers.append(key, value);
113
+ });
114
+ }
115
+ return handlerResult;
116
+ };
117
+ if (request && event) {
118
+ return nextMiddleware(request, event);
119
+ }
120
+ return nextMiddleware;
121
+ };
122
+ const createMiddlewareRedirectToSignIn = (cabinIdRequest) => {
123
+ return (opts = {}) => {
124
+ const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN);
125
+ err.returnBackUrl = opts.returnBackUrl === null ? "" : opts.returnBackUrl || cabinIdRequest.cabinIdUrl.toString();
126
+ throw err;
127
+ };
128
+ };
129
+ const createMiddlewareProtect = (cabinIdRequest, authObject, redirectToSignIn) => {
130
+ return (_, options) => {
131
+ const notFound = () => {
132
+ throw new Error(CONTROL_FLOW_ERROR.FORCE_NOT_FOUND);
133
+ };
134
+ const redirect = (url) => {
135
+ const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_URL);
136
+ err.redirectUrl = url;
137
+ throw err;
138
+ };
139
+ return createProtect({
140
+ request: cabinIdRequest,
141
+ redirect,
142
+ notFound,
143
+ authObject,
144
+ redirectToSignIn
145
+ })(options);
146
+ };
147
+ };
148
+ const handleControlFlowErrors = (e, cabinIdRequest, requestState) => {
149
+ switch (e.message) {
150
+ case CONTROL_FLOW_ERROR.FORCE_NOT_FOUND:
151
+ return setHeader(
152
+ NextResponse.rewrite(
153
+ `${cabinIdRequest.cabinIdUrl.origin}/cabin_${Date.now()}`
154
+ ),
155
+ constants.Headers.AuthReason,
156
+ "protect-rewrite"
157
+ );
158
+ case CONTROL_FLOW_ERROR.REDIRECT_TO_URL:
159
+ return redirectAdapter(e.redirectUrl);
160
+ case CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN:
161
+ return createRedirect({
162
+ redirectAdapter,
163
+ baseUrl: cabinIdRequest.cabinIdUrl,
164
+ signInUrl: requestState.signInUrl,
165
+ signUpUrl: requestState.signUpUrl,
166
+ publishableKey: requestState.publishableKey
167
+ }).redirectToSignIn({ returnBackUrl: e.returnBackUrl });
168
+ default:
169
+ throw e;
170
+ }
171
+ };
172
+ export {
173
+ authMiddleware
174
+ };
175
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/middleware.ts"],"sourcesContent":["import { NextMiddleware, NextResponse } from \"next/server\";\nimport {\n constants,\n PUBLISHABLE_KEY,\n SECRET_KEY,\n SIGN_IN_URL,\n SIGN_UP_URL,\n} from \"../constants\";\nimport { assertKey, decorateRequest, redirectAdapter } from \"./utils\";\nimport {\n NextMiddlewareEvtParam,\n NextMiddlewareRequestParam,\n NextMiddlewareReturn,\n} from \"./type\";\nimport { cabinIdClient } from \"./client\";\nimport { CabinIdRequest, createCabinIdRequest } from \"../tokens/cabinIdRequest\";\nimport { AuthProtect, createProtect } from \"./protect\";\nimport { createRedirect, RedirectFun } from \"./createRedirect\";\nimport { isRedirect, setHeader } from \"../utils/response\";\nimport { RequestState } from \"../tokens/authStatus\";\nimport { AuthObject } from \"../tokens/authObjects\";\nimport { serverRedirectWithAuth } from \"./serverRedirectWithAuth\";\nimport { AuthenticateRequestOptions } from \"../api/factory\";\n\nconst CONTROL_FLOW_ERROR = {\n FORCE_NOT_FOUND: \"CABIN_ID_PROTECT_REWRITE\",\n REDIRECT_TO_URL: \"CABIN_ID_PROTECT_REDIRECT_TO_URL\",\n REDIRECT_TO_SIGN_IN: \"CABIN_ID_PROTECT_REDIRECT_TO_SIGN_IN\",\n};\n\nexport type CabinIdMiddlewareAuthObject = AuthObject & {\n protect: AuthProtect;\n redirectToSignIn: RedirectFun<Response>;\n};\n\nexport type CabinIdMiddlewareAuth = () => CabinIdMiddlewareAuthObject;\n\nexport interface AuthMiddleware {\n /**\n * @example\n * export default clerkMiddleware((auth, request, event) => { ... }, options);\n */\n (\n handler: CabinIdMiddlewareHandler,\n options?: CabinIdMiddlewareOptions\n ): NextMiddleware;\n /**\n * @example\n * export default clerkMiddleware(options);\n */\n (options?: CabinIdMiddlewareOptions): NextMiddleware;\n /**\n * @example\n * export default clerkMiddleware;\n */\n (\n request: NextMiddlewareRequestParam,\n event: NextMiddlewareEvtParam\n ): NextMiddlewareReturn;\n}\n\ntype CabinIdMiddlewareHandler = (\n auth: CabinIdMiddlewareAuth,\n request: NextMiddlewareRequestParam,\n event: NextMiddlewareEvtParam\n) => NextMiddlewareReturn;\n\nexport type CabinIdMiddlewareOptions = AuthenticateRequestOptions;\n\n// Hàm tiện ích để thiết lập cookie với cấu hình mặc định\nconst setCookieWithDefaults = (\n response: NextResponse,\n name: string,\n value: string,\n options: { maxAge?: number } = {}\n) => {\n response.cookies.set(name, value, {\n maxAge: options.maxAge || 60 * 60 * 24 * 30, // 30 days mặc định\n sameSite: \"lax\",\n secure: true,\n });\n};\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 [CabinIdMiddlewareHandler | undefined, CabinIdMiddlewareOptions];\n};\n\nconst authMiddleware: AuthMiddleware = (...args: unknown[]): any => {\n const [request, event] = parseRequestAndEvent(args);\n const [handler, params] = parseHandlerAndOptions(args);\n\n const publishableKey = assertKey(\n params.publishableKey || PUBLISHABLE_KEY,\n () => {\n throw new Error(\"Publish Key is not exist\");\n }\n );\n const secretKey = assertKey(params.secretKey || SECRET_KEY, () => {\n throw new Error(\"Secret Key is not valid\");\n });\n\n const signInUrl = params.signInUrl || SIGN_IN_URL;\n const signUpUrl = params.signUpUrl || SIGN_UP_URL;\n\n const options = {\n ...params,\n publishableKey,\n secretKey,\n signInUrl,\n signUpUrl,\n };\n\n const nextMiddleware: NextMiddleware = async (_request, _event) => {\n const accessToken = _request.nextUrl.searchParams.get(\n constants.QueryParams.Token\n );\n const userId = _request.nextUrl.searchParams.get(\n constants.QueryParams.UserId\n );\n\n if (accessToken && userId) {\n const url = _request.nextUrl;\n const path = url.pathname;\n const response = NextResponse.redirect(\n new URL(path || \"/\", _request.url)\n );\n \n // Sử dụng hàm tiện ích để thiết lập cookie với sameSite=\"lax\" và secure=true\n setCookieWithDefaults(response, constants.Cookies.Client, accessToken);\n setCookieWithDefaults(response, constants.Cookies.User, userId);\n\n return response;\n }\n\n const cabinIdRequest = createCabinIdRequest(_request);\n\n const requestState = await cabinIdClient.authenticateRequest(\n cabinIdRequest,\n options\n );\n\n const authObject = requestState.toAuth();\n\n const redirectToSignIn = createMiddlewareRedirectToSignIn(cabinIdRequest);\n\n const protect = createMiddlewareProtect(\n cabinIdRequest,\n authObject,\n redirectToSignIn\n );\n\n const authObjWithMethods: CabinIdMiddlewareAuthObject = Object.assign(\n authObject,\n { protect, redirectToSignIn }\n );\n\n let handlerResult: Response = NextResponse.next();\n\n try {\n handlerResult =\n (await handler?.(() => authObjWithMethods, _request, _event)) ||\n handlerResult;\n } catch (e: any) {\n handlerResult = handleControlFlowErrors(e, cabinIdRequest, requestState);\n }\n\n if (isRedirect(handlerResult)) {\n return serverRedirectWithAuth(cabinIdRequest, handlerResult);\n }\n\n decorateRequest(\n cabinIdRequest,\n handlerResult,\n requestState,\n options.secretKey\n );\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n handlerResult.headers.append(key, value);\n });\n }\n\n return handlerResult;\n };\n\n if (request && event) {\n return nextMiddleware(request, event);\n }\n\n return nextMiddleware;\n};\n\nexport { authMiddleware };\n\nconst createMiddlewareRedirectToSignIn = (\n cabinIdRequest: CabinIdRequest\n): CabinIdMiddlewareAuthObject[\"redirectToSignIn\"] => {\n return (opts = {}) => {\n const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN) as any;\n err.returnBackUrl =\n opts.returnBackUrl === null\n ? \"\"\n : opts.returnBackUrl || cabinIdRequest.cabinIdUrl.toString();\n throw err;\n };\n};\n\nconst createMiddlewareProtect = (\n cabinIdRequest: CabinIdRequest,\n authObject: AuthObject,\n redirectToSignIn: RedirectFun<Response>\n): CabinIdMiddlewareAuthObject[\"protect\"] => {\n return ((_: any, options: any) => {\n const notFound = () => {\n throw new Error(CONTROL_FLOW_ERROR.FORCE_NOT_FOUND) as any;\n };\n\n const redirect = (url: string) => {\n const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_URL) as any;\n err.redirectUrl = url;\n throw err;\n };\n\n return createProtect({\n request: cabinIdRequest,\n redirect,\n notFound,\n authObject,\n redirectToSignIn,\n })(options);\n }) as AuthProtect;\n};\n\nconst handleControlFlowErrors = (\n e: any,\n cabinIdRequest: CabinIdRequest,\n requestState: RequestState\n): Response => {\n switch (e.message) {\n case CONTROL_FLOW_ERROR.FORCE_NOT_FOUND:\n return setHeader(\n NextResponse.rewrite(\n `${cabinIdRequest.cabinIdUrl.origin}/cabin_${Date.now()}`\n ),\n constants.Headers.AuthReason,\n \"protect-rewrite\"\n );\n case CONTROL_FLOW_ERROR.REDIRECT_TO_URL:\n return redirectAdapter(e.redirectUrl);\n case CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN:\n return createRedirect({\n redirectAdapter,\n baseUrl: cabinIdRequest.cabinIdUrl,\n signInUrl: requestState.signInUrl,\n signUpUrl: requestState.signUpUrl,\n publishableKey: requestState.publishableKey,\n }).redirectToSignIn({ returnBackUrl: e.returnBackUrl });\n default:\n throw e;\n }\n};"],"mappings":"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","names":[]}
@@ -0,0 +1,45 @@
1
+ import { constants } from "../constants";
2
+ const createProtect = (opts) => {
3
+ const { redirectToSignIn, authObject, redirect, notFound, request } = opts;
4
+ return (...args) => {
5
+ var _a, _b, _c, _d, _e, _f;
6
+ const optionValuesAsParam = ((_a = args[0]) == null ? void 0 : _a.unauthenticatedUrl) || ((_b = args[0]) == null ? void 0 : _b.unauthorizedUrl);
7
+ const paramsOrFunction = optionValuesAsParam ? void 0 : args[0];
8
+ const unauthenticatedUrl = ((_c = args[0]) == null ? void 0 : _c.unauthenticatedUrl) || ((_d = args[1]) == null ? void 0 : _d.unauthenticatedUrl);
9
+ const unauthorizedUrl = ((_e = args[0]) == null ? void 0 : _e.unauthorizedUrl) || ((_f = args[1]) == null ? void 0 : _f.unauthorizedUrl);
10
+ const handleUnauthenticated = () => {
11
+ if (unauthenticatedUrl) {
12
+ return redirect(unauthenticatedUrl);
13
+ }
14
+ if (isPageRequest(request)) {
15
+ return redirectToSignIn();
16
+ }
17
+ return notFound();
18
+ };
19
+ const handleUnauthorized = () => {
20
+ if (unauthorizedUrl) {
21
+ return redirect(unauthorizedUrl);
22
+ }
23
+ return notFound();
24
+ };
25
+ if (!authObject.userId) {
26
+ return handleUnauthenticated();
27
+ }
28
+ if (!paramsOrFunction) {
29
+ return authObject;
30
+ }
31
+ return handleUnauthorized();
32
+ };
33
+ };
34
+ const isServerActionRequest = (req) => {
35
+ var _a, _b;
36
+ return !!req.headers.get(constants.NextHeaders.NextUrl) && (((_a = req.headers.get(constants.Headers.Accept)) == null ? void 0 : _a.includes("text/x-component")) || ((_b = req.headers.get(constants.Headers.ContentType)) == null ? void 0 : _b.includes("multipart/form-data")) || !!req.headers.get(constants.NextHeaders.NextAction));
37
+ };
38
+ const isPageRequest = (req) => {
39
+ var _a;
40
+ return req.headers.get(constants.Headers.SecFetchDest) === "document" || ((_a = req.headers.get(constants.Headers.Accept)) == null ? void 0 : _a.includes("text/html")) || !!req.headers.get(constants.NextHeaders.NextUrl) && !isServerActionRequest(req) || !!req.headers.get(constants.NextHeaders.NextjsData);
41
+ };
42
+ export {
43
+ createProtect
44
+ };
45
+ //# sourceMappingURL=protect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/protect.ts"],"sourcesContent":["import { AuthObject, SignedInAuthObject } from '../tokens/authObjects';\nimport { constants } from '../constants';\nimport { RedirectFun } from './createRedirect';\n\ntype AuthProtectOptions = {\n unauthorizedUrl?: string;\n unauthenticatedUrl?: string;\n};\n\n/**\n * Throws a Nextjs notFound error if user is not authenticated or authorized.\n */\nexport interface AuthProtect {\n // (\n // params?: CheckAuthorizationParamsWithCustomPermissions,\n // options?: AuthProtectOptions\n // ): SignedInAuthObject;\n\n // (\n // params?: (has: CheckAuthorizationWithCustomPermissions) => boolean,\n // options?: AuthProtectOptions\n // ): SignedInAuthObject;\n\n (options?: AuthProtectOptions): SignedInAuthObject;\n}\n\nexport const createProtect = (opts: {\n request: Request;\n authObject: AuthObject;\n /**\n * middleware and pages throw a notFound error if signed out\n * but the middleware needs to throw an error it can catch\n * use this callback to customise the behavior\n */\n notFound: () => never;\n /**\n * see {@link notFound} above\n */\n redirect: (url: string) => void;\n /**\n * protect() in middleware redirects to signInUrl if signed out\n * protect() in pages throws a notFound error if signed out\n * use this callback to customise the behavior\n */\n redirectToSignIn: RedirectFun<unknown>;\n}): AuthProtect => {\n const { redirectToSignIn, authObject, redirect, notFound, request } = opts;\n\n return ((...args: any[]) => {\n const optionValuesAsParam =\n args[0]?.unauthenticatedUrl || args[0]?.unauthorizedUrl;\n const paramsOrFunction = optionValuesAsParam ? undefined : args[0];\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 return redirect(unauthenticatedUrl);\n }\n if (isPageRequest(request)) {\n // TODO: Handle runtime values. What happens if runtime values are set in middleware and in ClerkProvider as well?\n return redirectToSignIn();\n }\n return notFound();\n };\n\n const handleUnauthorized = () => {\n if (unauthorizedUrl) {\n return redirect(unauthorizedUrl);\n }\n return notFound();\n };\n\n /**\n * User is not authenticated\n */\n if (!authObject.userId) {\n return handleUnauthenticated();\n }\n\n /**\n * User is authenticated\n */\n if (!paramsOrFunction) {\n return authObject;\n }\n\n /**\n * if a function is passed and returns false then throw not found\n */\n // if (typeof paramsOrFunction === 'function') {\n // if (paramsOrFunction(authObject.has)) {\n // return authObject;\n // }\n // return handleUnauthorized();\n // }\n\n /**\n * Checking if user is authorized when permission or role is passed\n */\n // if (authObject.has(paramsOrFunction)) {\n // return authObject;\n // }\n\n return handleUnauthorized();\n }) as AuthProtect;\n};\n\nconst isServerActionRequest = (req: Request) => {\n return (\n !!req.headers.get(constants.NextHeaders.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(constants.NextHeaders.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.Accept)?.includes('text/html') ||\n (!!req.headers.get(constants.NextHeaders.NextUrl) &&\n !isServerActionRequest(req)) ||\n !!req.headers.get(constants.NextHeaders.NextjsData)\n );\n};\n\n// In case we want to handle router handlers and server actions differently in the future\n// const isRouteHandler = (req: Request) => {\n// return !isPageRequest(req) && !isServerAction(req);\n// };\n"],"mappings":"AACA,SAAS,iBAAiB;AAyBnB,MAAM,gBAAgB,CAAC,SAmBX;AACjB,QAAM,EAAE,kBAAkB,YAAY,UAAU,UAAU,QAAQ,IAAI;AAEtE,SAAQ,IAAI,SAAgB;AAhD9B;AAiDI,UAAM,wBACJ,UAAK,CAAC,MAAN,mBAAS,yBAAsB,UAAK,CAAC,MAAN,mBAAS;AAC1C,UAAM,mBAAmB,sBAAsB,SAAY,KAAK,CAAC;AACjE,UAAM,uBAAsB,UAAK,CAAC,MAAN,mBAAS,yBACnC,UAAK,CAAC,MAAN,mBAAS;AACX,UAAM,oBAAmB,UAAK,CAAC,MAAN,mBAAS,sBAChC,UAAK,CAAC,MAAN,mBAAS;AAEX,UAAM,wBAAwB,MAAM;AAClC,UAAI,oBAAoB;AACtB,eAAO,SAAS,kBAAkB;AAAA,MACpC;AACA,UAAI,cAAc,OAAO,GAAG;AAE1B,eAAO,iBAAiB;AAAA,MAC1B;AACA,aAAO,SAAS;AAAA,IAClB;AAEA,UAAM,qBAAqB,MAAM;AAC/B,UAAI,iBAAiB;AACnB,eAAO,SAAS,eAAe;AAAA,MACjC;AACA,aAAO,SAAS;AAAA,IAClB;AAKA,QAAI,CAAC,WAAW,QAAQ;AACtB,aAAO,sBAAsB;AAAA,IAC/B;AAKA,QAAI,CAAC,kBAAkB;AACrB,aAAO;AAAA,IACT;AAmBA,WAAO,mBAAmB;AAAA,EAC5B;AACF;AAEA,MAAM,wBAAwB,CAAC,QAAiB;AA9GhD;AA+GE,SACE,CAAC,CAAC,IAAI,QAAQ,IAAI,UAAU,YAAY,OAAO,QAC9C,SAAI,QAAQ,IAAI,UAAU,QAAQ,MAAM,MAAxC,mBAA2C,SAAS,0BACnD,SAAI,QACD,IAAI,UAAU,QAAQ,WAAW,MADpC,mBAEI,SAAS,2BACb,CAAC,CAAC,IAAI,QAAQ,IAAI,UAAU,YAAY,UAAU;AAExD;AAEA,MAAM,gBAAgB,CAAC,QAA0B;AAzHjD;AA0HE,SACE,IAAI,QAAQ,IAAI,UAAU,QAAQ,YAAY,MAAM,gBACpD,SAAI,QAAQ,IAAI,UAAU,QAAQ,MAAM,MAAxC,mBAA2C,SAAS,iBACnD,CAAC,CAAC,IAAI,QAAQ,IAAI,UAAU,YAAY,OAAO,KAC9C,CAAC,sBAAsB,GAAG,KAC5B,CAAC,CAAC,IAAI,QAAQ,IAAI,UAAU,YAAY,UAAU;AAEtD;","names":[]}