@hexclave/shared 1.0.9 → 1.0.11

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 (86) hide show
  1. package/dist/ai/unified-prompts/reminders.js +1 -0
  2. package/dist/ai/unified-prompts/reminders.js.map +1 -1
  3. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  4. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +10 -2
  5. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  6. package/dist/config/schema.d.ts +175 -175
  7. package/dist/config-rendering.d.ts.map +1 -1
  8. package/dist/config-rendering.js +7 -2
  9. package/dist/config-rendering.js.map +1 -1
  10. package/dist/esm/ai/unified-prompts/reminders.js +1 -0
  11. package/dist/esm/ai/unified-prompts/reminders.js.map +1 -1
  12. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  13. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +10 -2
  14. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  15. package/dist/esm/config/schema.d.ts +175 -175
  16. package/dist/esm/config-rendering.d.ts.map +1 -1
  17. package/dist/esm/config-rendering.js +7 -2
  18. package/dist/esm/config-rendering.js.map +1 -1
  19. package/dist/esm/hexclave-config-file.d.ts.map +1 -1
  20. package/dist/esm/hexclave-config-file.js +2 -1
  21. package/dist/esm/hexclave-config-file.js.map +1 -1
  22. package/dist/esm/interface/admin-interface.d.ts +9 -1
  23. package/dist/esm/interface/admin-interface.d.ts.map +1 -1
  24. package/dist/esm/interface/admin-interface.js +32 -2
  25. package/dist/esm/interface/admin-interface.js.map +1 -1
  26. package/dist/esm/interface/admin-metrics.d.ts +123 -7
  27. package/dist/esm/interface/admin-metrics.d.ts.map +1 -1
  28. package/dist/esm/interface/admin-metrics.js +21 -2
  29. package/dist/esm/interface/admin-metrics.js.map +1 -1
  30. package/dist/esm/interface/conversations.d.ts +27 -27
  31. package/dist/esm/interface/crud/current-user.d.ts +6 -6
  32. package/dist/esm/interface/crud/email-outbox.d.ts +228 -228
  33. package/dist/esm/interface/crud/invoices.d.ts +2 -2
  34. package/dist/esm/interface/crud/project-api-keys.d.ts +2 -2
  35. package/dist/esm/interface/crud/projects.d.ts +99 -99
  36. package/dist/esm/interface/crud/team-member-profiles.d.ts +16 -16
  37. package/dist/esm/interface/crud/users.d.ts +2 -2
  38. package/dist/esm/schema-fields.d.ts.map +1 -1
  39. package/dist/esm/schema-fields.js +1 -1
  40. package/dist/esm/schema-fields.js.map +1 -1
  41. package/dist/esm/sessions.d.ts +10 -0
  42. package/dist/esm/sessions.d.ts.map +1 -1
  43. package/dist/esm/sessions.js +20 -2
  44. package/dist/esm/sessions.js.map +1 -1
  45. package/dist/esm/sessions.test.d.ts +1 -0
  46. package/dist/esm/sessions.test.js +178 -0
  47. package/dist/esm/sessions.test.js.map +1 -0
  48. package/dist/hexclave-config-file.d.ts.map +1 -1
  49. package/dist/hexclave-config-file.js +2 -1
  50. package/dist/hexclave-config-file.js.map +1 -1
  51. package/dist/interface/admin-interface.d.ts +9 -1
  52. package/dist/interface/admin-interface.d.ts.map +1 -1
  53. package/dist/interface/admin-interface.js +32 -2
  54. package/dist/interface/admin-interface.js.map +1 -1
  55. package/dist/interface/admin-metrics.d.ts +123 -7
  56. package/dist/interface/admin-metrics.d.ts.map +1 -1
  57. package/dist/interface/admin-metrics.js +22 -1
  58. package/dist/interface/admin-metrics.js.map +1 -1
  59. package/dist/interface/conversations.d.ts +27 -27
  60. package/dist/interface/crud/current-user.d.ts +6 -6
  61. package/dist/interface/crud/email-outbox.d.ts +228 -228
  62. package/dist/interface/crud/invoices.d.ts +2 -2
  63. package/dist/interface/crud/project-api-keys.d.ts +2 -2
  64. package/dist/interface/crud/projects.d.ts +99 -99
  65. package/dist/interface/crud/team-member-profiles.d.ts +16 -16
  66. package/dist/interface/crud/users.d.ts +2 -2
  67. package/dist/schema-fields.d.ts.map +1 -1
  68. package/dist/schema-fields.js +1 -1
  69. package/dist/schema-fields.js.map +1 -1
  70. package/dist/sessions.d.ts +10 -0
  71. package/dist/sessions.d.ts.map +1 -1
  72. package/dist/sessions.js +20 -2
  73. package/dist/sessions.js.map +1 -1
  74. package/dist/sessions.test.d.ts +1 -0
  75. package/dist/sessions.test.js +178 -0
  76. package/dist/sessions.test.js.map +1 -0
  77. package/package.json +1 -1
  78. package/src/ai/unified-prompts/reminders.ts +1 -0
  79. package/src/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.ts +10 -2
  80. package/src/config-rendering.ts +11 -2
  81. package/src/hexclave-config-file.ts +7 -1
  82. package/src/interface/admin-interface.ts +49 -2
  83. package/src/interface/admin-metrics.ts +33 -2
  84. package/src/schema-fields.ts +4 -1
  85. package/src/sessions.test.ts +147 -0
  86. package/src/sessions.ts +26 -0
@@ -164,9 +164,9 @@ declare const MetricsEmailOverviewSchema: yup.ObjectSchema<{
164
164
  }[];
165
165
  deliverability_status: {
166
166
  error: number;
167
+ bounced: number;
167
168
  in_progress: number;
168
169
  delivered: number;
169
- bounced: number;
170
170
  };
171
171
  deliverability_rate: number;
172
172
  bounce_rate: number;
@@ -204,6 +204,13 @@ declare const MetricsTopReferrerSchema: yup.ObjectSchema<{
204
204
  referrer: undefined;
205
205
  visitors: undefined;
206
206
  }, "">;
207
+ declare const MetricsNamedCountSchema: yup.ObjectSchema<{
208
+ name: string;
209
+ visitors: number;
210
+ }, yup.AnyObject, {
211
+ name: undefined;
212
+ visitors: undefined;
213
+ }, "">;
207
214
  declare const MetricsTopRegionSchema: yup.ObjectSchema<{
208
215
  country_code: string | null;
209
216
  region_code: string | null;
@@ -213,6 +220,13 @@ declare const MetricsTopRegionSchema: yup.ObjectSchema<{
213
220
  region_code: undefined;
214
221
  count: undefined;
215
222
  }, "">;
223
+ declare const MetricsTopCountrySchema: yup.ObjectSchema<{
224
+ country_code: string;
225
+ count: number;
226
+ }, yup.AnyObject, {
227
+ country_code: undefined;
228
+ count: undefined;
229
+ }, "">;
216
230
  declare const MetricsAnalyticsOverviewSchema: yup.ObjectSchema<{
217
231
  daily_page_views: {
218
232
  date: string;
@@ -226,6 +240,18 @@ declare const MetricsAnalyticsOverviewSchema: yup.ObjectSchema<{
226
240
  date: string;
227
241
  activity: number;
228
242
  }[];
243
+ hourly_page_views: {
244
+ date: string;
245
+ activity: number;
246
+ }[];
247
+ hourly_active_users: {
248
+ date: string;
249
+ activity: number;
250
+ }[];
251
+ hourly_visitors: {
252
+ date: string;
253
+ activity: number;
254
+ }[];
229
255
  daily_anonymous_visitors_fallback: {
230
256
  date: string;
231
257
  activity: number;
@@ -252,13 +278,40 @@ declare const MetricsAnalyticsOverviewSchema: yup.ObjectSchema<{
252
278
  region_code: string | null;
253
279
  count: number;
254
280
  } | null;
255
- bounce_rate: number | undefined;
281
+ top_regions: {
282
+ country_code: string;
283
+ count: number;
284
+ }[];
285
+ bounce_rate: number;
286
+ daily_bounce_rate: {
287
+ date: string;
288
+ activity: number;
289
+ }[];
290
+ daily_avg_session_seconds: {
291
+ date: string;
292
+ activity: number;
293
+ }[];
294
+ top_browsers: {
295
+ name: string;
296
+ visitors: number;
297
+ }[];
298
+ top_operating_systems: {
299
+ name: string;
300
+ visitors: number;
301
+ }[];
302
+ top_devices: {
303
+ name: string;
304
+ visitors: number;
305
+ }[];
256
306
  conversion_rate: number | undefined;
257
307
  deltas: {} | undefined;
258
308
  }, yup.AnyObject, {
259
309
  daily_page_views: undefined;
260
310
  daily_clicks: undefined;
261
311
  daily_visitors: undefined;
312
+ hourly_page_views: never[];
313
+ hourly_active_users: never[];
314
+ hourly_visitors: never[];
262
315
  daily_anonymous_visitors_fallback: never[];
263
316
  daily_revenue: undefined;
264
317
  total_revenue_cents: undefined;
@@ -275,7 +328,13 @@ declare const MetricsAnalyticsOverviewSchema: yup.ObjectSchema<{
275
328
  region_code: undefined;
276
329
  count: undefined;
277
330
  };
278
- bounce_rate: undefined;
331
+ top_regions: never[];
332
+ bounce_rate: 0;
333
+ daily_bounce_rate: never[];
334
+ daily_avg_session_seconds: never[];
335
+ top_browsers: never[];
336
+ top_operating_systems: never[];
337
+ top_devices: never[];
279
338
  conversion_rate: undefined;
280
339
  deltas: undefined;
281
340
  }, "">;
@@ -328,6 +387,14 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
328
387
  date: string;
329
388
  activity: number;
330
389
  }[];
390
+ hourly_users: {
391
+ date: string;
392
+ activity: number;
393
+ }[];
394
+ hourly_active_users: {
395
+ date: string;
396
+ activity: number;
397
+ }[];
331
398
  users_by_country: Record<string, number>;
332
399
  active_users_by_country: Record<string, {
333
400
  primary_email: string | null;
@@ -436,18 +503,18 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
436
503
  }[];
437
504
  deliverability_status: {
438
505
  error: number;
506
+ bounced: number;
439
507
  in_progress: number;
440
508
  delivered: number;
441
- bounced: number;
442
509
  };
443
510
  deliverability_rate: number;
444
511
  bounce_rate: number;
445
512
  click_rate: number;
446
513
  };
447
514
  analytics_overview: {
448
- bounce_rate?: number | undefined;
449
515
  conversion_rate?: number | undefined;
450
516
  deltas?: {} | undefined;
517
+ bounce_rate: number;
451
518
  visitors: number;
452
519
  daily_page_views: {
453
520
  date: string;
@@ -461,6 +528,18 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
461
528
  date: string;
462
529
  activity: number;
463
530
  }[];
531
+ hourly_page_views: {
532
+ date: string;
533
+ activity: number;
534
+ }[];
535
+ hourly_active_users: {
536
+ date: string;
537
+ activity: number;
538
+ }[];
539
+ hourly_visitors: {
540
+ date: string;
541
+ activity: number;
542
+ }[];
464
543
  daily_anonymous_visitors_fallback: {
465
544
  date: string;
466
545
  activity: number;
@@ -486,12 +565,38 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
486
565
  region_code: string | null;
487
566
  count: number;
488
567
  } | null;
568
+ top_regions: {
569
+ country_code: string;
570
+ count: number;
571
+ }[];
572
+ daily_bounce_rate: {
573
+ date: string;
574
+ activity: number;
575
+ }[];
576
+ daily_avg_session_seconds: {
577
+ date: string;
578
+ activity: number;
579
+ }[];
580
+ top_browsers: {
581
+ name: string;
582
+ visitors: number;
583
+ }[];
584
+ top_operating_systems: {
585
+ name: string;
586
+ visitors: number;
587
+ }[];
588
+ top_devices: {
589
+ name: string;
590
+ visitors: number;
591
+ }[];
489
592
  };
490
593
  }, yup.AnyObject, {
491
594
  total_users: undefined;
492
595
  live_users: 0;
493
596
  daily_users: undefined;
494
597
  daily_active_users: undefined;
598
+ hourly_users: never[];
599
+ hourly_active_users: never[];
495
600
  users_by_country: undefined;
496
601
  active_users_by_country: {};
497
602
  recently_registered: undefined;
@@ -548,6 +653,9 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
548
653
  daily_page_views: undefined;
549
654
  daily_clicks: undefined;
550
655
  daily_visitors: undefined;
656
+ hourly_page_views: never[];
657
+ hourly_active_users: never[];
658
+ hourly_visitors: never[];
551
659
  daily_anonymous_visitors_fallback: never[];
552
660
  daily_revenue: undefined;
553
661
  total_revenue_cents: undefined;
@@ -564,7 +672,13 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
564
672
  region_code: undefined;
565
673
  count: undefined;
566
674
  };
567
- bounce_rate: undefined;
675
+ top_regions: never[];
676
+ bounce_rate: 0;
677
+ daily_bounce_rate: never[];
678
+ daily_avg_session_seconds: never[];
679
+ top_browsers: never[];
680
+ top_operating_systems: never[];
681
+ top_devices: never[];
568
682
  conversion_rate: undefined;
569
683
  deltas: undefined;
570
684
  };
@@ -586,6 +700,8 @@ type MetricsEmailOverview = yup.InferType<typeof MetricsEmailOverviewSchema>;
586
700
  type MetricsDailyRevenuePoint = yup.InferType<typeof MetricsDailyRevenuePointSchema>;
587
701
  type MetricsTopReferrer = yup.InferType<typeof MetricsTopReferrerSchema>;
588
702
  type MetricsTopRegion = yup.InferType<typeof MetricsTopRegionSchema>;
703
+ type MetricsTopCountry = yup.InferType<typeof MetricsTopCountrySchema>;
704
+ type MetricsNamedCount = yup.InferType<typeof MetricsNamedCountSchema>;
589
705
  type MetricsAnalyticsOverview = yup.InferType<typeof MetricsAnalyticsOverviewSchema>;
590
706
  type MetricsLoginMethodEntry = yup.InferType<typeof MetricsLoginMethodEntrySchema>;
591
707
  type MetricsRecentUser = yup.InferType<typeof MetricsRecentUserSchema>;
@@ -593,5 +709,5 @@ type MetricsResponse = yup.InferType<typeof MetricsResponseBodySchema>;
593
709
  type MetricsUserCounts = yup.InferType<typeof MetricsUserCountsSchema>;
594
710
  type UserActivityResponse = yup.InferType<typeof UserActivityResponseBodySchema>;
595
711
  //#endregion
596
- export { MetricsActiveUsersByCountrySchema, MetricsActivitySplit, MetricsActivitySplitSchema, MetricsAnalyticsOverview, MetricsAnalyticsOverviewSchema, MetricsAuthOverview, MetricsAuthOverviewSchema, MetricsDailyEmailStatusBreakdown, MetricsDailyEmailStatusBreakdownSchema, MetricsDailyRevenuePoint, MetricsDailyRevenuePointSchema, MetricsDataPoint, MetricsDataPointSchema, MetricsDataPointsSchema, MetricsEmailOverview, MetricsEmailOverviewSchema, MetricsLoginMethodEntry, MetricsLoginMethodEntrySchema, MetricsPaymentsOverview, MetricsPaymentsOverviewSchema, MetricsRecentEmail, MetricsRecentEmailSchema, MetricsRecentUser, MetricsRecentUserSchema, MetricsResponse, MetricsResponseBodySchema, MetricsTopReferrer, MetricsTopReferrerSchema, MetricsTopRegion, MetricsTopRegionSchema, MetricsUserCounts, MetricsUserCountsSchema, UserActivityResponse, UserActivityResponseBodySchema };
712
+ export { MetricsActiveUsersByCountrySchema, MetricsActivitySplit, MetricsActivitySplitSchema, MetricsAnalyticsOverview, MetricsAnalyticsOverviewSchema, MetricsAuthOverview, MetricsAuthOverviewSchema, MetricsDailyEmailStatusBreakdown, MetricsDailyEmailStatusBreakdownSchema, MetricsDailyRevenuePoint, MetricsDailyRevenuePointSchema, MetricsDataPoint, MetricsDataPointSchema, MetricsDataPointsSchema, MetricsEmailOverview, MetricsEmailOverviewSchema, MetricsLoginMethodEntry, MetricsLoginMethodEntrySchema, MetricsNamedCount, MetricsNamedCountSchema, MetricsPaymentsOverview, MetricsPaymentsOverviewSchema, MetricsRecentEmail, MetricsRecentEmailSchema, MetricsRecentUser, MetricsRecentUserSchema, MetricsResponse, MetricsResponseBodySchema, MetricsTopCountry, MetricsTopCountrySchema, MetricsTopReferrer, MetricsTopReferrerSchema, MetricsTopRegion, MetricsTopRegionSchema, MetricsUserCounts, MetricsUserCountsSchema, UserActivityResponse, UserActivityResponseBodySchema };
597
713
  //# sourceMappingURL=admin-metrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-metrics.d.ts","names":[],"sources":["../../../src/interface/admin-metrics.ts"],"mappings":"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"}
1
+ {"version":3,"file":"admin-metrics.d.ts","names":[],"sources":["../../../src/interface/admin-metrics.ts"],"mappings":"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"}
@@ -70,15 +70,26 @@ const MetricsTopReferrerSchema = yupObject({
70
70
  referrer: yupString().defined(),
71
71
  visitors: yupNumber().integer().defined()
72
72
  }).defined();
73
+ const MetricsNamedCountSchema = yupObject({
74
+ name: yupString().defined(),
75
+ visitors: yupNumber().integer().defined()
76
+ }).defined();
73
77
  const MetricsTopRegionSchema = yupObject({
74
78
  country_code: yupString().nullable().defined(),
75
79
  region_code: yupString().nullable().defined(),
76
80
  count: yupNumber().integer().defined()
77
81
  }).defined();
82
+ const MetricsTopCountrySchema = yupObject({
83
+ country_code: yupString().defined(),
84
+ count: yupNumber().integer().defined()
85
+ }).defined();
78
86
  const MetricsAnalyticsOverviewSchema = yupObject({
79
87
  daily_page_views: MetricsDataPointsSchema,
80
88
  daily_clicks: MetricsDataPointsSchema,
81
89
  daily_visitors: MetricsDataPointsSchema,
90
+ hourly_page_views: yupArray(MetricsDataPointSchema).optional().default([]),
91
+ hourly_active_users: yupArray(MetricsDataPointSchema).optional().default([]),
92
+ hourly_visitors: yupArray(MetricsDataPointSchema).optional().default([]),
82
93
  daily_anonymous_visitors_fallback: yupArray(MetricsDataPointSchema).optional().default([]),
83
94
  daily_revenue: yupArray(MetricsDailyRevenuePointSchema).defined(),
84
95
  total_revenue_cents: yupNumber().integer().defined(),
@@ -91,7 +102,13 @@ const MetricsAnalyticsOverviewSchema = yupObject({
91
102
  revenue_per_visitor: yupNumber().defined(),
92
103
  top_referrers: yupArray(MetricsTopReferrerSchema).defined(),
93
104
  top_region: MetricsTopRegionSchema.nullable().defined(),
94
- bounce_rate: yupNumber().optional(),
105
+ top_regions: yupArray(MetricsTopCountrySchema).optional().default([]),
106
+ bounce_rate: yupNumber().optional().default(0),
107
+ daily_bounce_rate: yupArray(MetricsDataPointSchema).optional().default([]),
108
+ daily_avg_session_seconds: yupArray(MetricsDataPointSchema).optional().default([]),
109
+ top_browsers: yupArray(MetricsNamedCountSchema).optional().default([]),
110
+ top_operating_systems: yupArray(MetricsNamedCountSchema).optional().default([]),
111
+ top_devices: yupArray(MetricsNamedCountSchema).optional().default([]),
95
112
  conversion_rate: yupNumber().optional(),
96
113
  deltas: yupMixed().optional()
97
114
  }).defined();
@@ -114,6 +131,8 @@ const MetricsResponseBodySchema = yupObject({
114
131
  live_users: yupNumber().integer().optional().default(0),
115
132
  daily_users: MetricsDataPointsSchema,
116
133
  daily_active_users: MetricsDataPointsSchema,
134
+ hourly_users: yupArray(MetricsDataPointSchema).optional().default([]),
135
+ hourly_active_users: yupArray(MetricsDataPointSchema).optional().default([]),
117
136
  users_by_country: yupRecord(yupString().defined(), yupNumber().defined()).defined(),
118
137
  active_users_by_country: MetricsActiveUsersByCountrySchema,
119
138
  recently_registered: yupArray(MetricsRecentUserSchema).defined(),
@@ -130,5 +149,5 @@ const MetricsUserCountsSchema = yupObject({
130
149
  }).defined();
131
150
 
132
151
  //#endregion
133
- export { MetricsActiveUsersByCountrySchema, MetricsActivitySplitSchema, MetricsAnalyticsOverviewSchema, MetricsAuthOverviewSchema, MetricsDailyEmailStatusBreakdownSchema, MetricsDailyRevenuePointSchema, MetricsDataPointSchema, MetricsDataPointsSchema, MetricsEmailOverviewSchema, MetricsLoginMethodEntrySchema, MetricsPaymentsOverviewSchema, MetricsRecentEmailSchema, MetricsRecentUserSchema, MetricsResponseBodySchema, MetricsTopReferrerSchema, MetricsTopRegionSchema, MetricsUserCountsSchema, UserActivityResponseBodySchema };
152
+ export { MetricsActiveUsersByCountrySchema, MetricsActivitySplitSchema, MetricsAnalyticsOverviewSchema, MetricsAuthOverviewSchema, MetricsDailyEmailStatusBreakdownSchema, MetricsDailyRevenuePointSchema, MetricsDataPointSchema, MetricsDataPointsSchema, MetricsEmailOverviewSchema, MetricsLoginMethodEntrySchema, MetricsNamedCountSchema, MetricsPaymentsOverviewSchema, MetricsRecentEmailSchema, MetricsRecentUserSchema, MetricsResponseBodySchema, MetricsTopCountrySchema, MetricsTopReferrerSchema, MetricsTopRegionSchema, MetricsUserCountsSchema, UserActivityResponseBodySchema };
134
153
  //# sourceMappingURL=admin-metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-metrics.js","names":[],"sources":["../../../src/interface/admin-metrics.ts"],"sourcesContent":["import yup from \"yup\";\nimport { yupArray, yupMixed, yupNumber, yupObject, yupRecord, yupString } from \"../schema-fields\";\n\n// Single source of truth for the `/internal/metrics` endpoint shape.\n//\n// Both the backend route handler (`apps/backend/src/app/api/latest/internal/metrics/route.tsx`)\n// and the dashboard hook (`apps/dashboard/src/lib/hexclave-app-internals.ts`) import\n// these schemas. The runtime validation lives in the schemas; the static types\n// are derived via `yup.InferType` so we never have to keep parallel copies in\n// sync.\n\nexport const MetricsDataPointSchema = yupObject({\n date: yupString().defined(),\n activity: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDataPointsSchema = yupArray(MetricsDataPointSchema).defined();\n\nexport const MetricsActivitySplitSchema = yupObject({\n total: MetricsDataPointsSchema,\n new: MetricsDataPointsSchema,\n retained: MetricsDataPointsSchema,\n reactivated: MetricsDataPointsSchema,\n}).defined();\n\nexport const MetricsAuthOverviewSchema = yupObject({\n verified_users: yupNumber().integer().defined(),\n unverified_users: yupNumber().integer().defined(),\n anonymous_users: yupNumber().integer().defined(),\n total_teams: yupNumber().integer().defined(),\n mau: yupNumber().integer().defined(),\n daily_active_users_split: MetricsActivitySplitSchema,\n daily_active_teams_split: MetricsActivitySplitSchema,\n total_users_filtered: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsPaymentsOverviewSchema = yupObject({\n subscriptions_by_status: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n active_subscription_count: yupNumber().integer().defined(),\n total_one_time_purchases: yupNumber().integer().defined(),\n daily_subscriptions: MetricsDataPointsSchema,\n revenue_cents: yupNumber().integer().defined(),\n mrr_cents: yupNumber().integer().defined(),\n total_orders: yupNumber().integer().defined(),\n checkout_conversion_rate: yupNumber().defined(),\n}).defined();\n\nexport const MetricsRecentEmailSchema = yupObject({\n id: yupString().defined(),\n status: yupString().defined(),\n subject: yupString().defined(),\n created_at_millis: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDailyEmailStatusBreakdownSchema = yupObject({\n date: yupString().defined(),\n ok: yupNumber().integer().defined(),\n error: yupNumber().integer().defined(),\n in_progress: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsEmailOverviewSchema = yupObject({\n emails_by_status: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n total_emails: yupNumber().integer().defined(),\n daily_emails: MetricsDataPointsSchema,\n daily_emails_by_status: yupArray(MetricsDailyEmailStatusBreakdownSchema).defined(),\n emails_sent: yupNumber().integer().defined(),\n recent_emails: yupArray(MetricsRecentEmailSchema).defined(),\n deliverability_status: yupObject({\n delivered: yupNumber().integer().defined(),\n bounced: yupNumber().integer().defined(),\n error: yupNumber().integer().defined(),\n in_progress: yupNumber().integer().defined(),\n }).defined(),\n deliverability_rate: yupNumber().defined(),\n bounce_rate: yupNumber().defined(),\n click_rate: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDailyRevenuePointSchema = yupObject({\n date: yupString().defined(),\n new_cents: yupNumber().integer().defined(),\n refund_cents: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopReferrerSchema = yupObject({\n referrer: yupString().defined(),\n visitors: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopRegionSchema = yupObject({\n country_code: yupString().nullable().defined(),\n region_code: yupString().nullable().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsAnalyticsOverviewSchema = yupObject({\n daily_page_views: MetricsDataPointsSchema,\n daily_clicks: MetricsDataPointsSchema,\n daily_visitors: MetricsDataPointsSchema,\n // Token-refresh-derived anonymous-visitor fallback. Populated only when the\n // analytics app isn't installed (no `$page-view` events) — counts DISTINCT\n // anonymous users per day from the events table. See\n // `loadAnonymousVisitorsFromTokenRefresh` in the backend metrics route.\n //\n // Optional for one release cycle so older clients/servers don't hard-fail\n // validation during a staged rollout. Tighten to `.defined()` after.\n daily_anonymous_visitors_fallback: yupArray(MetricsDataPointSchema).optional().default([]),\n daily_revenue: yupArray(MetricsDailyRevenuePointSchema).defined(),\n total_revenue_cents: yupNumber().integer().defined(),\n total_replays: yupNumber().integer().defined(),\n recent_replays: yupNumber().integer().defined(),\n visitors: yupNumber().integer().defined(),\n anonymous_visitors_fallback: yupNumber().integer().optional().default(0),\n avg_session_seconds: yupNumber().defined(),\n online_live: yupNumber().integer().defined(),\n revenue_per_visitor: yupNumber().defined(),\n top_referrers: yupArray(MetricsTopReferrerSchema).defined(),\n top_region: MetricsTopRegionSchema.nullable().defined(),\n // dev-fallback fields (only present in non-production environments)\n bounce_rate: yupNumber().optional(),\n conversion_rate: yupNumber().optional(),\n deltas: yupMixed().optional(),\n}).defined();\n\nexport const MetricsLoginMethodEntrySchema = yupObject({\n method: yupString().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\n// Recent user summary — a slim projection of UsersCrud[\"Admin\"][\"Read\"] with\n// just the fields the overview list views actually read. Defined here so the\n// metrics response stays self-contained and doesn't pull in users-crud.\n//\n// `.noUnknown(false)` tells our strict object validator to allow the extra\n// fields that the backend returns as part of the full users-crud payload —\n// `is_anonymous`, `has_password`, `oauth_providers`, etc. — without rejecting\n// them. Only the keys explicitly listed here are validated; extras pass through.\nexport const MetricsRecentUserSchema = yupObject({\n id: yupString().defined(),\n display_name: yupString().nullable().defined(),\n primary_email: yupString().nullable().defined(),\n profile_image_url: yupString().nullable().defined(),\n signed_up_at_millis: yupNumber().defined(),\n last_active_at_millis: yupNumber().nullable().defined(),\n}).noUnknown(false).defined();\n\n// Per-user activity heatmap — a simple list of daily event counts for a single\n// user. Backed by ClickHouse `analytics_internal.events` filtered by user_id,\n// project_id, and branch_id. See `/internal/user-activity` on the backend.\nexport const UserActivityResponseBodySchema = yupObject({\n data_points: MetricsDataPointsSchema,\n}).defined();\n\n// Recent \"currently live\" users keyed by ISO country code. Populated by\n// joining a bounded ClickHouse selection from the live `$token-refresh` window\n// with the corresponding Prisma profile rows, so the overview globe can render\n// real avatars of real users from each country. Optional for one release cycle\n// so clients talking to older servers don't fail validation on the returned\n// body.\nexport const MetricsActiveUsersByCountrySchema = yupRecord(\n yupString().defined(),\n yupArray(MetricsRecentUserSchema).defined(),\n).optional().default({});\n\nexport const MetricsResponseBodySchema = yupObject({\n total_users: yupNumber().integer().defined(),\n // Count of distinct users seen refreshing a token in the last ~2 minutes —\n // the \"who's online right now\" number rendered on the overview globe. Derived\n // from the same `$token-refresh` window that powers `active_users_by_country`,\n // so it works for every project regardless of whether the analytics app\n // (page-view-based `analytics_overview.online_live`) is installed.\n //\n // Optional for one release cycle so older servers don't fail schema\n // validation on the returned body. Tighten to `.defined()` after.\n live_users: yupNumber().integer().optional().default(0),\n daily_users: MetricsDataPointsSchema,\n daily_active_users: MetricsDataPointsSchema,\n users_by_country: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n active_users_by_country: MetricsActiveUsersByCountrySchema,\n // recently_registered/active are CRUD User objects passed through from the\n // backend. The schema only validates the fields the dashboard actually\n // reads — extra fields from UsersCrud[\"Admin\"][\"Read\"] are allowed through.\n recently_registered: yupArray(MetricsRecentUserSchema).defined(),\n recently_active: yupArray(MetricsRecentUserSchema).defined(),\n login_methods: yupArray(MetricsLoginMethodEntrySchema).defined(),\n auth_overview: MetricsAuthOverviewSchema,\n payments_overview: MetricsPaymentsOverviewSchema,\n email_overview: MetricsEmailOverviewSchema,\n analytics_overview: MetricsAnalyticsOverviewSchema,\n}).defined();\n\nexport const MetricsUserCountsSchema = yupObject({\n total_users: yupNumber().integer().defined(),\n anonymous_users: yupNumber().integer().defined(),\n}).defined();\n\n// Derived static types — single source of truth lives in the schemas above.\nexport type MetricsDataPoint = yup.InferType<typeof MetricsDataPointSchema>;\nexport type MetricsActivitySplit = yup.InferType<typeof MetricsActivitySplitSchema>;\nexport type MetricsAuthOverview = yup.InferType<typeof MetricsAuthOverviewSchema>;\nexport type MetricsPaymentsOverview = yup.InferType<typeof MetricsPaymentsOverviewSchema>;\nexport type MetricsRecentEmail = yup.InferType<typeof MetricsRecentEmailSchema>;\nexport type MetricsDailyEmailStatusBreakdown = yup.InferType<typeof MetricsDailyEmailStatusBreakdownSchema>;\nexport type MetricsEmailOverview = yup.InferType<typeof MetricsEmailOverviewSchema>;\nexport type MetricsDailyRevenuePoint = yup.InferType<typeof MetricsDailyRevenuePointSchema>;\nexport type MetricsTopReferrer = yup.InferType<typeof MetricsTopReferrerSchema>;\nexport type MetricsTopRegion = yup.InferType<typeof MetricsTopRegionSchema>;\nexport type MetricsAnalyticsOverview = yup.InferType<typeof MetricsAnalyticsOverviewSchema>;\nexport type MetricsLoginMethodEntry = yup.InferType<typeof MetricsLoginMethodEntrySchema>;\nexport type MetricsRecentUser = yup.InferType<typeof MetricsRecentUserSchema>;\nexport type MetricsResponse = yup.InferType<typeof MetricsResponseBodySchema>;\nexport type MetricsUserCounts = yup.InferType<typeof MetricsUserCountsSchema>;\nexport type UserActivityResponse = yup.InferType<typeof UserActivityResponseBodySchema>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"admin-metrics.js","names":[],"sources":["../../../src/interface/admin-metrics.ts"],"sourcesContent":["import yup from \"yup\";\nimport { yupArray, yupMixed, yupNumber, yupObject, yupRecord, yupString } from \"../schema-fields\";\n\n// Single source of truth for the `/internal/metrics` endpoint shape.\n//\n// Both the backend route handler (`apps/backend/src/app/api/latest/internal/metrics/route.tsx`)\n// and the dashboard hook (`apps/dashboard/src/lib/hexclave-app-internals.ts`) import\n// these schemas. The runtime validation lives in the schemas; the static types\n// are derived via `yup.InferType` so we never have to keep parallel copies in\n// sync.\n\nexport const MetricsDataPointSchema = yupObject({\n date: yupString().defined(),\n activity: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDataPointsSchema = yupArray(MetricsDataPointSchema).defined();\n\nexport const MetricsActivitySplitSchema = yupObject({\n total: MetricsDataPointsSchema,\n new: MetricsDataPointsSchema,\n retained: MetricsDataPointsSchema,\n reactivated: MetricsDataPointsSchema,\n}).defined();\n\nexport const MetricsAuthOverviewSchema = yupObject({\n verified_users: yupNumber().integer().defined(),\n unverified_users: yupNumber().integer().defined(),\n anonymous_users: yupNumber().integer().defined(),\n total_teams: yupNumber().integer().defined(),\n mau: yupNumber().integer().defined(),\n daily_active_users_split: MetricsActivitySplitSchema,\n daily_active_teams_split: MetricsActivitySplitSchema,\n total_users_filtered: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsPaymentsOverviewSchema = yupObject({\n subscriptions_by_status: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n active_subscription_count: yupNumber().integer().defined(),\n total_one_time_purchases: yupNumber().integer().defined(),\n daily_subscriptions: MetricsDataPointsSchema,\n revenue_cents: yupNumber().integer().defined(),\n mrr_cents: yupNumber().integer().defined(),\n total_orders: yupNumber().integer().defined(),\n checkout_conversion_rate: yupNumber().defined(),\n}).defined();\n\nexport const MetricsRecentEmailSchema = yupObject({\n id: yupString().defined(),\n status: yupString().defined(),\n subject: yupString().defined(),\n created_at_millis: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDailyEmailStatusBreakdownSchema = yupObject({\n date: yupString().defined(),\n ok: yupNumber().integer().defined(),\n error: yupNumber().integer().defined(),\n in_progress: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsEmailOverviewSchema = yupObject({\n emails_by_status: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n total_emails: yupNumber().integer().defined(),\n daily_emails: MetricsDataPointsSchema,\n daily_emails_by_status: yupArray(MetricsDailyEmailStatusBreakdownSchema).defined(),\n emails_sent: yupNumber().integer().defined(),\n recent_emails: yupArray(MetricsRecentEmailSchema).defined(),\n deliverability_status: yupObject({\n delivered: yupNumber().integer().defined(),\n bounced: yupNumber().integer().defined(),\n error: yupNumber().integer().defined(),\n in_progress: yupNumber().integer().defined(),\n }).defined(),\n deliverability_rate: yupNumber().defined(),\n bounce_rate: yupNumber().defined(),\n click_rate: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDailyRevenuePointSchema = yupObject({\n date: yupString().defined(),\n new_cents: yupNumber().integer().defined(),\n refund_cents: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopReferrerSchema = yupObject({\n referrer: yupString().defined(),\n visitors: yupNumber().integer().defined(),\n}).defined();\n\n// Named-count breakdowns used by the analytics overview for top browsers,\n// operating systems, and device classes (Desktop / Mobile / Tablet).\nexport const MetricsNamedCountSchema = yupObject({\n name: yupString().defined(),\n visitors: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopRegionSchema = yupObject({\n country_code: yupString().nullable().defined(),\n region_code: yupString().nullable().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopCountrySchema = yupObject({\n country_code: yupString().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsAnalyticsOverviewSchema = yupObject({\n daily_page_views: MetricsDataPointsSchema,\n daily_clicks: MetricsDataPointsSchema,\n daily_visitors: MetricsDataPointsSchema,\n hourly_page_views: yupArray(MetricsDataPointSchema).optional().default([]),\n hourly_active_users: yupArray(MetricsDataPointSchema).optional().default([]),\n hourly_visitors: yupArray(MetricsDataPointSchema).optional().default([]),\n // Token-refresh-derived anonymous-visitor fallback. Populated only when the\n // analytics app isn't installed (no `$page-view` events) — counts DISTINCT\n // anonymous users per day from the events table. See\n // `loadAnonymousVisitorsFromTokenRefresh` in the backend metrics route.\n //\n // Optional for one release cycle so older clients/servers don't hard-fail\n // validation during a staged rollout. Tighten to `.defined()` after.\n daily_anonymous_visitors_fallback: yupArray(MetricsDataPointSchema).optional().default([]),\n daily_revenue: yupArray(MetricsDailyRevenuePointSchema).defined(),\n total_revenue_cents: yupNumber().integer().defined(),\n total_replays: yupNumber().integer().defined(),\n recent_replays: yupNumber().integer().defined(),\n visitors: yupNumber().integer().defined(),\n anonymous_visitors_fallback: yupNumber().integer().optional().default(0),\n avg_session_seconds: yupNumber().defined(),\n online_live: yupNumber().integer().defined(),\n revenue_per_visitor: yupNumber().defined(),\n top_referrers: yupArray(MetricsTopReferrerSchema).defined(),\n top_region: MetricsTopRegionSchema.nullable().defined(),\n top_regions: yupArray(MetricsTopCountrySchema).optional().default([]),\n // Weighted across the window: sum(bounced)/sum(sessions) * 100. .optional()\n // for one release cycle so older servers (that don't return it yet) don't\n // hard-fail validation; default to 0 so consumers can read unconditionally.\n bounce_rate: yupNumber().optional().default(0),\n daily_bounce_rate: yupArray(MetricsDataPointSchema).optional().default([]),\n daily_avg_session_seconds: yupArray(MetricsDataPointSchema).optional().default([]),\n // User-Agent-derived breakdowns for the analytics overview. Computed from the\n // `data.user_agent` blob on `$page-view` events (captured client-side only,\n // no server-side fallback). Optional + default-[] for one release cycle\n // so older clients / servers without UA capture don't fail validation.\n top_browsers: yupArray(MetricsNamedCountSchema).optional().default([]),\n top_operating_systems: yupArray(MetricsNamedCountSchema).optional().default([]),\n top_devices: yupArray(MetricsNamedCountSchema).optional().default([]),\n conversion_rate: yupNumber().optional(),\n deltas: yupMixed().optional(),\n}).defined();\n\nexport const MetricsLoginMethodEntrySchema = yupObject({\n method: yupString().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\n// Recent user summary — a slim projection of UsersCrud[\"Admin\"][\"Read\"] with\n// just the fields the overview list views actually read. Defined here so the\n// metrics response stays self-contained and doesn't pull in users-crud.\n//\n// `.noUnknown(false)` tells our strict object validator to allow the extra\n// fields that the backend returns as part of the full users-crud payload —\n// `is_anonymous`, `has_password`, `oauth_providers`, etc. — without rejecting\n// them. Only the keys explicitly listed here are validated; extras pass through.\nexport const MetricsRecentUserSchema = yupObject({\n id: yupString().defined(),\n display_name: yupString().nullable().defined(),\n primary_email: yupString().nullable().defined(),\n profile_image_url: yupString().nullable().defined(),\n signed_up_at_millis: yupNumber().defined(),\n last_active_at_millis: yupNumber().nullable().defined(),\n}).noUnknown(false).defined();\n\n// Per-user activity heatmap — a simple list of daily event counts for a single\n// user. Backed by ClickHouse `analytics_internal.events` filtered by user_id,\n// project_id, and branch_id. See `/internal/user-activity` on the backend.\nexport const UserActivityResponseBodySchema = yupObject({\n data_points: MetricsDataPointsSchema,\n}).defined();\n\n// Recent \"currently live\" users keyed by ISO country code. Populated by\n// joining a bounded ClickHouse selection from the live `$token-refresh` window\n// with the corresponding Prisma profile rows, so the overview globe can render\n// real avatars of real users from each country. Optional for one release cycle\n// so clients talking to older servers don't fail validation on the returned\n// body.\nexport const MetricsActiveUsersByCountrySchema = yupRecord(\n yupString().defined(),\n yupArray(MetricsRecentUserSchema).defined(),\n).optional().default({});\n\nexport const MetricsResponseBodySchema = yupObject({\n total_users: yupNumber().integer().defined(),\n // Count of distinct users seen refreshing a token in the last ~2 minutes —\n // the \"who's online right now\" number rendered on the overview globe. Derived\n // from the same `$token-refresh` window that powers `active_users_by_country`,\n // so it works for every project regardless of whether the analytics app\n // (page-view-based `analytics_overview.online_live`) is installed.\n //\n // Optional for one release cycle so older servers don't fail schema\n // validation on the returned body. Tighten to `.defined()` after.\n live_users: yupNumber().integer().optional().default(0),\n daily_users: MetricsDataPointsSchema,\n daily_active_users: MetricsDataPointsSchema,\n hourly_users: yupArray(MetricsDataPointSchema).optional().default([]),\n hourly_active_users: yupArray(MetricsDataPointSchema).optional().default([]),\n users_by_country: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n active_users_by_country: MetricsActiveUsersByCountrySchema,\n // recently_registered/active are CRUD User objects passed through from the\n // backend. The schema only validates the fields the dashboard actually\n // reads — extra fields from UsersCrud[\"Admin\"][\"Read\"] are allowed through.\n recently_registered: yupArray(MetricsRecentUserSchema).defined(),\n recently_active: yupArray(MetricsRecentUserSchema).defined(),\n login_methods: yupArray(MetricsLoginMethodEntrySchema).defined(),\n auth_overview: MetricsAuthOverviewSchema,\n payments_overview: MetricsPaymentsOverviewSchema,\n email_overview: MetricsEmailOverviewSchema,\n analytics_overview: MetricsAnalyticsOverviewSchema,\n}).defined();\n\nexport const MetricsUserCountsSchema = yupObject({\n total_users: yupNumber().integer().defined(),\n anonymous_users: yupNumber().integer().defined(),\n}).defined();\n\n// Derived static types — single source of truth lives in the schemas above.\nexport type MetricsDataPoint = yup.InferType<typeof MetricsDataPointSchema>;\nexport type MetricsActivitySplit = yup.InferType<typeof MetricsActivitySplitSchema>;\nexport type MetricsAuthOverview = yup.InferType<typeof MetricsAuthOverviewSchema>;\nexport type MetricsPaymentsOverview = yup.InferType<typeof MetricsPaymentsOverviewSchema>;\nexport type MetricsRecentEmail = yup.InferType<typeof MetricsRecentEmailSchema>;\nexport type MetricsDailyEmailStatusBreakdown = yup.InferType<typeof MetricsDailyEmailStatusBreakdownSchema>;\nexport type MetricsEmailOverview = yup.InferType<typeof MetricsEmailOverviewSchema>;\nexport type MetricsDailyRevenuePoint = yup.InferType<typeof MetricsDailyRevenuePointSchema>;\nexport type MetricsTopReferrer = yup.InferType<typeof MetricsTopReferrerSchema>;\nexport type MetricsTopRegion = yup.InferType<typeof MetricsTopRegionSchema>;\nexport type MetricsTopCountry = yup.InferType<typeof MetricsTopCountrySchema>;\nexport type MetricsNamedCount = yup.InferType<typeof MetricsNamedCountSchema>;\nexport type MetricsAnalyticsOverview = yup.InferType<typeof MetricsAnalyticsOverviewSchema>;\nexport type MetricsLoginMethodEntry = yup.InferType<typeof MetricsLoginMethodEntrySchema>;\nexport type MetricsRecentUser = yup.InferType<typeof MetricsRecentUserSchema>;\nexport type MetricsResponse = yup.InferType<typeof MetricsResponseBodySchema>;\nexport type MetricsUserCounts = yup.InferType<typeof MetricsUserCountsSchema>;\nexport type UserActivityResponse = yup.InferType<typeof UserActivityResponseBodySchema>;\n"],"mappings":"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"}
@@ -56,9 +56,9 @@ declare const conversationSummarySchema: yup$1.ObjectSchema<{
56
56
  preview: string | null;
57
57
  lastActivityAt: string;
58
58
  metadata: {
59
+ tags: string[];
59
60
  assignedToUserId: string | null;
60
61
  assignedToDisplayName: string | null;
61
- tags: string[];
62
62
  firstResponseDueAt: string | null;
63
63
  firstResponseAt: string | null;
64
64
  nextResponseDueAt: string | null;
@@ -174,28 +174,28 @@ declare const conversationListResponseSchema: yup$1.ObjectSchema<{
174
174
  closedAt?: string | null | undefined;
175
175
  recordMetadata?: {} | null | undefined;
176
176
  status: "open" | "pending" | "closed";
177
- priority: "low" | "normal" | "high" | "urgent";
178
177
  subject: string;
179
- conversationId: string;
180
- userId: string | null;
181
- teamId: string | null;
182
- userDisplayName: string | null;
183
- userPrimaryEmail: string | null;
184
- userProfileImageUrl: string | null;
185
178
  source: "email" | "manual" | "chat" | "api";
186
- lastMessageType: "message" | "internal-note" | "status-change";
187
- preview: string | null;
188
- lastActivityAt: string;
189
179
  metadata: {
180
+ tags: string[];
190
181
  assignedToUserId: string | null;
191
182
  assignedToDisplayName: string | null;
192
- tags: string[];
193
183
  firstResponseDueAt: string | null;
194
184
  firstResponseAt: string | null;
195
185
  nextResponseDueAt: string | null;
196
186
  lastCustomerReplyAt: string | null;
197
187
  lastAgentReplyAt: string | null;
198
188
  };
189
+ priority: "low" | "normal" | "high" | "urgent";
190
+ conversationId: string;
191
+ userId: string | null;
192
+ teamId: string | null;
193
+ userDisplayName: string | null;
194
+ userPrimaryEmail: string | null;
195
+ userProfileImageUrl: string | null;
196
+ lastMessageType: "message" | "internal-note" | "status-change";
197
+ preview: string | null;
198
+ lastActivityAt: string;
199
199
  }[];
200
200
  hasMore: boolean;
201
201
  }, yup$1.AnyObject, {
@@ -212,42 +212,42 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
212
212
  closedAt?: string | null | undefined;
213
213
  recordMetadata?: {} | null | undefined;
214
214
  status: "open" | "pending" | "closed";
215
- priority: "low" | "normal" | "high" | "urgent";
216
215
  subject: string;
217
- conversationId: string;
218
- userId: string | null;
219
- teamId: string | null;
220
- userDisplayName: string | null;
221
- userPrimaryEmail: string | null;
222
- userProfileImageUrl: string | null;
223
216
  source: "email" | "manual" | "chat" | "api";
224
- lastMessageType: "message" | "internal-note" | "status-change";
225
- preview: string | null;
226
- lastActivityAt: string;
227
217
  metadata: {
218
+ tags: string[];
228
219
  assignedToUserId: string | null;
229
220
  assignedToDisplayName: string | null;
230
- tags: string[];
231
221
  firstResponseDueAt: string | null;
232
222
  firstResponseAt: string | null;
233
223
  nextResponseDueAt: string | null;
234
224
  lastCustomerReplyAt: string | null;
235
225
  lastAgentReplyAt: string | null;
236
226
  };
227
+ priority: "low" | "normal" | "high" | "urgent";
228
+ conversationId: string;
229
+ userId: string | null;
230
+ teamId: string | null;
231
+ userDisplayName: string | null;
232
+ userPrimaryEmail: string | null;
233
+ userProfileImageUrl: string | null;
234
+ lastMessageType: "message" | "internal-note" | "status-change";
235
+ preview: string | null;
236
+ lastActivityAt: string;
237
237
  };
238
238
  messages: {
239
239
  status: "open" | "pending" | "closed";
240
240
  id: string;
241
- priority: "low" | "normal" | "high" | "urgent";
242
241
  subject: string;
242
+ body: string | null;
243
+ source: "email" | "manual" | "chat" | "api";
244
+ metadata: {} | null;
245
+ priority: "low" | "normal" | "high" | "urgent";
243
246
  conversationId: string;
244
247
  userId: string | null;
245
248
  teamId: string | null;
246
- source: "email" | "manual" | "chat" | "api";
247
- metadata: {} | null;
248
249
  createdAt: string;
249
250
  messageType: "message" | "internal-note" | "status-change";
250
- body: string | null;
251
251
  attachments: {}[];
252
252
  sender: {
253
253
  type: "user" | "agent" | "system";
@@ -18,18 +18,18 @@ declare const currentUserCrud: ______crud0.CrudSchemaFromOptions<{
18
18
  is_restricted: boolean;
19
19
  requires_totp_mfa: boolean;
20
20
  profile_image_url: string | null;
21
- signed_up_at_millis: number;
21
+ oauth_providers: {
22
+ email?: string | null | undefined;
23
+ id: string;
24
+ account_id: string;
25
+ }[];
22
26
  primary_email_verified: boolean;
27
+ signed_up_at_millis: number;
23
28
  has_password: boolean;
24
29
  otp_auth_enabled: boolean;
25
30
  passkey_auth_enabled: boolean;
26
31
  restricted_by_admin: boolean;
27
32
  restricted_by_admin_reason: string | null;
28
- oauth_providers: {
29
- email?: string | null | undefined;
30
- id: string;
31
- account_id: string;
32
- }[];
33
33
  auth_with_email: boolean;
34
34
  } & {
35
35
  selected_team: {