@cedros/login-react 0.0.11 → 0.0.13

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 (428) hide show
  1. package/README.md +68 -0
  2. package/dist/AdminDepositList-Cx0xRwES.js +305 -0
  3. package/dist/AdminDepositList-Cx0xRwES.js.map +1 -0
  4. package/dist/AdminDepositList-UEcyRZkA.cjs +1 -0
  5. package/dist/AdminDepositList-UEcyRZkA.cjs.map +1 -0
  6. package/dist/AdminUserDetail-BzEIdNJh.cjs +1 -0
  7. package/dist/AdminUserDetail-BzEIdNJh.cjs.map +1 -0
  8. package/dist/AdminUserDetail-DHFDzY8B.js +1195 -0
  9. package/dist/AdminUserDetail-DHFDzY8B.js.map +1 -0
  10. package/dist/AdminWithdrawalHistory-0yxtMh6q.cjs +1 -0
  11. package/dist/AdminWithdrawalHistory-0yxtMh6q.cjs.map +1 -0
  12. package/dist/AdminWithdrawalHistory-BGjfrIe3.js +904 -0
  13. package/dist/AdminWithdrawalHistory-BGjfrIe3.js.map +1 -0
  14. package/dist/AuthenticationSettings-5Vi7Ib_A.cjs +1 -0
  15. package/dist/AuthenticationSettings-5Vi7Ib_A.cjs.map +1 -0
  16. package/dist/AuthenticationSettings-BPAh1my6.cjs +1 -0
  17. package/dist/AuthenticationSettings-BPAh1my6.cjs.map +1 -0
  18. package/dist/AuthenticationSettings-CJg8CJY9.js +9 -0
  19. package/dist/AuthenticationSettings-CJg8CJY9.js.map +1 -0
  20. package/dist/AuthenticationSettings-CR_i6TTS.js +495 -0
  21. package/dist/AuthenticationSettings-CR_i6TTS.js.map +1 -0
  22. package/dist/AutosaveStatus-CYkC2aI_.cjs +1 -0
  23. package/dist/AutosaveStatus-CYkC2aI_.cjs.map +1 -0
  24. package/dist/AutosaveStatus-N4uNS6-2.js +1497 -0
  25. package/dist/AutosaveStatus-N4uNS6-2.js.map +1 -0
  26. package/dist/CreditSystemSettings-BnAOK_tT.cjs +1 -0
  27. package/dist/CreditSystemSettings-BnAOK_tT.cjs.map +1 -0
  28. package/dist/CreditSystemSettings-CIf_SfJq.js +210 -0
  29. package/dist/CreditSystemSettings-CIf_SfJq.js.map +1 -0
  30. package/dist/CreditSystemSettings-CePYGgev.js +9 -0
  31. package/dist/CreditSystemSettings-CePYGgev.js.map +1 -0
  32. package/dist/CreditSystemSettings-Ck5WIMp3.cjs +1 -0
  33. package/dist/CreditSystemSettings-Ck5WIMp3.cjs.map +1 -0
  34. package/dist/{DepositsSection-BH5K162Q.js → DepositsSection-DA89uR9A.js} +5 -5
  35. package/dist/{DepositsSection-BH5K162Q.js.map → DepositsSection-DA89uR9A.js.map} +1 -1
  36. package/dist/DepositsSection-i6XdhLNs.cjs +1 -0
  37. package/dist/{DepositsSection-DpRn0koq.cjs.map → DepositsSection-i6XdhLNs.cjs.map} +1 -1
  38. package/dist/EmailRegisterForm-BrDL3BZy.js +927 -0
  39. package/dist/EmailRegisterForm-BrDL3BZy.js.map +1 -0
  40. package/dist/EmailRegisterForm-CxktR-4J.cjs +1 -0
  41. package/dist/EmailRegisterForm-CxktR-4J.cjs.map +1 -0
  42. package/dist/EmailSettings-B8xwgd6_.cjs +1 -0
  43. package/dist/EmailSettings-B8xwgd6_.cjs.map +1 -0
  44. package/dist/{AuthenticationSettings-DlVILxY4.js → EmailSettings-Bna7Z53E.js} +3 -3
  45. package/dist/EmailSettings-Bna7Z53E.js.map +1 -0
  46. package/dist/EmailSettings-DZywTTRq.cjs +1 -0
  47. package/dist/EmailSettings-DZywTTRq.cjs.map +1 -0
  48. package/dist/EmailSettings-DbMDfVaM.js +17 -0
  49. package/dist/EmailSettings-DbMDfVaM.js.map +1 -0
  50. package/dist/{EmbeddedWalletSettings-Bff6raAT.js → EmbeddedWalletSettings-ANbhj3Lt.js} +3 -3
  51. package/dist/EmbeddedWalletSettings-ANbhj3Lt.js.map +1 -0
  52. package/dist/EmbeddedWalletSettings-BEztqO19.js +79 -0
  53. package/dist/EmbeddedWalletSettings-BEztqO19.js.map +1 -0
  54. package/dist/EmbeddedWalletSettings-D6M7pwgk.cjs +1 -0
  55. package/dist/EmbeddedWalletSettings-D6M7pwgk.cjs.map +1 -0
  56. package/dist/EmbeddedWalletSettings-DivEPn39.cjs +1 -0
  57. package/dist/EmbeddedWalletSettings-DivEPn39.cjs.map +1 -0
  58. package/dist/ErrorMessage-CHbYbVi2.cjs +1 -0
  59. package/dist/ErrorMessage-CHbYbVi2.cjs.map +1 -0
  60. package/dist/ErrorMessage-CcEK0pYO.js +64 -0
  61. package/dist/ErrorMessage-CcEK0pYO.js.map +1 -0
  62. package/dist/{GoogleLoginButton-BzHr545L.js → GoogleLoginButton-B3uRMJ_n.js} +4 -3
  63. package/dist/{GoogleLoginButton-BzHr545L.js.map → GoogleLoginButton-B3uRMJ_n.js.map} +1 -1
  64. package/dist/GoogleLoginButton-BydKswn4.cjs +1 -0
  65. package/dist/{GoogleLoginButton-DoAdOqb3.cjs.map → GoogleLoginButton-BydKswn4.cjs.map} +1 -1
  66. package/dist/LoadingSpinner-6vml-zwr.js +79 -0
  67. package/dist/LoadingSpinner-6vml-zwr.js.map +1 -0
  68. package/dist/LoadingSpinner-d6sSxgQN.cjs +1 -0
  69. package/dist/LoadingSpinner-d6sSxgQN.cjs.map +1 -0
  70. package/dist/PermissionsSection-BGaj_sI7.js +1026 -0
  71. package/dist/PermissionsSection-BGaj_sI7.js.map +1 -0
  72. package/dist/PermissionsSection-CKXXDfqi.cjs +1 -0
  73. package/dist/PermissionsSection-CKXXDfqi.cjs.map +1 -0
  74. package/dist/ServerSettings-B2RKhJtZ.js +84 -0
  75. package/dist/ServerSettings-B2RKhJtZ.js.map +1 -0
  76. package/dist/ServerSettings-BZXlm1BX.cjs +1 -0
  77. package/dist/ServerSettings-BZXlm1BX.cjs.map +1 -0
  78. package/dist/{ServerSettings-UIVR0R4l.js → ServerSettings-Bqm4-bt2.js} +3 -3
  79. package/dist/ServerSettings-Bqm4-bt2.js.map +1 -0
  80. package/dist/ServerSettings-DZUKo6By.cjs +1 -0
  81. package/dist/ServerSettings-DZUKo6By.cjs.map +1 -0
  82. package/dist/SettingsPageLayout-COSYLMu7.cjs +1 -0
  83. package/dist/SettingsPageLayout-COSYLMu7.cjs.map +1 -0
  84. package/dist/SettingsPageLayout-DpgNEkuu.js +50 -0
  85. package/dist/SettingsPageLayout-DpgNEkuu.js.map +1 -0
  86. package/dist/{SolanaLoginButton-C-CfZxAZ.js → SolanaLoginButton-C_u9OppS.js} +5 -4
  87. package/dist/{SolanaLoginButton-C-CfZxAZ.js.map → SolanaLoginButton-C_u9OppS.js.map} +1 -1
  88. package/dist/SolanaLoginButton-fAW7kRUu.cjs +1 -0
  89. package/dist/{SolanaLoginButton-CPzms0kf.cjs.map → SolanaLoginButton-fAW7kRUu.cjs.map} +1 -1
  90. package/dist/StatsBar-BX-hHtTq.js +66 -0
  91. package/dist/StatsBar-BX-hHtTq.js.map +1 -0
  92. package/dist/StatsBar-DTUZCwDD.cjs +1 -0
  93. package/dist/StatsBar-DTUZCwDD.cjs.map +1 -0
  94. package/dist/{TeamSection-DnJudC38.js → TeamSection-CvrCoa9D.js} +27 -26
  95. package/dist/TeamSection-CvrCoa9D.js.map +1 -0
  96. package/dist/TeamSection-DlUD5kp5.cjs +1 -0
  97. package/dist/TeamSection-DlUD5kp5.cjs.map +1 -0
  98. package/dist/UsersSection-C2U8Tb7V.cjs +1 -0
  99. package/dist/{UsersSection-Ce7xVKfp.cjs.map → UsersSection-C2U8Tb7V.cjs.map} +1 -1
  100. package/dist/{UsersSection-mOOjcUEv.js → UsersSection-Dbh9PTSA.js} +17 -15
  101. package/dist/{UsersSection-mOOjcUEv.js.map → UsersSection-Dbh9PTSA.js.map} +1 -1
  102. package/dist/WebhookSettings-BT5q6AZ8.js +17 -0
  103. package/dist/WebhookSettings-BT5q6AZ8.js.map +1 -0
  104. package/dist/WebhookSettings-BWl_wsvg.cjs +1 -0
  105. package/dist/WebhookSettings-BWl_wsvg.cjs.map +1 -0
  106. package/dist/WebhookSettings-DXNH5bal.cjs +1 -0
  107. package/dist/WebhookSettings-DXNH5bal.cjs.map +1 -0
  108. package/dist/{WebhookSettings-D0i0JhQD.js → WebhookSettings-bUg2u_p0.js} +4 -4
  109. package/dist/WebhookSettings-bUg2u_p0.js.map +1 -0
  110. package/dist/WithdrawalsSection-BL_LOUq8.cjs +1 -0
  111. package/dist/{WithdrawalsSection-igRQJfjj.cjs.map → WithdrawalsSection-BL_LOUq8.cjs.map} +1 -1
  112. package/dist/WithdrawalsSection-CN-lLnqX.js +20 -0
  113. package/dist/{WithdrawalsSection-Grebjjks.js.map → WithdrawalsSection-CN-lLnqX.js.map} +1 -1
  114. package/dist/admin-only.cjs +1 -0
  115. package/dist/admin-only.cjs.map +1 -0
  116. package/dist/{admin/types.d.ts → admin-only.d.ts} +228 -167
  117. package/dist/admin-only.js +8 -0
  118. package/dist/admin-only.js.map +1 -0
  119. package/dist/apiClient-B2JxVPlH.js +216 -0
  120. package/dist/apiClient-B2JxVPlH.js.map +1 -0
  121. package/dist/apiClient-CTTKhsYb.cjs +1 -0
  122. package/dist/apiClient-CTTKhsYb.cjs.map +1 -0
  123. package/dist/assets/argon2Worker-Bi5TuQvD.js.map +1 -1
  124. package/dist/email-only.cjs +1 -1
  125. package/dist/email-only.d.ts +634 -16
  126. package/dist/email-only.js +16 -13
  127. package/dist/email-only.js.map +1 -1
  128. package/dist/google-only.cjs +1 -1
  129. package/dist/google-only.d.ts +543 -13
  130. package/dist/google-only.js +11 -8
  131. package/dist/google-only.js.map +1 -1
  132. package/dist/index.cjs +2061 -1
  133. package/dist/index.cjs.map +1 -1
  134. package/dist/index.d.ts +5007 -144
  135. package/dist/index.js +13507 -116
  136. package/dist/index.js.map +1 -1
  137. package/dist/login-react.css +1 -1
  138. package/dist/plugin-5qRh-YhX.js +596 -0
  139. package/dist/plugin-5qRh-YhX.js.map +1 -0
  140. package/dist/plugin-BtYBW6JY.cjs +1 -0
  141. package/dist/plugin-BtYBW6JY.cjs.map +1 -0
  142. package/dist/sanitization-Bo_tn-L2.cjs +1 -0
  143. package/dist/sanitization-Bo_tn-L2.cjs.map +1 -0
  144. package/dist/sanitization-CQ-H1MSg.js +39 -0
  145. package/dist/sanitization-CQ-H1MSg.js.map +1 -0
  146. package/dist/shamir-AeLLfw0p.cjs +1 -0
  147. package/dist/shamir-AeLLfw0p.cjs.map +1 -0
  148. package/dist/{solanaKeypair-BlXol3nh.js → shamir-B0wConeK.js} +765 -757
  149. package/dist/shamir-B0wConeK.js.map +1 -0
  150. package/dist/silentWalletEnroll-B8pgdKZO.cjs +1 -0
  151. package/dist/silentWalletEnroll-B8pgdKZO.cjs.map +1 -0
  152. package/dist/silentWalletEnroll-DR2kPw7W.js +41 -0
  153. package/dist/silentWalletEnroll-DR2kPw7W.js.map +1 -0
  154. package/dist/solana-only.cjs +1 -1
  155. package/dist/solana-only.d.ts +594 -13
  156. package/dist/solana-only.js +12 -9
  157. package/dist/solana-only.js.map +1 -1
  158. package/dist/style.d.ts +1 -0
  159. package/dist/useAdminDeposits-BDY5KJ0-.js +151 -0
  160. package/dist/useAdminDeposits-BDY5KJ0-.js.map +1 -0
  161. package/dist/useAdminDeposits-Dvx3_UUE.cjs +1 -0
  162. package/dist/useAdminDeposits-Dvx3_UUE.cjs.map +1 -0
  163. package/dist/{ErrorMessage-DU2VBb85.js → useAuth-Bge6KaWN.js} +954 -1226
  164. package/dist/useAuth-Bge6KaWN.js.map +1 -0
  165. package/dist/useAuth-DhIDTLRd.cjs +1 -0
  166. package/dist/useAuth-DhIDTLRd.cjs.map +1 -0
  167. package/dist/useOrgs-Be3KH4ib.js +215 -0
  168. package/dist/useOrgs-Be3KH4ib.js.map +1 -0
  169. package/dist/useOrgs-CVbacmaQ.cjs +1 -0
  170. package/dist/useOrgs-CVbacmaQ.cjs.map +1 -0
  171. package/dist/useSystemSettings-D9Cr7ZTl.cjs +1 -0
  172. package/dist/useSystemSettings-D9Cr7ZTl.cjs.map +1 -0
  173. package/dist/useSystemSettings-DN5YqfNq.js +97 -0
  174. package/dist/useSystemSettings-DN5YqfNq.js.map +1 -0
  175. package/dist/{validation-BebL7hMF.js → validation-B8kMV3BL.js} +1 -1
  176. package/dist/{validation-BebL7hMF.js.map → validation-B8kMV3BL.js.map} +1 -1
  177. package/dist/{validation-BeXIfuHB.cjs → validation-BuGQrA-K.cjs} +1 -1
  178. package/dist/{validation-BeXIfuHB.cjs.map → validation-BuGQrA-K.cjs.map} +1 -1
  179. package/package.json +11 -1
  180. package/dist/AuthenticationSettings-D8oXHkM6.cjs +0 -1
  181. package/dist/AuthenticationSettings-D8oXHkM6.cjs.map +0 -1
  182. package/dist/AuthenticationSettings-DlVILxY4.js.map +0 -1
  183. package/dist/CreditSystemSettings-Bv6u9lTs.js +0 -9
  184. package/dist/CreditSystemSettings-Bv6u9lTs.js.map +0 -1
  185. package/dist/CreditSystemSettings-D45pwDZM.cjs +0 -1
  186. package/dist/CreditSystemSettings-D45pwDZM.cjs.map +0 -1
  187. package/dist/DepositsSection-DpRn0koq.cjs +0 -1
  188. package/dist/EmailRegisterForm-C0PStlj5.js +0 -961
  189. package/dist/EmailRegisterForm-C0PStlj5.js.map +0 -1
  190. package/dist/EmailRegisterForm-DaPLGws2.cjs +0 -1
  191. package/dist/EmailRegisterForm-DaPLGws2.cjs.map +0 -1
  192. package/dist/EmailSettings-DdjoMO_c.cjs +0 -1
  193. package/dist/EmailSettings-DdjoMO_c.cjs.map +0 -1
  194. package/dist/EmailSettings-khmiWqhx.js +0 -9
  195. package/dist/EmailSettings-khmiWqhx.js.map +0 -1
  196. package/dist/EmbeddedWalletSettings-Bff6raAT.js.map +0 -1
  197. package/dist/EmbeddedWalletSettings-C5qkJtAr.cjs +0 -1
  198. package/dist/EmbeddedWalletSettings-C5qkJtAr.cjs.map +0 -1
  199. package/dist/ErrorMessage-BXHiYibN.cjs +0 -1
  200. package/dist/ErrorMessage-BXHiYibN.cjs.map +0 -1
  201. package/dist/ErrorMessage-DU2VBb85.js.map +0 -1
  202. package/dist/GoogleLoginButton-DoAdOqb3.cjs +0 -1
  203. package/dist/ServerSettings-BpZhkxh6.cjs +0 -1
  204. package/dist/ServerSettings-BpZhkxh6.cjs.map +0 -1
  205. package/dist/ServerSettings-UIVR0R4l.js.map +0 -1
  206. package/dist/SolanaLoginButton-CPzms0kf.cjs +0 -1
  207. package/dist/TeamSection-BoGqQhD5.cjs +0 -1
  208. package/dist/TeamSection-BoGqQhD5.cjs.map +0 -1
  209. package/dist/TeamSection-DnJudC38.js.map +0 -1
  210. package/dist/UsersSection-Ce7xVKfp.cjs +0 -1
  211. package/dist/WebhookSettings-Cx-BxzNQ.cjs +0 -1
  212. package/dist/WebhookSettings-Cx-BxzNQ.cjs.map +0 -1
  213. package/dist/WebhookSettings-D0i0JhQD.js.map +0 -1
  214. package/dist/WithdrawalsSection-Grebjjks.js +0 -20
  215. package/dist/WithdrawalsSection-igRQJfjj.cjs +0 -1
  216. package/dist/admin/AdminShell.d.ts +0 -38
  217. package/dist/admin/icons.d.ts +0 -2
  218. package/dist/admin/index.d.ts +0 -10
  219. package/dist/admin/plugin.d.ts +0 -3
  220. package/dist/admin/sections/AuthenticationSettings.d.ts +0 -3
  221. package/dist/admin/sections/CreditSystemSettings.d.ts +0 -3
  222. package/dist/admin/sections/DepositsSection.d.ts +0 -3
  223. package/dist/admin/sections/EmailSettings.d.ts +0 -3
  224. package/dist/admin/sections/EmbeddedWalletSettings.d.ts +0 -3
  225. package/dist/admin/sections/FeatureSettings.d.ts +0 -3
  226. package/dist/admin/sections/InvitesSection.d.ts +0 -3
  227. package/dist/admin/sections/MembersSection.d.ts +0 -3
  228. package/dist/admin/sections/ServerSettings.d.ts +0 -3
  229. package/dist/admin/sections/SettingsSections.d.ts +0 -7
  230. package/dist/admin/sections/TeamSection.d.ts +0 -3
  231. package/dist/admin/sections/UsersSection.d.ts +0 -3
  232. package/dist/admin/sections/WebhookSettings.d.ts +0 -3
  233. package/dist/admin/sections/WithdrawalsSection.d.ts +0 -3
  234. package/dist/components/LoginButton.d.ts +0 -23
  235. package/dist/components/LoginForm.d.ts +0 -9
  236. package/dist/components/LoginModal.d.ts +0 -9
  237. package/dist/components/admin/AdminUserDetail.d.ts +0 -23
  238. package/dist/components/admin/AdminUserList.d.ts +0 -21
  239. package/dist/components/admin/CedrosAdminDashboard.d.ts +0 -52
  240. package/dist/components/admin/PermissionsSection.d.ts +0 -7
  241. package/dist/components/admin/ProfileDropdown.d.ts +0 -34
  242. package/dist/components/admin/SetupWizard.d.ts +0 -30
  243. package/dist/components/admin/StatsBar.d.ts +0 -17
  244. package/dist/components/admin/SystemSettings.d.ts +0 -19
  245. package/dist/components/admin/settings/AuthenticationSettings.d.ts +0 -4
  246. package/dist/components/admin/settings/AutosaveStatus.d.ts +0 -6
  247. package/dist/components/admin/settings/CreditSystemSettings.d.ts +0 -6
  248. package/dist/components/admin/settings/EmailSettings.d.ts +0 -4
  249. package/dist/components/admin/settings/EmbeddedWalletSettings.d.ts +0 -4
  250. package/dist/components/admin/settings/FeatureSettings.d.ts +0 -4
  251. package/dist/components/admin/settings/MessagingSettings.d.ts +0 -4
  252. package/dist/components/admin/settings/SecuritySettings.d.ts +0 -4
  253. package/dist/components/admin/settings/ServerSettings.d.ts +0 -4
  254. package/dist/components/admin/settings/SettingsPageLayout.d.ts +0 -16
  255. package/dist/components/admin/settings/SsoProvidersSettings.d.ts +0 -4
  256. package/dist/components/admin/settings/WebhookSettings.d.ts +0 -4
  257. package/dist/components/admin/settings/index.d.ts +0 -31
  258. package/dist/components/admin/settings/settingsInputs.d.ts +0 -79
  259. package/dist/components/admin/settings/settingsMetadata.d.ts +0 -18
  260. package/dist/components/apple/AppleLoginButton.d.ts +0 -29
  261. package/dist/components/deposit/CreditBalance.d.ts +0 -19
  262. package/dist/components/deposit/DepositFlow.d.ts +0 -118
  263. package/dist/components/deposit/FeeConfigDisplay.d.ts +0 -15
  264. package/dist/components/deposit/History.d.ts +0 -21
  265. package/dist/components/deposit/TieredAmountSlider.d.ts +0 -19
  266. package/dist/components/deposit/TokenSelector.d.ts +0 -23
  267. package/dist/components/deposit/admin/AdminDepositList.d.ts +0 -21
  268. package/dist/components/deposit/admin/AdminDepositStats.d.ts +0 -15
  269. package/dist/components/deposit/admin/AdminPrivacyPeriodDeposits.d.ts +0 -19
  270. package/dist/components/deposit/admin/AdminWithdrawalHistory.d.ts +0 -19
  271. package/dist/components/deposit/admin/AdminWithdrawalQueue.d.ts +0 -23
  272. package/dist/components/deposit/admin/AdminWithdrawalStats.d.ts +0 -10
  273. package/dist/components/deposit/admin/FeatureDisabledMessage.d.ts +0 -15
  274. package/dist/components/deposit/admin/PrivacySystemStatus.d.ts +0 -15
  275. package/dist/components/deposit/admin/featureDisabled.d.ts +0 -14
  276. package/dist/components/deposit/admin/index.d.ts +0 -22
  277. package/dist/components/deposit/index.d.ts +0 -12
  278. package/dist/components/deposit/tierUtils.d.ts +0 -8
  279. package/dist/components/deposit/tokens.d.ts +0 -19
  280. package/dist/components/email/EmailLoginForm.d.ts +0 -11
  281. package/dist/components/email/EmailRegisterForm.d.ts +0 -14
  282. package/dist/components/email/ForgotPasswordForm.d.ts +0 -17
  283. package/dist/components/email/PasswordInput.d.ts +0 -14
  284. package/dist/components/email/ResetPasswordForm.d.ts +0 -22
  285. package/dist/components/google/GoogleLoginButton.d.ts +0 -12
  286. package/dist/components/invites/InviteForm.d.ts +0 -38
  287. package/dist/components/invites/InviteList.d.ts +0 -40
  288. package/dist/components/members/MemberList.d.ts +0 -47
  289. package/dist/components/org/CreateOrgForm.d.ts +0 -7
  290. package/dist/components/org/OrgAvatar.d.ts +0 -7
  291. package/dist/components/org/OrgListView.d.ts +0 -9
  292. package/dist/components/org/OrgSelector.d.ts +0 -52
  293. package/dist/components/org/OrgSwitcher.d.ts +0 -47
  294. package/dist/components/org/icons.d.ts +0 -8
  295. package/dist/components/profile/UserProfileSettings.d.ts +0 -35
  296. package/dist/components/profile/index.d.ts +0 -2
  297. package/dist/components/sessions/SessionList.d.ts +0 -33
  298. package/dist/components/shared/ErrorBoundary.d.ts +0 -38
  299. package/dist/components/shared/ErrorMessage.d.ts +0 -14
  300. package/dist/components/shared/LoadingSpinner.d.ts +0 -16
  301. package/dist/components/solana/SolanaLoginButton.d.ts +0 -49
  302. package/dist/components/templates/FullPageLayout.d.ts +0 -40
  303. package/dist/components/templates/SplitPageLayout.d.ts +0 -44
  304. package/dist/components/templates/index.d.ts +0 -4
  305. package/dist/components/totp/OtpInput.d.ts +0 -32
  306. package/dist/components/totp/QrCode.d.ts +0 -21
  307. package/dist/components/totp/TotpSettings.d.ts +0 -38
  308. package/dist/components/totp/TotpSetup.d.ts +0 -23
  309. package/dist/components/totp/TotpVerify.d.ts +0 -25
  310. package/dist/components/totp/index.d.ts +0 -10
  311. package/dist/components/wallet/CapabilityWarning.d.ts +0 -11
  312. package/dist/components/wallet/PasskeyPrompt.d.ts +0 -34
  313. package/dist/components/wallet/RecoveryPhraseDisplay.d.ts +0 -18
  314. package/dist/components/wallet/RecoveryPhraseInput.d.ts +0 -21
  315. package/dist/components/wallet/WalletAddressRow.d.ts +0 -10
  316. package/dist/components/wallet/WalletEnrollment.d.ts +0 -15
  317. package/dist/components/wallet/WalletManager.d.ts +0 -9
  318. package/dist/components/wallet/WalletRecovery.d.ts +0 -19
  319. package/dist/components/wallet/WalletStatus.d.ts +0 -28
  320. package/dist/components/wallet/WalletUnlock.d.ts +0 -23
  321. package/dist/components/wallet/index.d.ts +0 -23
  322. package/dist/components/webauthn/PasskeyLoginButton.d.ts +0 -8
  323. package/dist/context/CedrosLoginContext.d.ts +0 -24
  324. package/dist/context/CedrosLoginProvider.d.ts +0 -17
  325. package/dist/context/EmbeddedWalletExposure.d.ts +0 -19
  326. package/dist/context/useCedrosLogin.d.ts +0 -12
  327. package/dist/crypto/aesGcm.d.ts +0 -89
  328. package/dist/crypto/argon2.d.ts +0 -65
  329. package/dist/crypto/argon2Worker.d.ts +0 -1
  330. package/dist/crypto/argon2WorkerClient.d.ts +0 -28
  331. package/dist/crypto/bip39.d.ts +0 -106
  332. package/dist/crypto/capabilities.d.ts +0 -35
  333. package/dist/crypto/entropy.d.ts +0 -56
  334. package/dist/crypto/hkdf.d.ts +0 -38
  335. package/dist/crypto/index.d.ts +0 -30
  336. package/dist/crypto/secureWipe.d.ts +0 -71
  337. package/dist/crypto/shamir.d.ts +0 -52
  338. package/dist/crypto/solanaKeypair.d.ts +0 -63
  339. package/dist/crypto/types.d.ts +0 -134
  340. package/dist/crypto/webauthnPrf.d.ts +0 -108
  341. package/dist/hooks/useAdminDeposits.d.ts +0 -10
  342. package/dist/hooks/useAdminUsers.d.ts +0 -28
  343. package/dist/hooks/useAppleAuth.d.ts +0 -52
  344. package/dist/hooks/useAuth.d.ts +0 -34
  345. package/dist/hooks/useAuthSession.d.ts +0 -19
  346. package/dist/hooks/useAuthorize.d.ts +0 -62
  347. package/dist/hooks/useCredits.d.ts +0 -11
  348. package/dist/hooks/useDashboardPermissions.d.ts +0 -45
  349. package/dist/hooks/useDeposit.d.ts +0 -16
  350. package/dist/hooks/useEmailAuth.d.ts +0 -60
  351. package/dist/hooks/useGoogleAuth.d.ts +0 -67
  352. package/dist/hooks/useInstantLink.d.ts +0 -42
  353. package/dist/hooks/useInvites.d.ts +0 -57
  354. package/dist/hooks/useMembers.d.ts +0 -52
  355. package/dist/hooks/useOrgs.d.ts +0 -49
  356. package/dist/hooks/usePasswordReset.d.ts +0 -32
  357. package/dist/hooks/usePendingRecovery.d.ts +0 -34
  358. package/dist/hooks/useProfile.d.ts +0 -35
  359. package/dist/hooks/useRateLimiter.d.ts +0 -58
  360. package/dist/hooks/useServerFeatures.d.ts +0 -55
  361. package/dist/hooks/useSessions.d.ts +0 -45
  362. package/dist/hooks/useSettingsAutosave.d.ts +0 -29
  363. package/dist/hooks/useSetup.d.ts +0 -25
  364. package/dist/hooks/useSolanaAuth.d.ts +0 -30
  365. package/dist/hooks/useSsoProviders.d.ts +0 -52
  366. package/dist/hooks/useSystemSettings.d.ts +0 -47
  367. package/dist/hooks/useThemeManager.d.ts +0 -11
  368. package/dist/hooks/useTotp.d.ts +0 -52
  369. package/dist/hooks/useTotpVerify.d.ts +0 -38
  370. package/dist/hooks/useTransactionSigning.d.ts +0 -45
  371. package/dist/hooks/useWallet.d.ts +0 -10
  372. package/dist/hooks/useWalletDiscovery.d.ts +0 -24
  373. package/dist/hooks/useWalletEnrollment.d.ts +0 -9
  374. package/dist/hooks/useWalletMaterial.d.ts +0 -10
  375. package/dist/hooks/useWalletRecovery.d.ts +0 -9
  376. package/dist/hooks/useWalletSigning.d.ts +0 -31
  377. package/dist/hooks/useWebAuthn.d.ts +0 -25
  378. package/dist/i18n/I18nProvider.d.ts +0 -16
  379. package/dist/i18n/context.d.ts +0 -6
  380. package/dist/i18n/index.d.ts +0 -5
  381. package/dist/i18n/translations.d.ts +0 -66
  382. package/dist/i18n/useI18n.d.ts +0 -9
  383. package/dist/index-BI9Bj9DF.js +0 -19650
  384. package/dist/index-BI9Bj9DF.js.map +0 -1
  385. package/dist/index-CDRTfEJz.cjs +0 -2061
  386. package/dist/index-CDRTfEJz.cjs.map +0 -1
  387. package/dist/silentWalletEnroll-C3JRAD9_.js +0 -42
  388. package/dist/silentWalletEnroll-C3JRAD9_.js.map +0 -1
  389. package/dist/silentWalletEnroll-DRYQAQfg.cjs +0 -1
  390. package/dist/silentWalletEnroll-DRYQAQfg.cjs.map +0 -1
  391. package/dist/solanaKeypair-BlXol3nh.js.map +0 -1
  392. package/dist/solanaKeypair-C-lIR1JY.cjs +0 -1
  393. package/dist/solanaKeypair-C-lIR1JY.cjs.map +0 -1
  394. package/dist/types/adminUser.d.ts +0 -168
  395. package/dist/types/auth.d.ts +0 -122
  396. package/dist/types/config.d.ts +0 -266
  397. package/dist/types/deposit.d.ts +0 -490
  398. package/dist/types/index.d.ts +0 -13
  399. package/dist/types/invite.d.ts +0 -71
  400. package/dist/types/member.d.ts +0 -45
  401. package/dist/types/org.d.ts +0 -133
  402. package/dist/types/profile.d.ts +0 -56
  403. package/dist/types/session.d.ts +0 -28
  404. package/dist/types/setup.d.ts +0 -47
  405. package/dist/types/systemSettings.d.ts +0 -85
  406. package/dist/types/totp.d.ts +0 -52
  407. package/dist/types/wallet.d.ts +0 -309
  408. package/dist/utils/adminUserApi.d.ts +0 -60
  409. package/dist/utils/apiClient.d.ts +0 -78
  410. package/dist/utils/cryptoShim.d.ts +0 -17
  411. package/dist/utils/csrf.d.ts +0 -1
  412. package/dist/utils/deviceDetection.d.ts +0 -17
  413. package/dist/utils/embeddedWallet.d.ts +0 -75
  414. package/dist/utils/inviteApi.d.ts +0 -31
  415. package/dist/utils/memberApi.d.ts +0 -23
  416. package/dist/utils/orgApi.d.ts +0 -36
  417. package/dist/utils/profileApi.d.ts +0 -26
  418. package/dist/utils/sanitization.d.ts +0 -66
  419. package/dist/utils/sessionApi.d.ts +0 -16
  420. package/dist/utils/setupApi.d.ts +0 -21
  421. package/dist/utils/silentWalletEnroll.d.ts +0 -41
  422. package/dist/utils/systemSettingsApi.d.ts +0 -18
  423. package/dist/utils/tabSync.d.ts +0 -46
  424. package/dist/utils/tokenManager.d.ts +0 -107
  425. package/dist/utils/unlockCredential.d.ts +0 -5
  426. package/dist/utils/validation.d.ts +0 -48
  427. package/dist/utils/walletDetection.d.ts +0 -23
  428. package/dist/utils/webauthnJson.d.ts +0 -21
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminWithdrawalHistory-BGjfrIe3.js","sources":["../src/components/deposit/admin/AdminWithdrawalStats.tsx","../src/components/deposit/admin/AdminWithdrawalQueue.tsx","../src/components/deposit/admin/AdminPrivacyPeriodDeposits.tsx","../src/components/deposit/admin/AdminWithdrawalHistory.tsx"],"sourcesContent":["/**\n * Admin withdrawal statistics component\n *\n * Shows high-level withdrawal pipeline stats in a single row.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { useAdminDeposits } from '../../../hooks/useAdminDeposits';\nimport type { AdminDepositStatsResponse } from '../../../types/deposit';\nimport { FeatureDisabledMessage } from './FeatureDisabledMessage';\nimport { isFeatureDisabledError } from './featureDisabled';\nimport { StatsBar } from '../../admin/StatsBar';\n\nexport interface AdminWithdrawalStatsProps {\n /** Auto-refresh interval in milliseconds (0 to disable) */\n refreshInterval?: number;\n /** Additional CSS classes */\n className?: string;\n /** Callback when stats are loaded */\n onLoad?: (stats: AdminDepositStatsResponse) => void;\n}\n\nexport function AdminWithdrawalStats({\n refreshInterval = 0,\n className = '',\n onLoad,\n}: AdminWithdrawalStatsProps) {\n const { getStats, isLoading, error, clearError } = useAdminDeposits();\n\n const [stats, setStats] = useState<AdminDepositStatsResponse | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n const fetchStats = useCallback(async () => {\n try {\n const result = await getStats();\n setStats(result);\n onLoad?.(result);\n setLoadError(null);\n } catch (err) {\n const message =\n err && typeof err === 'object' && 'message' in err\n ? String((err as { message: unknown }).message)\n : 'Failed to load stats';\n setLoadError(message);\n }\n }, [getStats, onLoad]);\n\n useEffect(() => {\n fetchStats();\n }, [fetchStats]);\n\n useEffect(() => {\n if (refreshInterval <= 0) return;\n const interval = setInterval(fetchStats, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, fetchStats]);\n\n const errorMessage = loadError || error;\n if (isFeatureDisabledError(errorMessage)) {\n return <FeatureDisabledMessage feature=\"Privacy Cash\" className={className} />;\n }\n\n if (errorMessage) {\n return (\n <div className={`cedros-admin-stats ${className}`}>\n <p className=\"cedros-admin-error\">{errorMessage}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={() => {\n clearError();\n setLoadError(null);\n fetchStats();\n }}\n >\n Retry\n </button>\n </div>\n );\n }\n\n if (isLoading && !stats) {\n return (\n <div className={`cedros-admin-stats ${className}`}>\n <StatsBar\n stats={[\n { label: 'Total Withdrawn', value: 0 },\n { label: 'Pending Withdraw', value: 0 },\n { label: 'In Privacy Period', value: 0 },\n { label: 'Microbatch (SOL)', value: '0.0000' },\n ]}\n isLoading\n />\n </div>\n );\n }\n\n if (!stats) return null;\n\n return (\n <div className={`cedros-admin-stats ${className}`}>\n <StatsBar\n stats={[\n { label: 'Total Withdrawn', value: stats.totalWithdrawnCount },\n { label: 'Pending Withdraw', value: stats.pendingWithdrawalCount },\n { label: 'In Privacy Period', value: stats.inPrivacyPeriodCount ?? 0 },\n { label: 'Microbatch (SOL)', value: stats.readyForWithdrawalSol?.toFixed(4) ?? '0.0000' },\n ]}\n isLoading={isLoading}\n onRefresh={fetchStats}\n />\n </div>\n );\n}\n","/**\n * Admin withdrawal queue component\n *\n * Shows deposits that are ready for withdrawal (privacy period elapsed).\n * Includes buttons to process individual or all withdrawals.\n * Requires system admin privileges.\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useAdminDeposits } from '../../../hooks/useAdminDeposits';\nimport type {\n AdminDepositItem,\n AdminDepositListResponse,\n ProcessWithdrawalResponse,\n ProcessAllWithdrawalsResponse,\n} from '../../../types/deposit';\nimport { FeatureDisabledMessage } from './FeatureDisabledMessage';\nimport { isFeatureDisabledError } from './featureDisabled';\n\ntype QueueSortField = 'userId' | 'amountLamports' | 'withdrawalAvailableAt';\ntype SortOrder = 'asc' | 'desc';\n\nexport interface AdminWithdrawalQueueProps {\n /** Number of items per page (default: 20) */\n pageSize?: number;\n /** Auto-refresh interval in milliseconds (0 to disable) */\n refreshInterval?: number;\n /** Additional CSS classes */\n className?: string;\n /** Callback when list is loaded */\n onLoad?: (response: AdminDepositListResponse) => void;\n /** Callback when a withdrawal item is clicked */\n onItemClick?: (item: AdminDepositItem) => void;\n /** Callback when a withdrawal is processed */\n onWithdrawalProcessed?: (response: ProcessWithdrawalResponse) => void;\n /** Callback when all withdrawals are processed */\n onAllProcessed?: (response: ProcessAllWithdrawalsResponse) => void;\n}\n\nfunction formatAmount(lamports: number | null): string {\n if (lamports === null || lamports === undefined) return '—';\n const solAmount = lamports / 1_000_000_000;\n return `${solAmount.toFixed(4)} SOL`;\n}\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nfunction truncateId(id: string): string {\n if (id.length <= 12) return id;\n return `${id.slice(0, 6)}...${id.slice(-4)}`;\n}\n\nfunction getTimeElapsed(dateString: string): string {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffDays > 0) return `${diffDays}d ago`;\n if (diffHours > 0) return `${diffHours}h ago`;\n if (diffMins > 0) return `${diffMins}m ago`;\n return 'just now';\n}\n\nfunction isWithinPrivacyPeriod(withdrawalAvailableAt: string | undefined): boolean {\n if (!withdrawalAvailableAt) return true;\n return new Date(withdrawalAvailableAt) > new Date();\n}\n\n/**\n * Admin withdrawal queue display\n *\n * Shows deposits ready for withdrawal processing with action buttons.\n */\nexport function AdminWithdrawalQueue({\n pageSize = 20,\n refreshInterval = 0,\n className = '',\n onLoad,\n onItemClick,\n onWithdrawalProcessed,\n onAllProcessed,\n}: AdminWithdrawalQueueProps) {\n const {\n listPendingWithdrawals,\n processWithdrawal,\n processAllWithdrawals,\n isLoading,\n error,\n clearError,\n } = useAdminDeposits();\n\n const [items, setItems] = useState<AdminDepositItem[]>([]);\n const [total, setTotal] = useState(0);\n const [offset, setOffset] = useState(0);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [sortField, setSortField] = useState<QueueSortField>('withdrawalAvailableAt');\n const [sortOrder, setSortOrder] = useState<SortOrder>('asc');\n\n const toggleSort = (field: QueueSortField) => {\n if (sortField === field) {\n setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc');\n } else {\n setSortField(field);\n setSortOrder(field === 'withdrawalAvailableAt' ? 'asc' : 'desc');\n }\n };\n\n const sortedItems = useMemo(() => {\n return [...items].sort((a, b) => {\n let aVal: string | number;\n let bVal: string | number;\n\n switch (sortField) {\n case 'userId':\n aVal = a.userId.toLowerCase();\n bVal = b.userId.toLowerCase();\n break;\n case 'amountLamports':\n aVal = a.amountLamports ?? 0;\n bVal = b.amountLamports ?? 0;\n break;\n case 'withdrawalAvailableAt':\n aVal = a.withdrawalAvailableAt ? new Date(a.withdrawalAvailableAt).getTime() : 0;\n bVal = b.withdrawalAvailableAt ? new Date(b.withdrawalAvailableAt).getTime() : 0;\n break;\n default:\n return 0;\n }\n\n if (aVal < bVal) return sortOrder === 'asc' ? -1 : 1;\n if (aVal > bVal) return sortOrder === 'asc' ? 1 : -1;\n return 0;\n });\n }, [items, sortField, sortOrder]);\n\n // Processing state\n const [processingId, setProcessingId] = useState<string | null>(null);\n const [processingAll, setProcessingAll] = useState(false);\n const [processResult, setProcessResult] = useState<{\n type: 'success' | 'error';\n message: string;\n } | null>(null);\n\n // Early withdrawal confirmation modal\n const [earlyWithdrawalItem, setEarlyWithdrawalItem] = useState<AdminDepositItem | null>(null);\n\n const fetchItems = useCallback(async () => {\n try {\n const result = await listPendingWithdrawals({ limit: pageSize, offset });\n setItems(result.deposits);\n setTotal(result.total);\n onLoad?.(result);\n setLoadError(null);\n } catch (err) {\n const message =\n err && typeof err === 'object' && 'message' in err\n ? String((err as { message: unknown }).message)\n : 'Failed to load pending withdrawals';\n setLoadError(message);\n }\n }, [pageSize, offset, listPendingWithdrawals, onLoad]);\n\n // Reset offset when page size changes\n useEffect(() => {\n setOffset(0);\n }, [pageSize]);\n\n // Fetch on mount and when dependencies change\n useEffect(() => {\n fetchItems();\n }, [fetchItems]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchItems, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, fetchItems]);\n\n // Clear result message after 5 seconds\n useEffect(() => {\n if (!processResult) return;\n const timer = setTimeout(() => setProcessResult(null), 5000);\n return () => clearTimeout(timer);\n }, [processResult]);\n\n const totalPages = Math.ceil(total / pageSize);\n const currentPage = Math.floor(offset / pageSize) + 1;\n\n const goToPage = (page: number) => {\n const newOffset = (page - 1) * pageSize;\n setOffset(Math.max(0, Math.min(newOffset, Math.max(0, total - 1))));\n };\n\n const handleProcessSingle = async (item: AdminDepositItem, force = false) => {\n // Check if within privacy period and not forcing\n if (!force && isWithinPrivacyPeriod(item.withdrawalAvailableAt)) {\n setEarlyWithdrawalItem(item);\n return;\n }\n\n setProcessingId(item.id);\n setProcessResult(null);\n\n try {\n const result = await processWithdrawal(item.id, { force });\n if (result.success) {\n setProcessResult({\n type: 'success',\n message: `Withdrawal processed: ${result.txSignature?.slice(0, 12)}...`,\n });\n onWithdrawalProcessed?.(result);\n // Refresh the list\n await fetchItems();\n } else {\n setProcessResult({\n type: 'error',\n message: result.error || 'Failed to process withdrawal',\n });\n }\n } catch (err) {\n setProcessResult({\n type: 'error',\n message: err instanceof Error ? err.message : 'Failed to process withdrawal',\n });\n } finally {\n setProcessingId(null);\n setEarlyWithdrawalItem(null);\n }\n };\n\n const handleProcessAll = async () => {\n if (items.length === 0) return;\n\n setProcessingAll(true);\n setProcessResult(null);\n\n try {\n const result = await processAllWithdrawals();\n if (result.totalSucceeded > 0) {\n setProcessResult({\n type: 'success',\n message: `Processed ${result.totalSucceeded}/${result.totalProcessed} withdrawals`,\n });\n } else if (result.totalFailed > 0) {\n setProcessResult({\n type: 'error',\n message: `Failed to process ${result.totalFailed} withdrawals`,\n });\n }\n onAllProcessed?.(result);\n // Refresh the list\n await fetchItems();\n } catch (err) {\n setProcessResult({\n type: 'error',\n message: err instanceof Error ? err.message : 'Failed to process withdrawals',\n });\n } finally {\n setProcessingAll(false);\n }\n };\n\n // Feature disabled state\n const errorMessage = loadError || error;\n if (isFeatureDisabledError(errorMessage)) {\n return <FeatureDisabledMessage feature=\"Privacy Cash\" className={className} />;\n }\n\n // Error state\n if (errorMessage) {\n return (\n <div\n className={`cedros-admin-withdrawal-queue cedros-admin-withdrawal-queue-error ${className}`}\n >\n <p className=\"cedros-admin-error\">{errorMessage}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={() => {\n clearError();\n setLoadError(null);\n fetchItems();\n }}\n >\n Retry\n </button>\n </div>\n );\n }\n\n // Loading state (initial load only)\n if (isLoading && items.length === 0 && !processingId && !processingAll) {\n return (\n <div\n className={`cedros-admin-withdrawal-queue cedros-admin-withdrawal-queue-loading ${className}`}\n >\n <span className=\"cedros-admin-loading-indicator\" />\n <span className=\"cedros-admin-loading-text\">Loading withdrawal queue...</span>\n </div>\n );\n }\n\n return (\n <div className={`cedros-admin-withdrawal-queue ${className}`}>\n {/* Early Withdrawal Confirmation Modal */}\n {earlyWithdrawalItem && (\n <div\n className=\"cedros-admin-modal-overlay\"\n onClick={() => setEarlyWithdrawalItem(null)}\n onKeyDown={(e) => e.key === 'Escape' && setEarlyWithdrawalItem(null)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"early-withdrawal-title\"\n >\n <div\n className=\"cedros-admin-modal cedros-admin-modal-warning\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={() => {}}\n role=\"document\"\n >\n <h3 id=\"early-withdrawal-title\" className=\"cedros-admin-modal-title\">\n Early Withdrawal Warning\n </h3>\n <div className=\"cedros-admin-modal-content\">\n <p className=\"cedros-admin-modal-warning-text\">\n <strong>This deposit is still within its privacy period.</strong>\n </p>\n <p>\n Processing this withdrawal early may compromise user privacy. The privacy period\n exists to provide plausible deniability for deposits.\n </p>\n <p className=\"cedros-admin-modal-details\">\n User: {truncateId(earlyWithdrawalItem.userId)}\n <br />\n Amount: {formatAmount(earlyWithdrawalItem.amountLamports)}\n <br />\n Available at:{' '}\n {earlyWithdrawalItem.withdrawalAvailableAt\n ? formatDate(earlyWithdrawalItem.withdrawalAvailableAt)\n : '—'}\n </p>\n <p>Are you sure you want to process this withdrawal early?</p>\n </div>\n <div className=\"cedros-admin-modal-actions\">\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={() => setEarlyWithdrawalItem(null)}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-danger\"\n onClick={() => handleProcessSingle(earlyWithdrawalItem, true)}\n disabled={processingId === earlyWithdrawalItem.id}\n >\n {processingId === earlyWithdrawalItem.id ? 'Processing...' : 'Process Early'}\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* Result message */}\n {processResult && (\n <div\n className={`cedros-admin-result cedros-admin-result-${processResult.type}`}\n role=\"status\"\n aria-live=\"polite\"\n >\n {processResult.message}\n </div>\n )}\n\n <div className=\"cedros-admin-withdrawal-queue-header\">\n <h4 className=\"cedros-admin-withdrawal-queue-title\">Pending Withdrawals</h4>\n <div className=\"cedros-admin-withdrawal-queue-actions\">\n <span className=\"cedros-admin-queue-count\">{total} pending</span>\n <button\n type=\"button\"\n className=\"cedros-admin__stats-bar-refresh\"\n onClick={fetchItems}\n disabled={isLoading || processingAll}\n title=\"Refresh queue\"\n aria-label=\"Refresh queue\"\n >\n {isLoading && !processingAll ? '...' : '↻'}\n </button>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-primary cedros-button-sm\"\n onClick={handleProcessAll}\n disabled={isLoading || processingAll || items.length === 0}\n title=\"Process all ready withdrawals\"\n >\n {processingAll ? 'Processing...' : 'Process All'}\n </button>\n </div>\n </div>\n\n {items.length === 0 ? (\n <div className=\"cedros-admin-empty\">\n <p className=\"cedros-admin-empty-message\">No pending withdrawals.</p>\n </div>\n ) : (\n <>\n <div className=\"cedros-admin-withdrawal-table\">\n <div className=\"cedros-admin-withdrawal-thead\">\n <div className=\"cedros-admin-withdrawal-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'userId' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('userId')}\n aria-label=\"Sort by user\"\n >\n User{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'userId' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-withdrawal-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'amountLamports' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('amountLamports')}\n aria-label=\"Sort by amount\"\n >\n Amount{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'amountLamports' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-withdrawal-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'withdrawalAvailableAt' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('withdrawalAvailableAt')}\n aria-label=\"Sort by ready since\"\n >\n Ready Since{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'withdrawalAvailableAt'\n ? sortOrder === 'asc'\n ? '↑'\n : '↓'\n : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-withdrawal-th\">Waiting</div>\n <div className=\"cedros-admin-withdrawal-th cedros-admin-withdrawal-th-action\">\n Action\n </div>\n </div>\n {sortedItems.map((item) => {\n const withinPrivacyPeriod = isWithinPrivacyPeriod(item.withdrawalAvailableAt);\n const isProcessing = processingId === item.id;\n\n return (\n <div\n key={item.id}\n className={`cedros-admin-withdrawal-row ${withinPrivacyPeriod ? 'cedros-admin-withdrawal-row-early' : ''}`}\n onClick={() => onItemClick?.(item)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onItemClick?.(item);\n }\n }}\n role={onItemClick ? 'button' : undefined}\n tabIndex={onItemClick ? 0 : undefined}\n >\n <div className=\"cedros-admin-withdrawal-td\" title={item.userId}>\n {truncateId(item.userId)}\n </div>\n <div className=\"cedros-admin-withdrawal-td\">\n {formatAmount(item.amountLamports)}\n </div>\n <div className=\"cedros-admin-withdrawal-td\">\n {item.withdrawalAvailableAt ? formatDate(item.withdrawalAvailableAt) : '—'}\n </div>\n <div className=\"cedros-admin-withdrawal-td cedros-admin-withdrawal-waiting\">\n {item.withdrawalAvailableAt\n ? withinPrivacyPeriod\n ? 'In privacy period'\n : getTimeElapsed(item.withdrawalAvailableAt)\n : '—'}\n </div>\n <div className=\"cedros-admin-withdrawal-td cedros-admin-withdrawal-td-action\">\n <button\n type=\"button\"\n className={`cedros-button cedros-button-sm ${withinPrivacyPeriod ? 'cedros-button-warning' : 'cedros-button-primary'}`}\n onClick={(e) => {\n e.stopPropagation();\n handleProcessSingle(item);\n }}\n disabled={isProcessing || processingAll}\n title={\n withinPrivacyPeriod\n ? 'Early withdrawal (requires confirmation)'\n : 'Process this withdrawal'\n }\n >\n {isProcessing ? '...' : withinPrivacyPeriod ? 'Early' : 'Process'}\n </button>\n </div>\n </div>\n );\n })}\n </div>\n\n {totalPages > 1 && (\n <div className=\"cedros-admin-pagination\">\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage - 1)}\n disabled={currentPage <= 1}\n >\n Previous\n </button>\n <span className=\"cedros-admin-page-info\">\n Page {currentPage} of {totalPages} ({total} total)\n </span>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage + 1)}\n disabled={currentPage >= totalPages}\n >\n Next\n </button>\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n","/**\n * Admin privacy period deposits component\n *\n * Shows deposits that are still in the privacy period (completed but not yet ready for withdrawal).\n * Requires system admin privileges.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { useAdminDeposits } from '../../../hooks/useAdminDeposits';\nimport type { AdminDepositItem, AdminDepositListResponse } from '../../../types/deposit';\nimport { FeatureDisabledMessage } from './FeatureDisabledMessage';\nimport { isFeatureDisabledError } from './featureDisabled';\n\nexport interface AdminPrivacyPeriodDepositsProps {\n /** Number of items per page (default: 20) */\n pageSize?: number;\n /** Auto-refresh interval in milliseconds (0 to disable) */\n refreshInterval?: number;\n /** Additional CSS classes */\n className?: string;\n /** Callback when list is loaded */\n onLoad?: (response: AdminDepositListResponse) => void;\n /** Callback when a deposit item is clicked */\n onItemClick?: (item: AdminDepositItem) => void;\n}\n\nfunction formatAmount(lamports: number | null): string {\n if (lamports === null || lamports === undefined) return '—';\n const solAmount = lamports / 1_000_000_000;\n return `${solAmount.toFixed(4)} SOL`;\n}\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nfunction truncateId(id: string): string {\n if (id.length <= 12) return id;\n return `${id.slice(0, 6)}...${id.slice(-4)}`;\n}\n\nfunction getTimeRemaining(dateString: string): string {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n\n if (diffMs <= 0) return 'Ready';\n\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffDays > 0) {\n const remainingHours = diffHours % 24;\n return remainingHours > 0 ? `${diffDays}d ${remainingHours}h` : `${diffDays}d`;\n }\n if (diffHours > 0) {\n const remainingMins = diffMins % 60;\n return remainingMins > 0 ? `${diffHours}h ${remainingMins}m` : `${diffHours}h`;\n }\n return `${diffMins}m`;\n}\n\n/**\n * Admin privacy period deposits display\n *\n * Shows deposits that are still in the privacy period (not yet available for withdrawal).\n */\nexport function AdminPrivacyPeriodDeposits({\n pageSize = 20,\n refreshInterval = 0,\n className = '',\n onLoad,\n onItemClick,\n}: AdminPrivacyPeriodDepositsProps) {\n const { listInPrivacyPeriod, isLoading, error, clearError } = useAdminDeposits();\n\n const [items, setItems] = useState<AdminDepositItem[]>([]);\n const [total, setTotal] = useState(0);\n const [offset, setOffset] = useState(0);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n const fetchItems = useCallback(async () => {\n try {\n const result = await listInPrivacyPeriod({ limit: pageSize, offset });\n setItems(result.deposits);\n setTotal(result.total);\n onLoad?.(result);\n setLoadError(null);\n } catch (err) {\n const message =\n err && typeof err === 'object' && 'message' in err\n ? String((err as { message: unknown }).message)\n : 'Failed to load deposits';\n setLoadError(message);\n }\n }, [pageSize, offset, listInPrivacyPeriod, onLoad]);\n\n // Reset offset when page size changes\n useEffect(() => {\n setOffset(0);\n }, [pageSize]);\n\n // Fetch on mount and when dependencies change\n useEffect(() => {\n fetchItems();\n }, [fetchItems]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchItems, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, fetchItems]);\n\n const totalPages = Math.ceil(total / pageSize);\n const currentPage = Math.floor(offset / pageSize) + 1;\n\n const goToPage = (page: number) => {\n const newOffset = (page - 1) * pageSize;\n setOffset(Math.max(0, Math.min(newOffset, Math.max(0, total - 1))));\n };\n\n // Feature disabled state\n const errorMessage = loadError || error;\n if (isFeatureDisabledError(errorMessage)) {\n return <FeatureDisabledMessage feature=\"Privacy Cash\" className={className} />;\n }\n\n // Error state\n if (errorMessage) {\n return (\n <div\n className={`cedros-admin-privacy-deposits cedros-admin-privacy-deposits-error ${className}`}\n >\n <p className=\"cedros-admin-error\">{errorMessage}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={() => {\n clearError();\n setLoadError(null);\n fetchItems();\n }}\n >\n Retry\n </button>\n </div>\n );\n }\n\n // Loading state (initial load only)\n if (isLoading && items.length === 0) {\n return (\n <div\n className={`cedros-admin-privacy-deposits cedros-admin-privacy-deposits-loading ${className}`}\n >\n <span className=\"cedros-admin-loading-indicator\" />\n <span className=\"cedros-admin-loading-text\">Loading deposits...</span>\n </div>\n );\n }\n\n return (\n <div className={`cedros-admin-privacy-deposits ${className}`}>\n <div className=\"cedros-admin-privacy-deposits-header\">\n <h4 className=\"cedros-admin-privacy-deposits-title\">In Privacy Period</h4>\n <div className=\"cedros-admin-privacy-deposits-actions\">\n <span className=\"cedros-admin-queue-count\">\n {total} deposit{total !== 1 ? 's' : ''}\n </span>\n <button\n type=\"button\"\n className=\"cedros-admin__stats-bar-refresh\"\n onClick={fetchItems}\n disabled={isLoading}\n title=\"Refresh list\"\n aria-label=\"Refresh list\"\n >\n {isLoading ? '...' : '↻'}\n </button>\n </div>\n </div>\n\n {items.length === 0 ? (\n <div className=\"cedros-admin-empty\">\n <p className=\"cedros-admin-empty-message\">No deposits in privacy period.</p>\n </div>\n ) : (\n <>\n <div className=\"cedros-admin-privacy-table\">\n <div className=\"cedros-admin-privacy-thead\">\n <div className=\"cedros-admin-privacy-th\">\n <button\n type=\"button\"\n className=\"cedros-admin-sort-button\"\n aria-label=\"Sort by user\"\n >\n User <span className=\"cedros-admin-sort-icon\">↕</span>\n </button>\n </div>\n <div className=\"cedros-admin-privacy-th\">\n <button\n type=\"button\"\n className=\"cedros-admin-sort-button\"\n aria-label=\"Sort by amount\"\n >\n Amount <span className=\"cedros-admin-sort-icon\">↕</span>\n </button>\n </div>\n <div className=\"cedros-admin-privacy-th\">\n <button\n type=\"button\"\n className=\"cedros-admin-sort-button\"\n aria-label=\"Sort by deposited\"\n >\n Deposited <span className=\"cedros-admin-sort-icon\">↕</span>\n </button>\n </div>\n <div className=\"cedros-admin-privacy-th\">\n <button\n type=\"button\"\n className=\"cedros-admin-sort-button\"\n aria-label=\"Sort by ready in\"\n >\n Ready In <span className=\"cedros-admin-sort-icon\">↕</span>\n </button>\n </div>\n </div>\n {items.map((item) => (\n <div\n key={item.id}\n className=\"cedros-admin-privacy-row\"\n onClick={() => onItemClick?.(item)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onItemClick?.(item);\n }\n }}\n role={onItemClick ? 'button' : undefined}\n tabIndex={onItemClick ? 0 : undefined}\n >\n <div className=\"cedros-admin-privacy-td\" title={item.userId}>\n {truncateId(item.userId)}\n </div>\n <div className=\"cedros-admin-privacy-td\">{formatAmount(item.amountLamports)}</div>\n <div className=\"cedros-admin-privacy-td\">\n {item.completedAt ? formatDate(item.completedAt) : '—'}\n </div>\n <div className=\"cedros-admin-privacy-td cedros-admin-privacy-remaining\">\n {item.withdrawalAvailableAt ? getTimeRemaining(item.withdrawalAvailableAt) : '—'}\n </div>\n </div>\n ))}\n </div>\n\n {totalPages > 1 && (\n <div className=\"cedros-admin-pagination\">\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage - 1)}\n disabled={currentPage <= 1}\n >\n Previous\n </button>\n <span className=\"cedros-admin-page-info\">\n Page {currentPage} of {totalPages} ({total} total)\n </span>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage + 1)}\n disabled={currentPage >= totalPages}\n >\n Next\n </button>\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n","/**\n * Admin withdrawal history component\n *\n * Shows deposits that have been fully withdrawn (processed).\n * Requires system admin privileges.\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useAdminDeposits } from '../../../hooks/useAdminDeposits';\nimport type { AdminDepositItem, AdminDepositListResponse } from '../../../types/deposit';\nimport { FeatureDisabledMessage } from './FeatureDisabledMessage';\nimport { isFeatureDisabledError } from './featureDisabled';\n\ntype WithdrawalSortField = 'userId' | 'amountLamports' | 'completedAt' | 'withdrawalTxSignature';\ntype SortOrder = 'asc' | 'desc';\n\nexport interface AdminWithdrawalHistoryProps {\n /** Number of items per page (default: 20) */\n pageSize?: number;\n /** Auto-refresh interval in milliseconds (0 to disable) */\n refreshInterval?: number;\n /** Additional CSS classes */\n className?: string;\n /** Callback when list is loaded */\n onLoad?: (response: AdminDepositListResponse) => void;\n /** Callback when a withdrawal item is clicked */\n onItemClick?: (item: AdminDepositItem) => void;\n}\n\nfunction formatAmount(lamports: number | null): string {\n if (lamports === null || lamports === undefined) return '—';\n const solAmount = lamports / 1_000_000_000;\n return `${solAmount.toFixed(4)} SOL`;\n}\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nfunction truncateSignature(sig: string): string {\n if (sig.length <= 16) return sig;\n return `${sig.slice(0, 8)}...${sig.slice(-6)}`;\n}\n\nfunction truncateId(id: string): string {\n if (id.length <= 12) return id;\n return `${id.slice(0, 6)}...${id.slice(-4)}`;\n}\n\n/**\n * Admin withdrawal history display\n *\n * Shows deposits that have been fully withdrawn.\n */\nexport function AdminWithdrawalHistory({\n pageSize = 20,\n refreshInterval = 0,\n className = '',\n onLoad,\n onItemClick,\n}: AdminWithdrawalHistoryProps) {\n const { listDeposits, isLoading, error, clearError } = useAdminDeposits();\n\n const [items, setItems] = useState<AdminDepositItem[]>([]);\n const [total, setTotal] = useState(0);\n const [offset, setOffset] = useState(0);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [sortField, setSortField] = useState<WithdrawalSortField>('completedAt');\n const [sortOrder, setSortOrder] = useState<SortOrder>('desc');\n\n const toggleSort = (field: WithdrawalSortField) => {\n if (sortField === field) {\n setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc');\n } else {\n setSortField(field);\n setSortOrder('desc');\n }\n };\n\n const sortedItems = useMemo(() => {\n return [...items].sort((a, b) => {\n let aVal: string | number;\n let bVal: string | number;\n\n switch (sortField) {\n case 'userId':\n aVal = a.userId.toLowerCase();\n bVal = b.userId.toLowerCase();\n break;\n case 'amountLamports':\n aVal = a.amountLamports ?? 0;\n bVal = b.amountLamports ?? 0;\n break;\n case 'completedAt':\n aVal = a.completedAt ? new Date(a.completedAt).getTime() : 0;\n bVal = b.completedAt ? new Date(b.completedAt).getTime() : 0;\n break;\n case 'withdrawalTxSignature':\n aVal = a.withdrawalTxSignature || '';\n bVal = b.withdrawalTxSignature || '';\n break;\n default:\n return 0;\n }\n\n if (aVal < bVal) return sortOrder === 'asc' ? -1 : 1;\n if (aVal > bVal) return sortOrder === 'asc' ? 1 : -1;\n return 0;\n });\n }, [items, sortField, sortOrder]);\n\n const fetchItems = useCallback(async () => {\n try {\n const result = await listDeposits({ status: 'withdrawn', limit: pageSize, offset });\n setItems(result.deposits);\n setTotal(result.total);\n onLoad?.(result);\n setLoadError(null);\n } catch (err) {\n const message =\n err && typeof err === 'object' && 'message' in err\n ? String((err as { message: unknown }).message)\n : 'Failed to load withdrawal history';\n setLoadError(message);\n }\n }, [pageSize, offset, listDeposits, onLoad]);\n\n // Reset offset when page size changes\n useEffect(() => {\n setOffset(0);\n }, [pageSize]);\n\n // Fetch on mount and when dependencies change\n useEffect(() => {\n fetchItems();\n }, [fetchItems]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchItems, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, fetchItems]);\n\n const totalPages = Math.ceil(total / pageSize);\n const currentPage = Math.floor(offset / pageSize) + 1;\n\n const goToPage = (page: number) => {\n const newOffset = (page - 1) * pageSize;\n setOffset(Math.max(0, Math.min(newOffset, Math.max(0, total - 1))));\n };\n\n // Feature disabled state\n const errorMessage = loadError || error;\n if (isFeatureDisabledError(errorMessage)) {\n return <FeatureDisabledMessage feature=\"Privacy Cash\" className={className} />;\n }\n\n // Error state\n if (errorMessage) {\n return (\n <div\n className={`cedros-admin-withdrawal-history cedros-admin-withdrawal-history-error ${className}`}\n >\n <p className=\"cedros-admin-error\">{errorMessage}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={() => {\n clearError();\n setLoadError(null);\n fetchItems();\n }}\n >\n Retry\n </button>\n </div>\n );\n }\n\n // Loading state (initial load only)\n if (isLoading && items.length === 0) {\n return (\n <div\n className={`cedros-admin-withdrawal-history cedros-admin-withdrawal-history-loading ${className}`}\n >\n <span className=\"cedros-admin-loading-indicator\" />\n <span className=\"cedros-admin-loading-text\">Loading withdrawal history...</span>\n </div>\n );\n }\n\n return (\n <div className={`cedros-admin-withdrawal-history ${className}`}>\n <div className=\"cedros-admin-withdrawal-history-header\">\n <h4 className=\"cedros-admin-withdrawal-history-title\">Withdrawal History</h4>\n <div className=\"cedros-admin-withdrawal-history-actions\">\n <span className=\"cedros-admin-queue-count\">\n {total} withdrawal{total !== 1 ? 's' : ''}\n </span>\n <button\n type=\"button\"\n className=\"cedros-admin__stats-bar-refresh\"\n onClick={fetchItems}\n disabled={isLoading}\n title=\"Refresh list\"\n aria-label=\"Refresh list\"\n >\n {isLoading ? '...' : '↻'}\n </button>\n </div>\n </div>\n\n {items.length === 0 ? (\n <div className=\"cedros-admin-empty\">\n <p className=\"cedros-admin-empty-message\">No withdrawals processed yet.</p>\n </div>\n ) : (\n <>\n <div className=\"cedros-admin-history-table\">\n <div className=\"cedros-admin-history-thead\">\n <div className=\"cedros-admin-history-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'userId' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('userId')}\n aria-label=\"Sort by user\"\n >\n User{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'userId' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-history-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'amountLamports' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('amountLamports')}\n aria-label=\"Sort by amount\"\n >\n Amount{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'amountLamports' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-history-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'completedAt' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('completedAt')}\n aria-label=\"Sort by processed\"\n >\n Processed{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'completedAt' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-history-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'withdrawalTxSignature' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('withdrawalTxSignature')}\n aria-label=\"Sort by transaction\"\n >\n Transaction{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'withdrawalTxSignature'\n ? sortOrder === 'asc'\n ? '↑'\n : '↓'\n : '↕'}\n </span>\n </button>\n </div>\n </div>\n {sortedItems.map((item) => (\n <div\n key={item.id}\n className=\"cedros-admin-history-row\"\n onClick={() => onItemClick?.(item)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onItemClick?.(item);\n }\n }}\n role={onItemClick ? 'button' : undefined}\n tabIndex={onItemClick ? 0 : undefined}\n >\n <div className=\"cedros-admin-history-td\" title={item.userId}>\n {truncateId(item.userId)}\n </div>\n <div className=\"cedros-admin-history-td\">{formatAmount(item.amountLamports)}</div>\n <div className=\"cedros-admin-history-td\">\n {item.completedAt ? formatDate(item.completedAt) : '—'}\n </div>\n <div className=\"cedros-admin-history-td\">\n {item.withdrawalTxSignature ? (\n <a\n href={`https://orbmarkets.io/tx/${item.withdrawalTxSignature}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"cedros-admin-tx-link\"\n onClick={(e) => e.stopPropagation()}\n title={item.withdrawalTxSignature}\n >\n {truncateSignature(item.withdrawalTxSignature)}\n </a>\n ) : (\n '—'\n )}\n </div>\n </div>\n ))}\n </div>\n\n {totalPages > 1 && (\n <div className=\"cedros-admin-pagination\">\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage - 1)}\n disabled={currentPage <= 1}\n >\n Previous\n </button>\n <span className=\"cedros-admin-page-info\">\n Page {currentPage} of {totalPages} ({total} total)\n </span>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage + 1)}\n disabled={currentPage >= totalPages}\n >\n Next\n </button>\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"],"names":["AdminWithdrawalStats","refreshInterval","className","onLoad","getStats","isLoading","error","clearError","useAdminDeposits","stats","setStats","useState","loadError","setLoadError","fetchStats","useCallback","result","err","message","useEffect","interval","errorMessage","jsxs","jsx","StatsBar","formatAmount","lamports","formatDate","dateString","truncateId","id","getTimeElapsed","date","diffMs","diffMins","diffHours","diffDays","isWithinPrivacyPeriod","withdrawalAvailableAt","AdminWithdrawalQueue","pageSize","onItemClick","onWithdrawalProcessed","onAllProcessed","listPendingWithdrawals","processWithdrawal","processAllWithdrawals","items","setItems","total","setTotal","offset","setOffset","sortField","setSortField","sortOrder","setSortOrder","toggleSort","field","sortedItems","useMemo","b","aVal","bVal","processingId","setProcessingId","processingAll","setProcessingAll","processResult","setProcessResult","earlyWithdrawalItem","setEarlyWithdrawalItem","fetchItems","timer","totalPages","currentPage","goToPage","page","newOffset","handleProcessSingle","item","force","handleProcessAll","e","Fragment","withinPrivacyPeriod","isProcessing","getTimeRemaining","now","remainingHours","remainingMins","AdminPrivacyPeriodDeposits","listInPrivacyPeriod","truncateSignature","sig","AdminWithdrawalHistory","listDeposits","a"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime");require("react");const e=require("./AuthenticationSettings-BPAh1my6.cjs");function i(){return t.jsx("div",{className:"cedros-dashboard__section",children:t.jsx(e.AuthenticationSettings,{})})}exports.default=i;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticationSettings-5Vi7Ib_A.cjs","sources":["../src/admin/sections/AuthenticationSettings.tsx"],"sourcesContent":["/**\n * Authentication Settings Section - Plugin wrapper\n */\n\nimport React from 'react';\nimport { AuthenticationSettings as Settings } from '../../components/admin/settings';\n\nexport default function AuthenticationSettings(): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__section\">\n <Settings />\n </div>\n );\n}\n"],"names":["AuthenticationSettings","jsx","Settings"],"mappings":"+LAOA,SAAwBA,GAA4C,CAClE,aACG,MAAA,CAAI,UAAU,4BACb,SAAAC,MAACC,EAAAA,yBAAS,EACZ,CAEJ"}
@@ -0,0 +1 @@
1
+ "use strict";const e=require("react/jsx-runtime"),o=require("react"),A=require("./LoadingSpinner-d6sSxgQN.cjs"),E=require("./ErrorMessage-CHbYbVi2.cjs"),C=require("./AutosaveStatus-CYkC2aI_.cjs"),D=require("./apiClient-CTTKhsYb.cjs"),$=require("./useOrgs-CVbacmaQ.cjs");function T(){const{config:n,_internal:g}=D.useCedrosLogin(),u=n.serverUrl,f=o.useRef(g?.getAccessToken??(()=>null));f.current=g?.getAccessToken??(()=>null);const[b,S]=o.useState([]),[v,x]=o.useState(0),[k,c]=o.useState(!1),[N,r]=o.useState(null),h=o.useCallback(()=>{const d=f.current();return{"Content-Type":"application/json",...d?{Authorization:`Bearer ${d}`}:{}}},[]),p=o.useCallback(async(d,t=50,a=0)=>{c(!0),r(null);try{const i=new URLSearchParams;d&&i.set("org_id",d),i.set("limit",String(t)),i.set("offset",String(a));const s=await fetch(`${u}/admin/sso-providers?${i}`,{headers:h()});if(!s.ok){const P=await s.json().catch(()=>({}));throw new Error(P.error||`Failed to fetch SSO providers: ${s.status}`)}const j=await s.json();return S(j.providers),x(j.total),j}catch(i){const s=i instanceof Error?i:new Error(String(i));throw r(s),s}finally{c(!1)}},[u,h]),l=o.useCallback(async d=>{c(!0),r(null);try{const t=await fetch(`${u}/admin/sso-providers`,{method:"POST",headers:h(),body:JSON.stringify(d)});if(!t.ok){const i=await t.json().catch(()=>({}));throw new Error(i.error||`Failed to create SSO provider: ${t.status}`)}const a=await t.json();return S(i=>[...i,a]),x(i=>i+1),a}catch(t){const a=t instanceof Error?t:new Error(String(t));throw r(a),a}finally{c(!1)}},[u,h]),m=o.useCallback(async(d,t)=>{c(!0),r(null);try{const a=await fetch(`${u}/admin/sso-providers/${d}`,{method:"PUT",headers:h(),body:JSON.stringify(t)});if(!a.ok){const s=await a.json().catch(()=>({}));throw new Error(s.error||`Failed to update SSO provider: ${a.status}`)}const i=await a.json();return S(s=>s.map(j=>j.id===d?i:j)),i}catch(a){const i=a instanceof Error?a:new Error(String(a));throw r(i),i}finally{c(!1)}},[u,h]),w=o.useCallback(async d=>{c(!0),r(null);try{const t=await fetch(`${u}/admin/sso-providers/${d}`,{method:"DELETE",headers:h()});if(!t.ok){const a=await t.json().catch(()=>({}));throw new Error(a.error||`Failed to delete SSO provider: ${t.status}`)}S(a=>a.filter(i=>i.id!==d)),x(a=>a-1)}catch(t){const a=t instanceof Error?t:new Error(String(t));throw r(a),a}finally{c(!1)}},[u,h]),y=o.useCallback(async(d,t)=>m(d,{enabled:t}),[m]);return{providers:b,total:v,isLoading:k,error:N,fetchProviders:p,createProvider:l,updateProvider:m,deleteProvider:w,toggleProvider:y}}function I({className:n}){const{providers:g,isLoading:u,error:f,fetchProviders:b,createProvider:S,updateProvider:v,deleteProvider:x,toggleProvider:k}=T(),{activeOrg:c}=$.useOrgs(),[N,r]=o.useState("list"),[h,p]=o.useState(null),[l,m]=o.useState(null);o.useEffect(()=>{b(c?.id)},[b,c?.id]);const w=()=>{p(null),m(null),r("add")},y=s=>{p(s),m(null),r("edit")},d=()=>{r("list"),p(null),m(null)},t=async s=>{if(confirm(`Delete SSO provider "${s.name}"? This cannot be undone.`))try{await x(s.id)}catch{}},a=async s=>{try{await k(s.id,!s.enabled)}catch{}},i=async s=>{m(null);try{N==="add"?await S(s):h&&await v(h.id,s),r("list"),p(null)}catch(j){m(j instanceof Error?j.message:"Failed to save provider")}};return u&&g.length===0?e.jsxs("div",{className:`cedros-system-settings cedros-system-settings-loading ${n??""}`,children:[e.jsx(A.LoadingSpinner,{}),e.jsx("span",{children:"Loading SSO providers..."})]}):N==="add"||N==="edit"?e.jsx("div",{className:`cedros-system-settings ${n??""}`,children:e.jsx(F,{provider:h,orgId:c?.id,error:l,isLoading:u,onSave:i,onCancel:d})}):e.jsxs("div",{className:`cedros-system-settings ${n??""}`,children:[e.jsxs("div",{className:"cedros-settings-page-header",children:[e.jsxs("div",{className:"cedros-settings-page-header-content",children:[e.jsx("h2",{className:"cedros-settings-page-title",children:"SSO Providers"}),e.jsx("p",{className:"cedros-settings-page-description",children:"Configure OIDC identity providers for enterprise single sign-on."})]}),e.jsx("button",{type:"button",className:"cedros-btn cedros-btn-primary",onClick:w,children:"Add Provider"})]}),f&&e.jsx(E.ErrorMessage,{error:f.message}),g.length===0?e.jsxs("div",{className:"cedros-system-settings-empty",children:[e.jsx("p",{children:"No SSO providers configured."}),e.jsx("p",{className:"cedros-text-muted",children:"Add an OIDC provider like Okta, Azure AD, or Auth0 to enable enterprise SSO."})]}):e.jsx("div",{className:"cedros-sso-provider-list",children:g.map(s=>e.jsx(L,{provider:s,onEdit:()=>y(s),onDelete:()=>t(s),onToggle:()=>a(s)},s.id))})]})}function L({provider:n,onEdit:g,onDelete:u,onToggle:f}){return e.jsxs("div",{className:`cedros-sso-provider-card ${n.enabled?"":"cedros-sso-provider-card--disabled"}`,children:[e.jsxs("div",{className:"cedros-sso-provider-card-header",children:[e.jsxs("div",{className:"cedros-sso-provider-card-info",children:[e.jsx("h3",{className:"cedros-sso-provider-card-name",children:n.name}),e.jsx("p",{className:"cedros-sso-provider-card-issuer",children:n.issuerUrl})]}),e.jsxs("button",{type:"button",role:"switch","aria-checked":n.enabled,className:`cedros-toggle ${n.enabled?"cedros-toggle-on":"cedros-toggle-off"}`,onClick:f,children:[e.jsx("span",{className:"cedros-toggle-track",children:e.jsx("span",{className:"cedros-toggle-thumb"})}),e.jsx("span",{className:"cedros-toggle-label",children:n.enabled?"Enabled":"Disabled"})]})]}),e.jsxs("div",{className:"cedros-sso-provider-card-details",children:[e.jsxs("div",{className:"cedros-sso-provider-card-detail",children:[e.jsx("span",{className:"cedros-sso-provider-card-detail-label",children:"Client ID"}),e.jsx("code",{className:"cedros-sso-provider-card-detail-value",children:n.clientId})]}),n.emailDomain&&e.jsxs("div",{className:"cedros-sso-provider-card-detail",children:[e.jsx("span",{className:"cedros-sso-provider-card-detail-label",children:"Email Domain"}),e.jsxs("span",{className:"cedros-sso-provider-card-detail-value",children:["@",n.emailDomain]})]}),e.jsxs("div",{className:"cedros-sso-provider-card-detail",children:[e.jsx("span",{className:"cedros-sso-provider-card-detail-label",children:"Registration"}),e.jsx("span",{className:"cedros-sso-provider-card-detail-value",children:n.allowRegistration?"Allowed":"Existing users only"})]})]}),e.jsxs("div",{className:"cedros-sso-provider-card-actions",children:[e.jsx("button",{type:"button",className:"cedros-btn cedros-btn-ghost",onClick:g,children:"Edit"}),e.jsx("button",{type:"button",className:"cedros-btn cedros-btn-ghost cedros-btn-danger",onClick:u,children:"Delete"})]})]})}function F({provider:n,orgId:g,error:u,isLoading:f,onSave:b,onCancel:S}){const v=!!n,[x,k]=o.useState(n?.name??""),[c,N]=o.useState(n?.issuerUrl??""),[r,h]=o.useState(n?.clientId??""),[p,l]=o.useState(""),[m,w]=o.useState(n?.emailDomain??""),[y,d]=o.useState(n?.allowRegistration??!0),[t,a]=o.useState(n?.enabled??!0),i=o.useCallback(s=>{if(s.preventDefault(),v){const j={name:x,issuerUrl:c,clientId:r,emailDomain:m||null,allowRegistration:y,enabled:t};p&&(j.clientSecret=p),b(j)}else{if(!g)return;b({orgId:g,name:x,issuerUrl:c,clientId:r,clientSecret:p,emailDomain:m||null,allowRegistration:y,enabled:t})}},[v,g,x,c,r,p,m,y,t,b]);return e.jsxs("form",{className:"cedros-sso-provider-form",onSubmit:i,children:[e.jsx("div",{className:"cedros-settings-page-header",children:e.jsxs("div",{className:"cedros-settings-page-header-content",children:[e.jsx("h2",{className:"cedros-settings-page-title",children:v?"Edit SSO Provider":"Add SSO Provider"}),e.jsx("p",{className:"cedros-settings-page-description",children:"Configure an OIDC identity provider for enterprise single sign-on."})]})}),u&&e.jsx(E.ErrorMessage,{error:u}),e.jsxs("div",{className:"cedros-form-section",children:[e.jsxs("div",{className:"cedros-form-group",children:[e.jsx("label",{className:"cedros-form-label",htmlFor:"sso-name",children:"Provider Name"}),e.jsx("input",{id:"sso-name",type:"text",className:"cedros-form-input",value:x,onChange:s=>k(s.target.value),placeholder:"e.g., Okta, Azure AD",required:!0})]}),e.jsxs("div",{className:"cedros-form-group",children:[e.jsx("label",{className:"cedros-form-label",htmlFor:"sso-issuer",children:"Issuer URL"}),e.jsx("input",{id:"sso-issuer",type:"url",className:"cedros-form-input",value:c,onChange:s=>N(s.target.value),placeholder:"https://your-org.okta.com",required:!0}),e.jsx("p",{className:"cedros-form-hint",children:"The OIDC issuer URL. Must support discovery at /.well-known/openid-configuration"})]}),e.jsxs("div",{className:"cedros-form-group",children:[e.jsx("label",{className:"cedros-form-label",htmlFor:"sso-client-id",children:"Client ID"}),e.jsx("input",{id:"sso-client-id",type:"text",className:"cedros-form-input",value:r,onChange:s=>h(s.target.value),placeholder:"OAuth client ID",required:!0})]}),e.jsxs("div",{className:"cedros-form-group",children:[e.jsxs("label",{className:"cedros-form-label",htmlFor:"sso-client-secret",children:["Client Secret"," ",v&&e.jsx("span",{className:"cedros-form-hint-inline",children:"(leave blank to keep current)"})]}),e.jsx("input",{id:"sso-client-secret",type:"password",className:"cedros-form-input",value:p,onChange:s=>l(s.target.value),placeholder:v?"••••••••":"OAuth client secret",required:!v})]}),e.jsxs("div",{className:"cedros-form-group",children:[e.jsx("label",{className:"cedros-form-label",htmlFor:"sso-email-domain",children:"Email Domain (optional)"}),e.jsx("input",{id:"sso-email-domain",type:"text",className:"cedros-form-input",value:m,onChange:s=>w(s.target.value),placeholder:"company.com"}),e.jsx("p",{className:"cedros-form-hint",children:"Restrict to users with emails from this domain"})]}),e.jsx("div",{className:"cedros-form-group",children:e.jsxs("label",{className:"cedros-form-checkbox",children:[e.jsx("input",{type:"checkbox",checked:y,onChange:s=>d(s.target.checked)}),e.jsx("span",{children:"Allow new user registration via SSO"})]})}),e.jsx("div",{className:"cedros-form-group",children:e.jsxs("label",{className:"cedros-form-checkbox",children:[e.jsx("input",{type:"checkbox",checked:t,onChange:s=>a(s.target.checked)}),e.jsx("span",{children:"Enable this provider"})]})})]}),e.jsxs("div",{className:"cedros-form-actions",children:[e.jsx("button",{type:"button",className:"cedros-btn cedros-btn-ghost",onClick:S,disabled:f,children:"Cancel"}),e.jsx("button",{type:"submit",className:"cedros-btn cedros-btn-primary",disabled:f,children:f?"Saving...":v?"Save Changes":"Add Provider"})]})]})}const O=[{id:"email",label:"Email",categories:["auth.email"]},{id:"google",label:"Google",categories:["auth.google"]},{id:"apple",label:"Apple",categories:["auth.apple"]},{id:"solana",label:"Solana",categories:["auth.solana"]},{id:"passkeys",label:"Passkeys",categories:["auth.webauthn"]},{id:"instantlink",label:"Instant Link",categories:["auth.instantlink"]},{id:"sso",label:"SSO Providers",categories:[],isCustom:!0}];function R({className:n}){const{settings:g,edits:u,isLoading:f,autosaveStatus:b,autosaveError:S,error:v,fetchSettings:x,handleChange:k}=C.useSettingsAutosave(),[c,N]=o.useState("email");o.useEffect(()=>{x()},[x]);const r=O.find(l=>l.id===c),h=o.useMemo(()=>{if(!r)return[];const l=[];for(const m of r.categories){const w=g[m]??[];l.push(...w)}return l},[g,r]),p=o.useMemo(()=>r?.keys?h.filter(l=>r.keys.includes(l.key)).sort((l,m)=>r.keys.indexOf(l.key)-r.keys.indexOf(m.key)):h,[h,r]);return f&&Object.keys(g).length===0?e.jsxs("div",{className:`cedros-system-settings cedros-system-settings-loading ${n??""}`,children:[e.jsx(A.LoadingSpinner,{}),e.jsx("span",{children:"Loading settings..."})]}):v?e.jsx("div",{className:`cedros-system-settings ${n??""}`,children:e.jsx(E.ErrorMessage,{error:v.message})}):e.jsxs("div",{className:`cedros-system-settings ${n??""}`,children:[e.jsxs("div",{className:"cedros-settings-page-header",children:[e.jsxs("div",{className:"cedros-settings-page-header-content",children:[e.jsx("h2",{className:"cedros-settings-page-title",children:"Authentication"}),e.jsx("p",{className:"cedros-settings-page-description",children:"Configure authentication providers and methods for user sign-in."})]}),e.jsx(C.AutosaveStatus,{status:b,error:S})]}),e.jsx("div",{className:"cedros-admin-tabs cedros-admin-tabs--line",children:O.map(l=>e.jsx("button",{type:"button",className:`cedros-admin-tab ${c===l.id?"cedros-admin-tab-active":""}`,onClick:()=>N(l.id),"aria-selected":c===l.id,role:"tab",children:l.label},l.id))}),e.jsx("div",{className:"cedros-admin-tab-content",role:"tabpanel",children:r?.isCustom?e.jsx(I,{}):p.length===0?e.jsx("div",{className:"cedros-system-settings-empty",children:e.jsxs("p",{children:["No settings found for ",r?.label??"this provider","."]})}):e.jsx(C.SettingsSection,{settings:p,edits:u,onChange:k})})]})}exports.AuthenticationSettings=R;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticationSettings-BPAh1my6.cjs","sources":["../src/hooks/useSsoProviders.ts","../src/components/admin/settings/SsoProvidersSettings.tsx","../src/components/admin/settings/AuthenticationSettings.tsx"],"sourcesContent":["/**\n * Hook for managing SSO providers (admin)\n */\nimport { useState, useCallback, useRef } from 'react';\nimport { useCedrosLogin } from '../context/useCedrosLogin';\n\nexport interface SsoProvider {\n id: string;\n orgId: string;\n name: string;\n issuerUrl: string;\n clientId: string;\n scopes: string[];\n enabled: boolean;\n allowRegistration: boolean;\n emailDomain: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreateSsoProviderInput {\n orgId: string;\n name: string;\n issuerUrl: string;\n clientId: string;\n clientSecret: string;\n scopes?: string[];\n enabled?: boolean;\n allowRegistration?: boolean;\n emailDomain?: string | null;\n}\n\nexport interface UpdateSsoProviderInput {\n name?: string;\n issuerUrl?: string;\n clientId?: string;\n clientSecret?: string;\n scopes?: string[];\n enabled?: boolean;\n allowRegistration?: boolean;\n emailDomain?: string | null;\n}\n\ninterface ListResponse {\n providers: SsoProvider[];\n total: number;\n limit: number;\n offset: number;\n}\n\nexport function useSsoProviders() {\n const { config, _internal } = useCedrosLogin();\n const serverUrl = config.serverUrl;\n\n // PERF-03: Stabilize getAccessToken reference using ref pattern\n // to prevent unnecessary re-creation of callbacks\n const getAccessTokenRef = useRef(_internal?.getAccessToken ?? (() => null));\n getAccessTokenRef.current = _internal?.getAccessToken ?? (() => null);\n\n const [providers, setProviders] = useState<SsoProvider[]>([]);\n const [total, setTotal] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Memoize getHeaders with empty deps since it uses ref\n const getHeaders = useCallback(() => {\n const token = getAccessTokenRef.current();\n return {\n 'Content-Type': 'application/json',\n ...(token ? { Authorization: `Bearer ${token}` } : {}),\n };\n }, []);\n\n const fetchProviders = useCallback(\n async (orgId?: string, limit = 50, offset = 0) => {\n setIsLoading(true);\n setError(null);\n try {\n const params = new URLSearchParams();\n if (orgId) params.set('org_id', orgId);\n params.set('limit', String(limit));\n params.set('offset', String(offset));\n\n const res = await fetch(`${serverUrl}/admin/sso-providers?${params}`, {\n headers: getHeaders(),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error(err.error || `Failed to fetch SSO providers: ${res.status}`);\n }\n\n const data: ListResponse = await res.json();\n setProviders(data.providers);\n setTotal(data.total);\n return data;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n },\n [serverUrl, getHeaders]\n );\n\n const createProvider = useCallback(\n async (input: CreateSsoProviderInput): Promise<SsoProvider> => {\n setIsLoading(true);\n setError(null);\n try {\n const res = await fetch(`${serverUrl}/admin/sso-providers`, {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify(input),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error(err.error || `Failed to create SSO provider: ${res.status}`);\n }\n\n const provider: SsoProvider = await res.json();\n setProviders((prev) => [...prev, provider]);\n setTotal((prev) => prev + 1);\n return provider;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n },\n [serverUrl, getHeaders]\n );\n\n const updateProvider = useCallback(\n async (id: string, input: UpdateSsoProviderInput): Promise<SsoProvider> => {\n setIsLoading(true);\n setError(null);\n try {\n const res = await fetch(`${serverUrl}/admin/sso-providers/${id}`, {\n method: 'PUT',\n headers: getHeaders(),\n body: JSON.stringify(input),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error(err.error || `Failed to update SSO provider: ${res.status}`);\n }\n\n const provider: SsoProvider = await res.json();\n setProviders((prev) => prev.map((p) => (p.id === id ? provider : p)));\n return provider;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n },\n [serverUrl, getHeaders]\n );\n\n const deleteProvider = useCallback(\n async (id: string): Promise<void> => {\n setIsLoading(true);\n setError(null);\n try {\n const res = await fetch(`${serverUrl}/admin/sso-providers/${id}`, {\n method: 'DELETE',\n headers: getHeaders(),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error(err.error || `Failed to delete SSO provider: ${res.status}`);\n }\n\n setProviders((prev) => prev.filter((p) => p.id !== id));\n setTotal((prev) => prev - 1);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n throw error;\n } finally {\n setIsLoading(false);\n }\n },\n [serverUrl, getHeaders]\n );\n\n const toggleProvider = useCallback(\n async (id: string, enabled: boolean): Promise<SsoProvider> => {\n return updateProvider(id, { enabled });\n },\n [updateProvider]\n );\n\n return {\n providers,\n total,\n isLoading,\n error,\n fetchProviders,\n createProvider,\n updateProvider,\n deleteProvider,\n toggleProvider,\n };\n}\n","/**\n * SSO Providers settings - manage OIDC identity providers\n */\nimport { useState, useEffect, useCallback } from 'react';\nimport { LoadingSpinner } from '../../shared/LoadingSpinner';\nimport { ErrorMessage } from '../../shared/ErrorMessage';\nimport {\n useSsoProviders,\n type SsoProvider,\n type CreateSsoProviderInput,\n type UpdateSsoProviderInput,\n} from '../../../hooks/useSsoProviders';\nimport { useOrgs } from '../../../hooks/useOrgs';\n\nexport interface SsoProvidersSettingsProps {\n className?: string;\n}\n\ntype ViewMode = 'list' | 'add' | 'edit';\n\nexport function SsoProvidersSettings({ className }: SsoProvidersSettingsProps) {\n const {\n providers,\n isLoading,\n error,\n fetchProviders,\n createProvider,\n updateProvider,\n deleteProvider,\n toggleProvider,\n } = useSsoProviders();\n\n const { activeOrg } = useOrgs();\n const [viewMode, setViewMode] = useState<ViewMode>('list');\n const [editingProvider, setEditingProvider] = useState<SsoProvider | null>(null);\n const [formError, setFormError] = useState<string | null>(null);\n\n useEffect(() => {\n fetchProviders(activeOrg?.id);\n }, [fetchProviders, activeOrg?.id]);\n\n const handleAdd = () => {\n setEditingProvider(null);\n setFormError(null);\n setViewMode('add');\n };\n\n const handleEdit = (provider: SsoProvider) => {\n setEditingProvider(provider);\n setFormError(null);\n setViewMode('edit');\n };\n\n const handleCancel = () => {\n setViewMode('list');\n setEditingProvider(null);\n setFormError(null);\n };\n\n const handleDelete = async (provider: SsoProvider) => {\n if (!confirm(`Delete SSO provider \"${provider.name}\"? This cannot be undone.`)) {\n return;\n }\n try {\n await deleteProvider(provider.id);\n } catch {\n // Error is already set in hook\n }\n };\n\n const handleToggle = async (provider: SsoProvider) => {\n try {\n await toggleProvider(provider.id, !provider.enabled);\n } catch {\n // Error is already set in hook\n }\n };\n\n const handleSave = async (data: CreateSsoProviderInput | UpdateSsoProviderInput) => {\n setFormError(null);\n try {\n if (viewMode === 'add') {\n await createProvider(data as CreateSsoProviderInput);\n } else if (editingProvider) {\n await updateProvider(editingProvider.id, data as UpdateSsoProviderInput);\n }\n setViewMode('list');\n setEditingProvider(null);\n } catch (err) {\n setFormError(err instanceof Error ? err.message : 'Failed to save provider');\n }\n };\n\n if (isLoading && providers.length === 0) {\n return (\n <div className={`cedros-system-settings cedros-system-settings-loading ${className ?? ''}`}>\n <LoadingSpinner />\n <span>Loading SSO providers...</span>\n </div>\n );\n }\n\n if (viewMode === 'add' || viewMode === 'edit') {\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <SsoProviderForm\n provider={editingProvider}\n orgId={activeOrg?.id}\n error={formError}\n isLoading={isLoading}\n onSave={handleSave}\n onCancel={handleCancel}\n />\n </div>\n );\n }\n\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <div className=\"cedros-settings-page-header\">\n <div className=\"cedros-settings-page-header-content\">\n <h2 className=\"cedros-settings-page-title\">SSO Providers</h2>\n <p className=\"cedros-settings-page-description\">\n Configure OIDC identity providers for enterprise single sign-on.\n </p>\n </div>\n <button type=\"button\" className=\"cedros-btn cedros-btn-primary\" onClick={handleAdd}>\n Add Provider\n </button>\n </div>\n\n {error && <ErrorMessage error={error.message} />}\n\n {providers.length === 0 ? (\n <div className=\"cedros-system-settings-empty\">\n <p>No SSO providers configured.</p>\n <p className=\"cedros-text-muted\">\n Add an OIDC provider like Okta, Azure AD, or Auth0 to enable enterprise SSO.\n </p>\n </div>\n ) : (\n <div className=\"cedros-sso-provider-list\">\n {providers.map((provider) => (\n <SsoProviderCard\n key={provider.id}\n provider={provider}\n onEdit={() => handleEdit(provider)}\n onDelete={() => handleDelete(provider)}\n onToggle={() => handleToggle(provider)}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// =============================================================================\n// Provider Card\n// =============================================================================\n\ninterface SsoProviderCardProps {\n provider: SsoProvider;\n onEdit: () => void;\n onDelete: () => void;\n onToggle: () => void;\n}\n\nfunction SsoProviderCard({ provider, onEdit, onDelete, onToggle }: SsoProviderCardProps) {\n return (\n <div\n className={`cedros-sso-provider-card ${provider.enabled ? '' : 'cedros-sso-provider-card--disabled'}`}\n >\n <div className=\"cedros-sso-provider-card-header\">\n <div className=\"cedros-sso-provider-card-info\">\n <h3 className=\"cedros-sso-provider-card-name\">{provider.name}</h3>\n <p className=\"cedros-sso-provider-card-issuer\">{provider.issuerUrl}</p>\n </div>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={provider.enabled}\n className={`cedros-toggle ${provider.enabled ? 'cedros-toggle-on' : 'cedros-toggle-off'}`}\n onClick={onToggle}\n >\n <span className=\"cedros-toggle-track\">\n <span className=\"cedros-toggle-thumb\" />\n </span>\n <span className=\"cedros-toggle-label\">{provider.enabled ? 'Enabled' : 'Disabled'}</span>\n </button>\n </div>\n\n <div className=\"cedros-sso-provider-card-details\">\n <div className=\"cedros-sso-provider-card-detail\">\n <span className=\"cedros-sso-provider-card-detail-label\">Client ID</span>\n <code className=\"cedros-sso-provider-card-detail-value\">{provider.clientId}</code>\n </div>\n {provider.emailDomain && (\n <div className=\"cedros-sso-provider-card-detail\">\n <span className=\"cedros-sso-provider-card-detail-label\">Email Domain</span>\n <span className=\"cedros-sso-provider-card-detail-value\">@{provider.emailDomain}</span>\n </div>\n )}\n <div className=\"cedros-sso-provider-card-detail\">\n <span className=\"cedros-sso-provider-card-detail-label\">Registration</span>\n <span className=\"cedros-sso-provider-card-detail-value\">\n {provider.allowRegistration ? 'Allowed' : 'Existing users only'}\n </span>\n </div>\n </div>\n\n <div className=\"cedros-sso-provider-card-actions\">\n <button type=\"button\" className=\"cedros-btn cedros-btn-ghost\" onClick={onEdit}>\n Edit\n </button>\n <button\n type=\"button\"\n className=\"cedros-btn cedros-btn-ghost cedros-btn-danger\"\n onClick={onDelete}\n >\n Delete\n </button>\n </div>\n </div>\n );\n}\n\n// =============================================================================\n// Provider Form\n// =============================================================================\n\ninterface SsoProviderFormProps {\n provider: SsoProvider | null;\n orgId?: string;\n error: string | null;\n isLoading: boolean;\n onSave: (data: CreateSsoProviderInput | UpdateSsoProviderInput) => void;\n onCancel: () => void;\n}\n\nfunction SsoProviderForm({\n provider,\n orgId,\n error,\n isLoading,\n onSave,\n onCancel,\n}: SsoProviderFormProps) {\n const isEditing = Boolean(provider);\n\n const [name, setName] = useState(provider?.name ?? '');\n const [issuerUrl, setIssuerUrl] = useState(provider?.issuerUrl ?? '');\n const [clientId, setClientId] = useState(provider?.clientId ?? '');\n const [clientSecret, setClientSecret] = useState('');\n const [emailDomain, setEmailDomain] = useState(provider?.emailDomain ?? '');\n const [allowRegistration, setAllowRegistration] = useState(provider?.allowRegistration ?? true);\n const [enabled, setEnabled] = useState(provider?.enabled ?? true);\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n\n if (isEditing) {\n const updates: UpdateSsoProviderInput = {\n name,\n issuerUrl,\n clientId,\n emailDomain: emailDomain || null,\n allowRegistration,\n enabled,\n };\n // Only include secret if changed\n if (clientSecret) {\n updates.clientSecret = clientSecret;\n }\n onSave(updates);\n } else {\n if (!orgId) {\n return;\n }\n const data: CreateSsoProviderInput = {\n orgId,\n name,\n issuerUrl,\n clientId,\n clientSecret,\n emailDomain: emailDomain || null,\n allowRegistration,\n enabled,\n };\n onSave(data);\n }\n },\n [\n isEditing,\n orgId,\n name,\n issuerUrl,\n clientId,\n clientSecret,\n emailDomain,\n allowRegistration,\n enabled,\n onSave,\n ]\n );\n\n return (\n <form className=\"cedros-sso-provider-form\" onSubmit={handleSubmit}>\n <div className=\"cedros-settings-page-header\">\n <div className=\"cedros-settings-page-header-content\">\n <h2 className=\"cedros-settings-page-title\">\n {isEditing ? 'Edit SSO Provider' : 'Add SSO Provider'}\n </h2>\n <p className=\"cedros-settings-page-description\">\n Configure an OIDC identity provider for enterprise single sign-on.\n </p>\n </div>\n </div>\n\n {error && <ErrorMessage error={error} />}\n\n <div className=\"cedros-form-section\">\n <div className=\"cedros-form-group\">\n <label className=\"cedros-form-label\" htmlFor=\"sso-name\">\n Provider Name\n </label>\n <input\n id=\"sso-name\"\n type=\"text\"\n className=\"cedros-form-input\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g., Okta, Azure AD\"\n required\n />\n </div>\n\n <div className=\"cedros-form-group\">\n <label className=\"cedros-form-label\" htmlFor=\"sso-issuer\">\n Issuer URL\n </label>\n <input\n id=\"sso-issuer\"\n type=\"url\"\n className=\"cedros-form-input\"\n value={issuerUrl}\n onChange={(e) => setIssuerUrl(e.target.value)}\n placeholder=\"https://your-org.okta.com\"\n required\n />\n <p className=\"cedros-form-hint\">\n The OIDC issuer URL. Must support discovery at /.well-known/openid-configuration\n </p>\n </div>\n\n <div className=\"cedros-form-group\">\n <label className=\"cedros-form-label\" htmlFor=\"sso-client-id\">\n Client ID\n </label>\n <input\n id=\"sso-client-id\"\n type=\"text\"\n className=\"cedros-form-input\"\n value={clientId}\n onChange={(e) => setClientId(e.target.value)}\n placeholder=\"OAuth client ID\"\n required\n />\n </div>\n\n <div className=\"cedros-form-group\">\n <label className=\"cedros-form-label\" htmlFor=\"sso-client-secret\">\n Client Secret{' '}\n {isEditing && (\n <span className=\"cedros-form-hint-inline\">(leave blank to keep current)</span>\n )}\n </label>\n <input\n id=\"sso-client-secret\"\n type=\"password\"\n className=\"cedros-form-input\"\n value={clientSecret}\n onChange={(e) => setClientSecret(e.target.value)}\n placeholder={isEditing ? '••••••••' : 'OAuth client secret'}\n required={!isEditing}\n />\n </div>\n\n <div className=\"cedros-form-group\">\n <label className=\"cedros-form-label\" htmlFor=\"sso-email-domain\">\n Email Domain (optional)\n </label>\n <input\n id=\"sso-email-domain\"\n type=\"text\"\n className=\"cedros-form-input\"\n value={emailDomain}\n onChange={(e) => setEmailDomain(e.target.value)}\n placeholder=\"company.com\"\n />\n <p className=\"cedros-form-hint\">Restrict to users with emails from this domain</p>\n </div>\n\n <div className=\"cedros-form-group\">\n <label className=\"cedros-form-checkbox\">\n <input\n type=\"checkbox\"\n checked={allowRegistration}\n onChange={(e) => setAllowRegistration(e.target.checked)}\n />\n <span>Allow new user registration via SSO</span>\n </label>\n </div>\n\n <div className=\"cedros-form-group\">\n <label className=\"cedros-form-checkbox\">\n <input\n type=\"checkbox\"\n checked={enabled}\n onChange={(e) => setEnabled(e.target.checked)}\n />\n <span>Enable this provider</span>\n </label>\n </div>\n </div>\n\n <div className=\"cedros-form-actions\">\n <button\n type=\"button\"\n className=\"cedros-btn cedros-btn-ghost\"\n onClick={onCancel}\n disabled={isLoading}\n >\n Cancel\n </button>\n <button type=\"submit\" className=\"cedros-btn cedros-btn-primary\" disabled={isLoading}>\n {isLoading ? 'Saving...' : isEditing ? 'Save Changes' : 'Add Provider'}\n </button>\n </div>\n </form>\n );\n}\n","/**\n * Authentication settings page - configure auth providers with tabs\n */\nimport { useState, useEffect, useMemo } from 'react';\nimport { LoadingSpinner } from '../../shared/LoadingSpinner';\nimport { ErrorMessage } from '../../shared/ErrorMessage';\nimport { useSettingsAutosave } from '../../../hooks/useSettingsAutosave';\nimport { SettingsSection } from './settingsInputs';\nimport { AutosaveStatus } from './AutosaveStatus';\nimport { SsoProvidersSettings } from './SsoProvidersSettings';\n\ntype AuthTab = 'email' | 'google' | 'apple' | 'solana' | 'passkeys' | 'instantlink' | 'sso';\n\ninterface TabConfig {\n id: AuthTab;\n label: string;\n /** Categories to pull settings from (not used for 'sso' tab) */\n categories: string[];\n /** Optional list of specific keys to show (if omitted, show all in categories) */\n keys?: string[];\n /** If true, renders a custom component instead of settings section */\n isCustom?: boolean;\n}\n\nconst TABS: TabConfig[] = [\n { id: 'email', label: 'Email', categories: ['auth.email'] },\n { id: 'google', label: 'Google', categories: ['auth.google'] },\n { id: 'apple', label: 'Apple', categories: ['auth.apple'] },\n { id: 'solana', label: 'Solana', categories: ['auth.solana'] },\n { id: 'passkeys', label: 'Passkeys', categories: ['auth.webauthn'] },\n { id: 'instantlink', label: 'Instant Link', categories: ['auth.instantlink'] },\n { id: 'sso', label: 'SSO Providers', categories: [], isCustom: true },\n];\n\nexport interface AuthenticationSettingsProps {\n className?: string;\n}\n\nexport function AuthenticationSettings({ className }: AuthenticationSettingsProps) {\n const {\n settings,\n edits,\n isLoading,\n autosaveStatus,\n autosaveError,\n error,\n fetchSettings,\n handleChange,\n } = useSettingsAutosave();\n\n const [activeTab, setActiveTab] = useState<AuthTab>('email');\n\n useEffect(() => {\n fetchSettings();\n }, [fetchSettings]);\n\n // Get current tab config\n const currentTab = TABS.find((t) => t.id === activeTab);\n\n // Collect settings from all categories for the current tab\n const allTabSettings = useMemo(() => {\n if (!currentTab) return [];\n const allSettings: (typeof settings)[string] = [];\n for (const category of currentTab.categories) {\n const categorySettings = settings[category] ?? [];\n allSettings.push(...categorySettings);\n }\n return allSettings;\n }, [settings, currentTab]);\n\n const currentSettings = useMemo(() => {\n if (!currentTab?.keys) return allTabSettings;\n // Filter and sort by keys order\n return allTabSettings\n .filter((s) => currentTab.keys!.includes(s.key))\n .sort((a, b) => currentTab.keys!.indexOf(a.key) - currentTab.keys!.indexOf(b.key));\n }, [allTabSettings, currentTab]);\n\n if (isLoading && Object.keys(settings).length === 0) {\n return (\n <div className={`cedros-system-settings cedros-system-settings-loading ${className ?? ''}`}>\n <LoadingSpinner />\n <span>Loading settings...</span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <ErrorMessage error={error.message} />\n </div>\n );\n }\n\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <div className=\"cedros-settings-page-header\">\n <div className=\"cedros-settings-page-header-content\">\n <h2 className=\"cedros-settings-page-title\">Authentication</h2>\n <p className=\"cedros-settings-page-description\">\n Configure authentication providers and methods for user sign-in.\n </p>\n </div>\n <AutosaveStatus status={autosaveStatus} error={autosaveError} />\n </div>\n\n {/* Tabs */}\n <div className=\"cedros-admin-tabs cedros-admin-tabs--line\">\n {TABS.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === tab.id ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab(tab.id)}\n aria-selected={activeTab === tab.id}\n role=\"tab\"\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Tab content */}\n <div className=\"cedros-admin-tab-content\" role=\"tabpanel\">\n {currentTab?.isCustom ? (\n <SsoProvidersSettings />\n ) : currentSettings.length === 0 ? (\n <div className=\"cedros-system-settings-empty\">\n <p>No settings found for {currentTab?.label ?? 'this provider'}.</p>\n </div>\n ) : (\n <SettingsSection settings={currentSettings} edits={edits} onChange={handleChange} />\n )}\n </div>\n </div>\n );\n}\n"],"names":["useSsoProviders","config","_internal","useCedrosLogin","serverUrl","getAccessTokenRef","useRef","providers","setProviders","useState","total","setTotal","isLoading","setIsLoading","error","setError","getHeaders","useCallback","token","fetchProviders","orgId","limit","offset","params","res","err","data","createProvider","input","provider","prev","updateProvider","id","p","deleteProvider","toggleProvider","enabled","SsoProvidersSettings","className","activeOrg","useOrgs","viewMode","setViewMode","editingProvider","setEditingProvider","formError","setFormError","useEffect","handleAdd","handleEdit","handleCancel","handleDelete","handleToggle","handleSave","jsx","LoadingSpinner","SsoProviderForm","jsxs","ErrorMessage","SsoProviderCard","onEdit","onDelete","onToggle","onSave","onCancel","isEditing","name","setName","issuerUrl","setIssuerUrl","clientId","setClientId","clientSecret","setClientSecret","emailDomain","setEmailDomain","allowRegistration","setAllowRegistration","setEnabled","handleSubmit","e","updates","TABS","AuthenticationSettings","settings","edits","autosaveStatus","autosaveError","fetchSettings","handleChange","useSettingsAutosave","activeTab","setActiveTab","currentTab","t","allTabSettings","useMemo","allSettings","category","categorySettings","currentSettings","s","a","b","AutosaveStatus","tab","SettingsSection"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ import "react";
3
+ import { A as i } from "./AuthenticationSettings-CR_i6TTS.js";
4
+ function r() {
5
+ return /* @__PURE__ */ t("div", { className: "cedros-dashboard__section", children: /* @__PURE__ */ t(i, {}) });
6
+ }
7
+ export {
8
+ r as default
9
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticationSettings-CJg8CJY9.js","sources":["../src/admin/sections/AuthenticationSettings.tsx"],"sourcesContent":["/**\n * Authentication Settings Section - Plugin wrapper\n */\n\nimport React from 'react';\nimport { AuthenticationSettings as Settings } from '../../components/admin/settings';\n\nexport default function AuthenticationSettings(): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__section\">\n <Settings />\n </div>\n );\n}\n"],"names":["AuthenticationSettings","jsx","Settings"],"mappings":";;;AAOA,SAAwBA,IAA4C;AAClE,2BACG,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAC,EAACC,KAAS,GACZ;AAEJ;"}