@thunderid/nextjs 1.3.1 → 1.5.0

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 (400) hide show
  1. package/dist/cjs/client/admin.cjs +6 -0
  2. package/dist/cjs/client/components/{presentation → account}/ChangeCredential/ChangeCredential.cjs +2 -2
  3. package/dist/cjs/client/components/account/ChangeCredential/ChangeCredential.cjs.map +1 -0
  4. package/dist/cjs/client/components/{presentation → account}/User/User.cjs +1 -1
  5. package/dist/cjs/client/components/account/User/User.cjs.map +1 -0
  6. package/dist/cjs/client/components/{presentation → account}/UserAvatar/UserAvatar.cjs +1 -1
  7. package/dist/cjs/client/components/account/UserAvatar/UserAvatar.cjs.map +1 -0
  8. package/dist/cjs/client/components/{presentation → account}/UserDropdown/UserDropdown.cjs +1 -1
  9. package/dist/cjs/client/components/account/UserDropdown/UserDropdown.cjs.map +1 -0
  10. package/dist/cjs/client/components/{presentation → account}/UserProfile/UserProfile.cjs +1 -1
  11. package/dist/cjs/client/components/account/UserProfile/UserProfile.cjs.map +1 -0
  12. package/dist/cjs/client/components/admin/AgentCreate/AgentCreate.cjs +28 -0
  13. package/dist/cjs/client/components/admin/AgentCreate/AgentCreate.cjs.map +1 -0
  14. package/dist/cjs/client/components/admin/AgentDetails/AgentDetails.cjs +28 -0
  15. package/dist/cjs/client/components/admin/AgentDetails/AgentDetails.cjs.map +1 -0
  16. package/dist/cjs/client/components/admin/AgentList/AgentList.cjs +28 -0
  17. package/dist/cjs/client/components/admin/AgentList/AgentList.cjs.map +1 -0
  18. package/dist/cjs/client/components/admin/GroupCreate/GroupCreate.cjs +28 -0
  19. package/dist/cjs/client/components/admin/GroupCreate/GroupCreate.cjs.map +1 -0
  20. package/dist/cjs/client/components/admin/GroupList/GroupList.cjs +28 -0
  21. package/dist/cjs/client/components/admin/GroupList/GroupList.cjs.map +1 -0
  22. package/dist/cjs/client/components/admin/GroupMembers/GroupMembers.cjs +28 -0
  23. package/dist/cjs/client/components/admin/GroupMembers/GroupMembers.cjs.map +1 -0
  24. package/dist/cjs/client/components/admin/RoleAssignments/RoleAssignments.cjs +28 -0
  25. package/dist/cjs/client/components/admin/RoleAssignments/RoleAssignments.cjs.map +1 -0
  26. package/dist/cjs/client/components/admin/RoleCreate/RoleCreate.cjs +28 -0
  27. package/dist/cjs/client/components/admin/RoleCreate/RoleCreate.cjs.map +1 -0
  28. package/dist/cjs/client/components/admin/RoleList/RoleList.cjs +28 -0
  29. package/dist/cjs/client/components/admin/RoleList/RoleList.cjs.map +1 -0
  30. package/dist/cjs/client/components/admin/RolePermissions/RolePermissions.cjs +28 -0
  31. package/dist/cjs/client/components/admin/RolePermissions/RolePermissions.cjs.map +1 -0
  32. package/dist/cjs/client/components/admin/UserCreate/UserCreate.cjs +28 -0
  33. package/dist/cjs/client/components/admin/UserCreate/UserCreate.cjs.map +1 -0
  34. package/dist/cjs/client/components/admin/UserDetails/UserDetails.cjs +28 -0
  35. package/dist/cjs/client/components/admin/UserDetails/UserDetails.cjs.map +1 -0
  36. package/dist/cjs/client/components/admin/UserList/UserList.cjs +28 -0
  37. package/dist/cjs/client/components/admin/UserList/UserList.cjs.map +1 -0
  38. package/dist/cjs/client/components/{presentation → auth}/SignIn/SignIn.cjs +1 -1
  39. package/dist/cjs/client/components/auth/SignIn/SignIn.cjs.map +1 -0
  40. package/dist/cjs/client/components/{presentation → auth}/SignUp/SignUp.cjs +1 -1
  41. package/dist/cjs/client/components/auth/SignUp/SignUp.cjs.map +1 -0
  42. package/dist/cjs/client/components/{actions → auth/buttons}/SignInButton/SignInButton.cjs +3 -3
  43. package/dist/cjs/client/components/auth/buttons/SignInButton/SignInButton.cjs.map +1 -0
  44. package/dist/cjs/client/components/{actions → auth/buttons}/SignOutButton/SignOutButton.cjs +4 -4
  45. package/dist/cjs/client/components/auth/buttons/SignOutButton/SignOutButton.cjs.map +1 -0
  46. package/dist/cjs/client/components/{actions → auth/buttons}/SignUpButton/SignUpButton.cjs +3 -3
  47. package/dist/cjs/client/components/auth/buttons/SignUpButton/SignUpButton.cjs.map +1 -0
  48. package/dist/cjs/client/components/{control → auth/guards}/SignedIn/SignedIn.cjs +3 -3
  49. package/dist/cjs/client/components/auth/guards/SignedIn/SignedIn.cjs.map +1 -0
  50. package/dist/cjs/client/components/{control → auth/guards}/SignedOut/SignedOut.cjs +3 -3
  51. package/dist/cjs/client/components/auth/guards/SignedOut/SignedOut.cjs.map +1 -0
  52. package/dist/cjs/client/components/{presentation → primitives}/AuthFlowSelect/AuthFlowSelect.cjs +1 -1
  53. package/dist/cjs/client/components/primitives/AuthFlowSelect/AuthFlowSelect.cjs.map +1 -0
  54. package/dist/cjs/client/components/{presentation → primitives}/UserSelect/UserSelect.cjs +1 -1
  55. package/dist/cjs/client/components/primitives/UserSelect/UserSelect.cjs.map +1 -0
  56. package/dist/cjs/client/components/{presentation → primitives}/UserTypeSelect/UserTypeSelect.cjs +1 -1
  57. package/dist/cjs/client/components/primitives/UserTypeSelect/UserTypeSelect.cjs.map +1 -0
  58. package/dist/cjs/client/contexts/ThunderID/ThunderIDProvider.cjs +5 -1
  59. package/dist/cjs/client/contexts/ThunderID/ThunderIDProvider.cjs.map +1 -1
  60. package/dist/cjs/client/fetchAuthFlowsFromServer.cjs +1 -1
  61. package/dist/cjs/client/fetchAuthFlowsFromServer.cjs.map +1 -1
  62. package/dist/cjs/client/fetchFlowMetaFromServer.cjs +1 -1
  63. package/dist/cjs/client/fetchFlowMetaFromServer.cjs.map +1 -1
  64. package/dist/cjs/client/fetchManagementFromServer.cjs +32 -0
  65. package/dist/cjs/client/fetchManagementFromServer.cjs.map +1 -0
  66. package/dist/cjs/client/fetchUserTypesFromServer.cjs +1 -1
  67. package/dist/cjs/client/fetchUserTypesFromServer.cjs.map +1 -1
  68. package/dist/cjs/client/fetchUsersFromServer.cjs +1 -1
  69. package/dist/cjs/client/fetchUsersFromServer.cjs.map +1 -1
  70. package/dist/cjs/client/hooks/management/useGrantedPermissions.cjs +51 -0
  71. package/dist/cjs/client/hooks/management/useGrantedPermissions.cjs.map +1 -0
  72. package/dist/cjs/client/index.cjs +33 -15
  73. package/dist/cjs/index.cjs +311 -16
  74. package/dist/cjs/server/ThunderIDProvider.cjs +10 -8
  75. package/dist/cjs/server/ThunderIDProvider.cjs.map +1 -1
  76. package/dist/cjs/server/actions/{getUserAction.cjs → account/getUserAction.cjs} +2 -2
  77. package/dist/cjs/server/actions/account/getUserAction.cjs.map +1 -0
  78. package/dist/cjs/server/actions/{getUserProfileAction.cjs → account/getUserProfileAction.cjs} +2 -2
  79. package/dist/cjs/server/actions/account/getUserProfileAction.cjs.map +1 -0
  80. package/dist/cjs/server/actions/{getUserSchemaAction.cjs → account/getUserSchemaAction.cjs} +2 -2
  81. package/dist/cjs/server/actions/account/getUserSchemaAction.cjs.map +1 -0
  82. package/dist/cjs/server/actions/{updateUserCredentialsAction.cjs → account/updateUserCredentialsAction.cjs} +3 -3
  83. package/dist/cjs/server/actions/account/updateUserCredentialsAction.cjs.map +1 -0
  84. package/dist/cjs/server/actions/{updateUserProfileAction.cjs → account/updateUserProfileAction.cjs} +2 -2
  85. package/dist/cjs/server/actions/account/updateUserProfileAction.cjs.map +1 -0
  86. package/dist/cjs/server/actions/{getAuthFlowsAction.cjs → auth/getAuthFlowsAction.cjs} +3 -3
  87. package/dist/cjs/server/actions/auth/getAuthFlowsAction.cjs.map +1 -0
  88. package/dist/cjs/server/actions/{getFlowMetaAction.cjs → auth/getFlowMetaAction.cjs} +4 -4
  89. package/dist/cjs/server/actions/auth/getFlowMetaAction.cjs.map +1 -0
  90. package/dist/cjs/server/actions/{handleOAuthCallbackAction.cjs → auth/handleOAuthCallbackAction.cjs} +6 -6
  91. package/dist/cjs/server/actions/auth/handleOAuthCallbackAction.cjs.map +1 -0
  92. package/dist/cjs/server/actions/{signInAction.cjs → auth/signInAction.cjs} +6 -6
  93. package/dist/cjs/server/actions/auth/signInAction.cjs.map +1 -0
  94. package/dist/cjs/server/actions/{signOutAction.cjs → auth/signOutAction.cjs} +7 -7
  95. package/dist/cjs/server/actions/auth/signOutAction.cjs.map +1 -0
  96. package/dist/cjs/server/actions/{signUpAction.cjs → auth/signUpAction.cjs} +2 -2
  97. package/dist/cjs/server/actions/auth/signUpAction.cjs.map +1 -0
  98. package/dist/cjs/server/actions/management/getGrantedPermissionsAction.cjs +32 -0
  99. package/dist/cjs/server/actions/management/getGrantedPermissionsAction.cjs.map +1 -0
  100. package/dist/cjs/server/actions/{getUserTypesAction.cjs → management/getUserTypesAction.cjs} +3 -3
  101. package/dist/cjs/server/actions/management/getUserTypesAction.cjs.map +1 -0
  102. package/dist/cjs/server/actions/{getUsersAction.cjs → management/getUsersAction.cjs} +3 -3
  103. package/dist/cjs/server/actions/management/getUsersAction.cjs.map +1 -0
  104. package/dist/cjs/server/actions/management/managementRequestAction.cjs +79 -0
  105. package/dist/cjs/server/actions/management/managementRequestAction.cjs.map +1 -0
  106. package/dist/cjs/utils/managementCollections.cjs +22 -0
  107. package/dist/cjs/utils/managementCollections.cjs.map +1 -0
  108. package/dist/client/admin.d.ts +3 -0
  109. package/dist/client/admin.d.ts.map +1 -0
  110. package/dist/client/admin.js +6 -0
  111. package/dist/client/components/account/ChangeCredential/ChangeCredential.d.ts.map +1 -0
  112. package/dist/client/components/{presentation → account}/ChangeCredential/ChangeCredential.js +2 -2
  113. package/dist/client/components/account/ChangeCredential/ChangeCredential.js.map +1 -0
  114. package/dist/client/components/account/User/User.d.ts.map +1 -0
  115. package/dist/client/components/{presentation → account}/User/User.js +1 -1
  116. package/dist/client/components/account/User/User.js.map +1 -0
  117. package/dist/client/components/account/UserAvatar/UserAvatar.d.ts.map +1 -0
  118. package/dist/client/components/{presentation → account}/UserAvatar/UserAvatar.js +1 -1
  119. package/dist/client/components/account/UserAvatar/UserAvatar.js.map +1 -0
  120. package/dist/client/components/account/UserDropdown/UserDropdown.d.ts.map +1 -0
  121. package/dist/client/components/{presentation → account}/UserDropdown/UserDropdown.js +1 -1
  122. package/dist/client/components/account/UserDropdown/UserDropdown.js.map +1 -0
  123. package/dist/client/components/account/UserProfile/UserProfile.d.ts.map +1 -0
  124. package/dist/client/components/{presentation → account}/UserProfile/UserProfile.js +1 -1
  125. package/dist/client/components/account/UserProfile/UserProfile.js.map +1 -0
  126. package/dist/client/components/admin/AgentCreate/AgentCreate.d.ts +17 -0
  127. package/dist/client/components/admin/AgentCreate/AgentCreate.d.ts.map +1 -0
  128. package/dist/client/components/admin/AgentCreate/AgentCreate.js +25 -0
  129. package/dist/client/components/admin/AgentCreate/AgentCreate.js.map +1 -0
  130. package/dist/client/components/admin/AgentDetails/AgentDetails.d.ts +17 -0
  131. package/dist/client/components/admin/AgentDetails/AgentDetails.d.ts.map +1 -0
  132. package/dist/client/components/admin/AgentDetails/AgentDetails.js +25 -0
  133. package/dist/client/components/admin/AgentDetails/AgentDetails.js.map +1 -0
  134. package/dist/client/components/admin/AgentList/AgentList.d.ts +17 -0
  135. package/dist/client/components/admin/AgentList/AgentList.d.ts.map +1 -0
  136. package/dist/client/components/admin/AgentList/AgentList.js +25 -0
  137. package/dist/client/components/admin/AgentList/AgentList.js.map +1 -0
  138. package/dist/client/components/admin/GroupCreate/GroupCreate.d.ts +17 -0
  139. package/dist/client/components/admin/GroupCreate/GroupCreate.d.ts.map +1 -0
  140. package/dist/client/components/admin/GroupCreate/GroupCreate.js +25 -0
  141. package/dist/client/components/admin/GroupCreate/GroupCreate.js.map +1 -0
  142. package/dist/client/components/admin/GroupList/GroupList.d.ts +17 -0
  143. package/dist/client/components/admin/GroupList/GroupList.d.ts.map +1 -0
  144. package/dist/client/components/admin/GroupList/GroupList.js +25 -0
  145. package/dist/client/components/admin/GroupList/GroupList.js.map +1 -0
  146. package/dist/client/components/admin/GroupMembers/GroupMembers.d.ts +17 -0
  147. package/dist/client/components/admin/GroupMembers/GroupMembers.d.ts.map +1 -0
  148. package/dist/client/components/admin/GroupMembers/GroupMembers.js +25 -0
  149. package/dist/client/components/admin/GroupMembers/GroupMembers.js.map +1 -0
  150. package/dist/client/components/admin/RoleAssignments/RoleAssignments.d.ts +17 -0
  151. package/dist/client/components/admin/RoleAssignments/RoleAssignments.d.ts.map +1 -0
  152. package/dist/client/components/admin/RoleAssignments/RoleAssignments.js +25 -0
  153. package/dist/client/components/admin/RoleAssignments/RoleAssignments.js.map +1 -0
  154. package/dist/client/components/admin/RoleCreate/RoleCreate.d.ts +17 -0
  155. package/dist/client/components/admin/RoleCreate/RoleCreate.d.ts.map +1 -0
  156. package/dist/client/components/admin/RoleCreate/RoleCreate.js +25 -0
  157. package/dist/client/components/admin/RoleCreate/RoleCreate.js.map +1 -0
  158. package/dist/client/components/admin/RoleList/RoleList.d.ts +17 -0
  159. package/dist/client/components/admin/RoleList/RoleList.d.ts.map +1 -0
  160. package/dist/client/components/admin/RoleList/RoleList.js +25 -0
  161. package/dist/client/components/admin/RoleList/RoleList.js.map +1 -0
  162. package/dist/client/components/admin/RolePermissions/RolePermissions.d.ts +17 -0
  163. package/dist/client/components/admin/RolePermissions/RolePermissions.d.ts.map +1 -0
  164. package/dist/client/components/admin/RolePermissions/RolePermissions.js +25 -0
  165. package/dist/client/components/admin/RolePermissions/RolePermissions.js.map +1 -0
  166. package/dist/client/components/admin/UserCreate/UserCreate.d.ts +17 -0
  167. package/dist/client/components/admin/UserCreate/UserCreate.d.ts.map +1 -0
  168. package/dist/client/components/admin/UserCreate/UserCreate.js +25 -0
  169. package/dist/client/components/admin/UserCreate/UserCreate.js.map +1 -0
  170. package/dist/client/components/admin/UserDetails/UserDetails.d.ts +17 -0
  171. package/dist/client/components/admin/UserDetails/UserDetails.d.ts.map +1 -0
  172. package/dist/client/components/admin/UserDetails/UserDetails.js +25 -0
  173. package/dist/client/components/admin/UserDetails/UserDetails.js.map +1 -0
  174. package/dist/client/components/admin/UserList/UserList.d.ts +17 -0
  175. package/dist/client/components/admin/UserList/UserList.d.ts.map +1 -0
  176. package/dist/client/components/admin/UserList/UserList.js +25 -0
  177. package/dist/client/components/admin/UserList/UserList.js.map +1 -0
  178. package/dist/client/components/auth/SignIn/SignIn.d.ts.map +1 -0
  179. package/dist/client/components/{presentation → auth}/SignIn/SignIn.js +1 -1
  180. package/dist/client/components/auth/SignIn/SignIn.js.map +1 -0
  181. package/dist/client/components/auth/SignUp/SignUp.d.ts.map +1 -0
  182. package/dist/client/components/{presentation → auth}/SignUp/SignUp.js +1 -1
  183. package/dist/client/components/auth/SignUp/SignUp.js.map +1 -0
  184. package/dist/client/components/auth/buttons/SignInButton/SignInButton.d.ts.map +1 -0
  185. package/dist/client/components/{actions → auth/buttons}/SignInButton/SignInButton.js +2 -2
  186. package/dist/client/components/auth/buttons/SignInButton/SignInButton.js.map +1 -0
  187. package/dist/client/components/auth/buttons/SignOutButton/SignOutButton.d.ts.map +1 -0
  188. package/dist/client/components/{actions → auth/buttons}/SignOutButton/SignOutButton.js +3 -3
  189. package/dist/client/components/auth/buttons/SignOutButton/SignOutButton.js.map +1 -0
  190. package/dist/client/components/auth/buttons/SignUpButton/SignUpButton.d.ts.map +1 -0
  191. package/dist/client/components/{actions → auth/buttons}/SignUpButton/SignUpButton.js +2 -2
  192. package/dist/client/components/auth/buttons/SignUpButton/SignUpButton.js.map +1 -0
  193. package/dist/client/components/auth/guards/Loading/Loading.d.ts.map +1 -0
  194. package/dist/client/components/auth/guards/SignedIn/SignedIn.d.ts.map +1 -0
  195. package/dist/client/components/{control → auth/guards}/SignedIn/SignedIn.js +2 -2
  196. package/dist/client/components/auth/guards/SignedIn/SignedIn.js.map +1 -0
  197. package/dist/client/components/auth/guards/SignedOut/SignedOut.d.ts.map +1 -0
  198. package/dist/client/components/{control → auth/guards}/SignedOut/SignedOut.js +2 -2
  199. package/dist/client/components/auth/guards/SignedOut/SignedOut.js.map +1 -0
  200. package/dist/client/components/primitives/AuthFlowSelect/AuthFlowSelect.d.ts.map +1 -0
  201. package/dist/client/components/{presentation → primitives}/AuthFlowSelect/AuthFlowSelect.js +1 -1
  202. package/dist/client/components/primitives/AuthFlowSelect/AuthFlowSelect.js.map +1 -0
  203. package/dist/client/components/primitives/UserSelect/UserSelect.d.ts.map +1 -0
  204. package/dist/client/components/{presentation → primitives}/UserSelect/UserSelect.js +1 -1
  205. package/dist/client/components/primitives/UserSelect/UserSelect.js.map +1 -0
  206. package/dist/client/components/primitives/UserTypeSelect/UserTypeSelect.d.ts.map +1 -0
  207. package/dist/client/components/{presentation → primitives}/UserTypeSelect/UserTypeSelect.js +1 -1
  208. package/dist/client/components/primitives/UserTypeSelect/UserTypeSelect.js.map +1 -0
  209. package/dist/client/contexts/ThunderID/ThunderIDProvider.d.ts.map +1 -1
  210. package/dist/client/contexts/ThunderID/ThunderIDProvider.js +5 -1
  211. package/dist/client/contexts/ThunderID/ThunderIDProvider.js.map +1 -1
  212. package/dist/client/fetchAuthFlowsFromServer.js +1 -1
  213. package/dist/client/fetchAuthFlowsFromServer.js.map +1 -1
  214. package/dist/client/fetchFlowMetaFromServer.js +1 -1
  215. package/dist/client/fetchFlowMetaFromServer.js.map +1 -1
  216. package/dist/client/fetchManagementFromServer.d.ts +14 -0
  217. package/dist/client/fetchManagementFromServer.d.ts.map +1 -0
  218. package/dist/client/fetchManagementFromServer.js +32 -0
  219. package/dist/client/fetchManagementFromServer.js.map +1 -0
  220. package/dist/client/fetchUserTypesFromServer.js +1 -1
  221. package/dist/client/fetchUserTypesFromServer.js.map +1 -1
  222. package/dist/client/fetchUsersFromServer.js +1 -1
  223. package/dist/client/fetchUsersFromServer.js.map +1 -1
  224. package/dist/client/hooks/management/useGrantedPermissions.d.ts +17 -0
  225. package/dist/client/hooks/management/useGrantedPermissions.d.ts.map +1 -0
  226. package/dist/client/hooks/management/useGrantedPermissions.js +48 -0
  227. package/dist/client/hooks/management/useGrantedPermissions.js.map +1 -0
  228. package/dist/client/index.d.ts +58 -30
  229. package/dist/client/index.d.ts.map +1 -1
  230. package/dist/client/index.js +30 -15
  231. package/dist/index.js +31 -16
  232. package/dist/server/ThunderIDProvider.d.ts.map +1 -1
  233. package/dist/server/ThunderIDProvider.js +10 -8
  234. package/dist/server/ThunderIDProvider.js.map +1 -1
  235. package/dist/server/actions/account/getUserAction.d.ts.map +1 -0
  236. package/dist/server/actions/{getUserAction.js → account/getUserAction.js} +2 -2
  237. package/dist/server/actions/account/getUserAction.js.map +1 -0
  238. package/dist/server/actions/account/getUserProfileAction.d.ts.map +1 -0
  239. package/dist/server/actions/{getUserProfileAction.js → account/getUserProfileAction.js} +2 -2
  240. package/dist/server/actions/account/getUserProfileAction.js.map +1 -0
  241. package/dist/server/actions/account/getUserSchemaAction.d.ts.map +1 -0
  242. package/dist/server/actions/{getUserSchemaAction.js → account/getUserSchemaAction.js} +2 -2
  243. package/dist/server/actions/account/getUserSchemaAction.js.map +1 -0
  244. package/dist/server/actions/account/updateUserCredentialsAction.d.ts.map +1 -0
  245. package/dist/server/actions/{updateUserCredentialsAction.js → account/updateUserCredentialsAction.js} +2 -2
  246. package/dist/server/actions/account/updateUserCredentialsAction.js.map +1 -0
  247. package/dist/server/actions/account/updateUserProfileAction.d.ts.map +1 -0
  248. package/dist/server/actions/{updateUserProfileAction.js → account/updateUserProfileAction.js} +2 -2
  249. package/dist/server/actions/account/updateUserProfileAction.js.map +1 -0
  250. package/dist/server/actions/{getAuthFlowsAction.d.ts → auth/getAuthFlowsAction.d.ts} +1 -1
  251. package/dist/server/actions/auth/getAuthFlowsAction.d.ts.map +1 -0
  252. package/dist/server/actions/{getAuthFlowsAction.js → auth/getAuthFlowsAction.js} +2 -2
  253. package/dist/server/actions/auth/getAuthFlowsAction.js.map +1 -0
  254. package/dist/server/actions/auth/getFlowMetaAction.d.ts.map +1 -0
  255. package/dist/server/actions/{getFlowMetaAction.js → auth/getFlowMetaAction.js} +3 -3
  256. package/dist/server/actions/auth/getFlowMetaAction.js.map +1 -0
  257. package/dist/server/actions/auth/handleOAuthCallbackAction.d.ts.map +1 -0
  258. package/dist/server/actions/{handleOAuthCallbackAction.js → auth/handleOAuthCallbackAction.js} +5 -5
  259. package/dist/server/actions/auth/handleOAuthCallbackAction.js.map +1 -0
  260. package/dist/server/actions/auth/signInAction.d.ts.map +1 -0
  261. package/dist/server/actions/{signInAction.js → auth/signInAction.js} +5 -5
  262. package/dist/server/actions/auth/signInAction.js.map +1 -0
  263. package/dist/server/actions/auth/signOutAction.d.ts.map +1 -0
  264. package/dist/server/actions/{signOutAction.js → auth/signOutAction.js} +6 -6
  265. package/dist/server/actions/auth/signOutAction.js.map +1 -0
  266. package/dist/server/actions/auth/signUpAction.d.ts.map +1 -0
  267. package/dist/server/actions/{signUpAction.js → auth/signUpAction.js} +2 -2
  268. package/dist/server/actions/auth/signUpAction.js.map +1 -0
  269. package/dist/server/actions/management/getGrantedPermissionsAction.d.ts +11 -0
  270. package/dist/server/actions/management/getGrantedPermissionsAction.d.ts.map +1 -0
  271. package/dist/server/actions/management/getGrantedPermissionsAction.js +30 -0
  272. package/dist/server/actions/management/getGrantedPermissionsAction.js.map +1 -0
  273. package/dist/server/actions/{getUserTypesAction.d.ts → management/getUserTypesAction.d.ts} +1 -1
  274. package/dist/server/actions/management/getUserTypesAction.d.ts.map +1 -0
  275. package/dist/server/actions/{getUserTypesAction.js → management/getUserTypesAction.js} +2 -2
  276. package/dist/server/actions/management/getUserTypesAction.js.map +1 -0
  277. package/dist/server/actions/{getUsersAction.d.ts → management/getUsersAction.d.ts} +1 -1
  278. package/dist/server/actions/management/getUsersAction.d.ts.map +1 -0
  279. package/dist/server/actions/{getUsersAction.js → management/getUsersAction.js} +2 -2
  280. package/dist/server/actions/management/getUsersAction.js.map +1 -0
  281. package/dist/server/actions/management/managementRequestAction.d.ts +36 -0
  282. package/dist/server/actions/management/managementRequestAction.d.ts.map +1 -0
  283. package/dist/server/actions/management/managementRequestAction.js +77 -0
  284. package/dist/server/actions/management/managementRequestAction.js.map +1 -0
  285. package/dist/utils/managementCollections.d.ts +8 -0
  286. package/dist/utils/managementCollections.d.ts.map +1 -0
  287. package/dist/utils/managementCollections.js +20 -0
  288. package/dist/utils/managementCollections.js.map +1 -0
  289. package/package.json +3 -3
  290. package/dist/cjs/client/components/actions/SignInButton/SignInButton.cjs.map +0 -1
  291. package/dist/cjs/client/components/actions/SignOutButton/SignOutButton.cjs.map +0 -1
  292. package/dist/cjs/client/components/actions/SignUpButton/SignUpButton.cjs.map +0 -1
  293. package/dist/cjs/client/components/control/SignedIn/SignedIn.cjs.map +0 -1
  294. package/dist/cjs/client/components/control/SignedOut/SignedOut.cjs.map +0 -1
  295. package/dist/cjs/client/components/presentation/AuthFlowSelect/AuthFlowSelect.cjs.map +0 -1
  296. package/dist/cjs/client/components/presentation/ChangeCredential/ChangeCredential.cjs.map +0 -1
  297. package/dist/cjs/client/components/presentation/SignIn/SignIn.cjs.map +0 -1
  298. package/dist/cjs/client/components/presentation/SignUp/SignUp.cjs.map +0 -1
  299. package/dist/cjs/client/components/presentation/User/User.cjs.map +0 -1
  300. package/dist/cjs/client/components/presentation/UserAvatar/UserAvatar.cjs.map +0 -1
  301. package/dist/cjs/client/components/presentation/UserDropdown/UserDropdown.cjs.map +0 -1
  302. package/dist/cjs/client/components/presentation/UserProfile/UserProfile.cjs.map +0 -1
  303. package/dist/cjs/client/components/presentation/UserSelect/UserSelect.cjs.map +0 -1
  304. package/dist/cjs/client/components/presentation/UserTypeSelect/UserTypeSelect.cjs.map +0 -1
  305. package/dist/cjs/server/actions/getAuthFlowsAction.cjs.map +0 -1
  306. package/dist/cjs/server/actions/getFlowMetaAction.cjs.map +0 -1
  307. package/dist/cjs/server/actions/getUserAction.cjs.map +0 -1
  308. package/dist/cjs/server/actions/getUserProfileAction.cjs.map +0 -1
  309. package/dist/cjs/server/actions/getUserSchemaAction.cjs.map +0 -1
  310. package/dist/cjs/server/actions/getUserTypesAction.cjs.map +0 -1
  311. package/dist/cjs/server/actions/getUsersAction.cjs.map +0 -1
  312. package/dist/cjs/server/actions/handleOAuthCallbackAction.cjs.map +0 -1
  313. package/dist/cjs/server/actions/signInAction.cjs.map +0 -1
  314. package/dist/cjs/server/actions/signOutAction.cjs.map +0 -1
  315. package/dist/cjs/server/actions/signUpAction.cjs.map +0 -1
  316. package/dist/cjs/server/actions/updateUserCredentialsAction.cjs.map +0 -1
  317. package/dist/cjs/server/actions/updateUserProfileAction.cjs.map +0 -1
  318. package/dist/client/components/actions/SignInButton/SignInButton.d.ts.map +0 -1
  319. package/dist/client/components/actions/SignInButton/SignInButton.js.map +0 -1
  320. package/dist/client/components/actions/SignOutButton/SignOutButton.d.ts.map +0 -1
  321. package/dist/client/components/actions/SignOutButton/SignOutButton.js.map +0 -1
  322. package/dist/client/components/actions/SignUpButton/SignUpButton.d.ts.map +0 -1
  323. package/dist/client/components/actions/SignUpButton/SignUpButton.js.map +0 -1
  324. package/dist/client/components/control/Loading/Loading.d.ts.map +0 -1
  325. package/dist/client/components/control/SignedIn/SignedIn.d.ts.map +0 -1
  326. package/dist/client/components/control/SignedIn/SignedIn.js.map +0 -1
  327. package/dist/client/components/control/SignedOut/SignedOut.d.ts.map +0 -1
  328. package/dist/client/components/control/SignedOut/SignedOut.js.map +0 -1
  329. package/dist/client/components/presentation/AuthFlowSelect/AuthFlowSelect.d.ts.map +0 -1
  330. package/dist/client/components/presentation/AuthFlowSelect/AuthFlowSelect.js.map +0 -1
  331. package/dist/client/components/presentation/ChangeCredential/ChangeCredential.d.ts.map +0 -1
  332. package/dist/client/components/presentation/ChangeCredential/ChangeCredential.js.map +0 -1
  333. package/dist/client/components/presentation/SignIn/SignIn.d.ts.map +0 -1
  334. package/dist/client/components/presentation/SignIn/SignIn.js.map +0 -1
  335. package/dist/client/components/presentation/SignUp/SignUp.d.ts.map +0 -1
  336. package/dist/client/components/presentation/SignUp/SignUp.js.map +0 -1
  337. package/dist/client/components/presentation/User/User.d.ts.map +0 -1
  338. package/dist/client/components/presentation/User/User.js.map +0 -1
  339. package/dist/client/components/presentation/UserAvatar/UserAvatar.d.ts.map +0 -1
  340. package/dist/client/components/presentation/UserAvatar/UserAvatar.js.map +0 -1
  341. package/dist/client/components/presentation/UserDropdown/UserDropdown.d.ts.map +0 -1
  342. package/dist/client/components/presentation/UserDropdown/UserDropdown.js.map +0 -1
  343. package/dist/client/components/presentation/UserProfile/UserProfile.d.ts.map +0 -1
  344. package/dist/client/components/presentation/UserProfile/UserProfile.js.map +0 -1
  345. package/dist/client/components/presentation/UserSelect/UserSelect.d.ts.map +0 -1
  346. package/dist/client/components/presentation/UserSelect/UserSelect.js.map +0 -1
  347. package/dist/client/components/presentation/UserTypeSelect/UserTypeSelect.d.ts.map +0 -1
  348. package/dist/client/components/presentation/UserTypeSelect/UserTypeSelect.js.map +0 -1
  349. package/dist/server/actions/getAuthFlowsAction.d.ts.map +0 -1
  350. package/dist/server/actions/getAuthFlowsAction.js.map +0 -1
  351. package/dist/server/actions/getFlowMetaAction.d.ts.map +0 -1
  352. package/dist/server/actions/getFlowMetaAction.js.map +0 -1
  353. package/dist/server/actions/getUserAction.d.ts.map +0 -1
  354. package/dist/server/actions/getUserAction.js.map +0 -1
  355. package/dist/server/actions/getUserProfileAction.d.ts.map +0 -1
  356. package/dist/server/actions/getUserProfileAction.js.map +0 -1
  357. package/dist/server/actions/getUserSchemaAction.d.ts.map +0 -1
  358. package/dist/server/actions/getUserSchemaAction.js.map +0 -1
  359. package/dist/server/actions/getUserTypesAction.d.ts.map +0 -1
  360. package/dist/server/actions/getUserTypesAction.js.map +0 -1
  361. package/dist/server/actions/getUsersAction.d.ts.map +0 -1
  362. package/dist/server/actions/getUsersAction.js.map +0 -1
  363. package/dist/server/actions/handleOAuthCallbackAction.d.ts.map +0 -1
  364. package/dist/server/actions/handleOAuthCallbackAction.js.map +0 -1
  365. package/dist/server/actions/signInAction.d.ts.map +0 -1
  366. package/dist/server/actions/signInAction.js.map +0 -1
  367. package/dist/server/actions/signOutAction.d.ts.map +0 -1
  368. package/dist/server/actions/signOutAction.js.map +0 -1
  369. package/dist/server/actions/signUpAction.d.ts.map +0 -1
  370. package/dist/server/actions/signUpAction.js.map +0 -1
  371. package/dist/server/actions/updateUserCredentialsAction.d.ts.map +0 -1
  372. package/dist/server/actions/updateUserCredentialsAction.js.map +0 -1
  373. package/dist/server/actions/updateUserProfileAction.d.ts.map +0 -1
  374. package/dist/server/actions/updateUserProfileAction.js.map +0 -1
  375. /package/dist/client/components/{presentation → account}/ChangeCredential/ChangeCredential.d.ts +0 -0
  376. /package/dist/client/components/{presentation → account}/User/User.d.ts +0 -0
  377. /package/dist/client/components/{presentation → account}/UserAvatar/UserAvatar.d.ts +0 -0
  378. /package/dist/client/components/{presentation → account}/UserDropdown/UserDropdown.d.ts +0 -0
  379. /package/dist/client/components/{presentation → account}/UserProfile/UserProfile.d.ts +0 -0
  380. /package/dist/client/components/{presentation → auth}/SignIn/SignIn.d.ts +0 -0
  381. /package/dist/client/components/{presentation → auth}/SignUp/SignUp.d.ts +0 -0
  382. /package/dist/client/components/{actions → auth/buttons}/SignInButton/SignInButton.d.ts +0 -0
  383. /package/dist/client/components/{actions → auth/buttons}/SignOutButton/SignOutButton.d.ts +0 -0
  384. /package/dist/client/components/{actions → auth/buttons}/SignUpButton/SignUpButton.d.ts +0 -0
  385. /package/dist/client/components/{control → auth/guards}/Loading/Loading.d.ts +0 -0
  386. /package/dist/client/components/{control → auth/guards}/SignedIn/SignedIn.d.ts +0 -0
  387. /package/dist/client/components/{control → auth/guards}/SignedOut/SignedOut.d.ts +0 -0
  388. /package/dist/client/components/{presentation → primitives}/AuthFlowSelect/AuthFlowSelect.d.ts +0 -0
  389. /package/dist/client/components/{presentation → primitives}/UserSelect/UserSelect.d.ts +0 -0
  390. /package/dist/client/components/{presentation → primitives}/UserTypeSelect/UserTypeSelect.d.ts +0 -0
  391. /package/dist/server/actions/{getUserAction.d.ts → account/getUserAction.d.ts} +0 -0
  392. /package/dist/server/actions/{getUserProfileAction.d.ts → account/getUserProfileAction.d.ts} +0 -0
  393. /package/dist/server/actions/{getUserSchemaAction.d.ts → account/getUserSchemaAction.d.ts} +0 -0
  394. /package/dist/server/actions/{updateUserCredentialsAction.d.ts → account/updateUserCredentialsAction.d.ts} +0 -0
  395. /package/dist/server/actions/{updateUserProfileAction.d.ts → account/updateUserProfileAction.d.ts} +0 -0
  396. /package/dist/server/actions/{getFlowMetaAction.d.ts → auth/getFlowMetaAction.d.ts} +0 -0
  397. /package/dist/server/actions/{handleOAuthCallbackAction.d.ts → auth/handleOAuthCallbackAction.d.ts} +0 -0
  398. /package/dist/server/actions/{signInAction.d.ts → auth/signInAction.d.ts} +0 -0
  399. /package/dist/server/actions/{signOutAction.d.ts → auth/signOutAction.d.ts} +0 -0
  400. /package/dist/server/actions/{signUpAction.d.ts → auth/signUpAction.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignIn.cjs","names":["SignIn: FC<SignInProps>","useThunderID","normalizedError: Error","response: any","EmbeddedFlowType","ThunderIDRuntimeError","BaseSignIn"],"sources":["../../../../../../src/client/components/auth/SignIn/SignIn.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {EmbeddedFlowComponent, EmbeddedFlowType, ThunderIDRuntimeError} from '@thunderid/node';\nimport {BaseSignIn, BaseSignInProps, normalizeFlowResponse, useTranslation} from '@thunderid/react';\nimport {FC, useEffect, useRef, useState} from 'react';\nimport useThunderID from '../../../contexts/ThunderID/useThunderID';\n\n/**\n * Props for the SignIn component.\n * Extends BaseSignInProps for full compatibility with the React BaseSignIn component\n */\nexport type SignInProps = Pick<\n BaseSignInProps,\n 'children' | 'className' | 'id' | 'onSuccess' | 'onError' | 'variant' | 'size'\n>;\n\n/**\n * A SignIn component for Next.js that provides native authentication flow.\n * This component delegates to the BaseSignIn from @thunderid/react. Unlike BaseSignUp,\n * BaseSignIn does not manage its own flow state, so this component initiates the flow\n * (using the server-action-backed `signIn`) and tracks `components`/`executionId` itself.\n */\nconst SignIn: FC<SignInProps> = ({size = 'medium', variant = 'outlined', onError, ...rest}: SignInProps) => {\n const {signIn, applicationId, scopes} = useThunderID();\n const {t} = useTranslation();\n\n const [components, setComponents] = useState<EmbeddedFlowComponent[]>([]);\n const [additionalData, setAdditionalData] = useState<Record<string, any>>({});\n const [executionId, setExecutionId] = useState<string | undefined>(undefined);\n const [isFlowInitialized, setIsFlowInitialized] = useState(false);\n const [flowError, setFlowError] = useState<Error | null>(null);\n const initializationAttemptedRef = useRef(false);\n // A fresh challenge token is required on every step to prevent replay attacks; the server\n // rotates it on each response, so it's tracked in a ref (not state) to avoid a stale value\n // from a closure captured before the previous response's state update committed.\n const challengeTokenRef = useRef<string | undefined>(undefined);\n\n const applyFlowResponse = (response: any): void => {\n const normalized = normalizeFlowResponse(response, t, {resolveTranslations: false});\n\n challengeTokenRef.current = response?.challengeToken ?? undefined;\n setExecutionId(normalized.executionId ?? undefined);\n setComponents(normalized.components);\n setAdditionalData(normalized.additionalData);\n };\n\n const handleFlowError = (error: unknown): void => {\n const normalizedError: Error = error instanceof Error ? error : new Error(String(error));\n\n setFlowError(normalizedError);\n onError?.(normalizedError);\n };\n\n useEffect(() => {\n if (initializationAttemptedRef.current || !signIn) {\n return;\n }\n\n initializationAttemptedRef.current = true;\n\n (async (): Promise<void> => {\n try {\n const response: any = await signIn(\n {\n applicationId,\n flowType: EmbeddedFlowType.Authentication,\n ...(scopes && {scopes}),\n },\n {},\n );\n\n // `response` is undefined when the provider already redirected\n // (OAuth-redirect or completed flows are handled there directly).\n if (response) {\n applyFlowResponse(response);\n }\n } catch (error) {\n handleFlowError(error);\n } finally {\n setIsFlowInitialized(true);\n }\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [signIn]);\n\n const handleOnSubmit = async (payload: any): Promise<void> => {\n if (!signIn) {\n throw new ThunderIDRuntimeError(\n '`signIn` function is not available.',\n 'SignIn-handleOnSubmit-RuntimeError-001',\n 'nextjs',\n );\n }\n\n const response: any = await signIn(\n {\n ...payload,\n executionId,\n ...(challengeTokenRef.current ? {challengeToken: challengeTokenRef.current} : {}),\n },\n {},\n );\n\n if (response) {\n applyFlowResponse(response);\n }\n };\n\n return (\n <BaseSignIn\n additionalData={additionalData}\n components={components}\n error={flowError}\n isLoading={!isFlowInitialized}\n onError={onError}\n onSubmit={handleOnSubmit}\n size={size}\n variant={variant}\n {...rest}\n />\n );\n};\n\nSignIn.displayName = 'SignIn';\n\nexport default SignIn;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAyBA,MAAMA,UAA2B,EAAC,OAAO,UAAU,UAAU,YAAY,QAAS,GAAG,WAAuB;CAC1G,MAAM,EAAC,QAAQ,eAAe,WAAUC,8BAAc;CACtD,MAAM,EAAC,6CAAqB;CAE5B,MAAM,CAAC,YAAY,qCAAmD,EAAE,CAAC;CACzE,MAAM,CAAC,gBAAgB,yCAAmD,EAAE,CAAC;CAC7E,MAAM,CAAC,aAAa,sCAA+C,OAAU;CAC7E,MAAM,CAAC,mBAAmB,4CAAiC,MAAM;CACjE,MAAM,CAAC,WAAW,oCAAuC,KAAK;CAC9D,MAAM,+CAAoC,MAAM;CAIhD,MAAM,sCAA+C,OAAU;CAE/D,MAAM,qBAAqB,aAAwB;EACjD,MAAM,0DAAmC,UAAU,GAAG,EAAC,qBAAqB,OAAM,CAAC;AAEnF,oBAAkB,UAAU,UAAU,kBAAkB;AACxD,iBAAe,WAAW,eAAe,OAAU;AACnD,gBAAc,WAAW,WAAW;AACpC,oBAAkB,WAAW,eAAe;;CAG9C,MAAM,mBAAmB,UAAyB;EAChD,MAAMC,kBAAyB,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC;AAExF,eAAa,gBAAgB;AAC7B,YAAU,gBAAgB;;AAG5B,4BAAgB;AACd,MAAI,2BAA2B,WAAW,CAAC,OACzC;AAGF,6BAA2B,UAAU;AAErC,GAAC,YAA2B;AAC1B,OAAI;IACF,MAAMC,WAAgB,MAAM,OAC1B;KACE;KACA,UAAUC,kCAAiB;KAC3B,GAAI,UAAU,EAAC,QAAO;KACvB,EACD,EAAE,CACH;AAID,QAAI,SACF,mBAAkB,SAAS;YAEtB,OAAO;AACd,oBAAgB,MAAM;aACd;AACR,yBAAqB,KAAK;;MAE1B;IAEH,CAAC,OAAO,CAAC;CAEZ,MAAM,iBAAiB,OAAO,YAAgC;AAC5D,MAAI,CAAC,OACH,OAAM,IAAIC,uCACR,uCACA,0CACA,SACD;EAGH,MAAMF,WAAgB,MAAM,OAC1B;GACE,GAAG;GACH;GACA,GAAI,kBAAkB,UAAU,EAAC,gBAAgB,kBAAkB,SAAQ,GAAG,EAAE;GACjF,EACD,EAAE,CACH;AAED,MAAI,SACF,mBAAkB,SAAS;;AAI/B,QACE,2CAACG;EACiB;EACJ;EACZ,OAAO;EACP,WAAW,CAAC;EACH;EACT,UAAU;EACJ;EACG;EACT,GAAI;GACJ;;AAIN,OAAO,cAAc;AAErB,qBAAe"}
@@ -10,7 +10,7 @@ __thunderid_react = require_rolldown_runtime.__toESM(__thunderid_react);
10
10
  let react_jsx_runtime = require("react/jsx-runtime");
11
11
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
12
12
 
13
- //#region src/client/components/presentation/SignUp/SignUp.tsx
13
+ //#region src/client/components/auth/SignUp/SignUp.tsx
14
14
  /**
15
15
  * A styled SignUp component that provides embedded sign-up flow with pre-built styling.
16
16
  * This component handles the API calls for sign-up and delegates UI logic to BaseSignUp.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignUp.cjs","names":["SignUp: FC<SignUpProps>","useThunderID","ThunderIDRuntimeError","EmbeddedFlowType","BaseSignUp"],"sources":["../../../../../../src/client/components/auth/SignUp/SignUp.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {ThunderIDRuntimeError, EmbeddedFlowType} from '@thunderid/node';\nimport {BaseSignUp, BaseSignUpProps} from '@thunderid/react';\nimport {FC} from 'react';\nimport useThunderID from '../../../contexts/ThunderID/useThunderID';\n\n/**\n * Props for the SignUp component.\n */\nexport type SignUpProps = BaseSignUpProps;\n\n/**\n * A styled SignUp component that provides embedded sign-up flow with pre-built styling.\n * This component handles the API calls for sign-up and delegates UI logic to BaseSignUp.\n *\n * @example\n * ```tsx\n * import { SignUp } from '@thunderid/react';\n *\n * const App = () => {\n * return (\n * <SignUp\n * onSuccess={(response) => {\n * console.log('Sign-up successful:', response);\n * // Handle successful sign-up (e.g., redirect, show confirmation)\n * }}\n * onError={(error) => {\n * console.error('Sign-up failed:', error);\n * }}\n * onComplete={(redirectUrl) => {\n * // Platform-specific redirect handling (e.g., Next.js router.push)\n * router.push(redirectUrl); // or window.location.href = redirectUrl\n * }}\n * size=\"medium\"\n * variant=\"outlined\"\n * afterSignUpUrl=\"/welcome\"\n * />\n * );\n * };\n * ```\n */\nconst SignUp: FC<SignUpProps> = ({\n className,\n size = 'medium',\n variant = 'outlined',\n afterSignUpUrl,\n onError,\n children,\n}: SignUpProps) => {\n const {signUp, applicationId: contextApplicationId, scopes} = useThunderID();\n\n /**\n * Initialize the sign-up flow.\n */\n const handleInitialize = async (payload?: any): Promise<any> => {\n if (!signUp) {\n throw new ThunderIDRuntimeError(\n '`signUp` function is not available.',\n 'SignUp-handleInitialize-RuntimeError-001',\n 'nextjs',\n );\n }\n\n return (await signUp({\n flowType: EmbeddedFlowType.Registration,\n ...(contextApplicationId && {applicationId: contextApplicationId}),\n ...(scopes && {scopes}),\n ...payload,\n })) as unknown as Promise<any>;\n };\n\n /**\n * Handle sign-up steps.\n */\n const handleOnSubmit = async (payload: any): Promise<any> => {\n if (!signUp) {\n throw new ThunderIDRuntimeError(\n '`signUp` function is not available.',\n 'SignUp-handleOnSubmit-RuntimeError-001',\n 'nextjs',\n );\n }\n\n return (await signUp(payload)) as unknown as Promise<any>;\n };\n\n return (\n <BaseSignUp\n afterSignUpUrl={afterSignUpUrl}\n onInitialize={handleInitialize}\n onSubmit={handleOnSubmit}\n onError={onError}\n className={className}\n size={size}\n variant={variant}\n isInitialized={true}\n >\n {children}\n </BaseSignUp>\n );\n};\n\nexport default SignUp;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAMA,UAA2B,EAC/B,WACA,OAAO,UACP,UAAU,YACV,gBACA,SACA,eACiB;CACjB,MAAM,EAAC,QAAQ,eAAe,sBAAsB,WAAUC,8BAAc;;;;CAK5E,MAAM,mBAAmB,OAAO,YAAgC;AAC9D,MAAI,CAAC,OACH,OAAM,IAAIC,uCACR,uCACA,4CACA,SACD;AAGH,SAAQ,MAAM,OAAO;GACnB,UAAUC,kCAAiB;GAC3B,GAAI,wBAAwB,EAAC,eAAe,sBAAqB;GACjE,GAAI,UAAU,EAAC,QAAO;GACtB,GAAG;GACJ,CAAC;;;;;CAMJ,MAAM,iBAAiB,OAAO,YAA+B;AAC3D,MAAI,CAAC,OACH,OAAM,IAAID,uCACR,uCACA,0CACA,SACD;AAGH,SAAQ,MAAM,OAAO,QAAQ;;AAG/B,QACE,2CAACE;EACiB;EAChB,cAAc;EACd,UAAU;EACD;EACE;EACL;EACG;EACT,eAAe;EAEd;GACU;;AAIjB,qBAAe"}
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
 
3
3
 
4
- const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
5
- const require_useThunderID = require('../../../contexts/ThunderID/useThunderID.cjs');
4
+ const require_rolldown_runtime = require('../../../../../_virtual/rolldown_runtime.cjs');
5
+ const require_useThunderID = require('../../../../contexts/ThunderID/useThunderID.cjs');
6
6
  let __thunderid_node = require("@thunderid/node");
7
7
  __thunderid_node = require_rolldown_runtime.__toESM(__thunderid_node);
8
8
  let __thunderid_react = require("@thunderid/react");
@@ -14,7 +14,7 @@ react = require_rolldown_runtime.__toESM(react);
14
14
  let react_jsx_runtime = require("react/jsx-runtime");
15
15
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
16
16
 
17
- //#region src/client/components/actions/SignInButton/SignInButton.tsx
17
+ //#region src/client/components/auth/buttons/SignInButton/SignInButton.tsx
18
18
  /**
19
19
  * SignInButton component that uses server actions for authentication in Next.js.
20
20
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignInButton.cjs","names":["SignInButton: ForwardRefExoticComponent<SignInButtonProps & RefAttributes<HTMLButtonElement>>","useThunderID","router: AppRouterInstance","ThunderIDRuntimeError","BaseSignInButton"],"sources":["../../../../../../../src/client/components/auth/buttons/SignInButton/SignInButton.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {ThunderIDRuntimeError} from '@thunderid/node';\nimport {BaseSignInButton, BaseSignInButtonProps, useTranslation} from '@thunderid/react';\nimport {AppRouterInstance} from 'next/dist/shared/lib/app-router-context.shared-runtime';\nimport {useRouter} from 'next/navigation';\nimport {forwardRef, ForwardRefExoticComponent, ReactElement, Ref, RefAttributes, MouseEvent, useState} from 'react';\nimport useThunderID from '../../../../contexts/ThunderID/useThunderID';\n\n/**\n * Props interface of {@link SignInButton}\n */\nexport type SignInButtonProps = BaseSignInButtonProps & {\n /**\n * Additional parameters to pass to the `authorize` request.\n */\n signInOptions?: Record<string, any>;\n};\n\n/**\n * SignInButton component that uses server actions for authentication in Next.js.\n *\n * @example Using render props\n * ```tsx\n * <SignInButton>\n * {({isLoading}) => (\n * <button type=\"submit\" disabled={isLoading}>\n * {isLoading ? 'Signing in...' : 'Sign In'}\n * </button>\n * )}\n * </SignInButton>\n * ```\n *\n * @example Using traditional props\n * ```tsx\n * <SignInButton className=\"custom-button\">Sign In</SignInButton>\n * ```\n *\n * @remarks\n * In Next.js with server actions, the sign-in is handled via the server action.\n * When using render props, the custom button should use `type=\"submit\"` instead of `onClick={signIn}`.\n * The `signIn` function in render props is provided for API consistency but should not be used directly.\n */\nconst SignInButton: ForwardRefExoticComponent<SignInButtonProps & RefAttributes<HTMLButtonElement>> = forwardRef<\n HTMLButtonElement,\n SignInButtonProps\n>(\n (\n {className, style, children, preferences, onClick, signInOptions = {}, ...rest}: SignInButtonProps,\n ref: Ref<HTMLButtonElement>,\n ): ReactElement => {\n const {signIn, signInUrl} = useThunderID();\n const router: AppRouterInstance = useRouter();\n const {t} = useTranslation(preferences?.i18n);\n\n const [isLoading, setIsLoading] = useState(false);\n\n const handleSignIn = async (): Promise<void> => {\n try {\n setIsLoading(true);\n\n // If a custom `signInUrl` is provided, use it for navigation.\n if (signInUrl) {\n router.push(signInUrl);\n } else if (signIn) {\n await signIn(signInOptions);\n }\n } catch (error) {\n throw new ThunderIDRuntimeError(\n `Sign in failed: ${error instanceof Error ? error.message : String(error)}`,\n 'SignInButton-handleSignIn-RuntimeError-001',\n 'nextjs',\n 'Something went wrong while trying to sign in. Please try again later.',\n );\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleOnClick = async (e: MouseEvent<HTMLButtonElement>): Promise<void> => {\n await handleSignIn();\n if (onClick) {\n onClick(e);\n }\n };\n\n return (\n <BaseSignInButton\n className={className}\n style={style}\n ref={ref}\n preferences={preferences}\n isLoading={isLoading}\n signIn={handleSignIn}\n onClick={handleOnClick}\n {...rest}\n >\n {children ?? t('elements.buttons.signin.text')}\n </BaseSignInButton>\n );\n },\n);\n\nSignInButton.displayName = 'SignInButton';\n\nexport default SignInButton;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,MAAMA,sCAKF,EAAC,WAAW,OAAO,UAAU,aAAa,SAAS,gBAAgB,EAAE,CAAE,GAAG,QAC1E,QACiB;CACjB,MAAM,EAAC,QAAQ,cAAaC,8BAAc;CAC1C,MAAMC,yCAAuC;CAC7C,MAAM,EAAC,4CAAoB,aAAa,KAAK;CAE7C,MAAM,CAAC,WAAW,oCAAyB,MAAM;CAEjD,MAAM,eAAe,YAA2B;AAC9C,MAAI;AACF,gBAAa,KAAK;AAGlB,OAAI,UACF,QAAO,KAAK,UAAU;YACb,OACT,OAAM,OAAO,cAAc;WAEtB,OAAO;AACd,SAAM,IAAIC,uCACR,mBAAmB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,IACzE,8CACA,UACA,wEACD;YACO;AACR,gBAAa,MAAM;;;CAIvB,MAAM,gBAAgB,OAAO,MAAoD;AAC/E,QAAM,cAAc;AACpB,MAAI,QACF,SAAQ,EAAE;;AAId,QACE,2CAACC;EACY;EACJ;EACF;EACQ;EACF;EACX,QAAQ;EACR,SAAS;EACT,GAAI;YAEH,YAAY,EAAE,+BAA+B;GAC7B;EAGxB;AAED,aAAa,cAAc;AAE3B,2BAAe"}
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
 
3
3
 
4
- const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
5
- const require_logger = require('../../../../utils/logger.cjs');
6
- const require_useThunderID = require('../../../contexts/ThunderID/useThunderID.cjs');
4
+ const require_rolldown_runtime = require('../../../../../_virtual/rolldown_runtime.cjs');
5
+ const require_logger = require('../../../../../utils/logger.cjs');
6
+ const require_useThunderID = require('../../../../contexts/ThunderID/useThunderID.cjs');
7
7
  let __thunderid_react = require("@thunderid/react");
8
8
  __thunderid_react = require_rolldown_runtime.__toESM(__thunderid_react);
9
9
  let react = require("react");
@@ -11,7 +11,7 @@ react = require_rolldown_runtime.__toESM(react);
11
11
  let react_jsx_runtime = require("react/jsx-runtime");
12
12
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
13
13
 
14
- //#region src/client/components/actions/SignOutButton/SignOutButton.tsx
14
+ //#region src/client/components/auth/buttons/SignOutButton/SignOutButton.tsx
15
15
  /**
16
16
  * SignInButton component. This button initiates the sign-in process when clicked.
17
17
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignOutButton.cjs","names":["SignOutButton: ForwardRefExoticComponent<SignOutButtonProps & RefAttributes<HTMLButtonElement>>","useThunderID","BaseSignOutButton"],"sources":["../../../../../../../src/client/components/auth/buttons/SignOutButton/SignOutButton.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {BaseSignOutButton, BaseSignOutButtonProps, useTranslation} from '@thunderid/react';\nimport {forwardRef, ForwardRefExoticComponent, ReactElement, Ref, RefAttributes, useState, MouseEvent} from 'react';\nimport logger from '../../../../../utils/logger';\nimport useThunderID from '../../../../contexts/ThunderID/useThunderID';\n\n/**\n * Interface for SignInButton component props.\n */\nexport type SignOutButtonProps = BaseSignOutButtonProps;\n\n/**\n * SignInButton component. This button initiates the sign-in process when clicked.\n *\n * @example\n * ```tsx\n * import { SignInButton } from '@thunderid/auth-react';\n *\n * const App = () => {\n * const buttonRef = useRef<HTMLButtonElement>(null);\n * return (\n * <SignInButton ref={buttonRef} className=\"custom-class\" style={{ backgroundColor: 'blue' }}>\n * Sign In\n * </SignInButton>\n * );\n * }\n * ```\n */\nconst SignOutButton: ForwardRefExoticComponent<SignOutButtonProps & RefAttributes<HTMLButtonElement>> = forwardRef<\n HTMLButtonElement,\n SignOutButtonProps\n>(\n (\n {className, style, preferences, onClick, children, ...rest}: SignOutButtonProps,\n ref: Ref<HTMLButtonElement>,\n ): ReactElement => {\n const {signOut} = useThunderID();\n const {t} = useTranslation(preferences?.i18n);\n\n const [isLoading, setIsLoading] = useState(false);\n\n const handleOnClick = async (e: MouseEvent<HTMLButtonElement>): Promise<void> => {\n try {\n setIsLoading(true);\n\n logger.debug('[SignOutButton] Initiating a sign-out from a button click');\n\n await signOut();\n\n if (onClick) {\n onClick(e);\n }\n } catch (error) {\n logger.error('[SignOutButton] Error occurred initiating sign-out from a button click:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <BaseSignOutButton ref={ref} onClick={handleOnClick} isLoading={isLoading} preferences={preferences} {...rest}>\n {children ?? t('elements.buttons.signout.text')}\n </BaseSignOutButton>\n );\n },\n);\n\nexport default SignOutButton;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAMA,uCAKF,EAAC,WAAW,OAAO,aAAa,SAAS,SAAU,GAAG,QACtD,QACiB;CACjB,MAAM,EAAC,YAAWC,8BAAc;CAChC,MAAM,EAAC,4CAAoB,aAAa,KAAK;CAE7C,MAAM,CAAC,WAAW,oCAAyB,MAAM;CAEjD,MAAM,gBAAgB,OAAO,MAAoD;AAC/E,MAAI;AACF,gBAAa,KAAK;AAElB,0BAAO,MAAM,4DAA4D;AAEzE,SAAM,SAAS;AAEf,OAAI,QACF,SAAQ,EAAE;WAEL,OAAO;AACd,0BAAO,MAAM,2EAA2E,MAAM;YACtF;AACR,gBAAa,MAAM;;;AAIvB,QACE,2CAACC;EAAuB;EAAK,SAAS;EAA0B;EAAwB;EAAa,GAAI;YACtG,YAAY,EAAE,gCAAgC;GAC7B;EAGzB;AAED,4BAAe"}
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
 
3
3
 
4
- const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
5
- const require_useThunderID = require('../../../contexts/ThunderID/useThunderID.cjs');
4
+ const require_rolldown_runtime = require('../../../../../_virtual/rolldown_runtime.cjs');
5
+ const require_useThunderID = require('../../../../contexts/ThunderID/useThunderID.cjs');
6
6
  let __thunderid_node = require("@thunderid/node");
7
7
  __thunderid_node = require_rolldown_runtime.__toESM(__thunderid_node);
8
8
  let __thunderid_react = require("@thunderid/react");
@@ -14,7 +14,7 @@ react = require_rolldown_runtime.__toESM(react);
14
14
  let react_jsx_runtime = require("react/jsx-runtime");
15
15
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
16
16
 
17
- //#region src/client/components/actions/SignUpButton/SignUpButton.tsx
17
+ //#region src/client/components/auth/buttons/SignUpButton/SignUpButton.tsx
18
18
  /**
19
19
  * SignUpButton component that supports both render props and traditional props patterns.
20
20
  * It redirects the user to the ThunderID sign-up page configured for the application.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignUpButton.cjs","names":["SignUpButton: ForwardRefExoticComponent<SignUpButtonProps & RefAttributes<HTMLButtonElement>>","useThunderID","router: AppRouterInstance","ThunderIDRuntimeError","BaseSignUpButton"],"sources":["../../../../../../../src/client/components/auth/buttons/SignUpButton/SignUpButton.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {ThunderIDRuntimeError} from '@thunderid/node';\nimport {BaseSignUpButton, BaseSignUpButtonProps, useTranslation} from '@thunderid/react';\nimport {AppRouterInstance} from 'next/dist/shared/lib/app-router-context.shared-runtime';\nimport {useRouter} from 'next/navigation';\nimport {forwardRef, ForwardRefExoticComponent, MouseEvent, ReactElement, Ref, RefAttributes, useState} from 'react';\nimport useThunderID from '../../../../contexts/ThunderID/useThunderID';\n\n/**\n * Props interface of {@link SignUpButton}\n */\nexport type SignUpButtonProps = BaseSignUpButtonProps;\n\n/**\n * SignUpButton component that supports both render props and traditional props patterns.\n * It redirects the user to the ThunderID sign-up page configured for the application.\n *\n * @remarks This component is only supported in browser based React applications (CSR).\n *\n * @example Using render props pattern\n * ```tsx\n * <SignUpButton>\n * {({ signUp, isLoading }) => (\n * <button onClick={signUp} disabled={isLoading}>\n * {isLoading ? 'Creating Account...' : 'Create Account'}\n * </button>\n * )}\n * </SignUpButton>\n * ```\n *\n * @example Using traditional props pattern\n * ```tsx\n * <SignUpButton className=\"custom-button\">Create Account</SignUpButton>\n * ```\n *\n * @example Using component-level preferences\n * ```tsx\n * <SignUpButton\n * preferences={{\n * i18n: {\n * bundles: {\n * 'en-US': {\n * translations: {\n * 'buttons.signUp': 'Custom Sign Up Text'\n * }\n * }\n * }\n * }\n * }}\n * >\n * Custom Sign Up\n * </SignUpButton>\n * ```\n */\nconst SignUpButton: ForwardRefExoticComponent<SignUpButtonProps & RefAttributes<HTMLButtonElement>> = forwardRef<\n HTMLButtonElement,\n SignUpButtonProps\n>(({children, onClick, preferences, ...rest}: SignUpButtonProps, ref: Ref<HTMLButtonElement>): ReactElement => {\n const {signUp, signUpUrl} = useThunderID();\n const router: AppRouterInstance = useRouter();\n const {t} = useTranslation(preferences?.i18n);\n\n const [isLoading, setIsLoading] = useState(false);\n\n const handleSignUp = async (e?: MouseEvent<HTMLButtonElement>): Promise<void> => {\n try {\n setIsLoading(true);\n\n // If a custom `signUpUrl` is provided, use it for navigation.\n if (signUpUrl) {\n router.push(signUpUrl);\n } else if (signUp) {\n await signUp();\n }\n\n if (onClick) {\n onClick(e!);\n }\n } catch (error) {\n throw new ThunderIDRuntimeError(\n `Sign up failed: ${error instanceof Error ? error.message : String(error)}`,\n 'SignUpButton-handleSignUp-RuntimeError-001',\n 'nextjs',\n 'Something went wrong while trying to sign up. Please try again later.',\n );\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <BaseSignUpButton\n ref={ref}\n onClick={handleSignUp}\n isLoading={isLoading}\n signUp={handleSignUp}\n preferences={preferences}\n {...rest}\n >\n {children ?? t('elements.buttons.signup.text')}\n </BaseSignUpButton>\n );\n});\n\nSignUpButton.displayName = 'SignUpButton';\n\nexport default SignUpButton;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,MAAMA,sCAGH,EAAC,UAAU,SAAS,YAAa,GAAG,QAA0B,QAA8C;CAC7G,MAAM,EAAC,QAAQ,cAAaC,8BAAc;CAC1C,MAAMC,yCAAuC;CAC7C,MAAM,EAAC,4CAAoB,aAAa,KAAK;CAE7C,MAAM,CAAC,WAAW,oCAAyB,MAAM;CAEjD,MAAM,eAAe,OAAO,MAAqD;AAC/E,MAAI;AACF,gBAAa,KAAK;AAGlB,OAAI,UACF,QAAO,KAAK,UAAU;YACb,OACT,OAAM,QAAQ;AAGhB,OAAI,QACF,SAAQ,EAAG;WAEN,OAAO;AACd,SAAM,IAAIC,uCACR,mBAAmB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,IACzE,8CACA,UACA,wEACD;YACO;AACR,gBAAa,MAAM;;;AAIvB,QACE,2CAACC;EACM;EACL,SAAS;EACE;EACX,QAAQ;EACK;EACb,GAAI;YAEH,YAAY,EAAE,+BAA+B;GAC7B;EAErB;AAEF,aAAa,cAAc;AAE3B,2BAAe"}
@@ -1,12 +1,12 @@
1
1
  'use client';
2
2
 
3
3
 
4
- const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
5
- const require_useThunderID = require('../../../contexts/ThunderID/useThunderID.cjs');
4
+ const require_rolldown_runtime = require('../../../../../_virtual/rolldown_runtime.cjs');
5
+ const require_useThunderID = require('../../../../contexts/ThunderID/useThunderID.cjs');
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
7
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
8
8
 
9
- //#region src/client/components/control/SignedIn/SignedIn.tsx
9
+ //#region src/client/components/auth/guards/SignedIn/SignedIn.tsx
10
10
  /**
11
11
  * A component that only renders its children when the user is signed in.
12
12
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignedIn.cjs","names":["SignedIn: FC<PropsWithChildren<SignedInProps>>","useThunderID"],"sources":["../../../../../../../src/client/components/auth/guards/SignedIn/SignedIn.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {FC, PropsWithChildren, ReactNode} from 'react';\nimport useThunderID from '../../../../contexts/ThunderID/useThunderID';\n\n/**\n * Props interface of {@link SignedIn}\n */\nexport interface SignedInProps {\n /**\n * Content to show when the user is not signed in.\n */\n fallback?: ReactNode;\n}\n\n/**\n * A component that only renders its children when the user is signed in.\n *\n * @example\n * ```tsx\n * import { SignedIn } from '@thunderid/auth-next';\n *\n * const App = () => {\n * return (\n * <SignedIn fallback={<p>Please sign in to continue</p>}>\n * <p>Welcome! You are signed in.</p>\n * </SignedIn>\n * );\n * }\n * ```\n */\nconst SignedIn: FC<PropsWithChildren<SignedInProps>> = ({\n children,\n fallback = null,\n}: PropsWithChildren<SignedInProps>) => {\n const {isSignedIn} = useThunderID();\n\n return <>{isSignedIn ? children : fallback}</>;\n};\n\nexport default SignedIn;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAMA,YAAkD,EACtD,UACA,WAAW,WAC2B;CACtC,MAAM,EAAC,eAAcC,8BAAc;AAEnC,QAAO,mFAAG,aAAa,WAAW,WAAY;;AAGhD,uBAAe"}
@@ -1,12 +1,12 @@
1
1
  'use client';
2
2
 
3
3
 
4
- const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
5
- const require_useThunderID = require('../../../contexts/ThunderID/useThunderID.cjs');
4
+ const require_rolldown_runtime = require('../../../../../_virtual/rolldown_runtime.cjs');
5
+ const require_useThunderID = require('../../../../contexts/ThunderID/useThunderID.cjs');
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
7
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
8
8
 
9
- //#region src/client/components/control/SignedOut/SignedOut.tsx
9
+ //#region src/client/components/auth/guards/SignedOut/SignedOut.tsx
10
10
  /**
11
11
  * A component that only renders its children when the user is signed out.
12
12
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignedOut.cjs","names":["SignedOut: FC<PropsWithChildren<SignedOutProps>>","useThunderID"],"sources":["../../../../../../../src/client/components/auth/guards/SignedOut/SignedOut.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {FC, PropsWithChildren, ReactNode} from 'react';\nimport useThunderID from '../../../../contexts/ThunderID/useThunderID';\n\n/**\n * Props interface of {@link SignedOut}\n */\nexport interface SignedOutProps {\n /**\n * Content to show when the user is not signed-out.\n */\n fallback?: ReactNode;\n}\n\n/**\n * A component that only renders its children when the user is signed out.\n *\n * @example\n * ```tsx\n * import { SignedOut } from '@thunderid/auth-next';\n *\n * const App = () => {\n * return (\n * <SignedOut fallback={<p>Please sign out to continue</p>}>\n * <p>Welcome! You are signed out.</p>\n * </SignedOut>\n * );\n * }\n * ```\n */\nconst SignedOut: FC<PropsWithChildren<SignedOutProps>> = ({\n children,\n fallback = null,\n}: PropsWithChildren<SignedOutProps>) => {\n const {isSignedIn} = useThunderID();\n\n return <>{!isSignedIn ? children : fallback}</>;\n};\n\nexport default SignedOut;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAMA,aAAoD,EACxD,UACA,WAAW,WAC4B;CACvC,MAAM,EAAC,eAAcC,8BAAc;AAEnC,QAAO,mFAAG,CAAC,aAAa,WAAW,WAAY;;AAGjD,wBAAe"}
@@ -8,7 +8,7 @@ __thunderid_react = require_rolldown_runtime.__toESM(__thunderid_react);
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
10
10
 
11
- //#region src/client/components/presentation/AuthFlowSelect/AuthFlowSelect.tsx
11
+ //#region src/client/components/primitives/AuthFlowSelect/AuthFlowSelect.tsx
12
12
  /**
13
13
  * Authentication-flow picker for signed-in screens. Flows load through a server action that uses the
14
14
  * signed-in user's server-held session, so the access token never reaches the browser. It takes no
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthFlowSelect.cjs","names":["AuthFlowSelect: FC<AuthFlowSelectProps>","BaseAuthFlowSelect","fetchAuthFlowsFromServer"],"sources":["../../../../../../src/client/components/primitives/AuthFlowSelect/AuthFlowSelect.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {BaseAuthFlowSelect, BaseAuthFlowSelectProps} from '@thunderid/react';\nimport {FC} from 'react';\nimport fetchAuthFlowsFromServer from '../../../fetchAuthFlowsFromServer';\n\nexport type AuthFlowSelectProps = Omit<BaseAuthFlowSelectProps, 'fetchAuthFlows'>;\n\n/**\n * Authentication-flow picker for signed-in screens. Flows load through a server action that uses the\n * signed-in user's server-held session, so the access token never reaches the browser. It takes no\n * data source; for a custom one use `Select` with `useInfiniteOptions`.\n */\nconst AuthFlowSelect: FC<AuthFlowSelectProps> = (props: AuthFlowSelectProps) => (\n <BaseAuthFlowSelect {...props} fetchAuthFlows={fetchAuthFlowsFromServer} />\n);\n\nexport default AuthFlowSelect;\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAMA,kBAA2C,UAC/C,2CAACC;CAAmB,GAAI;CAAO,gBAAgBC;EAA4B;AAG7E,6BAAe"}
@@ -8,7 +8,7 @@ __thunderid_react = require_rolldown_runtime.__toESM(__thunderid_react);
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
10
10
 
11
- //#region src/client/components/presentation/UserSelect/UserSelect.tsx
11
+ //#region src/client/components/primitives/UserSelect/UserSelect.tsx
12
12
  /**
13
13
  * Single-user picker for signed-in screens. Users load through a server action that uses the
14
14
  * signed-in user's server-held session, so the access token never reaches the browser. It takes no
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserSelect.cjs","names":["UserSelect: FC<UserSelectProps>","BaseUserSelect","fetchUsersFromServer"],"sources":["../../../../../../src/client/components/primitives/UserSelect/UserSelect.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {BaseUserSelect, BaseUserSelectProps} from '@thunderid/react';\nimport {FC} from 'react';\nimport fetchUsersFromServer from '../../../fetchUsersFromServer';\n\nexport type UserSelectProps = Omit<BaseUserSelectProps, 'fetchUsers'>;\n\n/**\n * Single-user picker for signed-in screens. Users load through a server action that uses the\n * signed-in user's server-held session, so the access token never reaches the browser. It takes no\n * data source; for a custom one use `Select` with `useInfiniteOptions`.\n */\nconst UserSelect: FC<UserSelectProps> = (props: UserSelectProps) => (\n <BaseUserSelect {...props} fetchUsers={fetchUsersFromServer} />\n);\n\nexport default UserSelect;\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAMA,cAAmC,UACvC,2CAACC;CAAe,GAAI;CAAO,YAAYC;EAAwB;AAGjE,yBAAe"}
@@ -8,7 +8,7 @@ __thunderid_react = require_rolldown_runtime.__toESM(__thunderid_react);
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
10
10
 
11
- //#region src/client/components/presentation/UserTypeSelect/UserTypeSelect.tsx
11
+ //#region src/client/components/primitives/UserTypeSelect/UserTypeSelect.tsx
12
12
  /**
13
13
  * User-type picker for signed-in screens. User types load through a server action that uses the
14
14
  * signed-in user's server-held session, so the access token never reaches the browser. It takes no
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserTypeSelect.cjs","names":["UserTypeSelect: FC<UserTypeSelectProps>","BaseUserTypeSelect","fetchUserTypesFromServer"],"sources":["../../../../../../src/client/components/primitives/UserTypeSelect/UserTypeSelect.tsx"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {BaseUserTypeSelect, BaseUserTypeSelectProps} from '@thunderid/react';\nimport {FC} from 'react';\nimport fetchUserTypesFromServer from '../../../fetchUserTypesFromServer';\n\nexport type UserTypeSelectProps = Omit<BaseUserTypeSelectProps, 'fetchUserTypes'>;\n\n/**\n * User-type picker for signed-in screens. User types load through a server action that uses the\n * signed-in user's server-held session, so the access token never reaches the browser. It takes no\n * data source; for a custom one use `Select` with `useInfiniteOptions`.\n */\nconst UserTypeSelect: FC<UserTypeSelectProps> = (props: UserTypeSelectProps) => (\n <BaseUserTypeSelect {...props} fetchUserTypes={fetchUserTypesFromServer} />\n);\n\nexport default UserTypeSelect;\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAMA,kBAA2C,UAC/C,2CAACC;CAAmB,GAAI;CAAO,gBAAgBC;EAA4B;AAG7E,6BAAe"}
@@ -5,6 +5,7 @@ const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs
5
5
  const require_logger = require('../../../utils/logger.cjs');
6
6
  const require_ThunderIDContext = require('./ThunderIDContext.cjs');
7
7
  const require_fetchFlowMetaFromServer = require('../../fetchFlowMetaFromServer.cjs');
8
+ const require_fetchManagementFromServer = require('../../fetchManagementFromServer.cjs');
8
9
  let __thunderid_node = require("@thunderid/node");
9
10
  __thunderid_node = require_rolldown_runtime.__toESM(__thunderid_node);
10
11
  let __thunderid_react = require("@thunderid/react");
@@ -17,7 +18,7 @@ let react_jsx_runtime = require("react/jsx-runtime");
17
18
  react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
18
19
 
19
20
  //#region src/client/contexts/ThunderID/ThunderIDProvider.tsx
20
- const ThunderIDClientProvider = ({ baseUrl, children, signIn, clearSession, refreshToken, signOut, signUp, handleOAuthCallback, preferences, isSignedIn, signInUrl, signUpUrl, user: _user, userProfile: _userProfile, userSchema: _userSchema = null, updateProfile, applicationId, organizationHandle, scopes, vendor, initialMeta = null }) => {
21
+ const ThunderIDClientProvider = ({ baseUrl, children, endpoints, signIn, clearSession, refreshToken, signOut, signUp, handleOAuthCallback, preferences, isSignedIn, signInUrl, signUpUrl, user: _user, userProfile: _userProfile, userSchema: _userSchema = null, updateProfile, applicationId, organizationHandle, scopes, vendor, initialMeta = null }) => {
21
22
  const reRenderCheckRef = (0, react.useRef)(false);
22
23
  const router = (0, next_navigation.useRouter)();
23
24
  const searchParams = (0, next_navigation.useSearchParams)();
@@ -154,12 +155,14 @@ const ThunderIDClientProvider = ({ baseUrl, children, signIn, clearSession, refr
154
155
  clearSession,
155
156
  clientId: void 0,
156
157
  discovery: { wellKnown: null },
158
+ endpoints,
157
159
  exchangeToken: unsupported("exchangeToken"),
158
160
  getAccessToken: unsupported("getAccessToken"),
159
161
  getDecodedIdToken: unsupported("getDecodedIdToken"),
160
162
  getIdToken: unsupported("getIdToken"),
161
163
  getStorageManager: () => Promise.resolve(null),
162
164
  http: {
165
+ fetcher: require_fetchManagementFromServer.default,
163
166
  request: unsupported("http.request"),
164
167
  requestAll: unsupported("http.requestAll")
165
168
  },
@@ -187,6 +190,7 @@ const ThunderIDClientProvider = ({ baseUrl, children, signIn, clearSession, refr
187
190
  applicationId,
188
191
  baseUrl,
189
192
  clearSession,
193
+ endpoints,
190
194
  isLoading,
191
195
  isSignedIn,
192
196
  organizationHandle,
@@ -1 +1 @@
1
- {"version":3,"file":"ThunderIDProvider.cjs","names":["ThunderIDClientProvider: FC<PropsWithChildren<ThunderIDClientProviderProps>>","reRenderCheckRef: RefObject<boolean>","router: AppRouterInstance","searchParams: ReadonlyURLSearchParams","code: string | null","state: string | null","result: {error?: string; redirectUrl?: string; success: boolean}","ThunderIDRuntimeError","result: any","contextValue: ThunderIDContextProps","reactContextValue: ReactThunderIDContextProps","ThunderIDContext","ReactThunderIDContext","I18nProvider","FlowMetaProvider","fetchFlowMetaFromServer","ThemeProvider","FlowProvider","UserProvider"],"sources":["../../../../../src/client/contexts/ThunderID/ThunderIDProvider.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {\n AttributeSchema,\n EmbeddedFlowExecuteRequestConfig,\n FlowMetadataResponse,\n generateFlattenedUserProfile,\n UpdateMeProfileConfig,\n User,\n UserProfile,\n ThunderIDRuntimeError,\n getVendorPrefix,\n} from '@thunderid/node';\nimport {\n I18nProvider,\n FlowMetaProvider,\n FlowProvider,\n UserProvider,\n ThemeProvider,\n ThunderIDContext as ReactThunderIDContext,\n ThunderIDContextProps as ReactThunderIDContextProps,\n ThunderIDProviderProps,\n} from '@thunderid/react';\nimport {ReadonlyURLSearchParams} from 'next/dist/client/components/navigation.react-server';\nimport {AppRouterInstance} from 'next/dist/shared/lib/app-router-context.shared-runtime';\nimport {useRouter, useSearchParams} from 'next/navigation';\nimport {FC, PropsWithChildren, RefObject, useEffect, useMemo, useRef, useState} from 'react';\nimport ThunderIDContext, {ThunderIDContextProps} from './ThunderIDContext';\nimport {RefreshResult} from '../../../server/actions/refreshToken';\nimport logger from '../../../utils/logger';\nimport fetchFlowMetaFromServer from '../../fetchFlowMetaFromServer';\n\n/**\n * Props interface of {@link ThunderIDClientProvider}\n */\nexport type ThunderIDClientProviderProps = Partial<Omit<ThunderIDProviderProps, 'baseUrl' | 'clientId'>> &\n Pick<ThunderIDProviderProps, 'baseUrl' | 'clientId'> & {\n applicationId: ThunderIDContextProps['applicationId'];\n clearSession: () => Promise<void>;\n handleOAuthCallback: (\n code: string,\n state: string,\n ) => Promise<{error?: string; redirectUrl?: string; success: boolean}>;\n /**\n * Flow metadata fetched server-side ahead of time, seeding `FlowMetaProvider` so it can skip\n * its own initial client-side fetch (avoiding a flash of untranslated i18n keys).\n */\n initialMeta?: FlowMetadataResponse | null;\n isSignedIn: boolean;\n organizationHandle: ThunderIDContextProps['organizationHandle'];\n refreshToken: () => Promise<RefreshResult>;\n signIn: ThunderIDContextProps['signIn'];\n signOut: ThunderIDContextProps['signOut'];\n signUp: ThunderIDContextProps['signUp'];\n updateProfile: (\n requestConfig: UpdateMeProfileConfig,\n sessionId?: string,\n ) => Promise<{data: {user: User}; error: string; success: boolean}>;\n user: User | null;\n userProfile: UserProfile;\n userSchema?: Record<string, AttributeSchema> | null;\n };\n\nconst ThunderIDClientProvider: FC<PropsWithChildren<ThunderIDClientProviderProps>> = ({\n baseUrl,\n children,\n signIn,\n clearSession,\n refreshToken,\n signOut,\n signUp,\n handleOAuthCallback,\n preferences,\n isSignedIn,\n signInUrl,\n signUpUrl,\n user: _user,\n userProfile: _userProfile,\n userSchema: _userSchema = null,\n updateProfile,\n applicationId,\n organizationHandle,\n scopes,\n vendor,\n initialMeta = null,\n}: PropsWithChildren<ThunderIDClientProviderProps>) => {\n const reRenderCheckRef: RefObject<boolean> = useRef(false);\n const router: AppRouterInstance = useRouter();\n const searchParams: ReadonlyURLSearchParams = useSearchParams();\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [user, setUser] = useState<User | null>(_user);\n const [userProfile, setUserProfile] = useState<UserProfile>(_userProfile);\n const [userSchema, setUserSchema] = useState<Record<string, AttributeSchema> | null>(_userSchema);\n\n useEffect(() => {\n setUserProfile(_userProfile);\n }, [_userProfile]);\n\n useEffect(() => {\n setUserSchema(_userSchema);\n }, [_userSchema]);\n\n useEffect(() => {\n setUser(_user);\n }, [_user]);\n\n // Handle OAuth callback automatically\n useEffect(() => {\n // React 18.x Strict.Mode has a new check for `Ensuring reusable state` to facilitate an upcoming react feature.\n // https://reactjs.org/docs/strict-mode.html#ensuring-reusable-state\n // This will remount all the useEffects to ensure that there are no unexpected side effects.\n // When react remounts the signIn hook of the AuthProvider, it will cause a race condition. Hence, we have to\n // prevent the re-render of this hook as suggested in the following discussion.\n // https://github.com/reactwg/react-18/discussions/18#discussioncomment-795623\n if (reRenderCheckRef.current) {\n return;\n }\n\n reRenderCheckRef.current = true;\n\n // Don't handle callback if already signed in\n if (isSignedIn) return;\n\n (async (): Promise<void> => {\n try {\n const code: string | null = searchParams.get('code');\n const state: string | null = searchParams.get('state');\n const error: string | null = searchParams.get('error');\n\n // Check for OAuth errors first\n if (error) {\n logger.error('[ThunderIDClientProvider] An error was received for the initiated sign-in request.');\n\n return;\n }\n\n // Handle OAuth callback if code and state are present\n if (code && state) {\n setIsLoading(true);\n\n const result: {error?: string; redirectUrl?: string; success: boolean} = await handleOAuthCallback(\n code,\n state,\n );\n\n if (result.success) {\n // Redirect to the success URL\n if (result.redirectUrl) {\n router.push(result.redirectUrl);\n } else {\n // Refresh the page to update authentication state\n window.location.reload();\n }\n } else {\n logger.error(\n `[ThunderIDClientProvider] An error occurred while signing in: ${result.error || 'Authentication failed'}`,\n );\n }\n }\n } catch (error) {\n logger.error('[ThunderIDClientProvider] Failed to handle OAuth callback:', error);\n }\n })();\n }, []);\n\n useEffect(() => {\n // Set loading to false when server has resolved authentication state\n setIsLoading(false);\n }, [isSignedIn, user]);\n\n const handleSignIn = async (payload: any, request: EmbeddedFlowExecuteRequestConfig): Promise<any> => {\n if (!signIn) {\n throw new ThunderIDRuntimeError(\n '`signIn` function is not available.',\n 'ThunderIDClientProvider-handleSignIn-RuntimeError-001',\n 'nextjs',\n );\n }\n\n const result: any = await signIn(payload, request);\n\n // Redirect based flow URL is sent as `signInUrl` in the response.\n // Use window.location.href instead of router.push() — the OAuth authorization\n // endpoint is on an external server, and router.push() would send RSC fetch\n // headers that the identity provider doesn't understand, causing a CORS error.\n if (result?.data?.signInUrl) {\n window.location.href = result.data.signInUrl;\n\n return undefined;\n }\n\n // After the Embedded flow is successful, the URL to navigate next is sent as `afterSignInUrl` in the response.\n if (result?.data?.afterSignInUrl) {\n router.push(result.data.afterSignInUrl);\n\n return undefined;\n }\n\n if (result?.error) {\n throw new Error(result.error);\n }\n\n return result?.data ?? result;\n };\n\n const handleSignUp = async (payload: any, request: EmbeddedFlowExecuteRequestConfig): Promise<any> => {\n if (!signUp) {\n throw new ThunderIDRuntimeError(\n '`signUp` function is not available.',\n 'ThunderIDClientProvider-handleSignUp-RuntimeError-001',\n 'nextjs',\n );\n }\n\n const result: any = await signUp(payload, request);\n\n // Redirect based flow URL is sent as `signUpUrl` in the response.\n if (result?.data?.signUpUrl) {\n router.push(result.data.signUpUrl);\n\n return undefined;\n }\n\n // After the Embedded flow is successful, the URL to navigate next is sent as `afterSignUpUrl` in the response.\n if (result?.data?.afterSignUpUrl) {\n router.push(result.data.afterSignUpUrl);\n\n return undefined;\n }\n\n if (result?.error) {\n throw new Error(result.error);\n }\n\n return result?.data ?? result;\n };\n\n const handleSignOut = async (): Promise<any> => {\n logger.debug('[ThunderIDClientProvider][handleSignOut] `handleSignOut` called.');\n\n try {\n const result: any = await signOut();\n\n logger.debug('[ThunderIDClientProvider][handleSignOut] Sign out result:', result);\n\n if (result?.data?.afterSignOutUrl) {\n router.push(result.data.afterSignOutUrl);\n\n return {location: result.data.afterSignOutUrl, redirected: true};\n }\n\n if (result?.error) {\n logger.error(\n '[ThunderIDClientProvider][handleSignOut] Error result was returned during signing the user out with a button click:',\n result.error,\n );\n }\n\n return result?.data ?? result;\n } catch (error) {\n logger.error(\n '[ThunderIDClientProvider][handleSignOut] Error occurred during signing the user out with a button click:',\n error,\n );\n\n return undefined;\n }\n };\n\n const contextValue: ThunderIDContextProps = useMemo(\n () => ({\n applicationId,\n baseUrl,\n clearSession,\n isLoading,\n isSignedIn,\n organizationHandle,\n preferences,\n refreshToken,\n scopes,\n signIn: handleSignIn,\n signInUrl,\n signOut: handleSignOut,\n signUp: handleSignUp,\n signUpUrl,\n user,\n }),\n [\n baseUrl,\n user,\n isSignedIn,\n isLoading,\n signInUrl,\n signUpUrl,\n applicationId,\n organizationHandle,\n scopes,\n preferences,\n ],\n );\n\n const handleProfileUpdate = (payload: User): void => {\n setUser(payload);\n setUserProfile((prev: UserProfile) => ({\n ...prev,\n flattenedProfile: generateFlattenedUserProfile(payload),\n profile: payload,\n }));\n };\n\n // Bridge into @thunderid/react's own ThunderIDContext. Internal react components rendered by\n // BaseSignIn/BaseSignUp — most notably FlowMetaProvider, which fetches `/flow/meta` and injects\n // its i18n bundle — call react's `useThunderID()` directly. Without this bridge they'd only see\n // react's context default (applicationId/baseUrl undefined, isInitialized false), so the meta\n // fetch would never fire and flow labels would render as untranslated i18n keys. Fields with no\n // nextjs equivalent (token/http helpers meant for direct browser API calls) are stubbed out,\n // since nextjs routes those operations through server actions instead.\n const unsupported = (name: string): (() => Promise<never>) => {\n return () =>\n Promise.reject(\n new ThunderIDRuntimeError(\n `\\`${name}\\` is not supported in @thunderid/nextjs.`,\n `ThunderIDClientProvider-${name}-NotSupportedError-001`,\n 'nextjs',\n ),\n );\n };\n\n const reactContextValue: ReactThunderIDContextProps = useMemo(\n () => ({\n afterSignInUrl: undefined,\n applicationId,\n baseUrl,\n clearSession,\n clientId: undefined,\n discovery: {wellKnown: null},\n exchangeToken: unsupported('exchangeToken'),\n getAccessToken: unsupported('getAccessToken'),\n getDecodedIdToken: unsupported('getDecodedIdToken'),\n getIdToken: unsupported('getIdToken'),\n getStorageManager: () => Promise.resolve(null),\n http: {\n request: unsupported('http.request'),\n requestAll: unsupported('http.requestAll'),\n },\n instanceId: 0,\n isInitialized: !isLoading,\n isLoading,\n isMetaLoading: false,\n isSignedIn,\n meta: initialMeta ?? null,\n organizationHandle,\n reInitialize: unsupported('reInitialize'),\n recover: unsupported('recover'),\n resolveFlowTemplateLiterals: (text: string | undefined): string => text ?? '',\n scopes,\n signIn: handleSignIn,\n signInSilently: unsupported('signInSilently'),\n signInUrl,\n signOut: handleSignOut,\n signUp: handleSignUp,\n signUpUrl,\n user,\n userSchema,\n vendor: getVendorPrefix(vendor),\n }),\n [\n applicationId,\n baseUrl,\n clearSession,\n isLoading,\n isSignedIn,\n organizationHandle,\n scopes,\n signInUrl,\n signUpUrl,\n user,\n userSchema,\n initialMeta,\n vendor,\n ],\n );\n\n return (\n <ThunderIDContext.Provider value={contextValue}>\n <ReactThunderIDContext.Provider value={reactContextValue}>\n <I18nProvider preferences={preferences?.i18n}>\n <FlowMetaProvider\n enabled={preferences?.resolveFromMeta !== false}\n initialMeta={initialMeta}\n fetchMeta={fetchFlowMetaFromServer}\n >\n <ThemeProvider theme={preferences?.theme?.overrides} mode={preferences?.theme?.mode}>\n <FlowProvider>\n <UserProvider\n profile={userProfile}\n userSchema={userSchema}\n onUpdateProfile={handleProfileUpdate}\n updateProfile={updateProfile}\n >\n {children}\n </UserProvider>\n </FlowProvider>\n </ThemeProvider>\n </FlowMetaProvider>\n </I18nProvider>\n </ReactThunderIDContext.Provider>\n </ThunderIDContext.Provider>\n );\n};\n\nexport default ThunderIDClientProvider;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ThunderIDProvider.cjs","names":["ThunderIDClientProvider: FC<PropsWithChildren<ThunderIDClientProviderProps>>","reRenderCheckRef: RefObject<boolean>","router: AppRouterInstance","searchParams: ReadonlyURLSearchParams","code: string | null","state: string | null","result: {error?: string; redirectUrl?: string; success: boolean}","ThunderIDRuntimeError","result: any","contextValue: ThunderIDContextProps","reactContextValue: ReactThunderIDContextProps","fetchManagementFromServer","ThunderIDContext","ReactThunderIDContext","I18nProvider","FlowMetaProvider","fetchFlowMetaFromServer","ThemeProvider","FlowProvider","UserProvider"],"sources":["../../../../../src/client/contexts/ThunderID/ThunderIDProvider.tsx"],"sourcesContent":["// Copyright 2025 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {\n AttributeSchema,\n EmbeddedFlowExecuteRequestConfig,\n FlowMetadataResponse,\n generateFlattenedUserProfile,\n UpdateMeProfileConfig,\n User,\n UserProfile,\n ThunderIDRuntimeError,\n getVendorPrefix,\n} from '@thunderid/node';\nimport {\n I18nProvider,\n FlowMetaProvider,\n FlowProvider,\n UserProvider,\n ThemeProvider,\n ThunderIDContext as ReactThunderIDContext,\n ThunderIDContextProps as ReactThunderIDContextProps,\n ThunderIDProviderProps,\n} from '@thunderid/react';\nimport {ReadonlyURLSearchParams} from 'next/dist/client/components/navigation.react-server';\nimport {AppRouterInstance} from 'next/dist/shared/lib/app-router-context.shared-runtime';\nimport {useRouter, useSearchParams} from 'next/navigation';\nimport {FC, PropsWithChildren, RefObject, useEffect, useMemo, useRef, useState} from 'react';\nimport ThunderIDContext, {ThunderIDContextProps} from './ThunderIDContext';\nimport {RefreshResult} from '../../../server/actions/refreshToken';\nimport logger from '../../../utils/logger';\nimport fetchFlowMetaFromServer from '../../fetchFlowMetaFromServer';\nimport fetchManagementFromServer from '../../fetchManagementFromServer';\n\n/**\n * Props interface of {@link ThunderIDClientProvider}\n */\nexport type ThunderIDClientProviderProps = Partial<Omit<ThunderIDProviderProps, 'baseUrl' | 'clientId'>> &\n Pick<ThunderIDProviderProps, 'baseUrl' | 'clientId'> & {\n applicationId: ThunderIDContextProps['applicationId'];\n clearSession: () => Promise<void>;\n handleOAuthCallback: (\n code: string,\n state: string,\n ) => Promise<{error?: string; redirectUrl?: string; success: boolean}>;\n /**\n * Flow metadata fetched server-side ahead of time, seeding `FlowMetaProvider` so it can skip\n * its own initial client-side fetch (avoiding a flash of untranslated i18n keys).\n */\n initialMeta?: FlowMetadataResponse | null;\n isSignedIn: boolean;\n organizationHandle: ThunderIDContextProps['organizationHandle'];\n refreshToken: () => Promise<RefreshResult>;\n signIn: ThunderIDContextProps['signIn'];\n signOut: ThunderIDContextProps['signOut'];\n signUp: ThunderIDContextProps['signUp'];\n updateProfile: (\n requestConfig: UpdateMeProfileConfig,\n sessionId?: string,\n ) => Promise<{data: {user: User}; error: string; success: boolean}>;\n user: User | null;\n userProfile: UserProfile;\n userSchema?: Record<string, AttributeSchema> | null;\n };\n\nconst ThunderIDClientProvider: FC<PropsWithChildren<ThunderIDClientProviderProps>> = ({\n baseUrl,\n children,\n endpoints,\n signIn,\n clearSession,\n refreshToken,\n signOut,\n signUp,\n handleOAuthCallback,\n preferences,\n isSignedIn,\n signInUrl,\n signUpUrl,\n user: _user,\n userProfile: _userProfile,\n userSchema: _userSchema = null,\n updateProfile,\n applicationId,\n organizationHandle,\n scopes,\n vendor,\n initialMeta = null,\n}: PropsWithChildren<ThunderIDClientProviderProps>) => {\n const reRenderCheckRef: RefObject<boolean> = useRef(false);\n const router: AppRouterInstance = useRouter();\n const searchParams: ReadonlyURLSearchParams = useSearchParams();\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [user, setUser] = useState<User | null>(_user);\n const [userProfile, setUserProfile] = useState<UserProfile>(_userProfile);\n const [userSchema, setUserSchema] = useState<Record<string, AttributeSchema> | null>(_userSchema);\n\n useEffect(() => {\n setUserProfile(_userProfile);\n }, [_userProfile]);\n\n useEffect(() => {\n setUserSchema(_userSchema);\n }, [_userSchema]);\n\n useEffect(() => {\n setUser(_user);\n }, [_user]);\n\n // Handle OAuth callback automatically\n useEffect(() => {\n // React 18.x Strict.Mode has a new check for `Ensuring reusable state` to facilitate an upcoming react feature.\n // https://reactjs.org/docs/strict-mode.html#ensuring-reusable-state\n // This will remount all the useEffects to ensure that there are no unexpected side effects.\n // When react remounts the signIn hook of the AuthProvider, it will cause a race condition. Hence, we have to\n // prevent the re-render of this hook as suggested in the following discussion.\n // https://github.com/reactwg/react-18/discussions/18#discussioncomment-795623\n if (reRenderCheckRef.current) {\n return;\n }\n\n reRenderCheckRef.current = true;\n\n // Don't handle callback if already signed in\n if (isSignedIn) return;\n\n (async (): Promise<void> => {\n try {\n const code: string | null = searchParams.get('code');\n const state: string | null = searchParams.get('state');\n const error: string | null = searchParams.get('error');\n\n // Check for OAuth errors first\n if (error) {\n logger.error('[ThunderIDClientProvider] An error was received for the initiated sign-in request.');\n\n return;\n }\n\n // Handle OAuth callback if code and state are present\n if (code && state) {\n setIsLoading(true);\n\n const result: {error?: string; redirectUrl?: string; success: boolean} = await handleOAuthCallback(\n code,\n state,\n );\n\n if (result.success) {\n // Redirect to the success URL\n if (result.redirectUrl) {\n router.push(result.redirectUrl);\n } else {\n // Refresh the page to update authentication state\n window.location.reload();\n }\n } else {\n logger.error(\n `[ThunderIDClientProvider] An error occurred while signing in: ${result.error || 'Authentication failed'}`,\n );\n }\n }\n } catch (error) {\n logger.error('[ThunderIDClientProvider] Failed to handle OAuth callback:', error);\n }\n })();\n }, []);\n\n useEffect(() => {\n // Set loading to false when server has resolved authentication state\n setIsLoading(false);\n }, [isSignedIn, user]);\n\n const handleSignIn = async (payload: any, request: EmbeddedFlowExecuteRequestConfig): Promise<any> => {\n if (!signIn) {\n throw new ThunderIDRuntimeError(\n '`signIn` function is not available.',\n 'ThunderIDClientProvider-handleSignIn-RuntimeError-001',\n 'nextjs',\n );\n }\n\n const result: any = await signIn(payload, request);\n\n // Redirect based flow URL is sent as `signInUrl` in the response.\n // Use window.location.href instead of router.push() — the OAuth authorization\n // endpoint is on an external server, and router.push() would send RSC fetch\n // headers that the identity provider doesn't understand, causing a CORS error.\n if (result?.data?.signInUrl) {\n window.location.href = result.data.signInUrl;\n\n return undefined;\n }\n\n // After the Embedded flow is successful, the URL to navigate next is sent as `afterSignInUrl` in the response.\n if (result?.data?.afterSignInUrl) {\n router.push(result.data.afterSignInUrl);\n\n return undefined;\n }\n\n if (result?.error) {\n throw new Error(result.error);\n }\n\n return result?.data ?? result;\n };\n\n const handleSignUp = async (payload: any, request: EmbeddedFlowExecuteRequestConfig): Promise<any> => {\n if (!signUp) {\n throw new ThunderIDRuntimeError(\n '`signUp` function is not available.',\n 'ThunderIDClientProvider-handleSignUp-RuntimeError-001',\n 'nextjs',\n );\n }\n\n const result: any = await signUp(payload, request);\n\n // Redirect based flow URL is sent as `signUpUrl` in the response.\n if (result?.data?.signUpUrl) {\n router.push(result.data.signUpUrl);\n\n return undefined;\n }\n\n // After the Embedded flow is successful, the URL to navigate next is sent as `afterSignUpUrl` in the response.\n if (result?.data?.afterSignUpUrl) {\n router.push(result.data.afterSignUpUrl);\n\n return undefined;\n }\n\n if (result?.error) {\n throw new Error(result.error);\n }\n\n return result?.data ?? result;\n };\n\n const handleSignOut = async (): Promise<any> => {\n logger.debug('[ThunderIDClientProvider][handleSignOut] `handleSignOut` called.');\n\n try {\n const result: any = await signOut();\n\n logger.debug('[ThunderIDClientProvider][handleSignOut] Sign out result:', result);\n\n if (result?.data?.afterSignOutUrl) {\n router.push(result.data.afterSignOutUrl);\n\n return {location: result.data.afterSignOutUrl, redirected: true};\n }\n\n if (result?.error) {\n logger.error(\n '[ThunderIDClientProvider][handleSignOut] Error result was returned during signing the user out with a button click:',\n result.error,\n );\n }\n\n return result?.data ?? result;\n } catch (error) {\n logger.error(\n '[ThunderIDClientProvider][handleSignOut] Error occurred during signing the user out with a button click:',\n error,\n );\n\n return undefined;\n }\n };\n\n const contextValue: ThunderIDContextProps = useMemo(\n () => ({\n applicationId,\n baseUrl,\n clearSession,\n isLoading,\n isSignedIn,\n organizationHandle,\n preferences,\n refreshToken,\n scopes,\n signIn: handleSignIn,\n signInUrl,\n signOut: handleSignOut,\n signUp: handleSignUp,\n signUpUrl,\n user,\n }),\n [\n baseUrl,\n user,\n isSignedIn,\n isLoading,\n signInUrl,\n signUpUrl,\n applicationId,\n organizationHandle,\n scopes,\n preferences,\n ],\n );\n\n const handleProfileUpdate = (payload: User): void => {\n setUser(payload);\n setUserProfile((prev: UserProfile) => ({\n ...prev,\n flattenedProfile: generateFlattenedUserProfile(payload),\n profile: payload,\n }));\n };\n\n // Bridge into @thunderid/react's own ThunderIDContext. Internal react components rendered by\n // BaseSignIn/BaseSignUp — most notably FlowMetaProvider, which fetches `/flow/meta` and injects\n // its i18n bundle — call react's `useThunderID()` directly. Without this bridge they'd only see\n // react's context default (applicationId/baseUrl undefined, isInitialized false), so the meta\n // fetch would never fire and flow labels would render as untranslated i18n keys. Fields with no\n // nextjs equivalent (token/http helpers meant for direct browser API calls) are stubbed out,\n // since nextjs routes those operations through server actions instead.\n const unsupported = (name: string): (() => Promise<never>) => {\n return () =>\n Promise.reject(\n new ThunderIDRuntimeError(\n `\\`${name}\\` is not supported in @thunderid/nextjs.`,\n `ThunderIDClientProvider-${name}-NotSupportedError-001`,\n 'nextjs',\n ),\n );\n };\n\n const reactContextValue: ReactThunderIDContextProps = useMemo(\n () => ({\n afterSignInUrl: undefined,\n applicationId,\n baseUrl,\n clearSession,\n clientId: undefined,\n discovery: {wellKnown: null},\n // Only the management collection overrides arrive here, so the admin hooks build the URLs the\n // management server action accepts.\n endpoints,\n exchangeToken: unsupported('exchangeToken'),\n getAccessToken: unsupported('getAccessToken'),\n getDecodedIdToken: unsupported('getDecodedIdToken'),\n getIdToken: unsupported('getIdToken'),\n getStorageManager: () => Promise.resolve(null),\n http: {\n // The admin components and hooks send management requests through a server action that adds\n // the server-held access token, so the token never reaches the browser.\n fetcher: fetchManagementFromServer,\n request: unsupported('http.request'),\n requestAll: unsupported('http.requestAll'),\n },\n instanceId: 0,\n isInitialized: !isLoading,\n isLoading,\n isMetaLoading: false,\n isSignedIn,\n meta: initialMeta ?? null,\n organizationHandle,\n reInitialize: unsupported('reInitialize'),\n recover: unsupported('recover'),\n resolveFlowTemplateLiterals: (text: string | undefined): string => text ?? '',\n scopes,\n signIn: handleSignIn,\n signInSilently: unsupported('signInSilently'),\n signInUrl,\n signOut: handleSignOut,\n signUp: handleSignUp,\n signUpUrl,\n user,\n userSchema,\n vendor: getVendorPrefix(vendor),\n }),\n [\n applicationId,\n baseUrl,\n clearSession,\n endpoints,\n isLoading,\n isSignedIn,\n organizationHandle,\n scopes,\n signInUrl,\n signUpUrl,\n user,\n userSchema,\n initialMeta,\n vendor,\n ],\n );\n\n return (\n <ThunderIDContext.Provider value={contextValue}>\n <ReactThunderIDContext.Provider value={reactContextValue}>\n <I18nProvider preferences={preferences?.i18n}>\n <FlowMetaProvider\n enabled={preferences?.resolveFromMeta !== false}\n initialMeta={initialMeta}\n fetchMeta={fetchFlowMetaFromServer}\n >\n <ThemeProvider theme={preferences?.theme?.overrides} mode={preferences?.theme?.mode}>\n <FlowProvider>\n <UserProvider\n profile={userProfile}\n userSchema={userSchema}\n onUpdateProfile={handleProfileUpdate}\n updateProfile={updateProfile}\n >\n {children}\n </UserProvider>\n </FlowProvider>\n </ThemeProvider>\n </FlowMetaProvider>\n </I18nProvider>\n </ReactThunderIDContext.Provider>\n </ThunderIDContext.Provider>\n );\n};\n\nexport default ThunderIDClientProvider;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  const require_loadPageFromAction = require('./loadPageFromAction.cjs');
2
- const require_getAuthFlowsAction = require('../server/actions/getAuthFlowsAction.cjs');
2
+ const require_getAuthFlowsAction = require('../server/actions/auth/getAuthFlowsAction.cjs');
3
3
 
4
4
  //#region src/client/fetchAuthFlowsFromServer.ts
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fetchAuthFlowsFromServer.cjs","names":["fetchAuthFlowsFromServer: FetchAuthFlows","loadPageFromAction","getAuthFlowsAction"],"sources":["../../../src/client/fetchAuthFlowsFromServer.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {FetchAuthFlows, SelectPage, SelectPageRequest} from '@thunderid/node';\nimport loadPageFromAction from './loadPageFromAction';\nimport getAuthFlowsAction from '../server/actions/getAuthFlowsAction';\n\n/**\n * The loader behind `AuthFlowSelect`: loads authentication flows through {@link getAuthFlowsAction} with the\n * signed-in user's server-held session. Requires an existing session. `request.signal` is not forwarded because\n * an `AbortSignal` cannot cross the server action boundary.\n */\nconst fetchAuthFlowsFromServer: FetchAuthFlows = async ({limit, offset}: SelectPageRequest): Promise<SelectPage> =>\n loadPageFromAction(await getAuthFlowsAction({limit, offset}), 'getAuthFlowsAction-Error-001');\n\nexport default fetchAuthFlowsFromServer;\n"],"mappings":";;;;;;;;;AAYA,MAAMA,2BAA2C,OAAO,EAAC,OAAO,aAC9DC,mCAAmB,MAAMC,mCAAmB;CAAC;CAAO;CAAO,CAAC,EAAE,+BAA+B;AAE/F,uCAAe"}
1
+ {"version":3,"file":"fetchAuthFlowsFromServer.cjs","names":["fetchAuthFlowsFromServer: FetchAuthFlows","loadPageFromAction","getAuthFlowsAction"],"sources":["../../../src/client/fetchAuthFlowsFromServer.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {FetchAuthFlows, SelectPage, SelectPageRequest} from '@thunderid/node';\nimport loadPageFromAction from './loadPageFromAction';\nimport getAuthFlowsAction from '../server/actions/auth/getAuthFlowsAction';\n\n/**\n * The loader behind `AuthFlowSelect`: loads authentication flows through {@link getAuthFlowsAction} with the\n * signed-in user's server-held session. Requires an existing session. `request.signal` is not forwarded because\n * an `AbortSignal` cannot cross the server action boundary.\n */\nconst fetchAuthFlowsFromServer: FetchAuthFlows = async ({limit, offset}: SelectPageRequest): Promise<SelectPage> =>\n loadPageFromAction(await getAuthFlowsAction({limit, offset}), 'getAuthFlowsAction-Error-001');\n\nexport default fetchAuthFlowsFromServer;\n"],"mappings":";;;;;;;;;AAYA,MAAMA,2BAA2C,OAAO,EAAC,OAAO,aAC9DC,mCAAmB,MAAMC,mCAAmB;CAAC;CAAO;CAAO,CAAC,EAAE,+BAA+B;AAE/F,uCAAe"}
@@ -1,5 +1,5 @@
1
1
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
- const require_getFlowMetaAction = require('../server/actions/getFlowMetaAction.cjs');
2
+ const require_getFlowMetaAction = require('../server/actions/auth/getFlowMetaAction.cjs');
3
3
  let __thunderid_node = require("@thunderid/node");
4
4
  __thunderid_node = require_rolldown_runtime.__toESM(__thunderid_node);
5
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"fetchFlowMetaFromServer.cjs","names":["result: GetFlowMetaActionResult","getFlowMetaAction","ThunderIDAPIError","ThunderIDRuntimeError"],"sources":["../../../src/client/fetchFlowMetaFromServer.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {FlowMetadataResponse, ThunderIDAPIError, ThunderIDRuntimeError} from '@thunderid/node';\nimport getFlowMetaAction, {GetFlowMetaActionResult} from '../server/actions/getFlowMetaAction';\n\n/**\n * The `fetchMeta` behind `FlowMetaProvider`: loads flow metadata through {@link getFlowMetaAction} so the browser\n * never calls `baseUrl` directly, and throws the failure the action returned as an SDK error, which\n * `FlowMetaProvider` reports through its `error` state.\n */\nconst fetchFlowMetaFromServer = async (params: {\n applicationId?: string;\n language?: string;\n}): Promise<FlowMetadataResponse> => {\n const result: GetFlowMetaActionResult = await getFlowMetaAction(params);\n\n if (result.success) {\n return result.meta;\n }\n\n if (result.statusCode !== undefined) {\n throw new ThunderIDAPIError(result.message, 'getFlowMetaAction-Error-001', 'nextjs', result.statusCode);\n }\n\n throw new ThunderIDRuntimeError(result.message, 'getFlowMetaAction-Error-001', 'nextjs');\n};\n\nexport default fetchFlowMetaFromServer;\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,0BAA0B,OAAO,WAGF;CACnC,MAAMA,SAAkC,MAAMC,kCAAkB,OAAO;AAEvE,KAAI,OAAO,QACT,QAAO,OAAO;AAGhB,KAAI,OAAO,eAAe,OACxB,OAAM,IAAIC,mCAAkB,OAAO,SAAS,+BAA+B,UAAU,OAAO,WAAW;AAGzG,OAAM,IAAIC,uCAAsB,OAAO,SAAS,+BAA+B,SAAS;;AAG1F,sCAAe"}
1
+ {"version":3,"file":"fetchFlowMetaFromServer.cjs","names":["result: GetFlowMetaActionResult","getFlowMetaAction","ThunderIDAPIError","ThunderIDRuntimeError"],"sources":["../../../src/client/fetchFlowMetaFromServer.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {FlowMetadataResponse, ThunderIDAPIError, ThunderIDRuntimeError} from '@thunderid/node';\nimport getFlowMetaAction, {GetFlowMetaActionResult} from '../server/actions/auth/getFlowMetaAction';\n\n/**\n * The `fetchMeta` behind `FlowMetaProvider`: loads flow metadata through {@link getFlowMetaAction} so the browser\n * never calls `baseUrl` directly, and throws the failure the action returned as an SDK error, which\n * `FlowMetaProvider` reports through its `error` state.\n */\nconst fetchFlowMetaFromServer = async (params: {\n applicationId?: string;\n language?: string;\n}): Promise<FlowMetadataResponse> => {\n const result: GetFlowMetaActionResult = await getFlowMetaAction(params);\n\n if (result.success) {\n return result.meta;\n }\n\n if (result.statusCode !== undefined) {\n throw new ThunderIDAPIError(result.message, 'getFlowMetaAction-Error-001', 'nextjs', result.statusCode);\n }\n\n throw new ThunderIDRuntimeError(result.message, 'getFlowMetaAction-Error-001', 'nextjs');\n};\n\nexport default fetchFlowMetaFromServer;\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,0BAA0B,OAAO,WAGF;CACnC,MAAMA,SAAkC,MAAMC,kCAAkB,OAAO;AAEvE,KAAI,OAAO,QACT,QAAO,OAAO;AAGhB,KAAI,OAAO,eAAe,OACxB,OAAM,IAAIC,mCAAkB,OAAO,SAAS,+BAA+B,UAAU,OAAO,WAAW;AAGzG,OAAM,IAAIC,uCAAsB,OAAO,SAAS,+BAA+B,SAAS;;AAG1F,sCAAe"}
@@ -0,0 +1,32 @@
1
+ const require_managementRequestAction = require('../server/actions/management/managementRequestAction.cjs');
2
+
3
+ //#region src/client/fetchManagementFromServer.ts
4
+ /**
5
+ * The `http.fetcher` that `ThunderIDProvider` hands to the admin components and hooks of
6
+ * `@thunderid/react`: it sends each management request through {@link managementRequestAction}, which
7
+ * adds the signed-in user's server-held access token, and turns the plain result back into a
8
+ * `Response` so the core API functions can read the status (a 403 stays distinct from a 404).
9
+ *
10
+ * Only the URL, method and body cross to the server. Headers are not forwarded, since the server sets
11
+ * the ones the management API needs, and `signal` is not forwarded because an `AbortSignal` cannot
12
+ * cross the server action boundary.
13
+ */
14
+ const fetchManagementFromServer = async (url, config) => {
15
+ const { body, status, statusText } = await require_managementRequestAction.default({
16
+ ...typeof config?.body === "string" ? { body: config.body } : {},
17
+ method: config?.method ?? "GET",
18
+ url
19
+ });
20
+ return {
21
+ json: () => Promise.resolve(body ? JSON.parse(body) : void 0),
22
+ ok: status >= 200 && status < 300,
23
+ status,
24
+ statusText,
25
+ text: () => Promise.resolve(body)
26
+ };
27
+ };
28
+ var fetchManagementFromServer_default = fetchManagementFromServer;
29
+
30
+ //#endregion
31
+ exports.default = fetchManagementFromServer_default;
32
+ //# sourceMappingURL=fetchManagementFromServer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchManagementFromServer.cjs","names":["fetchManagementFromServer: ApiFetcher","managementRequestAction"],"sources":["../../../src/client/fetchManagementFromServer.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {ApiFetcher} from '@thunderid/node';\nimport managementRequestAction, {\n ManagementRequestActionResult,\n} from '../server/actions/management/managementRequestAction';\n\n/**\n * The `http.fetcher` that `ThunderIDProvider` hands to the admin components and hooks of\n * `@thunderid/react`: it sends each management request through {@link managementRequestAction}, which\n * adds the signed-in user's server-held access token, and turns the plain result back into a\n * `Response` so the core API functions can read the status (a 403 stays distinct from a 404).\n *\n * Only the URL, method and body cross to the server. Headers are not forwarded, since the server sets\n * the ones the management API needs, and `signal` is not forwarded because an `AbortSignal` cannot\n * cross the server action boundary.\n */\nconst fetchManagementFromServer: ApiFetcher = async (url: string, config: RequestInit): Promise<Response> => {\n const result: ManagementRequestActionResult = await managementRequestAction({\n ...(typeof config?.body === 'string' ? {body: config.body} : {}),\n method: config?.method ?? 'GET',\n url,\n });\n\n const {body, status, statusText} = result;\n\n return {\n json: () => Promise.resolve(body ? (JSON.parse(body) as unknown) : undefined),\n ok: status >= 200 && status < 300,\n status,\n statusText,\n text: () => Promise.resolve(body),\n } as Response;\n};\n\nexport default fetchManagementFromServer;\n"],"mappings":";;;;;;;;;;;;;AAkBA,MAAMA,4BAAwC,OAAO,KAAa,WAA2C;CAO3G,MAAM,EAAC,MAAM,QAAQ,eANyB,MAAMC,wCAAwB;EAC1E,GAAI,OAAO,QAAQ,SAAS,WAAW,EAAC,MAAM,OAAO,MAAK,GAAG,EAAE;EAC/D,QAAQ,QAAQ,UAAU;EAC1B;EACD,CAAC;AAIF,QAAO;EACL,YAAY,QAAQ,QAAQ,OAAQ,KAAK,MAAM,KAAK,GAAe,OAAU;EAC7E,IAAI,UAAU,OAAO,SAAS;EAC9B;EACA;EACA,YAAY,QAAQ,QAAQ,KAAK;EAClC;;AAGH,wCAAe"}
@@ -1,5 +1,5 @@
1
1
  const require_loadPageFromAction = require('./loadPageFromAction.cjs');
2
- const require_getUserTypesAction = require('../server/actions/getUserTypesAction.cjs');
2
+ const require_getUserTypesAction = require('../server/actions/management/getUserTypesAction.cjs');
3
3
 
4
4
  //#region src/client/fetchUserTypesFromServer.ts
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fetchUserTypesFromServer.cjs","names":["fetchUserTypesFromServer: FetchUserTypes","loadPageFromAction","getUserTypesAction"],"sources":["../../../src/client/fetchUserTypesFromServer.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {FetchUserTypes, SelectPage, SelectPageRequest} from '@thunderid/node';\nimport loadPageFromAction from './loadPageFromAction';\nimport getUserTypesAction from '../server/actions/getUserTypesAction';\n\n/**\n * The loader behind `UserTypeSelect`: loads user types through {@link getUserTypesAction} with the signed-in\n * user's server-held session. Requires an existing session. `request.signal` is not forwarded because an\n * `AbortSignal` cannot cross the server action boundary.\n */\nconst fetchUserTypesFromServer: FetchUserTypes = async ({limit, offset}: SelectPageRequest): Promise<SelectPage> =>\n loadPageFromAction(await getUserTypesAction({limit, offset}), 'getUserTypesAction-Error-001');\n\nexport default fetchUserTypesFromServer;\n"],"mappings":";;;;;;;;;AAYA,MAAMA,2BAA2C,OAAO,EAAC,OAAO,aAC9DC,mCAAmB,MAAMC,mCAAmB;CAAC;CAAO;CAAO,CAAC,EAAE,+BAA+B;AAE/F,uCAAe"}
1
+ {"version":3,"file":"fetchUserTypesFromServer.cjs","names":["fetchUserTypesFromServer: FetchUserTypes","loadPageFromAction","getUserTypesAction"],"sources":["../../../src/client/fetchUserTypesFromServer.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {FetchUserTypes, SelectPage, SelectPageRequest} from '@thunderid/node';\nimport loadPageFromAction from './loadPageFromAction';\nimport getUserTypesAction from '../server/actions/management/getUserTypesAction';\n\n/**\n * The loader behind `UserTypeSelect`: loads user types through {@link getUserTypesAction} with the signed-in\n * user's server-held session. Requires an existing session. `request.signal` is not forwarded because an\n * `AbortSignal` cannot cross the server action boundary.\n */\nconst fetchUserTypesFromServer: FetchUserTypes = async ({limit, offset}: SelectPageRequest): Promise<SelectPage> =>\n loadPageFromAction(await getUserTypesAction({limit, offset}), 'getUserTypesAction-Error-001');\n\nexport default fetchUserTypesFromServer;\n"],"mappings":";;;;;;;;;AAYA,MAAMA,2BAA2C,OAAO,EAAC,OAAO,aAC9DC,mCAAmB,MAAMC,mCAAmB;CAAC;CAAO;CAAO,CAAC,EAAE,+BAA+B;AAE/F,uCAAe"}
@@ -1,5 +1,5 @@
1
1
  const require_loadPageFromAction = require('./loadPageFromAction.cjs');
2
- const require_getUsersAction = require('../server/actions/getUsersAction.cjs');
2
+ const require_getUsersAction = require('../server/actions/management/getUsersAction.cjs');
3
3
 
4
4
  //#region src/client/fetchUsersFromServer.ts
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fetchUsersFromServer.cjs","names":["fetchUsersFromServer: FetchUsers","loadPageFromAction","getUsersAction"],"sources":["../../../src/client/fetchUsersFromServer.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {FetchUsers, SelectPage, SelectPageRequest} from '@thunderid/node';\nimport loadPageFromAction from './loadPageFromAction';\nimport getUsersAction from '../server/actions/getUsersAction';\n\n/**\n * The loader behind `UserSelect`: loads users through {@link getUsersAction} with the signed-in user's server-held session.\n * Requires an existing session. `request.signal` is not forwarded because an `AbortSignal` cannot cross the server action boundary.\n */\nconst fetchUsersFromServer: FetchUsers = async ({filter, limit, offset}: SelectPageRequest): Promise<SelectPage> =>\n loadPageFromAction(await getUsersAction({filter, limit, offset}), 'getUsersAction-Error-001');\n\nexport default fetchUsersFromServer;\n"],"mappings":";;;;;;;;AAWA,MAAMA,uBAAmC,OAAO,EAAC,QAAQ,OAAO,aAC9DC,mCAAmB,MAAMC,+BAAe;CAAC;CAAQ;CAAO;CAAO,CAAC,EAAE,2BAA2B;AAE/F,mCAAe"}
1
+ {"version":3,"file":"fetchUsersFromServer.cjs","names":["fetchUsersFromServer: FetchUsers","loadPageFromAction","getUsersAction"],"sources":["../../../src/client/fetchUsersFromServer.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {FetchUsers, SelectPage, SelectPageRequest} from '@thunderid/node';\nimport loadPageFromAction from './loadPageFromAction';\nimport getUsersAction from '../server/actions/management/getUsersAction';\n\n/**\n * The loader behind `UserSelect`: loads users through {@link getUsersAction} with the signed-in user's server-held session.\n * Requires an existing session. `request.signal` is not forwarded because an `AbortSignal` cannot cross the server action boundary.\n */\nconst fetchUsersFromServer: FetchUsers = async ({filter, limit, offset}: SelectPageRequest): Promise<SelectPage> =>\n loadPageFromAction(await getUsersAction({filter, limit, offset}), 'getUsersAction-Error-001');\n\nexport default fetchUsersFromServer;\n"],"mappings":";;;;;;;;AAWA,MAAMA,uBAAmC,OAAO,EAAC,QAAQ,OAAO,aAC9DC,mCAAmB,MAAMC,+BAAe;CAAC;CAAQ;CAAO;CAAO,CAAC,EAAE,2BAA2B;AAE/F,mCAAe"}
@@ -0,0 +1,51 @@
1
+ 'use client';
2
+
3
+
4
+ const require_rolldown_runtime = require('../../../_virtual/rolldown_runtime.cjs');
5
+ const require_useThunderID = require('../../contexts/ThunderID/useThunderID.cjs');
6
+ const require_getGrantedPermissionsAction = require('../../../server/actions/management/getGrantedPermissionsAction.cjs');
7
+ let __thunderid_node = require("@thunderid/node");
8
+ __thunderid_node = require_rolldown_runtime.__toESM(__thunderid_node);
9
+ let react = require("react");
10
+ react = require_rolldown_runtime.__toESM(react);
11
+
12
+ //#region src/client/hooks/management/useGrantedPermissions.ts
13
+ /**
14
+ * Reads the permissions the signed-in user's access token grants, for example to hide a page the
15
+ * user cannot use. The token stays on the server: only the list of permissions is sent to the
16
+ * browser, through a server action. Same shape as `useGrantedPermissions` in `@thunderid/react`.
17
+ *
18
+ * @returns The granted permissions and a `can` check.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * const {can} = useGrantedPermissions();
23
+ * return can('system:group:view') ? <GroupList /> : null;
24
+ * ```
25
+ */
26
+ const useGrantedPermissions = () => {
27
+ const { isSignedIn } = require_useThunderID.default();
28
+ const [granted, setGranted] = (0, react.useState)(null);
29
+ (0, react.useEffect)(() => {
30
+ if (!isSignedIn) return;
31
+ let active = true;
32
+ require_getGrantedPermissionsAction.default().catch(() => []).then((tokenPermissions) => {
33
+ if (active) setGranted(tokenPermissions);
34
+ });
35
+ return () => {
36
+ active = false;
37
+ };
38
+ }, [isSignedIn]);
39
+ const permissions = (0, react.useMemo)(() => isSignedIn ? granted ?? [] : [], [granted, isSignedIn]);
40
+ const isLoading = !!isSignedIn && granted === null;
41
+ return {
42
+ can: (0, react.useCallback)((required) => (0, __thunderid_node.hasPermission)(permissions, required), [permissions]),
43
+ isLoading,
44
+ permissions
45
+ };
46
+ };
47
+ var useGrantedPermissions_default = useGrantedPermissions;
48
+
49
+ //#endregion
50
+ exports.default = useGrantedPermissions_default;
51
+ //# sourceMappingURL=useGrantedPermissions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGrantedPermissions.cjs","names":["useThunderID","getGrantedPermissionsAction","permissions: string[]","isLoading: boolean"],"sources":["../../../../../src/client/hooks/management/useGrantedPermissions.ts"],"sourcesContent":["// Copyright 2026 The ThunderID Authors\n// SPDX-License-Identifier: Apache-2.0\n\n'use client';\n\nimport {hasPermission} from '@thunderid/node';\nimport type {GrantedPermissions} from '@thunderid/react';\nimport {useCallback, useEffect, useMemo, useState} from 'react';\nimport getGrantedPermissionsAction from '../../../server/actions/management/getGrantedPermissionsAction';\nimport useThunderID from '../../contexts/ThunderID/useThunderID';\n\n/**\n * Reads the permissions the signed-in user's access token grants, for example to hide a page the\n * user cannot use. The token stays on the server: only the list of permissions is sent to the\n * browser, through a server action. Same shape as `useGrantedPermissions` in `@thunderid/react`.\n *\n * @returns The granted permissions and a `can` check.\n *\n * @example\n * ```tsx\n * const {can} = useGrantedPermissions();\n * return can('system:group:view') ? <GroupList /> : null;\n * ```\n */\nconst useGrantedPermissions = (): GrantedPermissions => {\n const {isSignedIn} = useThunderID();\n const [granted, setGranted] = useState<string[] | null>(null);\n\n useEffect(() => {\n if (!isSignedIn) {\n return undefined;\n }\n\n let active = true;\n\n void getGrantedPermissionsAction()\n .catch((): string[] => [])\n .then((tokenPermissions: string[]) => {\n if (active) {\n setGranted(tokenPermissions);\n }\n });\n\n return (): void => {\n active = false;\n };\n }, [isSignedIn]);\n\n const permissions: string[] = useMemo(() => (isSignedIn ? (granted ?? []) : []), [granted, isSignedIn]);\n const isLoading: boolean = !!isSignedIn && granted === null;\n\n const can: (required: string) => boolean = useCallback(\n (required: string): boolean => hasPermission(permissions, required),\n [permissions],\n );\n\n return {can, isLoading, permissions};\n};\n\nexport default useGrantedPermissions;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,8BAAkD;CACtD,MAAM,EAAC,eAAcA,8BAAc;CACnC,MAAM,CAAC,SAAS,kCAAwC,KAAK;AAE7D,4BAAgB;AACd,MAAI,CAAC,WACH;EAGF,IAAI,SAAS;AAEb,EAAKC,6CAA6B,CAC/B,YAAsB,EAAE,CAAC,CACzB,MAAM,qBAA+B;AACpC,OAAI,OACF,YAAW,iBAAiB;IAE9B;AAEJ,eAAmB;AACjB,YAAS;;IAEV,CAAC,WAAW,CAAC;CAEhB,MAAMC,uCAAuC,aAAc,WAAW,EAAE,GAAI,EAAE,EAAG,CAAC,SAAS,WAAW,CAAC;CACvG,MAAMC,YAAqB,CAAC,CAAC,cAAc,YAAY;AAOvD,QAAO;EAAC,6BAJL,iDAA4C,aAAa,SAAS,EACnE,CAAC,YAAY,CACd;EAEY;EAAW;EAAY;;AAGtC,oCAAe"}