@cedros/login-react 0.0.40 → 0.0.42

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 (137) hide show
  1. package/dist/{AuthenticationSettings-BF_7Ea6Z.js → AuthenticationSettings-CheE3j7w.js} +1 -1
  2. package/dist/{AuthenticationSettings-BF_7Ea6Z.js.map → AuthenticationSettings-CheE3j7w.js.map} +1 -1
  3. package/dist/{AuthenticationSettings-Dk1LX0CK.cjs → AuthenticationSettings-Dl41GbJL.cjs} +1 -1
  4. package/dist/{AuthenticationSettings-Dk1LX0CK.cjs.map → AuthenticationSettings-Dl41GbJL.cjs.map} +1 -1
  5. package/dist/{AuthenticationSettings-DUXpyiJ5.js → AuthenticationSettings-DwSxgjbH.js} +1 -1
  6. package/dist/{AuthenticationSettings-DUXpyiJ5.js.map → AuthenticationSettings-DwSxgjbH.js.map} +1 -1
  7. package/dist/{AuthenticationSettings-BMDrCVSf.cjs → AuthenticationSettings-JxHsBst9.cjs} +1 -1
  8. package/dist/{AuthenticationSettings-BMDrCVSf.cjs.map → AuthenticationSettings-JxHsBst9.cjs.map} +1 -1
  9. package/dist/AutosaveStatus-BMXjH1XN.cjs +1 -0
  10. package/dist/AutosaveStatus-BMXjH1XN.cjs.map +1 -0
  11. package/dist/{AutosaveStatus-CSZsp6w7.js → AutosaveStatus-DNuCl59W.js} +798 -319
  12. package/dist/AutosaveStatus-DNuCl59W.js.map +1 -0
  13. package/dist/{CreditSystemSettings-CLImarX-.cjs → CreditSystemSettings-BVgl6uUg.cjs} +1 -1
  14. package/dist/{CreditSystemSettings-CLImarX-.cjs.map → CreditSystemSettings-BVgl6uUg.cjs.map} +1 -1
  15. package/dist/{CreditSystemSettings-Buu7Y-7I.js → CreditSystemSettings-C-ksysSx.js} +12 -7
  16. package/dist/CreditSystemSettings-C-ksysSx.js.map +1 -0
  17. package/dist/{CreditSystemSettings-Cj21_Ug8.js → CreditSystemSettings-HSdF2_CY.js} +1 -1
  18. package/dist/{CreditSystemSettings-Cj21_Ug8.js.map → CreditSystemSettings-HSdF2_CY.js.map} +1 -1
  19. package/dist/CreditSystemSettings-LvA8rb17.cjs +1 -0
  20. package/dist/CreditSystemSettings-LvA8rb17.cjs.map +1 -0
  21. package/dist/EmailRegisterForm-p2X5QP58.js +750 -0
  22. package/dist/EmailRegisterForm-p2X5QP58.js.map +1 -0
  23. package/dist/EmailRegisterForm-xFb6MaVA.cjs +1 -0
  24. package/dist/EmailRegisterForm-xFb6MaVA.cjs.map +1 -0
  25. package/dist/{EmailSettings-CmxxnrA9.js → EmailSettings-Cy1cuVUq.js} +1 -1
  26. package/dist/{EmailSettings-CmxxnrA9.js.map → EmailSettings-Cy1cuVUq.js.map} +1 -1
  27. package/dist/EmailSettings-DC_zT4nI.cjs +1 -0
  28. package/dist/EmailSettings-DC_zT4nI.cjs.map +1 -0
  29. package/dist/{EmailSettings-9sdEAONl.cjs → EmailSettings-QBMzpbxv.cjs} +1 -1
  30. package/dist/{EmailSettings-9sdEAONl.cjs.map → EmailSettings-QBMzpbxv.cjs.map} +1 -1
  31. package/dist/EmailSettings-hIhJzux0.js +86 -0
  32. package/dist/EmailSettings-hIhJzux0.js.map +1 -0
  33. package/dist/{EmbeddedWalletSettings-DGq-kXbw.cjs → EmbeddedWalletSettings-4qC9KBwh.cjs} +1 -1
  34. package/dist/{EmbeddedWalletSettings-DGq-kXbw.cjs.map → EmbeddedWalletSettings-4qC9KBwh.cjs.map} +1 -1
  35. package/dist/{EmbeddedWalletSettings-BuLN_Uqc.cjs → EmbeddedWalletSettings-C81QQMWz.cjs} +1 -1
  36. package/dist/{EmbeddedWalletSettings-BuLN_Uqc.cjs.map → EmbeddedWalletSettings-C81QQMWz.cjs.map} +1 -1
  37. package/dist/{EmbeddedWalletSettings-CHkkCjyR.js → EmbeddedWalletSettings-CvvTnRvt.js} +1 -1
  38. package/dist/{EmbeddedWalletSettings-CHkkCjyR.js.map → EmbeddedWalletSettings-CvvTnRvt.js.map} +1 -1
  39. package/dist/{EmbeddedWalletSettings-M-D5N0eY.js → EmbeddedWalletSettings-Cwiug0vR.js} +1 -1
  40. package/dist/{EmbeddedWalletSettings-M-D5N0eY.js.map → EmbeddedWalletSettings-Cwiug0vR.js.map} +1 -1
  41. package/dist/GoogleLoginButton-2zNTIKMm.cjs +1 -0
  42. package/dist/GoogleLoginButton-2zNTIKMm.cjs.map +1 -0
  43. package/dist/{GoogleLoginButton-qf4A_A3G.js → GoogleLoginButton-C1WNu7W3.js} +41 -40
  44. package/dist/GoogleLoginButton-C1WNu7W3.js.map +1 -0
  45. package/dist/LoadingSpinner-6vml-zwr.js.map +1 -1
  46. package/dist/LoadingSpinner-d6sSxgQN.cjs.map +1 -1
  47. package/dist/{PermissionsSection-DNzOL1xW.js → PermissionsSection-BDDiEfho.js} +69 -61
  48. package/dist/{PermissionsSection-DNzOL1xW.js.map → PermissionsSection-BDDiEfho.js.map} +1 -1
  49. package/dist/PermissionsSection-CSB_Ikj9.cjs +1 -0
  50. package/dist/{PermissionsSection-DEMVp7X3.cjs.map → PermissionsSection-CSB_Ikj9.cjs.map} +1 -1
  51. package/dist/{ServerSettings-CMmH5pZv.cjs → ServerSettings-BV0SipW1.cjs} +1 -1
  52. package/dist/{ServerSettings-CMmH5pZv.cjs.map → ServerSettings-BV0SipW1.cjs.map} +1 -1
  53. package/dist/{ServerSettings-DfimU7ay.cjs → ServerSettings-Bf7gFE8r.cjs} +1 -1
  54. package/dist/{ServerSettings-DfimU7ay.cjs.map → ServerSettings-Bf7gFE8r.cjs.map} +1 -1
  55. package/dist/{ServerSettings-qxi8aZO7.js → ServerSettings-DPqHtsgV.js} +1 -1
  56. package/dist/{ServerSettings-qxi8aZO7.js.map → ServerSettings-DPqHtsgV.js.map} +1 -1
  57. package/dist/{ServerSettings-DQemMrNv.js → ServerSettings-Sfr0CG6K.js} +1 -1
  58. package/dist/{ServerSettings-DQemMrNv.js.map → ServerSettings-Sfr0CG6K.js.map} +1 -1
  59. package/dist/SolanaLoginButton-CqdzSSeJ.cjs +1 -0
  60. package/dist/SolanaLoginButton-CqdzSSeJ.cjs.map +1 -0
  61. package/dist/{SolanaLoginButton-B04dib6X.js → SolanaLoginButton-CyeX35eU.js} +41 -40
  62. package/dist/SolanaLoginButton-CyeX35eU.js.map +1 -0
  63. package/dist/{TeamSection-CoMXyFtz.js → TeamSection-BhsBEckR.js} +1 -1
  64. package/dist/{TeamSection-CoMXyFtz.js.map → TeamSection-BhsBEckR.js.map} +1 -1
  65. package/dist/{TeamSection-DopbZClq.cjs → TeamSection-DLxtRmta.cjs} +1 -1
  66. package/dist/{TeamSection-DopbZClq.cjs.map → TeamSection-DLxtRmta.cjs.map} +1 -1
  67. package/dist/{UsersSection-C7aRNkK2.cjs → UsersSection-BEKfbhQ4.cjs} +1 -1
  68. package/dist/{UsersSection-C7aRNkK2.cjs.map → UsersSection-BEKfbhQ4.cjs.map} +1 -1
  69. package/dist/{UsersSection--PAE1XRh.js → UsersSection-DbGkmxty.js} +1 -1
  70. package/dist/{UsersSection--PAE1XRh.js.map → UsersSection-DbGkmxty.js.map} +1 -1
  71. package/dist/{WebhookSettings-B6Y3Tnjv.cjs → WebhookSettings-BPCKv5Or.cjs} +1 -1
  72. package/dist/{WebhookSettings-B6Y3Tnjv.cjs.map → WebhookSettings-BPCKv5Or.cjs.map} +1 -1
  73. package/dist/{WebhookSettings-8QAqvkkO.js → WebhookSettings-CMROMCFT.js} +1 -1
  74. package/dist/{WebhookSettings-8QAqvkkO.js.map → WebhookSettings-CMROMCFT.js.map} +1 -1
  75. package/dist/{WebhookSettings-0sgWRI3U.cjs → WebhookSettings-Cj-iELGa.cjs} +1 -1
  76. package/dist/{WebhookSettings-0sgWRI3U.cjs.map → WebhookSettings-Cj-iELGa.cjs.map} +1 -1
  77. package/dist/{WebhookSettings-B8hAwhZ2.js → WebhookSettings-D4mKAWAg.js} +1 -1
  78. package/dist/{WebhookSettings-B8hAwhZ2.js.map → WebhookSettings-D4mKAWAg.js.map} +1 -1
  79. package/dist/admin-only.cjs +1 -1
  80. package/dist/admin-only.js +1 -1
  81. package/dist/email-only.cjs +1 -1
  82. package/dist/email-only.d.ts +7 -1
  83. package/dist/email-only.js +2 -2
  84. package/dist/google-only.cjs +1 -1
  85. package/dist/google-only.d.ts +6 -0
  86. package/dist/google-only.js +2 -2
  87. package/dist/index.cjs +13 -13
  88. package/dist/index.cjs.map +1 -1
  89. package/dist/index.d.ts +414 -4
  90. package/dist/index.js +6070 -4807
  91. package/dist/index.js.map +1 -1
  92. package/dist/login-react.css +1 -1
  93. package/dist/plugin-BHGg7ius.cjs +1 -0
  94. package/dist/plugin-BHGg7ius.cjs.map +1 -0
  95. package/dist/{plugin-C_NDZ2-D.js → plugin-CK2d7aP5.js} +3 -2
  96. package/dist/plugin-CK2d7aP5.js.map +1 -0
  97. package/dist/solana-only.cjs +1 -1
  98. package/dist/solana-only.d.ts +6 -0
  99. package/dist/solana-only.js +2 -2
  100. package/dist/useAuth-B1yS_YiD.cjs +1 -0
  101. package/dist/{useAuth-U5CYsHEU.cjs.map → useAuth-B1yS_YiD.cjs.map} +1 -1
  102. package/dist/{useAuth-C-Vw-ggy.js → useAuth-l-itM5am.js} +440 -433
  103. package/dist/{useAuth-C-Vw-ggy.js.map → useAuth-l-itM5am.js.map} +1 -1
  104. package/dist/useUsersStatsSummary-9HQDKBU5.js +1879 -0
  105. package/dist/useUsersStatsSummary-9HQDKBU5.js.map +1 -0
  106. package/dist/useUsersStatsSummary-DiRC8sGs.cjs +1 -0
  107. package/dist/useUsersStatsSummary-DiRC8sGs.cjs.map +1 -0
  108. package/package.json +1 -1
  109. package/dist/AutosaveStatus-BKsCIvPj.cjs +0 -1
  110. package/dist/AutosaveStatus-BKsCIvPj.cjs.map +0 -1
  111. package/dist/AutosaveStatus-CSZsp6w7.js.map +0 -1
  112. package/dist/CreditSystemSettings-Buu7Y-7I.js.map +0 -1
  113. package/dist/CreditSystemSettings-C2HkyMXy.cjs +0 -1
  114. package/dist/CreditSystemSettings-C2HkyMXy.cjs.map +0 -1
  115. package/dist/EmailRegisterForm-CNjYrqU6.cjs +0 -1
  116. package/dist/EmailRegisterForm-CNjYrqU6.cjs.map +0 -1
  117. package/dist/EmailRegisterForm-D2VaJouj.js +0 -750
  118. package/dist/EmailRegisterForm-D2VaJouj.js.map +0 -1
  119. package/dist/EmailSettings-DRfOF0Sf.js +0 -78
  120. package/dist/EmailSettings-DRfOF0Sf.js.map +0 -1
  121. package/dist/EmailSettings-eLlzzI5D.cjs +0 -1
  122. package/dist/EmailSettings-eLlzzI5D.cjs.map +0 -1
  123. package/dist/GoogleLoginButton-JtRViYWS.cjs +0 -1
  124. package/dist/GoogleLoginButton-JtRViYWS.cjs.map +0 -1
  125. package/dist/GoogleLoginButton-qf4A_A3G.js.map +0 -1
  126. package/dist/PermissionsSection-DEMVp7X3.cjs +0 -1
  127. package/dist/SolanaLoginButton-B04dib6X.js.map +0 -1
  128. package/dist/SolanaLoginButton-nSJHVFpZ.cjs +0 -1
  129. package/dist/SolanaLoginButton-nSJHVFpZ.cjs.map +0 -1
  130. package/dist/plugin-CUxpAjL-.cjs +0 -1
  131. package/dist/plugin-CUxpAjL-.cjs.map +0 -1
  132. package/dist/plugin-C_NDZ2-D.js.map +0 -1
  133. package/dist/useAuth-U5CYsHEU.cjs +0 -1
  134. package/dist/useUsersStatsSummary-5DJwzntC.js +0 -1246
  135. package/dist/useUsersStatsSummary-5DJwzntC.js.map +0 -1
  136. package/dist/useUsersStatsSummary-DgKaUIfs.cjs +0 -1
  137. package/dist/useUsersStatsSummary-DgKaUIfs.cjs.map +0 -1
@@ -0,0 +1,1879 @@
1
+ import { jsxs as t, jsx as e, Fragment as Y } from "react/jsx-runtime";
2
+ import { useState as v, useMemo as te, useCallback as C, useEffect as I } from "react";
3
+ import { A as Ze, h as $, u as Ce } from "./useCedrosLogin-CFfID-0i.js";
4
+ import { u as ze } from "./useSystemSettings-rgskaDqP.js";
5
+ class Ae {
6
+ client;
7
+ constructor(r, i, a, f) {
8
+ this.client = new Ze({ baseUrl: r, timeoutMs: i, retryAttempts: a, getAccessToken: f });
9
+ }
10
+ /**
11
+ * List all users in the system
12
+ */
13
+ async listUsers(r) {
14
+ try {
15
+ const i = new URLSearchParams();
16
+ r?.limit && i.set("limit", String(r.limit)), r?.offset && i.set("offset", String(r.offset));
17
+ const a = i.toString(), f = `/admin/users${a ? `?${a}` : ""}`;
18
+ return await this.client.get(f);
19
+ } catch (i) {
20
+ throw $(i, "Failed to list users");
21
+ }
22
+ }
23
+ /**
24
+ * Get a specific user by ID
25
+ */
26
+ async getUser(r) {
27
+ try {
28
+ return await this.client.get(`/admin/users/${r}`);
29
+ } catch (i) {
30
+ throw $(i, "Failed to get user");
31
+ }
32
+ }
33
+ /**
34
+ * Set a user's system admin status
35
+ */
36
+ async setSystemAdmin(r, i) {
37
+ try {
38
+ await this.client.patch(`/admin/users/${r}/system-admin`, { isAdmin: i });
39
+ } catch (a) {
40
+ throw $(a, "Failed to update system admin status");
41
+ }
42
+ }
43
+ /**
44
+ * Update a user's profile
45
+ */
46
+ async updateUser(r, i) {
47
+ try {
48
+ return await this.client.patch(`/admin/users/${r}`, i);
49
+ } catch (a) {
50
+ throw $(a, "Failed to update user");
51
+ }
52
+ }
53
+ /**
54
+ * Delete a user
55
+ */
56
+ async deleteUser(r) {
57
+ try {
58
+ await this.client.delete(`/admin/users/${r}`);
59
+ } catch (i) {
60
+ throw $(i, "Failed to delete user");
61
+ }
62
+ }
63
+ /**
64
+ * Send a password reset email to a user
65
+ */
66
+ async forcePasswordReset(r) {
67
+ try {
68
+ await this.client.post(`/admin/users/${r}/force-password-reset`, {});
69
+ } catch (i) {
70
+ throw $(i, "Failed to send password reset email");
71
+ }
72
+ }
73
+ /**
74
+ * Adjust a user's credits
75
+ */
76
+ async adjustCredits(r, i) {
77
+ try {
78
+ await this.client.post(`/admin/users/${r}/credits`, i);
79
+ } catch (a) {
80
+ throw $(a, "Failed to adjust credits");
81
+ }
82
+ }
83
+ /**
84
+ * Get a user's deposit history
85
+ */
86
+ async getUserDeposits(r, i) {
87
+ try {
88
+ const a = new URLSearchParams();
89
+ i?.limit && a.set("limit", String(i.limit)), i?.offset && a.set("offset", String(i.offset));
90
+ const f = a.toString(), y = `/admin/users/${r}/deposits${f ? `?${f}` : ""}`;
91
+ return await this.client.get(y);
92
+ } catch (a) {
93
+ throw $(a, "Failed to get user deposits");
94
+ }
95
+ }
96
+ /**
97
+ * Get a user's credit stats and transaction history
98
+ */
99
+ async getUserCredits(r, i) {
100
+ try {
101
+ const a = new URLSearchParams();
102
+ i?.limit && a.set("limit", String(i.limit)), i?.offset && a.set("offset", String(i.offset));
103
+ const f = a.toString(), y = `/admin/users/${r}/credits${f ? `?${f}` : ""}`;
104
+ return await this.client.get(y);
105
+ } catch (a) {
106
+ throw $(a, "Failed to get user credits");
107
+ }
108
+ }
109
+ /**
110
+ * Get a user's withdrawal history
111
+ */
112
+ async getUserWithdrawalHistory(r, i) {
113
+ try {
114
+ const a = new URLSearchParams();
115
+ i?.limit && a.set("limit", String(i.limit)), i?.offset && a.set("offset", String(i.offset));
116
+ const f = a.toString(), y = `/admin/users/${r}/withdrawal-history${f ? `?${f}` : ""}`;
117
+ return await this.client.get(y);
118
+ } catch (a) {
119
+ throw $(a, "Failed to get user withdrawal history");
120
+ }
121
+ }
122
+ /**
123
+ * Get a user's chat history (from cedros-pay)
124
+ * Only available when cedros-pay is enabled.
125
+ */
126
+ async getUserChats(r, i) {
127
+ try {
128
+ const a = new URLSearchParams();
129
+ i?.limit && a.set("limit", String(i.limit)), i?.offset && a.set("offset", String(i.offset));
130
+ const f = a.toString(), y = `/admin/users/${r}/chats${f ? `?${f}` : ""}`;
131
+ return await this.client.get(y);
132
+ } catch (a) {
133
+ throw $(a, "Failed to get user chat history");
134
+ }
135
+ }
136
+ /**
137
+ * Get the list of users directly referred by a given user
138
+ */
139
+ async getUserReferrals(r, i) {
140
+ try {
141
+ const a = new URLSearchParams();
142
+ i?.limit && a.set("limit", String(i.limit)), i?.offset && a.set("offset", String(i.offset));
143
+ const f = a.toString(), y = `/admin/users/${r}/referrals${f ? `?${f}` : ""}`;
144
+ return await this.client.get(y);
145
+ } catch (a) {
146
+ throw $(a, "Failed to get user referrals");
147
+ }
148
+ }
149
+ /**
150
+ * Get a user's KYC status and session history
151
+ */
152
+ async getUserKyc(r) {
153
+ try {
154
+ return await this.client.get(`/admin/users/${r}/kyc`);
155
+ } catch (i) {
156
+ throw $(i, "Failed to get user KYC data");
157
+ }
158
+ }
159
+ /**
160
+ * Override a user's KYC status (system admin only)
161
+ *
162
+ * @param userId - target user ID
163
+ * @param status - new status: "none" | "verified" | "failed"
164
+ */
165
+ async overrideUserKyc(r, i) {
166
+ try {
167
+ await this.client.post(`/admin/users/${r}/kyc/override`, { status: i });
168
+ } catch (a) {
169
+ throw $(a, "Failed to override KYC status");
170
+ }
171
+ }
172
+ /**
173
+ * Get a user's accreditation status and submission history
174
+ */
175
+ async getUserAccreditation(r) {
176
+ try {
177
+ return await this.client.get(
178
+ `/admin/users/${r}/accreditation`
179
+ );
180
+ } catch (i) {
181
+ throw $(i, "Failed to get user accreditation data");
182
+ }
183
+ }
184
+ /**
185
+ * Review an accreditation submission (approve or reject).
186
+ *
187
+ * @param submissionId - target submission ID
188
+ * @param approved - true to approve, false to reject
189
+ * @param reviewerNotes - optional internal notes
190
+ * @param rejectionReason - required when approved is false
191
+ * @param expiryDays - override default expiry (approve only)
192
+ */
193
+ async reviewAccreditation(r, i, a, f, y) {
194
+ try {
195
+ await this.client.post(`/admin/accreditation/${r}/review`, {
196
+ approved: i,
197
+ reviewerNotes: a,
198
+ rejectionReason: f,
199
+ expiryDays: y
200
+ });
201
+ } catch (g) {
202
+ throw $(g, "Failed to review accreditation submission");
203
+ }
204
+ }
205
+ /**
206
+ * Override a user's accreditation status (system admin only).
207
+ *
208
+ * @param userId - target user ID
209
+ * @param status - new status: "none" | "approved" | "rejected"
210
+ */
211
+ async overrideAccreditationStatus(r, i) {
212
+ try {
213
+ await this.client.post(`/admin/users/${r}/accreditation/override`, { status: i });
214
+ } catch (a) {
215
+ throw $(a, "Failed to override accreditation status");
216
+ }
217
+ }
218
+ /**
219
+ * Get user statistics by auth method
220
+ */
221
+ async getStats() {
222
+ try {
223
+ return await this.client.get("/admin/users/stats");
224
+ } catch (r) {
225
+ throw $(r, "Failed to get user stats");
226
+ }
227
+ }
228
+ }
229
+ function pe() {
230
+ const { config: s, _internal: r } = Ce(), [i, a] = v([]), [f, y] = v(0), [g, c] = v(!1), [o, h] = v(null), [L, P] = v({}), p = te(
231
+ () => new Ae(
232
+ s.serverUrl,
233
+ s.requestTimeout,
234
+ s.retryAttempts,
235
+ r?.getAccessToken
236
+ ),
237
+ [s.serverUrl, s.requestTimeout, s.retryAttempts, r]
238
+ ), T = C(
239
+ async (u) => {
240
+ c(!0), h(null), P(u || {});
241
+ try {
242
+ const n = await p.listUsers(u);
243
+ return a(n.users), y(n.total), n;
244
+ } catch (n) {
245
+ const l = n instanceof Error ? n : new Error("Failed to list users");
246
+ throw h(l), l;
247
+ } finally {
248
+ c(!1);
249
+ }
250
+ },
251
+ [p]
252
+ ), S = C(
253
+ async (u) => {
254
+ c(!0), h(null);
255
+ try {
256
+ return await p.getUser(u);
257
+ } catch (n) {
258
+ const l = n instanceof Error ? n : new Error("Failed to get user");
259
+ throw h(l), l;
260
+ } finally {
261
+ c(!1);
262
+ }
263
+ },
264
+ [p]
265
+ ), E = C(
266
+ async (u, n) => {
267
+ c(!0), h(null);
268
+ try {
269
+ await p.setSystemAdmin(u, n), a(
270
+ (l) => l.map((N) => N.id === u ? { ...N, isSystemAdmin: n } : N)
271
+ );
272
+ } catch (l) {
273
+ const N = l instanceof Error ? l : new Error("Failed to update admin status");
274
+ throw h(N), N;
275
+ } finally {
276
+ c(!1);
277
+ }
278
+ },
279
+ [p]
280
+ ), k = C(
281
+ async (u, n) => {
282
+ c(!0), h(null);
283
+ try {
284
+ const l = await p.updateUser(u, n);
285
+ return a((N) => N.map((V) => V.id === u ? l : V)), l;
286
+ } catch (l) {
287
+ const N = l instanceof Error ? l : new Error("Failed to update user");
288
+ throw h(N), N;
289
+ } finally {
290
+ c(!1);
291
+ }
292
+ },
293
+ [p]
294
+ ), A = C(
295
+ async (u) => {
296
+ c(!0), h(null);
297
+ try {
298
+ await p.deleteUser(u), a((n) => n.filter((l) => l.id !== u)), y((n) => n - 1);
299
+ } catch (n) {
300
+ const l = n instanceof Error ? n : new Error("Failed to delete user");
301
+ throw h(l), l;
302
+ } finally {
303
+ c(!1);
304
+ }
305
+ },
306
+ [p]
307
+ ), w = C(
308
+ async (u) => {
309
+ c(!0), h(null);
310
+ try {
311
+ await p.forcePasswordReset(u);
312
+ } catch (n) {
313
+ const l = n instanceof Error ? n : new Error("Failed to send password reset");
314
+ throw h(l), l;
315
+ } finally {
316
+ c(!1);
317
+ }
318
+ },
319
+ [p]
320
+ ), d = C(
321
+ async (u, n, l) => {
322
+ c(!0), h(null);
323
+ try {
324
+ await p.adjustCredits(u, { amount: n, reason: l });
325
+ } catch (N) {
326
+ const V = N instanceof Error ? N : new Error("Failed to adjust credits");
327
+ throw h(V), V;
328
+ } finally {
329
+ c(!1);
330
+ }
331
+ },
332
+ [p]
333
+ ), D = C(
334
+ async (u, n) => {
335
+ c(!0), h(null);
336
+ try {
337
+ return await p.getUserDeposits(u, n);
338
+ } catch (l) {
339
+ const N = l instanceof Error ? l : new Error("Failed to get user deposits");
340
+ throw h(N), N;
341
+ } finally {
342
+ c(!1);
343
+ }
344
+ },
345
+ [p]
346
+ ), R = C(
347
+ async (u, n) => {
348
+ c(!0), h(null);
349
+ try {
350
+ return await p.getUserCredits(u, n);
351
+ } catch (l) {
352
+ const N = l instanceof Error ? l : new Error("Failed to get user credits");
353
+ throw h(N), N;
354
+ } finally {
355
+ c(!1);
356
+ }
357
+ },
358
+ [p]
359
+ ), _ = C(
360
+ async (u, n) => {
361
+ c(!0), h(null);
362
+ try {
363
+ return await p.getUserWithdrawalHistory(u, n);
364
+ } catch (l) {
365
+ const N = l instanceof Error ? l : new Error("Failed to get user withdrawal history");
366
+ throw h(N), N;
367
+ } finally {
368
+ c(!1);
369
+ }
370
+ },
371
+ [p]
372
+ ), M = C(
373
+ async (u, n) => {
374
+ c(!0), h(null);
375
+ try {
376
+ return await p.getUserChats(u, n);
377
+ } catch (l) {
378
+ const N = l instanceof Error ? l : new Error("Failed to get user chat history");
379
+ throw h(N), N;
380
+ } finally {
381
+ c(!1);
382
+ }
383
+ },
384
+ [p]
385
+ ), j = C(
386
+ async (u, n) => {
387
+ c(!0), h(null);
388
+ try {
389
+ return await p.getUserReferrals(u, n);
390
+ } catch (l) {
391
+ const N = l instanceof Error ? l : new Error("Failed to get user referrals");
392
+ throw h(N), N;
393
+ } finally {
394
+ c(!1);
395
+ }
396
+ },
397
+ [p]
398
+ ), K = C(async () => {
399
+ c(!0), h(null);
400
+ try {
401
+ return await p.getStats();
402
+ } catch (u) {
403
+ const n = u instanceof Error ? u : new Error("Failed to get user stats");
404
+ throw h(n), n;
405
+ } finally {
406
+ c(!1);
407
+ }
408
+ }, [p]), b = C(async () => {
409
+ await T(L);
410
+ }, [T, L]), U = C(() => {
411
+ h(null);
412
+ }, []);
413
+ return {
414
+ users: i,
415
+ total: f,
416
+ isLoading: g,
417
+ error: o,
418
+ listUsers: T,
419
+ getUser: S,
420
+ setSystemAdmin: E,
421
+ updateUser: k,
422
+ deleteUser: A,
423
+ forcePasswordReset: w,
424
+ adjustCredits: d,
425
+ getUserDeposits: D,
426
+ getUserCredits: R,
427
+ getUserWithdrawalHistory: _,
428
+ getUserChats: M,
429
+ getUserReferrals: j,
430
+ getStats: K,
431
+ refresh: b,
432
+ clearError: U
433
+ };
434
+ }
435
+ function we(s) {
436
+ return new Date(s).toLocaleDateString(void 0, {
437
+ year: "numeric",
438
+ month: "short",
439
+ day: "numeric"
440
+ });
441
+ }
442
+ function et(s) {
443
+ return s.length <= 12 ? s : `${s.slice(0, 6)}...${s.slice(-4)}`;
444
+ }
445
+ function tt(s) {
446
+ return s == null ? "-" : (s / 1e9).toFixed(4);
447
+ }
448
+ function gt({
449
+ pageSize: s = 20,
450
+ refreshInterval: r = 0,
451
+ currentUserId: i,
452
+ className: a = "",
453
+ onLoad: f,
454
+ onUserClick: y
455
+ }) {
456
+ const { users: g, total: c, isLoading: o, error: h, listUsers: L, clearError: P } = pe(), [p, T] = v(0), [S, E] = v(null), [k, A] = v("createdAt"), [w, d] = v("desc"), D = (b) => {
457
+ k === b ? d(w === "asc" ? "desc" : "asc") : (A(b), d("desc"));
458
+ }, R = te(() => [...g].sort((b, U) => {
459
+ let u, n;
460
+ switch (k) {
461
+ case "name":
462
+ u = (b.name || b.email || "").toLowerCase(), n = (U.name || U.email || "").toLowerCase();
463
+ break;
464
+ case "createdAt":
465
+ u = new Date(b.createdAt).getTime(), n = new Date(U.createdAt).getTime();
466
+ break;
467
+ case "lastLoginAt":
468
+ u = b.lastLoginAt ? new Date(b.lastLoginAt).getTime() : 0, n = U.lastLoginAt ? new Date(U.lastLoginAt).getTime() : 0;
469
+ break;
470
+ case "balanceLamports":
471
+ u = b.balanceLamports ?? 0, n = U.balanceLamports ?? 0;
472
+ break;
473
+ default:
474
+ return 0;
475
+ }
476
+ return u < n ? w === "asc" ? -1 : 1 : u > n ? w === "asc" ? 1 : -1 : 0;
477
+ }), [g, k, w]), _ = C(async () => {
478
+ try {
479
+ const b = await L({ limit: s, offset: p });
480
+ f?.(b), E(null);
481
+ } catch (b) {
482
+ E(b instanceof Error ? b.message : "Failed to load users");
483
+ }
484
+ }, [s, p, L, f]);
485
+ I(() => {
486
+ T(0);
487
+ }, [s]), I(() => {
488
+ _();
489
+ }, [_]), I(() => {
490
+ if (r <= 0) return;
491
+ const b = setInterval(_, r);
492
+ return () => clearInterval(b);
493
+ }, [r, _]);
494
+ const M = Math.ceil(c / s), j = Math.floor(p / s) + 1, K = (b) => {
495
+ const U = (b - 1) * s;
496
+ T(Math.max(0, Math.min(U, Math.max(0, c - 1))));
497
+ };
498
+ return S || h ? /* @__PURE__ */ t("div", { className: `cedros-admin-user-list cedros-admin-user-list-error ${a}`, children: [
499
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error", children: S || h?.message }),
500
+ /* @__PURE__ */ e(
501
+ "button",
502
+ {
503
+ type: "button",
504
+ className: "cedros-button cedros-button-outline",
505
+ onClick: () => {
506
+ P(), E(null), _();
507
+ },
508
+ children: "Retry"
509
+ }
510
+ )
511
+ ] }) : o && g.length === 0 ? /* @__PURE__ */ t("div", { className: `cedros-admin-user-list cedros-admin-user-list-loading ${a}`, children: [
512
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
513
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-text", children: "Loading users..." })
514
+ ] }) : /* @__PURE__ */ t("div", { className: `cedros-admin-user-list ${a}`, children: [
515
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-list-header", children: [
516
+ /* @__PURE__ */ e("h4", { className: "cedros-admin-user-list-title", children: "All Users" }),
517
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-list-actions", children: [
518
+ /* @__PURE__ */ t("span", { className: "cedros-admin-queue-count", children: [
519
+ c,
520
+ " user",
521
+ c !== 1 ? "s" : ""
522
+ ] }),
523
+ /* @__PURE__ */ e(
524
+ "button",
525
+ {
526
+ type: "button",
527
+ className: "cedros-admin__stats-bar-refresh",
528
+ onClick: _,
529
+ disabled: o,
530
+ title: "Refresh list",
531
+ "aria-label": "Refresh list",
532
+ children: o ? "..." : "↻"
533
+ }
534
+ )
535
+ ] })
536
+ ] }),
537
+ g.length === 0 ? /* @__PURE__ */ e("div", { className: "cedros-admin-empty", children: /* @__PURE__ */ e("p", { className: "cedros-admin-empty-message", children: "No users found." }) }) : /* @__PURE__ */ t(Y, { children: [
538
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-table", children: [
539
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-thead", children: [
540
+ /* @__PURE__ */ e("div", { className: "cedros-admin-user-th", children: /* @__PURE__ */ t(
541
+ "button",
542
+ {
543
+ type: "button",
544
+ className: `cedros-admin-sort-button ${k === "name" ? "cedros-admin-sort-active" : ""}`,
545
+ onClick: () => D("name"),
546
+ "aria-label": "Sort by user",
547
+ children: [
548
+ "User",
549
+ " ",
550
+ /* @__PURE__ */ e("span", { className: "cedros-admin-sort-icon", children: k === "name" ? w === "asc" ? "↑" : "↓" : "↕" })
551
+ ]
552
+ }
553
+ ) }),
554
+ /* @__PURE__ */ e("div", { className: "cedros-admin-user-th", children: /* @__PURE__ */ t(
555
+ "button",
556
+ {
557
+ type: "button",
558
+ className: `cedros-admin-sort-button ${k === "createdAt" ? "cedros-admin-sort-active" : ""}`,
559
+ onClick: () => D("createdAt"),
560
+ "aria-label": "Sort by registered date",
561
+ children: [
562
+ "Registered",
563
+ " ",
564
+ /* @__PURE__ */ e("span", { className: "cedros-admin-sort-icon", children: k === "createdAt" ? w === "asc" ? "↑" : "↓" : "↕" })
565
+ ]
566
+ }
567
+ ) }),
568
+ /* @__PURE__ */ e("div", { className: "cedros-admin-user-th", children: /* @__PURE__ */ t(
569
+ "button",
570
+ {
571
+ type: "button",
572
+ className: `cedros-admin-sort-button ${k === "lastLoginAt" ? "cedros-admin-sort-active" : ""}`,
573
+ onClick: () => D("lastLoginAt"),
574
+ "aria-label": "Sort by last login",
575
+ children: [
576
+ "Last Login",
577
+ " ",
578
+ /* @__PURE__ */ e("span", { className: "cedros-admin-sort-icon", children: k === "lastLoginAt" ? w === "asc" ? "↑" : "↓" : "↕" })
579
+ ]
580
+ }
581
+ ) }),
582
+ /* @__PURE__ */ e("div", { className: "cedros-admin-user-th", children: /* @__PURE__ */ t(
583
+ "button",
584
+ {
585
+ type: "button",
586
+ className: `cedros-admin-sort-button ${k === "balanceLamports" ? "cedros-admin-sort-active" : ""}`,
587
+ onClick: () => D("balanceLamports"),
588
+ "aria-label": "Sort by balance",
589
+ children: [
590
+ "Balance",
591
+ " ",
592
+ /* @__PURE__ */ e("span", { className: "cedros-admin-sort-icon", children: k === "balanceLamports" ? w === "asc" ? "↑" : "↓" : "↕" })
593
+ ]
594
+ }
595
+ ) })
596
+ ] }),
597
+ R.map((b) => {
598
+ const U = b.id === i;
599
+ return /* @__PURE__ */ t(
600
+ "div",
601
+ {
602
+ className: `cedros-admin-user-row ${U ? "cedros-admin-user-row-current" : ""}`,
603
+ onClick: () => y?.(b),
604
+ onKeyDown: (u) => {
605
+ (u.key === "Enter" || u.key === " ") && (u.preventDefault(), y?.(b));
606
+ },
607
+ role: y ? "button" : void 0,
608
+ tabIndex: y ? 0 : void 0,
609
+ children: [
610
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-td cedros-admin-user-info", children: [
611
+ /* @__PURE__ */ e("div", { className: "cedros-admin-user-avatar", children: b.picture ? /* @__PURE__ */ e(
612
+ "img",
613
+ {
614
+ src: b.picture,
615
+ alt: b.name || b.email || "User",
616
+ className: "cedros-admin-user-avatar-img",
617
+ referrerPolicy: "no-referrer"
618
+ }
619
+ ) : /* @__PURE__ */ e("span", { className: "cedros-admin-user-avatar-placeholder", children: (b.name?.[0] || b.email?.[0] || "?").toUpperCase() }) }),
620
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-details", children: [
621
+ /* @__PURE__ */ t("span", { className: "cedros-admin-user-name", children: [
622
+ b.name || "Unknown",
623
+ U && /* @__PURE__ */ e("span", { className: "cedros-admin-user-you", children: "(you)" })
624
+ ] }),
625
+ /* @__PURE__ */ e("span", { className: "cedros-admin-user-email", title: b.email, children: b.email || et(b.id) })
626
+ ] })
627
+ ] }),
628
+ /* @__PURE__ */ e("div", { className: "cedros-admin-user-td", children: we(b.createdAt) }),
629
+ /* @__PURE__ */ e("div", { className: "cedros-admin-user-td", children: b.lastLoginAt ? we(b.lastLoginAt) : "-" }),
630
+ /* @__PURE__ */ e("div", { className: "cedros-admin-user-td", children: tt(b.balanceLamports) })
631
+ ]
632
+ },
633
+ b.id
634
+ );
635
+ })
636
+ ] }),
637
+ M > 1 && /* @__PURE__ */ t("div", { className: "cedros-admin-pagination", children: [
638
+ /* @__PURE__ */ e(
639
+ "button",
640
+ {
641
+ type: "button",
642
+ className: "cedros-button cedros-button-outline cedros-button-sm",
643
+ onClick: () => K(j - 1),
644
+ disabled: j <= 1,
645
+ children: "Previous"
646
+ }
647
+ ),
648
+ /* @__PURE__ */ t("span", { className: "cedros-admin-page-info", children: [
649
+ "Page ",
650
+ j,
651
+ " of ",
652
+ M,
653
+ " (",
654
+ c,
655
+ " total)"
656
+ ] }),
657
+ /* @__PURE__ */ e(
658
+ "button",
659
+ {
660
+ type: "button",
661
+ className: "cedros-button cedros-button-outline cedros-button-sm",
662
+ onClick: () => K(j + 1),
663
+ disabled: j >= M,
664
+ children: "Next"
665
+ }
666
+ )
667
+ ] })
668
+ ] })
669
+ ] });
670
+ }
671
+ function ve(s) {
672
+ return new Date(s).toLocaleDateString(void 0, {
673
+ year: "numeric",
674
+ month: "short",
675
+ day: "numeric"
676
+ });
677
+ }
678
+ function q(s) {
679
+ return new Date(s).toLocaleString(void 0, {
680
+ year: "numeric",
681
+ month: "short",
682
+ day: "numeric",
683
+ hour: "2-digit",
684
+ minute: "2-digit"
685
+ });
686
+ }
687
+ function st(s) {
688
+ return s == null ? "—" : `${(s / 1e9).toFixed(4)} SOL`;
689
+ }
690
+ function ee(s) {
691
+ return s == null ? "—" : (s / 1e9).toFixed(4);
692
+ }
693
+ function rt(s) {
694
+ return {
695
+ DEPOSIT: "Deposit",
696
+ SPEND: "Spend",
697
+ ADJUSTMENT: "Adjustment",
698
+ REFUND: "Refund"
699
+ }[s.toUpperCase()] || s;
700
+ }
701
+ function at(s, r) {
702
+ return r ? {
703
+ deposit: "Credit deposit",
704
+ purchase: "Purchase",
705
+ api_call: "API usage",
706
+ subscription: "Subscription",
707
+ refund: "Refund",
708
+ bonus: "Bonus credit",
709
+ promo: "Promotional credit",
710
+ correction: "Balance correction"
711
+ }[r.toLowerCase()] || r : {
712
+ DEPOSIT: "Credit added",
713
+ SPEND: "Credit used",
714
+ ADJUSTMENT: "Manual adjustment",
715
+ REFUND: "Credit refunded"
716
+ }[s.toUpperCase()] || "—";
717
+ }
718
+ function wt({
719
+ userId: s,
720
+ onBack: r,
721
+ currentUserId: i,
722
+ onEditUser: a,
723
+ onAdjustCredits: f,
724
+ cedrosPayEnabled: y = !1,
725
+ className: g = ""
726
+ }) {
727
+ const { config: c, _internal: o } = Ce(), {
728
+ isLoading: h,
729
+ getUser: L,
730
+ getUserDeposits: P,
731
+ getUserCredits: p,
732
+ getUserChats: T,
733
+ getUserReferrals: S,
734
+ deleteUser: E,
735
+ forcePasswordReset: k,
736
+ clearError: A
737
+ } = pe(), w = te(
738
+ () => new Ae(
739
+ c.serverUrl,
740
+ c.requestTimeout,
741
+ c.retryAttempts,
742
+ o?.getAccessToken
743
+ ),
744
+ [c.serverUrl, c.requestTimeout, c.retryAttempts, o]
745
+ ), [d, D] = v(null), [R, _] = v(null), [M, j] = v(null), [K, b] = v(null), [U, u] = v(null), [n, l] = v(null), [N, V] = v(null), [O, H] = v("deposits"), [ye, re] = v(null), [ae, G] = v(null), [Se, ie] = v(null), [Ee, ne] = v(null), [Ue, ce] = v(null), [ke, Q] = v(null), [Re, J] = v(null), [X, Z] = v(!1), [de, $e] = v(0), [oe, Le] = v(0), [le, Te] = v(0), [me, Fe] = v(0), F = 10, ue = C(async () => {
746
+ try {
747
+ const m = await L(s);
748
+ D(m), re(null);
749
+ } catch (m) {
750
+ re(m instanceof Error ? m.message : "Failed to load user");
751
+ }
752
+ }, [s, L]), he = C(async () => {
753
+ try {
754
+ const x = await P(s, { limit: F, offset: de });
755
+ j(x), ie(null);
756
+ } catch (m) {
757
+ ie(m instanceof Error ? m.message : "Failed to load deposits");
758
+ }
759
+ }, [s, P, de]), z = C(async () => {
760
+ try {
761
+ const x = await p(s, { limit: F, offset: oe });
762
+ _(x), G(null);
763
+ } catch (m) {
764
+ G(m instanceof Error ? m.message : "Failed to load credits");
765
+ }
766
+ }, [s, p, oe]), fe = C(async () => {
767
+ if (y)
768
+ try {
769
+ const x = await T(s, { limit: F, offset: le });
770
+ b(x), ne(null);
771
+ } catch (m) {
772
+ ne(m instanceof Error ? m.message : "Failed to load chat history");
773
+ }
774
+ }, [s, T, le, y]), be = C(async () => {
775
+ try {
776
+ const x = await S(s, { limit: F, offset: me });
777
+ u(x), ce(null);
778
+ } catch (m) {
779
+ ce(m instanceof Error ? m.message : "Failed to load referrals");
780
+ }
781
+ }, [s, S, me]), W = C(async () => {
782
+ try {
783
+ const m = await w.getUserKyc(s);
784
+ l(m), Q(null);
785
+ } catch (m) {
786
+ Q(m instanceof Error ? m.message : "Failed to load KYC data");
787
+ }
788
+ }, [s, w]), B = C(async () => {
789
+ try {
790
+ const m = await w.getUserAccreditation(s);
791
+ V(m), J(null);
792
+ } catch (m) {
793
+ J(
794
+ m instanceof Error ? m.message : "Failed to load accreditation data"
795
+ );
796
+ }
797
+ }, [s, w]), Pe = C(
798
+ async (m) => {
799
+ try {
800
+ await w.overrideAccreditationStatus(s, m), await B();
801
+ } catch (x) {
802
+ J(
803
+ x instanceof Error ? x.message : "Failed to override accreditation status"
804
+ );
805
+ }
806
+ },
807
+ [s, w, B]
808
+ ), De = C(
809
+ async (m, x, Qe, Xe) => {
810
+ try {
811
+ await w.reviewAccreditation(
812
+ m,
813
+ x,
814
+ Qe,
815
+ Xe
816
+ ), await B();
817
+ } catch (ge) {
818
+ J(
819
+ ge instanceof Error ? ge.message : "Failed to review accreditation submission"
820
+ );
821
+ }
822
+ },
823
+ [w, B]
824
+ ), Oe = C(
825
+ async (m) => {
826
+ try {
827
+ await w.overrideUserKyc(s, m), await W();
828
+ } catch (x) {
829
+ Q(x instanceof Error ? x.message : "Failed to override KYC status");
830
+ }
831
+ },
832
+ [s, w, W]
833
+ );
834
+ I(() => {
835
+ ue(), he(), z(), be(), W(), B(), y && fe();
836
+ }, [ue, he, z, fe, be, W, B, y]);
837
+ const xe = async () => {
838
+ if (!d) return;
839
+ if (d.id === i) {
840
+ alert("You cannot delete your own account");
841
+ return;
842
+ }
843
+ if (d.isSystemAdmin) {
844
+ alert("Cannot delete a system admin. Remove admin status first.");
845
+ return;
846
+ }
847
+ if (window.confirm(
848
+ `Are you sure you want to delete ${d.name || d.email || "this user"}? This action cannot be undone.`
849
+ )) {
850
+ Z(!0);
851
+ try {
852
+ await E(d.id), r();
853
+ } catch {
854
+ } finally {
855
+ Z(!1);
856
+ }
857
+ }
858
+ }, Me = async () => {
859
+ if (!d?.email) {
860
+ alert("User has no email address");
861
+ return;
862
+ }
863
+ if (window.confirm(`Send a password reset email to ${d.email}?`)) {
864
+ Z(!0);
865
+ try {
866
+ await k(d.id), alert("Password reset email sent");
867
+ } catch {
868
+ } finally {
869
+ Z(!1);
870
+ }
871
+ }
872
+ }, _e = M ? Math.ceil(M.total / F) : 0, Ke = Math.floor(de / F) + 1, je = R ? Math.ceil(R.totalTransactions / F) : 0, qe = Math.floor(oe / F) + 1, Ve = (m) => {
873
+ $e((m - 1) * F);
874
+ }, Be = (m) => {
875
+ Le((m - 1) * F);
876
+ }, Ye = K ? Math.ceil(K.total / F) : 0, He = Math.floor(le / F) + 1, Ie = (m) => {
877
+ Te((m - 1) * F);
878
+ }, Je = U ? Math.ceil(U.total / F) : 0, We = Math.floor(me / F) + 1, Ge = (m) => {
879
+ Fe((m - 1) * F);
880
+ };
881
+ if (ye)
882
+ return /* @__PURE__ */ t("div", { className: `cedros-admin-user-detail cedros-admin-user-detail-error ${g}`, children: [
883
+ /* @__PURE__ */ e(
884
+ "button",
885
+ {
886
+ type: "button",
887
+ className: "cedros-button cedros-button-outline cedros-button-sm",
888
+ onClick: r,
889
+ children: "Back"
890
+ }
891
+ ),
892
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error", children: ye }),
893
+ /* @__PURE__ */ e(
894
+ "button",
895
+ {
896
+ type: "button",
897
+ className: "cedros-button cedros-button-outline",
898
+ onClick: () => {
899
+ A(), re(null), ue();
900
+ },
901
+ children: "Retry"
902
+ }
903
+ )
904
+ ] });
905
+ if (h && !d)
906
+ return /* @__PURE__ */ t("div", { className: `cedros-admin-user-detail cedros-admin-user-detail-loading ${g}`, children: [
907
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
908
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-text", children: "Loading user..." })
909
+ ] });
910
+ if (!d)
911
+ return /* @__PURE__ */ t("div", { className: `cedros-admin-user-detail ${g}`, children: [
912
+ /* @__PURE__ */ e(
913
+ "button",
914
+ {
915
+ type: "button",
916
+ className: "cedros-button cedros-button-outline cedros-button-sm",
917
+ onClick: r,
918
+ children: "Back"
919
+ }
920
+ ),
921
+ /* @__PURE__ */ e("p", { className: "cedros-admin-empty-message", children: "User not found." })
922
+ ] });
923
+ const Ne = d.id === i;
924
+ return /* @__PURE__ */ t("div", { className: `cedros-admin-user-detail ${g}`, children: [
925
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-detail-header", children: [
926
+ /* @__PURE__ */ e(
927
+ "button",
928
+ {
929
+ type: "button",
930
+ className: "cedros-button cedros-button-outline cedros-button-sm cedros-admin-back-btn",
931
+ onClick: r,
932
+ children: "Back to Users"
933
+ }
934
+ ),
935
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-detail-actions", children: [
936
+ a && /* @__PURE__ */ e(
937
+ "button",
938
+ {
939
+ type: "button",
940
+ className: "cedros-button cedros-button-outline cedros-button-sm",
941
+ onClick: () => a(d),
942
+ disabled: X,
943
+ children: "Edit"
944
+ }
945
+ ),
946
+ d.email && /* @__PURE__ */ e(
947
+ "button",
948
+ {
949
+ type: "button",
950
+ className: "cedros-button cedros-button-outline cedros-button-sm",
951
+ onClick: Me,
952
+ disabled: X,
953
+ children: "Reset Password"
954
+ }
955
+ ),
956
+ f && /* @__PURE__ */ e(
957
+ "button",
958
+ {
959
+ type: "button",
960
+ className: "cedros-button cedros-button-outline cedros-button-sm",
961
+ onClick: () => f(d),
962
+ disabled: X,
963
+ children: "Adjust Credits"
964
+ }
965
+ ),
966
+ !Ne && !d.isSystemAdmin && /* @__PURE__ */ e(
967
+ "button",
968
+ {
969
+ type: "button",
970
+ className: "cedros-button cedros-button-outline cedros-button-sm cedros-admin-btn-danger",
971
+ onClick: xe,
972
+ disabled: X,
973
+ children: "Delete"
974
+ }
975
+ )
976
+ ] })
977
+ ] }),
978
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-detail-info", children: [
979
+ /* @__PURE__ */ e("div", { className: "cedros-admin-user-detail-avatar", children: d.picture ? /* @__PURE__ */ e(
980
+ "img",
981
+ {
982
+ src: d.picture,
983
+ alt: d.name || d.email || "User",
984
+ className: "cedros-admin-user-detail-avatar-img",
985
+ referrerPolicy: "no-referrer"
986
+ }
987
+ ) : /* @__PURE__ */ e("span", { className: "cedros-admin-user-detail-avatar-placeholder", children: (d.name?.[0] || d.email?.[0] || "?").toUpperCase() }) }),
988
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-detail-meta", children: [
989
+ /* @__PURE__ */ t("h2", { className: "cedros-admin-user-detail-name", children: [
990
+ d.name || "Unknown",
991
+ Ne && /* @__PURE__ */ e("span", { className: "cedros-admin-user-you", children: "(you)" })
992
+ ] }),
993
+ /* @__PURE__ */ t("p", { className: "cedros-admin-user-detail-email", children: [
994
+ d.email || "No email",
995
+ d.emailVerified && /* @__PURE__ */ e("span", { className: "cedros-admin-verified-badge", title: "Email verified", children: "Verified" })
996
+ ] }),
997
+ d.isSystemAdmin && /* @__PURE__ */ e("div", { className: "cedros-admin-user-detail-badges", children: /* @__PURE__ */ e("span", { className: "cedros-admin-admin-badge cedros-admin-admin-badge-yes", children: "System Admin" }) }),
998
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-detail-methods", children: [
999
+ /* @__PURE__ */ e("span", { className: "cedros-admin-user-detail-methods-label", children: "Auth Methods:" }),
1000
+ d.authMethods.length > 0 ? d.authMethods.map((m) => /* @__PURE__ */ e(
1001
+ "span",
1002
+ {
1003
+ className: `cedros-admin-auth-badge cedros-admin-auth-badge-${m}`,
1004
+ children: m
1005
+ },
1006
+ m
1007
+ )) : /* @__PURE__ */ e("span", { className: "cedros-admin-auth-badge cedros-admin-auth-badge-none", children: "none" })
1008
+ ] }),
1009
+ /* @__PURE__ */ t("p", { className: "cedros-admin-user-detail-dates", children: [
1010
+ "Registered: ",
1011
+ ve(d.createdAt),
1012
+ " | Updated: ",
1013
+ ve(d.updatedAt)
1014
+ ] }),
1015
+ d.referralCode && /* @__PURE__ */ t("div", { className: "cedros-admin-user-detail-referral", children: [
1016
+ /* @__PURE__ */ e("span", { className: "cedros-admin-user-detail-referral-label", children: "Referral:" }),
1017
+ /* @__PURE__ */ e("span", { className: "cedros-admin-user-detail-referral-code", children: d.referralCode }),
1018
+ d.referralCount !== void 0 && d.referralCount > 0 && /* @__PURE__ */ t("span", { className: "cedros-admin-user-detail-referral-count", children: [
1019
+ "(",
1020
+ d.referralCount,
1021
+ " referred)"
1022
+ ] }),
1023
+ d.referredBy && /* @__PURE__ */ t("span", { className: "cedros-admin-user-detail-referred-by", children: [
1024
+ "Referred by:",
1025
+ " ",
1026
+ /* @__PURE__ */ e(
1027
+ "button",
1028
+ {
1029
+ type: "button",
1030
+ className: "cedros-admin-user-uuid-link",
1031
+ onClick: () => navigator.clipboard?.writeText(d.referredBy),
1032
+ title: "Click to copy referrer UUID",
1033
+ children: d.referredBy
1034
+ }
1035
+ )
1036
+ ] })
1037
+ ] })
1038
+ ] })
1039
+ ] }),
1040
+ ae ? /* @__PURE__ */ t("div", { className: "cedros-admin-stats-error", children: [
1041
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: ae }),
1042
+ /* @__PURE__ */ e(
1043
+ "button",
1044
+ {
1045
+ type: "button",
1046
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1047
+ onClick: () => {
1048
+ G(null), z();
1049
+ },
1050
+ children: "Retry"
1051
+ }
1052
+ )
1053
+ ] }) : R ? /* @__PURE__ */ t("div", { className: "cedros-admin-user-detail-stats", children: [
1054
+ /* @__PURE__ */ t("div", { className: "cedros-admin-stat-card", children: [
1055
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-label", children: "Credit Balance" }),
1056
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-value", children: ee(R.stats.currentBalanceLamports) })
1057
+ ] }),
1058
+ /* @__PURE__ */ t("div", { className: "cedros-admin-stat-card", children: [
1059
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-label", children: "Total Credited" }),
1060
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-value", children: ee(R.stats.totalDepositedLamports) })
1061
+ ] }),
1062
+ /* @__PURE__ */ t("div", { className: "cedros-admin-stat-card", children: [
1063
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-label", children: "Total Spent" }),
1064
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-value", children: ee(R.stats.totalSpentLamports) })
1065
+ ] }),
1066
+ /* @__PURE__ */ t("div", { className: "cedros-admin-stat-card", children: [
1067
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-label", children: "Deposits" }),
1068
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-value", children: R.stats.depositCount })
1069
+ ] }),
1070
+ /* @__PURE__ */ t("div", { className: "cedros-admin-stat-card", children: [
1071
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-label", children: "Transactions" }),
1072
+ /* @__PURE__ */ e("span", { className: "cedros-admin-stat-value", children: R.stats.spendCount })
1073
+ ] })
1074
+ ] }) : /* @__PURE__ */ t("div", { className: "cedros-admin-stats-loading", children: [
1075
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
1076
+ /* @__PURE__ */ e("span", { children: "Loading credit stats..." })
1077
+ ] }),
1078
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-detail-tabs", children: [
1079
+ /* @__PURE__ */ t(
1080
+ "button",
1081
+ {
1082
+ type: "button",
1083
+ className: `cedros-admin-tab ${O === "deposits" ? "cedros-admin-tab-active" : ""}`,
1084
+ onClick: () => H("deposits"),
1085
+ children: [
1086
+ "Deposits (",
1087
+ M?.total ?? 0,
1088
+ ")"
1089
+ ]
1090
+ }
1091
+ ),
1092
+ /* @__PURE__ */ t(
1093
+ "button",
1094
+ {
1095
+ type: "button",
1096
+ className: `cedros-admin-tab ${O === "transactions" ? "cedros-admin-tab-active" : ""}`,
1097
+ onClick: () => H("transactions"),
1098
+ children: [
1099
+ "Credits (",
1100
+ R?.totalTransactions ?? 0,
1101
+ ")"
1102
+ ]
1103
+ }
1104
+ ),
1105
+ y && /* @__PURE__ */ t(
1106
+ "button",
1107
+ {
1108
+ type: "button",
1109
+ className: `cedros-admin-tab ${O === "chats" ? "cedros-admin-tab-active" : ""}`,
1110
+ onClick: () => H("chats"),
1111
+ children: [
1112
+ "Chats (",
1113
+ K?.total ?? 0,
1114
+ ")"
1115
+ ]
1116
+ }
1117
+ ),
1118
+ /* @__PURE__ */ t(
1119
+ "button",
1120
+ {
1121
+ type: "button",
1122
+ className: `cedros-admin-tab ${O === "referrals" ? "cedros-admin-tab-active" : ""}`,
1123
+ onClick: () => H("referrals"),
1124
+ children: [
1125
+ "Referrals (",
1126
+ U?.total ?? d.referralCount ?? 0,
1127
+ ")"
1128
+ ]
1129
+ }
1130
+ ),
1131
+ /* @__PURE__ */ t(
1132
+ "button",
1133
+ {
1134
+ type: "button",
1135
+ className: `cedros-admin-tab ${O === "kyc" ? "cedros-admin-tab-active" : ""}`,
1136
+ onClick: () => H("kyc"),
1137
+ children: [
1138
+ "KYC (",
1139
+ n?.totalSessions ?? 0,
1140
+ ")"
1141
+ ]
1142
+ }
1143
+ ),
1144
+ /* @__PURE__ */ t(
1145
+ "button",
1146
+ {
1147
+ type: "button",
1148
+ className: `cedros-admin-tab ${O === "accreditation" ? "cedros-admin-tab-active" : ""}`,
1149
+ onClick: () => H("accreditation"),
1150
+ children: [
1151
+ "Accreditation (",
1152
+ N?.totalSubmissions ?? 0,
1153
+ ")"
1154
+ ]
1155
+ }
1156
+ )
1157
+ ] }),
1158
+ /* @__PURE__ */ t("div", { className: "cedros-admin-user-detail-content", children: [
1159
+ O === "deposits" && /* @__PURE__ */ e(
1160
+ it,
1161
+ {
1162
+ deposits: M?.deposits ?? [],
1163
+ total: M?.total ?? 0,
1164
+ currentPage: Ke,
1165
+ totalPages: _e,
1166
+ onPageChange: Ve,
1167
+ isLoading: h,
1168
+ error: Se,
1169
+ onRetry: () => {
1170
+ ie(null), he();
1171
+ }
1172
+ }
1173
+ ),
1174
+ O === "transactions" && /* @__PURE__ */ e(
1175
+ nt,
1176
+ {
1177
+ transactions: R?.transactions ?? [],
1178
+ total: R?.totalTransactions ?? 0,
1179
+ currentPage: qe,
1180
+ totalPages: je,
1181
+ onPageChange: Be,
1182
+ error: ae,
1183
+ onRetry: () => {
1184
+ G(null), z();
1185
+ },
1186
+ isLoading: h
1187
+ }
1188
+ ),
1189
+ O === "chats" && y && /* @__PURE__ */ e(
1190
+ ct,
1191
+ {
1192
+ sessions: K?.sessions ?? [],
1193
+ total: K?.total ?? 0,
1194
+ currentPage: He,
1195
+ totalPages: Ye,
1196
+ onPageChange: Ie,
1197
+ error: Ee,
1198
+ onRetry: () => {
1199
+ ne(null), fe();
1200
+ },
1201
+ isLoading: h
1202
+ }
1203
+ ),
1204
+ O === "referrals" && /* @__PURE__ */ e(
1205
+ dt,
1206
+ {
1207
+ referrals: U?.users ?? [],
1208
+ total: U?.total ?? 0,
1209
+ currentPage: We,
1210
+ totalPages: Je,
1211
+ onPageChange: Ge,
1212
+ error: Ue,
1213
+ onRetry: () => {
1214
+ ce(null), be();
1215
+ },
1216
+ isLoading: h
1217
+ }
1218
+ ),
1219
+ O === "kyc" && /* @__PURE__ */ e(
1220
+ lt,
1221
+ {
1222
+ kycData: n,
1223
+ userKycStatus: d.kycStatus,
1224
+ userKycVerifiedAt: d.kycVerifiedAt,
1225
+ userKycExpiresAt: d.kycExpiresAt,
1226
+ error: ke,
1227
+ onRetry: () => {
1228
+ Q(null), W();
1229
+ },
1230
+ onOverride: Oe
1231
+ }
1232
+ ),
1233
+ O === "accreditation" && /* @__PURE__ */ e(
1234
+ ut,
1235
+ {
1236
+ accreditationData: N,
1237
+ userAccreditationStatus: d.accreditationStatus,
1238
+ userAccreditationVerifiedAt: d.accreditationVerifiedAt,
1239
+ userAccreditationExpiresAt: d.accreditationExpiresAt,
1240
+ error: Re,
1241
+ onRetry: () => {
1242
+ J(null), B();
1243
+ },
1244
+ onOverride: Pe,
1245
+ onReview: De
1246
+ }
1247
+ )
1248
+ ] })
1249
+ ] });
1250
+ }
1251
+ function it({
1252
+ deposits: s,
1253
+ total: r,
1254
+ currentPage: i,
1255
+ totalPages: a,
1256
+ onPageChange: f,
1257
+ isLoading: y,
1258
+ error: g,
1259
+ onRetry: c
1260
+ }) {
1261
+ return g ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-error", children: [
1262
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: g }),
1263
+ /* @__PURE__ */ e(
1264
+ "button",
1265
+ {
1266
+ type: "button",
1267
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1268
+ onClick: c,
1269
+ children: "Retry"
1270
+ }
1271
+ )
1272
+ ] }) : y && s.length === 0 ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-loading", children: [
1273
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
1274
+ /* @__PURE__ */ e("span", { children: "Loading deposits..." })
1275
+ ] }) : r === 0 ? /* @__PURE__ */ e("div", { className: "cedros-admin-empty-message", children: "No deposits found." }) : /* @__PURE__ */ t(Y, { children: [
1276
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-table", children: [
1277
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-thead", children: [
1278
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Date" }),
1279
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Amount" }),
1280
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Status" }),
1281
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Transaction" })
1282
+ ] }),
1283
+ s.map((o) => /* @__PURE__ */ t("div", { className: "cedros-admin-list-row", children: [
1284
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: q(o.createdAt) }),
1285
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: st(o.amountLamports) }),
1286
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: /* @__PURE__ */ e("span", { className: `cedros-admin-status-badge cedros-admin-status-${o.status}`, children: o.status }) }),
1287
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td cedros-admin-list-td-actions", children: o.txSignature ? /* @__PURE__ */ t(Y, { children: [
1288
+ /* @__PURE__ */ t("span", { className: "cedros-admin-list-td-mono", title: o.txSignature, children: [
1289
+ o.txSignature.slice(0, 8),
1290
+ "..."
1291
+ ] }),
1292
+ /* @__PURE__ */ e(
1293
+ "a",
1294
+ {
1295
+ href: `https://orbmarkets.io/tx/${o.txSignature}`,
1296
+ target: "_blank",
1297
+ rel: "noopener noreferrer",
1298
+ className: "cedros-admin-icon-link",
1299
+ title: "View on Orbmarkets",
1300
+ "aria-label": "View transaction on Orbmarkets",
1301
+ children: "↗"
1302
+ }
1303
+ )
1304
+ ] }) : /* @__PURE__ */ e("span", { className: "cedros-admin-list-td-muted", children: "—" }) })
1305
+ ] }, o.id))
1306
+ ] }),
1307
+ a > 1 && /* @__PURE__ */ e(
1308
+ se,
1309
+ {
1310
+ currentPage: i,
1311
+ totalPages: a,
1312
+ total: r,
1313
+ onPageChange: f
1314
+ }
1315
+ )
1316
+ ] });
1317
+ }
1318
+ function nt({
1319
+ transactions: s,
1320
+ total: r,
1321
+ currentPage: i,
1322
+ totalPages: a,
1323
+ onPageChange: f,
1324
+ isLoading: y,
1325
+ error: g,
1326
+ onRetry: c
1327
+ }) {
1328
+ return g ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-error", children: [
1329
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: g }),
1330
+ /* @__PURE__ */ e(
1331
+ "button",
1332
+ {
1333
+ type: "button",
1334
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1335
+ onClick: c,
1336
+ children: "Retry"
1337
+ }
1338
+ )
1339
+ ] }) : y && s.length === 0 ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-loading", children: [
1340
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
1341
+ /* @__PURE__ */ e("span", { children: "Loading transactions..." })
1342
+ ] }) : r === 0 ? /* @__PURE__ */ e("div", { className: "cedros-admin-empty-message", children: "No credit transactions found." }) : /* @__PURE__ */ t(Y, { children: [
1343
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-table", children: [
1344
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-thead", children: [
1345
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Date" }),
1346
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Type" }),
1347
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Description" }),
1348
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Amount" })
1349
+ ] }),
1350
+ s.map((o) => /* @__PURE__ */ t("div", { className: "cedros-admin-list-row", children: [
1351
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: q(o.createdAt) }),
1352
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: /* @__PURE__ */ e(
1353
+ "span",
1354
+ {
1355
+ className: `cedros-admin-tx-type cedros-admin-tx-type-${o.txType.toLowerCase()}`,
1356
+ children: rt(o.txType)
1357
+ }
1358
+ ) }),
1359
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: at(o.txType, o.referenceType) }),
1360
+ /* @__PURE__ */ t(
1361
+ "div",
1362
+ {
1363
+ className: `cedros-admin-list-td ${o.amountLamports >= 0 ? "cedros-admin-amount-positive" : "cedros-admin-amount-negative"}`,
1364
+ children: [
1365
+ o.amountLamports >= 0 ? "+" : "",
1366
+ ee(o.amountLamports)
1367
+ ]
1368
+ }
1369
+ )
1370
+ ] }, o.id))
1371
+ ] }),
1372
+ a > 1 && /* @__PURE__ */ e(
1373
+ se,
1374
+ {
1375
+ currentPage: i,
1376
+ totalPages: a,
1377
+ total: r,
1378
+ onPageChange: f
1379
+ }
1380
+ )
1381
+ ] });
1382
+ }
1383
+ function ct({
1384
+ sessions: s,
1385
+ total: r,
1386
+ currentPage: i,
1387
+ totalPages: a,
1388
+ onPageChange: f,
1389
+ isLoading: y,
1390
+ error: g,
1391
+ onRetry: c
1392
+ }) {
1393
+ return g ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-error", children: [
1394
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: g }),
1395
+ /* @__PURE__ */ e(
1396
+ "button",
1397
+ {
1398
+ type: "button",
1399
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1400
+ onClick: c,
1401
+ children: "Retry"
1402
+ }
1403
+ )
1404
+ ] }) : y && s.length === 0 ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-loading", children: [
1405
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
1406
+ /* @__PURE__ */ e("span", { children: "Loading chat history..." })
1407
+ ] }) : r === 0 ? /* @__PURE__ */ e("div", { className: "cedros-admin-empty-message", children: "No chat sessions found." }) : /* @__PURE__ */ t(Y, { children: [
1408
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-table", children: [
1409
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-thead", children: [
1410
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Date" }),
1411
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Session" }),
1412
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Messages" })
1413
+ ] }),
1414
+ s.map((o) => /* @__PURE__ */ t("div", { className: "cedros-admin-list-row", children: [
1415
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: q(o.createdAt) }),
1416
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: o.title || `Chat ${o.id.slice(0, 8)}...` }),
1417
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: o.messageCount })
1418
+ ] }, o.id))
1419
+ ] }),
1420
+ a > 1 && /* @__PURE__ */ e(
1421
+ se,
1422
+ {
1423
+ currentPage: i,
1424
+ totalPages: a,
1425
+ total: r,
1426
+ onPageChange: f
1427
+ }
1428
+ )
1429
+ ] });
1430
+ }
1431
+ function dt({
1432
+ referrals: s,
1433
+ total: r,
1434
+ currentPage: i,
1435
+ totalPages: a,
1436
+ onPageChange: f,
1437
+ isLoading: y,
1438
+ error: g,
1439
+ onRetry: c
1440
+ }) {
1441
+ return g ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-error", children: [
1442
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: g }),
1443
+ /* @__PURE__ */ e(
1444
+ "button",
1445
+ {
1446
+ type: "button",
1447
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1448
+ onClick: c,
1449
+ children: "Retry"
1450
+ }
1451
+ )
1452
+ ] }) : y && s.length === 0 ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-loading", children: [
1453
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
1454
+ /* @__PURE__ */ e("span", { children: "Loading referrals..." })
1455
+ ] }) : r === 0 ? /* @__PURE__ */ e("div", { className: "cedros-admin-empty-message", children: "No referred users found." }) : /* @__PURE__ */ t(Y, { children: [
1456
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-table", children: [
1457
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-thead", children: [
1458
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Name" }),
1459
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Email" }),
1460
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Joined" }),
1461
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Last Login" })
1462
+ ] }),
1463
+ s.map((o) => /* @__PURE__ */ t("div", { className: "cedros-admin-list-row", children: [
1464
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: o.name || "—" }),
1465
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: o.email || "—" }),
1466
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: ve(o.createdAt) }),
1467
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: o.lastLoginAt ? q(o.lastLoginAt) : "—" })
1468
+ ] }, o.id))
1469
+ ] }),
1470
+ a > 1 && /* @__PURE__ */ e(
1471
+ se,
1472
+ {
1473
+ currentPage: i,
1474
+ totalPages: a,
1475
+ total: r,
1476
+ onPageChange: f
1477
+ }
1478
+ )
1479
+ ] });
1480
+ }
1481
+ const ot = [
1482
+ { value: "none", label: "None (reset)" },
1483
+ { value: "verified", label: "Verified" },
1484
+ { value: "failed", label: "Failed" }
1485
+ ];
1486
+ function lt({
1487
+ kycData: s,
1488
+ userKycStatus: r,
1489
+ userKycVerifiedAt: i,
1490
+ userKycExpiresAt: a,
1491
+ error: f,
1492
+ onRetry: y,
1493
+ onOverride: g
1494
+ }) {
1495
+ const [c, o] = v("none"), [h, L] = v(!1), [P, p] = v(null), T = s?.status ?? r ?? "none", S = s?.verifiedAt ?? i, E = s?.expiresAt ?? a, k = async () => {
1496
+ if (window.confirm(
1497
+ `Override KYC status to "${c}" for this user?`
1498
+ )) {
1499
+ L(!0), p(null);
1500
+ try {
1501
+ await g(c);
1502
+ } catch (w) {
1503
+ p(w instanceof Error ? w.message : "Override failed");
1504
+ } finally {
1505
+ L(!1);
1506
+ }
1507
+ }
1508
+ };
1509
+ return f ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-error", children: [
1510
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: f }),
1511
+ /* @__PURE__ */ e(
1512
+ "button",
1513
+ {
1514
+ type: "button",
1515
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1516
+ onClick: y,
1517
+ children: "Retry"
1518
+ }
1519
+ )
1520
+ ] }) : !s && !r ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-loading", children: [
1521
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
1522
+ /* @__PURE__ */ e("span", { children: "Loading KYC data..." })
1523
+ ] }) : /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-tab", children: [
1524
+ /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-tab-summary", children: [
1525
+ /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-tab-row", children: [
1526
+ /* @__PURE__ */ e("span", { className: "cedros-kyc-admin-tab-label", children: "Status" }),
1527
+ /* @__PURE__ */ e(
1528
+ "span",
1529
+ {
1530
+ className: `cedros-admin-status-badge cedros-kyc-status-${T}`,
1531
+ children: T
1532
+ }
1533
+ )
1534
+ ] }),
1535
+ S && /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-tab-row", children: [
1536
+ /* @__PURE__ */ e("span", { className: "cedros-kyc-admin-tab-label", children: "Verified at" }),
1537
+ /* @__PURE__ */ e("span", { children: q(S) })
1538
+ ] }),
1539
+ E && /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-tab-row", children: [
1540
+ /* @__PURE__ */ e("span", { className: "cedros-kyc-admin-tab-label", children: "Expires at" }),
1541
+ /* @__PURE__ */ e("span", { children: q(E) })
1542
+ ] })
1543
+ ] }),
1544
+ /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-override", children: [
1545
+ /* @__PURE__ */ e("span", { className: "cedros-kyc-admin-override-label", children: "Override status" }),
1546
+ /* @__PURE__ */ e(
1547
+ "select",
1548
+ {
1549
+ className: "cedros-kyc-admin-override-select",
1550
+ value: c,
1551
+ onChange: (A) => o(A.target.value),
1552
+ disabled: h,
1553
+ "aria-label": "Select KYC override status",
1554
+ children: ot.map((A) => /* @__PURE__ */ e("option", { value: A.value, children: A.label }, A.value))
1555
+ }
1556
+ ),
1557
+ /* @__PURE__ */ e(
1558
+ "button",
1559
+ {
1560
+ type: "button",
1561
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1562
+ onClick: k,
1563
+ disabled: h,
1564
+ children: h ? "Saving..." : "Apply Override"
1565
+ }
1566
+ ),
1567
+ P && /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: P })
1568
+ ] }),
1569
+ s && s.sessions.length > 0 ? /* @__PURE__ */ t("div", { className: "cedros-admin-list-table", children: [
1570
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-thead", children: [
1571
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Date" }),
1572
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Provider" }),
1573
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Status" }),
1574
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Error" }),
1575
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Completed" })
1576
+ ] }),
1577
+ s.sessions.map((A) => /* @__PURE__ */ t("div", { className: "cedros-admin-list-row", children: [
1578
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: q(A.createdAt) }),
1579
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: A.provider }),
1580
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: /* @__PURE__ */ e(
1581
+ "span",
1582
+ {
1583
+ className: `cedros-admin-status-badge cedros-kyc-status-${A.status}`,
1584
+ children: A.status
1585
+ }
1586
+ ) }),
1587
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td cedros-admin-list-td-muted", children: A.errorCode ? `${A.errorCode}${A.errorReason ? `: ${A.errorReason}` : ""}` : "—" }),
1588
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: A.completedAt ? q(A.completedAt) : "—" })
1589
+ ] }, A.id))
1590
+ ] }) : s && /* @__PURE__ */ e("div", { className: "cedros-admin-empty-message", children: "No verification sessions found." })
1591
+ ] });
1592
+ }
1593
+ const mt = [
1594
+ { value: "none", label: "None (reset)" },
1595
+ { value: "approved", label: "Approved" },
1596
+ { value: "rejected", label: "Rejected" }
1597
+ ];
1598
+ function ut({
1599
+ accreditationData: s,
1600
+ userAccreditationStatus: r,
1601
+ userAccreditationVerifiedAt: i,
1602
+ userAccreditationExpiresAt: a,
1603
+ error: f,
1604
+ onRetry: y,
1605
+ onOverride: g,
1606
+ onReview: c
1607
+ }) {
1608
+ const [o, h] = v("none"), [L, P] = v(!1), [p, T] = v(null), [S, E] = v(null), [k, A] = v(""), [w, d] = v(""), [D, R] = v(!1), [_, M] = v(null), j = s?.status ?? r ?? "none", K = s?.verifiedAt ?? i, b = s?.expiresAt ?? a, U = async () => {
1609
+ if (window.confirm(
1610
+ `Override accreditation status to "${o}" for this user?`
1611
+ )) {
1612
+ P(!0), T(null);
1613
+ try {
1614
+ await g(o);
1615
+ } catch (l) {
1616
+ T(l instanceof Error ? l.message : "Override failed");
1617
+ } finally {
1618
+ P(!1);
1619
+ }
1620
+ }
1621
+ }, u = async (n, l) => {
1622
+ const N = l ? "approve" : "reject";
1623
+ if (window.confirm(`${N.charAt(0).toUpperCase() + N.slice(1)} this submission?`)) {
1624
+ R(!0), M(null);
1625
+ try {
1626
+ await c(
1627
+ n,
1628
+ l,
1629
+ k || void 0,
1630
+ l ? void 0 : w || void 0
1631
+ ), E(null), A(""), d("");
1632
+ } catch (O) {
1633
+ M(O instanceof Error ? O.message : "Review failed");
1634
+ } finally {
1635
+ R(!1);
1636
+ }
1637
+ }
1638
+ };
1639
+ return f ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-error", children: [
1640
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: f }),
1641
+ /* @__PURE__ */ e(
1642
+ "button",
1643
+ {
1644
+ type: "button",
1645
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1646
+ onClick: y,
1647
+ children: "Retry"
1648
+ }
1649
+ )
1650
+ ] }) : !s && !r ? /* @__PURE__ */ t("div", { className: "cedros-admin-tab-loading", children: [
1651
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
1652
+ /* @__PURE__ */ e("span", { children: "Loading accreditation data..." })
1653
+ ] }) : /* @__PURE__ */ t("div", { className: "cedros-accreditation-admin-tab", children: [
1654
+ /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-tab-summary", children: [
1655
+ /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-tab-row", children: [
1656
+ /* @__PURE__ */ e("span", { className: "cedros-kyc-admin-tab-label", children: "Status" }),
1657
+ /* @__PURE__ */ e(
1658
+ "span",
1659
+ {
1660
+ className: `cedros-admin-status-badge cedros-accreditation-status-${j}`,
1661
+ children: j
1662
+ }
1663
+ )
1664
+ ] }),
1665
+ K && /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-tab-row", children: [
1666
+ /* @__PURE__ */ e("span", { className: "cedros-kyc-admin-tab-label", children: "Verified at" }),
1667
+ /* @__PURE__ */ e("span", { children: q(K) })
1668
+ ] }),
1669
+ b && /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-tab-row", children: [
1670
+ /* @__PURE__ */ e("span", { className: "cedros-kyc-admin-tab-label", children: "Expires at" }),
1671
+ /* @__PURE__ */ e("span", { children: q(b) })
1672
+ ] })
1673
+ ] }),
1674
+ /* @__PURE__ */ t("div", { className: "cedros-kyc-admin-override", children: [
1675
+ /* @__PURE__ */ e("span", { className: "cedros-kyc-admin-override-label", children: "Override status" }),
1676
+ /* @__PURE__ */ e(
1677
+ "select",
1678
+ {
1679
+ className: "cedros-kyc-admin-override-select",
1680
+ value: o,
1681
+ onChange: (n) => h(n.target.value),
1682
+ disabled: L,
1683
+ "aria-label": "Select accreditation override status",
1684
+ children: mt.map((n) => /* @__PURE__ */ e("option", { value: n.value, children: n.label }, n.value))
1685
+ }
1686
+ ),
1687
+ /* @__PURE__ */ e(
1688
+ "button",
1689
+ {
1690
+ type: "button",
1691
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1692
+ onClick: U,
1693
+ disabled: L,
1694
+ children: L ? "Saving..." : "Apply Override"
1695
+ }
1696
+ ),
1697
+ p && /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: p })
1698
+ ] }),
1699
+ s && s.submissions.length > 0 ? /* @__PURE__ */ t(Y, { children: [
1700
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-table", children: [
1701
+ /* @__PURE__ */ t("div", { className: "cedros-admin-list-thead", children: [
1702
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Date" }),
1703
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Method" }),
1704
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Status" }),
1705
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Expires" }),
1706
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-th", children: "Actions" })
1707
+ ] }),
1708
+ s.submissions.map((n) => /* @__PURE__ */ t("div", { className: "cedros-admin-list-row", children: [
1709
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: q(n.createdAt) }),
1710
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: n.method.replace(/_/g, " ") }),
1711
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: /* @__PURE__ */ e(
1712
+ "span",
1713
+ {
1714
+ className: `cedros-admin-status-badge cedros-accreditation-status-${n.status}`,
1715
+ children: n.status
1716
+ }
1717
+ ) }),
1718
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td", children: n.expiresAt ? q(n.expiresAt) : "—" }),
1719
+ /* @__PURE__ */ e("div", { className: "cedros-admin-list-td cedros-admin-list-td-actions", children: n.status === "pending" && /* @__PURE__ */ e(
1720
+ "button",
1721
+ {
1722
+ type: "button",
1723
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1724
+ onClick: () => E(S === n.id ? null : n.id),
1725
+ children: "Review"
1726
+ }
1727
+ ) })
1728
+ ] }, n.id))
1729
+ ] }),
1730
+ S && /* @__PURE__ */ t("div", { className: "cedros-accreditation-review-panel", children: [
1731
+ /* @__PURE__ */ e("p", { className: "cedros-accreditation-review-title", children: "Review submission" }),
1732
+ /* @__PURE__ */ e("label", { className: "cedros-kyc-admin-tab-label", htmlFor: "review-notes", children: "Reviewer notes (internal)" }),
1733
+ /* @__PURE__ */ e(
1734
+ "input",
1735
+ {
1736
+ id: "review-notes",
1737
+ type: "text",
1738
+ className: "cedros-input cedros-input-sm",
1739
+ value: k,
1740
+ onChange: (n) => A(n.target.value),
1741
+ placeholder: "Optional internal notes",
1742
+ disabled: D
1743
+ }
1744
+ ),
1745
+ /* @__PURE__ */ e(
1746
+ "label",
1747
+ {
1748
+ className: "cedros-kyc-admin-tab-label",
1749
+ htmlFor: "review-rejection",
1750
+ children: "Rejection reason (shown to user if rejected)"
1751
+ }
1752
+ ),
1753
+ /* @__PURE__ */ e(
1754
+ "input",
1755
+ {
1756
+ id: "review-rejection",
1757
+ type: "text",
1758
+ className: "cedros-input cedros-input-sm",
1759
+ value: w,
1760
+ onChange: (n) => d(n.target.value),
1761
+ placeholder: "Required when rejecting",
1762
+ disabled: D
1763
+ }
1764
+ ),
1765
+ /* @__PURE__ */ t("div", { className: "cedros-accreditation-review-actions", children: [
1766
+ /* @__PURE__ */ e(
1767
+ "button",
1768
+ {
1769
+ type: "button",
1770
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1771
+ onClick: () => u(S, !0),
1772
+ disabled: D,
1773
+ children: D ? "Saving..." : "Approve"
1774
+ }
1775
+ ),
1776
+ /* @__PURE__ */ e(
1777
+ "button",
1778
+ {
1779
+ type: "button",
1780
+ className: "cedros-button cedros-button-outline cedros-button-sm cedros-admin-btn-danger",
1781
+ onClick: () => u(S, !1),
1782
+ disabled: D || !w.trim(),
1783
+ children: D ? "Saving..." : "Reject"
1784
+ }
1785
+ )
1786
+ ] }),
1787
+ _ && /* @__PURE__ */ e("p", { className: "cedros-admin-error-inline", children: _ })
1788
+ ] })
1789
+ ] }) : s && /* @__PURE__ */ e("div", { className: "cedros-admin-empty-message", children: "No accreditation submissions found." })
1790
+ ] });
1791
+ }
1792
+ function se({ currentPage: s, totalPages: r, total: i, onPageChange: a }) {
1793
+ return /* @__PURE__ */ t("div", { className: "cedros-admin-pagination", children: [
1794
+ /* @__PURE__ */ e(
1795
+ "button",
1796
+ {
1797
+ type: "button",
1798
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1799
+ onClick: () => a(s - 1),
1800
+ disabled: s <= 1,
1801
+ children: "Previous"
1802
+ }
1803
+ ),
1804
+ /* @__PURE__ */ t("span", { className: "cedros-admin-page-info", children: [
1805
+ "Page ",
1806
+ s,
1807
+ " of ",
1808
+ r,
1809
+ " (",
1810
+ i,
1811
+ " total)"
1812
+ ] }),
1813
+ /* @__PURE__ */ e(
1814
+ "button",
1815
+ {
1816
+ type: "button",
1817
+ className: "cedros-button cedros-button-outline cedros-button-sm",
1818
+ onClick: () => a(s + 1),
1819
+ disabled: s >= r,
1820
+ children: "Next"
1821
+ }
1822
+ )
1823
+ ] });
1824
+ }
1825
+ const ht = ["email", "google", "apple", "solana", "webauthn", "sso"], ft = {
1826
+ email: "Email Users",
1827
+ google: "Google Users",
1828
+ apple: "Apple Users",
1829
+ solana: "Solana Users",
1830
+ webauthn: "Passkey Users",
1831
+ sso: "SSO Provider Users"
1832
+ }, bt = {
1833
+ email: "auth_email_enabled",
1834
+ google: "auth_google_enabled",
1835
+ apple: "auth_apple_enabled",
1836
+ solana: "auth_solana_enabled",
1837
+ webauthn: "auth_webauthn_enabled",
1838
+ sso: "feature_sso"
1839
+ };
1840
+ function Ct() {
1841
+ const { getStats: s } = pe(), { fetchSettings: r, getValue: i } = ze(), [a, f] = v(null), [y, g] = v(!1), [c, o] = v(null), [h, L] = v(!1);
1842
+ I(() => {
1843
+ h || (r(), L(!0));
1844
+ }, [r, h]);
1845
+ const P = C(
1846
+ (S) => {
1847
+ const E = i(S);
1848
+ return E === void 0 ? !1 : E === "true" || E === "1";
1849
+ },
1850
+ [i]
1851
+ ), p = C(async () => {
1852
+ g(!0), o(null);
1853
+ try {
1854
+ const S = await s();
1855
+ f(S);
1856
+ } catch (S) {
1857
+ o(S instanceof Error ? S.message : "Failed to load user stats");
1858
+ } finally {
1859
+ g(!1);
1860
+ }
1861
+ }, [s]);
1862
+ return I(() => {
1863
+ p();
1864
+ }, [p]), { statsItems: te(() => {
1865
+ const S = [{ label: "Total Users", value: a?.total ?? "—" }];
1866
+ return ht.forEach((E) => {
1867
+ P(bt[E]) && S.push({
1868
+ label: ft[E],
1869
+ value: a?.authMethodCounts[E] ?? 0
1870
+ });
1871
+ }), S;
1872
+ }, [a, P]), isLoading: y, error: c, refresh: p };
1873
+ }
1874
+ export {
1875
+ wt as A,
1876
+ gt as a,
1877
+ pe as b,
1878
+ Ct as u
1879
+ };