@cedros/login-react 0.0.43 → 0.0.44

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 (89) hide show
  1. package/README.md +216 -0
  2. package/dist/{AuthenticationSettings-Y40T1djV.cjs → AuthenticationSettings-BlYOmaEG.cjs} +1 -1
  3. package/dist/{AuthenticationSettings-Y40T1djV.cjs.map → AuthenticationSettings-BlYOmaEG.cjs.map} +1 -1
  4. package/dist/{AuthenticationSettings-CxAubcoz.js → AuthenticationSettings-BsuwWKbT.js} +1 -1
  5. package/dist/{AuthenticationSettings-CxAubcoz.js.map → AuthenticationSettings-BsuwWKbT.js.map} +1 -1
  6. package/dist/{AuthenticationSettings-aVBFKKZ-.js → AuthenticationSettings-DrHqtD7p.js} +1 -1
  7. package/dist/{AuthenticationSettings-aVBFKKZ-.js.map → AuthenticationSettings-DrHqtD7p.js.map} +1 -1
  8. package/dist/{AuthenticationSettings-DPr882lj.cjs → AuthenticationSettings-bNQiNQ9g.cjs} +1 -1
  9. package/dist/{AuthenticationSettings-DPr882lj.cjs.map → AuthenticationSettings-bNQiNQ9g.cjs.map} +1 -1
  10. package/dist/{AutosaveStatus-ByD01ENa.cjs → AutosaveStatus-CZSwtgrL.cjs} +1 -1
  11. package/dist/AutosaveStatus-CZSwtgrL.cjs.map +1 -0
  12. package/dist/{AutosaveStatus-DtF_58rC.js → AutosaveStatus-D-roPsRx.js} +280 -280
  13. package/dist/AutosaveStatus-D-roPsRx.js.map +1 -0
  14. package/dist/{CreditSystemSettings-DHG_jhz9.cjs → CreditSystemSettings-3R6crxvW.cjs} +1 -1
  15. package/dist/{CreditSystemSettings-DHG_jhz9.cjs.map → CreditSystemSettings-3R6crxvW.cjs.map} +1 -1
  16. package/dist/{CreditSystemSettings-BQek2Ux2.js → CreditSystemSettings-BTqZFn4K.js} +1 -1
  17. package/dist/{CreditSystemSettings-BQek2Ux2.js.map → CreditSystemSettings-BTqZFn4K.js.map} +1 -1
  18. package/dist/{CreditSystemSettings-CbuCce29.cjs → CreditSystemSettings-BskW_NKx.cjs} +1 -1
  19. package/dist/{CreditSystemSettings-CbuCce29.cjs.map → CreditSystemSettings-BskW_NKx.cjs.map} +1 -1
  20. package/dist/{CreditSystemSettings-GDKgYc7I.js → CreditSystemSettings-SL45GRH3.js} +1 -1
  21. package/dist/{CreditSystemSettings-GDKgYc7I.js.map → CreditSystemSettings-SL45GRH3.js.map} +1 -1
  22. package/dist/{EmailSettings-D2pCqTKC.js → EmailSettings-BUAQji4I.js} +1 -1
  23. package/dist/{EmailSettings-D2pCqTKC.js.map → EmailSettings-BUAQji4I.js.map} +1 -1
  24. package/dist/{EmailSettings-CjxBg0cE.cjs → EmailSettings-CEC1rhrm.cjs} +1 -1
  25. package/dist/{EmailSettings-CjxBg0cE.cjs.map → EmailSettings-CEC1rhrm.cjs.map} +1 -1
  26. package/dist/{EmailSettings-Cg4Z7139.cjs → EmailSettings-CihElRkc.cjs} +1 -1
  27. package/dist/{EmailSettings-Cg4Z7139.cjs.map → EmailSettings-CihElRkc.cjs.map} +1 -1
  28. package/dist/{EmailSettings-Ct6nFslP.js → EmailSettings-XETM8FdS.js} +1 -1
  29. package/dist/{EmailSettings-Ct6nFslP.js.map → EmailSettings-XETM8FdS.js.map} +1 -1
  30. package/dist/{EmbeddedWalletSettings-PwFgtGmK.js → EmbeddedWalletSettings-B-083zu6.js} +1 -1
  31. package/dist/{EmbeddedWalletSettings-PwFgtGmK.js.map → EmbeddedWalletSettings-B-083zu6.js.map} +1 -1
  32. package/dist/{EmbeddedWalletSettings-Bus7UyOX.js → EmbeddedWalletSettings-CCT9DwmL.js} +1 -1
  33. package/dist/{EmbeddedWalletSettings-Bus7UyOX.js.map → EmbeddedWalletSettings-CCT9DwmL.js.map} +1 -1
  34. package/dist/{EmbeddedWalletSettings-CfzvFYnn.cjs → EmbeddedWalletSettings-DXIjansC.cjs} +1 -1
  35. package/dist/{EmbeddedWalletSettings-CfzvFYnn.cjs.map → EmbeddedWalletSettings-DXIjansC.cjs.map} +1 -1
  36. package/dist/{EmbeddedWalletSettings-t0_5poBu.cjs → EmbeddedWalletSettings-MtwR81WH.cjs} +1 -1
  37. package/dist/{EmbeddedWalletSettings-t0_5poBu.cjs.map → EmbeddedWalletSettings-MtwR81WH.cjs.map} +1 -1
  38. package/dist/{PermissionsSection-CSB_Ikj9.cjs → PermissionsSection-4zcE9Zs9.cjs} +1 -1
  39. package/dist/PermissionsSection-4zcE9Zs9.cjs.map +1 -0
  40. package/dist/{PermissionsSection-BDDiEfho.js → PermissionsSection-mm9hfp-u.js} +94 -74
  41. package/dist/PermissionsSection-mm9hfp-u.js.map +1 -0
  42. package/dist/{ServerSettings-D7WJDTbZ.js → ServerSettings-24DA_BOI.js} +1 -1
  43. package/dist/{ServerSettings-D7WJDTbZ.js.map → ServerSettings-24DA_BOI.js.map} +1 -1
  44. package/dist/{ServerSettings-BjLFs_sb.cjs → ServerSettings-BNc4LEs4.cjs} +1 -1
  45. package/dist/{ServerSettings-BjLFs_sb.cjs.map → ServerSettings-BNc4LEs4.cjs.map} +1 -1
  46. package/dist/{ServerSettings-Dmw2rpFA.cjs → ServerSettings-BTEuzdrf.cjs} +1 -1
  47. package/dist/{ServerSettings-Dmw2rpFA.cjs.map → ServerSettings-BTEuzdrf.cjs.map} +1 -1
  48. package/dist/{ServerSettings-COkhan4u.js → ServerSettings-DBpbRihl.js} +1 -1
  49. package/dist/{ServerSettings-COkhan4u.js.map → ServerSettings-DBpbRihl.js.map} +1 -1
  50. package/dist/{TeamSection-BhsBEckR.js → TeamSection-C_eODdLU.js} +1 -1
  51. package/dist/{TeamSection-BhsBEckR.js.map → TeamSection-C_eODdLU.js.map} +1 -1
  52. package/dist/{TeamSection-DLxtRmta.cjs → TeamSection-Km7EwLWD.cjs} +1 -1
  53. package/dist/{TeamSection-DLxtRmta.cjs.map → TeamSection-Km7EwLWD.cjs.map} +1 -1
  54. package/dist/{UsersSection-BEKfbhQ4.cjs → UsersSection-C1Tt0ePx.cjs} +1 -1
  55. package/dist/{UsersSection-BEKfbhQ4.cjs.map → UsersSection-C1Tt0ePx.cjs.map} +1 -1
  56. package/dist/{UsersSection-DbGkmxty.js → UsersSection-Ct_E-MBF.js} +1 -1
  57. package/dist/{UsersSection-DbGkmxty.js.map → UsersSection-Ct_E-MBF.js.map} +1 -1
  58. package/dist/{WebhookSettings-DEHV2ptf.js → WebhookSettings-BhIwucKb.js} +1 -1
  59. package/dist/{WebhookSettings-DEHV2ptf.js.map → WebhookSettings-BhIwucKb.js.map} +1 -1
  60. package/dist/{WebhookSettings-Rq_nNJuw.cjs → WebhookSettings-C6X_JJcD.cjs} +1 -1
  61. package/dist/{WebhookSettings-Rq_nNJuw.cjs.map → WebhookSettings-C6X_JJcD.cjs.map} +1 -1
  62. package/dist/{WebhookSettings-CpPvGmV7.js → WebhookSettings-D9IsXZJN.js} +1 -1
  63. package/dist/{WebhookSettings-CpPvGmV7.js.map → WebhookSettings-D9IsXZJN.js.map} +1 -1
  64. package/dist/{WebhookSettings-DbyPJ8V2.cjs → WebhookSettings-H1x6IKOj.cjs} +1 -1
  65. package/dist/{WebhookSettings-DbyPJ8V2.cjs.map → WebhookSettings-H1x6IKOj.cjs.map} +1 -1
  66. package/dist/admin-only.cjs +1 -1
  67. package/dist/admin-only.js +1 -1
  68. package/dist/index.cjs +13 -13
  69. package/dist/index.cjs.map +1 -1
  70. package/dist/index.d.ts +128 -22
  71. package/dist/index.js +7390 -6479
  72. package/dist/index.js.map +1 -1
  73. package/dist/{plugin-C4bijrSr.cjs → plugin-BwwJh2cY.cjs} +1 -1
  74. package/dist/{plugin-C4bijrSr.cjs.map → plugin-BwwJh2cY.cjs.map} +1 -1
  75. package/dist/{plugin-Bwwe7_ZO.js → plugin-CetHtdLq.js} +1 -1
  76. package/dist/{plugin-Bwwe7_ZO.js.map → plugin-CetHtdLq.js.map} +1 -1
  77. package/dist/useUsersStatsSummary-BGeh3RnI.js +2025 -0
  78. package/dist/useUsersStatsSummary-BGeh3RnI.js.map +1 -0
  79. package/dist/useUsersStatsSummary-DnsYtFGX.cjs +1 -0
  80. package/dist/useUsersStatsSummary-DnsYtFGX.cjs.map +1 -0
  81. package/package.json +1 -1
  82. package/dist/AutosaveStatus-ByD01ENa.cjs.map +0 -1
  83. package/dist/AutosaveStatus-DtF_58rC.js.map +0 -1
  84. package/dist/PermissionsSection-BDDiEfho.js.map +0 -1
  85. package/dist/PermissionsSection-CSB_Ikj9.cjs.map +0 -1
  86. package/dist/useUsersStatsSummary-9HQDKBU5.js +0 -1879
  87. package/dist/useUsersStatsSummary-9HQDKBU5.js.map +0 -1
  88. package/dist/useUsersStatsSummary-DiRC8sGs.cjs +0 -1
  89. package/dist/useUsersStatsSummary-DiRC8sGs.cjs.map +0 -1
@@ -1,1879 +0,0 @@
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
- };