@hexclave/shared 1.0.14 → 1.0.16

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 (122) hide show
  1. package/dist/apps/apps-config.d.ts +6 -0
  2. package/dist/apps/apps-config.js +6 -0
  3. package/dist/apps/apps-config.js.map +1 -1
  4. package/dist/config/schema.d.ts +107 -107
  5. package/dist/config-authoring.d.ts.map +1 -1
  6. package/dist/config-authoring.js.map +1 -1
  7. package/dist/config-authoring.test.js +1 -1
  8. package/dist/config-authoring.test.js.map +1 -1
  9. package/dist/config-rendering.d.ts +2 -2
  10. package/dist/config-rendering.js +16 -0
  11. package/dist/config-rendering.js.map +1 -1
  12. package/dist/esm/apps/apps-config.d.ts +6 -0
  13. package/dist/esm/apps/apps-config.js +6 -0
  14. package/dist/esm/apps/apps-config.js.map +1 -1
  15. package/dist/esm/config/schema.d.ts +107 -107
  16. package/dist/esm/config-authoring.d.ts.map +1 -1
  17. package/dist/esm/config-authoring.js.map +1 -1
  18. package/dist/esm/config-authoring.test.js +1 -1
  19. package/dist/esm/config-authoring.test.js.map +1 -1
  20. package/dist/esm/config-rendering.d.ts +2 -2
  21. package/dist/esm/config-rendering.js +16 -2
  22. package/dist/esm/config-rendering.js.map +1 -1
  23. package/dist/esm/hexclave-config-file.d.ts +24 -1
  24. package/dist/esm/hexclave-config-file.d.ts.map +1 -1
  25. package/dist/esm/hexclave-config-file.js +69 -2
  26. package/dist/esm/hexclave-config-file.js.map +1 -1
  27. package/dist/esm/interface/admin-interface.d.ts +19 -1
  28. package/dist/esm/interface/admin-interface.d.ts.map +1 -1
  29. package/dist/esm/interface/admin-interface.js +14 -0
  30. package/dist/esm/interface/admin-interface.js.map +1 -1
  31. package/dist/esm/interface/admin-metrics.d.ts +115 -21
  32. package/dist/esm/interface/admin-metrics.d.ts.map +1 -1
  33. package/dist/esm/interface/admin-metrics.js +61 -1
  34. package/dist/esm/interface/admin-metrics.js.map +1 -1
  35. package/dist/esm/interface/conversations.d.ts +42 -42
  36. package/dist/esm/interface/crud/current-user.d.ts +15 -15
  37. package/dist/esm/interface/crud/email-outbox.d.ts +220 -220
  38. package/dist/esm/interface/crud/invoices.d.ts +2 -2
  39. package/dist/esm/interface/crud/products.d.ts +17 -17
  40. package/dist/esm/interface/crud/products.d.ts.map +1 -1
  41. package/dist/esm/interface/crud/project-api-keys.d.ts +4 -4
  42. package/dist/esm/interface/crud/projects.d.ts +59 -59
  43. package/dist/esm/interface/crud/team-member-profiles.d.ts +26 -26
  44. package/dist/esm/interface/crud/transactions.d.ts +15 -15
  45. package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
  46. package/dist/esm/interface/crud/users.d.ts +18 -18
  47. package/dist/esm/interface/webhooks.d.ts +4 -4
  48. package/dist/esm/known-errors.d.ts +5 -5
  49. package/dist/esm/schema-fields.d.ts +8 -8
  50. package/dist/esm/sessions.d.ts +7 -7
  51. package/dist/esm/utils/analytics-clickmap-overlay.d.ts +18 -0
  52. package/dist/esm/utils/analytics-clickmap-overlay.d.ts.map +1 -0
  53. package/dist/esm/utils/analytics-clickmap-overlay.js +19 -0
  54. package/dist/esm/utils/analytics-clickmap-overlay.js.map +1 -0
  55. package/dist/esm/utils/dev-tool.d.ts +31 -0
  56. package/dist/esm/utils/dev-tool.d.ts.map +1 -0
  57. package/dist/esm/utils/dev-tool.js +32 -0
  58. package/dist/esm/utils/dev-tool.js.map +1 -0
  59. package/dist/esm/utils/dom.d.ts +7 -1
  60. package/dist/esm/utils/dom.d.ts.map +1 -1
  61. package/dist/esm/utils/dom.js +20 -1
  62. package/dist/esm/utils/dom.js.map +1 -1
  63. package/dist/esm/utils/elements-chain.d.ts +38 -0
  64. package/dist/esm/utils/elements-chain.d.ts.map +1 -0
  65. package/dist/esm/utils/elements-chain.js +297 -0
  66. package/dist/esm/utils/elements-chain.js.map +1 -0
  67. package/dist/hexclave-config-file.d.ts +24 -1
  68. package/dist/hexclave-config-file.d.ts.map +1 -1
  69. package/dist/hexclave-config-file.js +71 -1
  70. package/dist/hexclave-config-file.js.map +1 -1
  71. package/dist/interface/admin-interface.d.ts +19 -1
  72. package/dist/interface/admin-interface.d.ts.map +1 -1
  73. package/dist/interface/admin-interface.js +14 -0
  74. package/dist/interface/admin-interface.js.map +1 -1
  75. package/dist/interface/admin-metrics.d.ts +115 -21
  76. package/dist/interface/admin-metrics.d.ts.map +1 -1
  77. package/dist/interface/admin-metrics.js +65 -0
  78. package/dist/interface/admin-metrics.js.map +1 -1
  79. package/dist/interface/conversations.d.ts +42 -42
  80. package/dist/interface/crud/current-user.d.ts +15 -15
  81. package/dist/interface/crud/email-outbox.d.ts +220 -220
  82. package/dist/interface/crud/invoices.d.ts +2 -2
  83. package/dist/interface/crud/products.d.ts +17 -17
  84. package/dist/interface/crud/products.d.ts.map +1 -1
  85. package/dist/interface/crud/project-api-keys.d.ts +4 -4
  86. package/dist/interface/crud/projects.d.ts +59 -59
  87. package/dist/interface/crud/team-member-profiles.d.ts +26 -26
  88. package/dist/interface/crud/transactions.d.ts +15 -15
  89. package/dist/interface/crud/transactions.d.ts.map +1 -1
  90. package/dist/interface/crud/users.d.ts +18 -18
  91. package/dist/interface/webhooks.d.ts +4 -4
  92. package/dist/known-errors.d.ts +5 -5
  93. package/dist/schema-fields.d.ts +8 -8
  94. package/dist/sessions.d.ts +7 -7
  95. package/dist/utils/analytics-clickmap-overlay.d.ts +18 -0
  96. package/dist/utils/analytics-clickmap-overlay.d.ts.map +1 -0
  97. package/dist/utils/analytics-clickmap-overlay.js +23 -0
  98. package/dist/utils/analytics-clickmap-overlay.js.map +1 -0
  99. package/dist/utils/dev-tool.d.ts +31 -0
  100. package/dist/utils/dev-tool.d.ts.map +1 -0
  101. package/dist/utils/dev-tool.js +37 -0
  102. package/dist/utils/dev-tool.js.map +1 -0
  103. package/dist/utils/dom.d.ts +7 -1
  104. package/dist/utils/dom.d.ts.map +1 -1
  105. package/dist/utils/dom.js +20 -0
  106. package/dist/utils/dom.js.map +1 -1
  107. package/dist/utils/elements-chain.d.ts +38 -0
  108. package/dist/utils/elements-chain.d.ts.map +1 -0
  109. package/dist/utils/elements-chain.js +304 -0
  110. package/dist/utils/elements-chain.js.map +1 -0
  111. package/package.json +1 -1
  112. package/src/apps/apps-config.ts +6 -0
  113. package/src/config-authoring.test.ts +1 -1
  114. package/src/config-authoring.ts +6 -6
  115. package/src/config-rendering.ts +24 -2
  116. package/src/hexclave-config-file.ts +90 -1
  117. package/src/interface/admin-interface.ts +43 -1
  118. package/src/interface/admin-metrics.ts +92 -4
  119. package/src/utils/analytics-clickmap-overlay.tsx +15 -0
  120. package/src/utils/dev-tool.tsx +30 -0
  121. package/src/utils/dom.tsx +42 -0
  122. package/src/utils/elements-chain.tsx +349 -0
@@ -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\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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"}
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.\n // Optional + default-[] for one release cycle so older clients / servers\n // 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 clickmap — 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\nexport const AnalyticsClickmapKindSchema = yupString().oneOf([\"team_user_hour_of_week\", \"session_replay_clicks\"]).defined();\nexport const AnalyticsClickmapDeviceSchema = yupString().oneOf([\"tv\", \"widescreen\", \"desktop\", \"laptop\", \"tablet\", \"mobile\"]).defined();\n\nexport const AnalyticsClickmapTokenResponseBodySchema = yupObject({\n token: yupString().defined(),\n origin: yupString().defined(),\n expires_at_millis: yupNumber().integer().defined(),\n}).defined();\n\nexport const AnalyticsClickmapCellSchema = yupObject({\n weekday: yupNumber().integer().min(1).max(7).defined(),\n hour: yupNumber().integer().min(0).max(23).defined(),\n value: yupNumber().integer().defined(),\n}).defined();\n\nexport const AnalyticsClickmapResponseBodySchema = yupObject({\n kind: AnalyticsClickmapKindSchema,\n cells: yupArray(AnalyticsClickmapCellSchema).defined(),\n // Fraction of source rows the result was computed from (1 = full scan).\n // Returned counts are pre-scaled by 1/sampling.\n sampling: yupNumber().min(0).max(1).optional().default(1),\n routes: yupArray(yupObject({\n path: yupString().defined(),\n clicks: yupNumber().integer().defined(),\n users: yupNumber().integer().defined(),\n replays: yupNumber().integer().defined(),\n }).defined()).optional().default([]),\n users: yupArray(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 clicks: yupNumber().integer().defined(),\n replays: yupNumber().integer().defined(),\n last_event_at_millis: yupNumber().defined(),\n }).defined()).optional().default([]),\n replays: yupArray(yupObject({\n id: yupString().defined(),\n user_id: yupString().nullable().defined(),\n route_path: yupString().nullable().defined(),\n viewport_width: yupNumber().integer().nullable().defined(),\n viewport_height: yupNumber().integer().nullable().defined(),\n clicks: yupNumber().integer().defined(),\n last_event_at_millis: yupNumber().defined(),\n }).defined()).optional().default([]),\n selectors: yupArray(yupObject({\n selector: yupString().defined(),\n clicks: yupNumber().integer().defined(),\n }).defined()).optional().default([]),\n // PostHog-style aggregated element identities. Resilient to DOM drift\n // because the chain encodes ancestor tags/classes/attrs/text rather than\n // a positional CSS selector.\n elements: yupArray(yupObject({\n elements_chain: yupString().defined(),\n elements_text: yupString().defined(),\n tag_name: yupString().defined(),\n href: yupString().nullable().defined(),\n clicks: yupNumber().integer().defined(),\n // Optional for one release cycle so new overlay clients can validate\n // responses from older servers that only returned aggregate click counts.\n dead_clicks: yupNumber().integer().optional().default(0),\n }).defined()).optional().default([]),\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>;\nexport type AnalyticsClickmapKind = yup.InferType<typeof AnalyticsClickmapKindSchema>;\nexport type AnalyticsClickmapDevice = yup.InferType<typeof AnalyticsClickmapDeviceSchema>;\nexport type AnalyticsClickmapCell = yup.InferType<typeof AnalyticsClickmapCellSchema>;\nexport type AnalyticsClickmapResponse = yup.InferType<typeof AnalyticsClickmapResponseBodySchema>;\nexport type AnalyticsClickmapTokenResponse = yup.InferType<typeof AnalyticsClickmapTokenResponseBodySchema>;\n\n// Single (camelCase) options shape for the clickmap SDK surface — shared by the\n// StackAdminApp interface and its implementation so the two can't drift. The\n// HexclaveAdminInterface transport layer maps these to the snake_case request body.\nexport type AnalyticsClickmapOptions = {\n kind: AnalyticsClickmapKind,\n memberUserIds?: string[],\n routePath?: string,\n routeRegex?: string,\n urlPattern?: string,\n userId?: string,\n replayId?: string,\n device?: AnalyticsClickmapDevice,\n viewportWidthMin?: number,\n viewportWidthMax?: number,\n sampling?: number,\n since: string,\n until: string,\n};\n"],"mappings":"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"}
@@ -49,16 +49,16 @@ declare const conversationSummarySchema: yup$1.ObjectSchema<{
49
49
  userPrimaryEmail: string | null;
50
50
  userProfileImageUrl: string | null;
51
51
  subject: string;
52
- status: "pending" | "open" | "closed";
52
+ status: "open" | "pending" | "closed";
53
53
  priority: "low" | "normal" | "high" | "urgent";
54
- source: "email" | "manual" | "chat" | "api";
54
+ source: "manual" | "chat" | "email" | "api";
55
55
  lastMessageType: "message" | "internal-note" | "status-change";
56
56
  preview: string | null;
57
57
  lastActivityAt: string;
58
58
  metadata: {
59
- tags: string[];
60
59
  assignedToUserId: string | null;
61
60
  assignedToDisplayName: string | null;
61
+ tags: string[];
62
62
  firstResponseDueAt: string | null;
63
63
  firstResponseAt: string | null;
64
64
  nextResponseDueAt: string | null;
@@ -129,9 +129,9 @@ declare const conversationMessageSchema: yup$1.ObjectSchema<{
129
129
  userId: string | null;
130
130
  teamId: string | null;
131
131
  subject: string;
132
- status: "pending" | "open" | "closed";
132
+ status: "open" | "pending" | "closed";
133
133
  priority: "low" | "normal" | "high" | "urgent";
134
- source: "email" | "manual" | "chat" | "api";
134
+ source: "manual" | "chat" | "email" | "api";
135
135
  messageType: "message" | "internal-note" | "status-change";
136
136
  body: string | null;
137
137
  attachments: {}[];
@@ -139,8 +139,8 @@ declare const conversationMessageSchema: yup$1.ObjectSchema<{
139
139
  createdAt: string;
140
140
  sender: {
141
141
  type: "user" | "agent" | "system";
142
- displayName: string | null;
143
142
  id: string | null;
143
+ displayName: string | null;
144
144
  primaryEmail: string | null;
145
145
  };
146
146
  }, yup$1.AnyObject, {
@@ -173,29 +173,29 @@ declare const conversationListResponseSchema: yup$1.ObjectSchema<{
173
173
  lastOutboundAt?: string | null | undefined;
174
174
  closedAt?: string | null | undefined;
175
175
  recordMetadata?: {} | null | undefined;
176
- metadata: {
177
- tags: string[];
178
- assignedToUserId: string | null;
179
- assignedToDisplayName: string | null;
180
- firstResponseDueAt: string | null;
181
- firstResponseAt: string | null;
182
- nextResponseDueAt: string | null;
183
- lastCustomerReplyAt: string | null;
184
- lastAgentReplyAt: string | null;
185
- };
186
- source: "email" | "manual" | "chat" | "api";
187
- status: "pending" | "open" | "closed";
188
- priority: "low" | "normal" | "high" | "urgent";
189
- subject: string;
190
176
  conversationId: string;
191
177
  userId: string | null;
192
178
  teamId: string | null;
193
179
  userDisplayName: string | null;
194
180
  userPrimaryEmail: string | null;
195
181
  userProfileImageUrl: string | null;
182
+ subject: string;
183
+ status: "open" | "pending" | "closed";
184
+ priority: "low" | "normal" | "high" | "urgent";
185
+ source: "manual" | "chat" | "email" | "api";
196
186
  lastMessageType: "message" | "internal-note" | "status-change";
197
187
  preview: string | null;
198
188
  lastActivityAt: string;
189
+ metadata: {
190
+ assignedToUserId: string | null;
191
+ assignedToDisplayName: string | null;
192
+ tags: string[];
193
+ firstResponseDueAt: string | null;
194
+ firstResponseAt: string | null;
195
+ nextResponseDueAt: string | null;
196
+ lastCustomerReplyAt: string | null;
197
+ lastAgentReplyAt: string | null;
198
+ };
199
199
  }[];
200
200
  hasMore: boolean;
201
201
  }, yup$1.AnyObject, {
@@ -211,54 +211,54 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
211
211
  lastOutboundAt?: string | null | undefined;
212
212
  closedAt?: string | null | undefined;
213
213
  recordMetadata?: {} | null | undefined;
214
- metadata: {
215
- tags: string[];
216
- assignedToUserId: string | null;
217
- assignedToDisplayName: string | null;
218
- firstResponseDueAt: string | null;
219
- firstResponseAt: string | null;
220
- nextResponseDueAt: string | null;
221
- lastCustomerReplyAt: string | null;
222
- lastAgentReplyAt: string | null;
223
- };
224
- source: "email" | "manual" | "chat" | "api";
225
- status: "pending" | "open" | "closed";
226
- priority: "low" | "normal" | "high" | "urgent";
227
- subject: string;
228
214
  conversationId: string;
229
215
  userId: string | null;
230
216
  teamId: string | null;
231
217
  userDisplayName: string | null;
232
218
  userPrimaryEmail: string | null;
233
219
  userProfileImageUrl: string | null;
220
+ subject: string;
221
+ status: "open" | "pending" | "closed";
222
+ priority: "low" | "normal" | "high" | "urgent";
223
+ source: "manual" | "chat" | "email" | "api";
234
224
  lastMessageType: "message" | "internal-note" | "status-change";
235
225
  preview: string | null;
236
226
  lastActivityAt: string;
227
+ metadata: {
228
+ assignedToUserId: string | null;
229
+ assignedToDisplayName: string | null;
230
+ tags: string[];
231
+ firstResponseDueAt: string | null;
232
+ firstResponseAt: string | null;
233
+ nextResponseDueAt: string | null;
234
+ lastCustomerReplyAt: string | null;
235
+ lastAgentReplyAt: string | null;
236
+ };
237
237
  };
238
238
  messages: {
239
- metadata: {} | null;
240
- body: string | null;
241
- source: "email" | "manual" | "chat" | "api";
242
- status: "pending" | "open" | "closed";
243
239
  id: string;
244
- priority: "low" | "normal" | "high" | "urgent";
245
- subject: string;
246
240
  conversationId: string;
247
241
  userId: string | null;
248
242
  teamId: string | null;
243
+ subject: string;
244
+ status: "open" | "pending" | "closed";
245
+ priority: "low" | "normal" | "high" | "urgent";
246
+ source: "manual" | "chat" | "email" | "api";
247
+ metadata: {} | null;
249
248
  createdAt: string;
250
249
  messageType: "message" | "internal-note" | "status-change";
250
+ body: string | null;
251
251
  attachments: {}[];
252
252
  sender: {
253
253
  type: "user" | "agent" | "system";
254
- displayName: string | null;
255
254
  id: string | null;
255
+ displayName: string | null;
256
256
  primaryEmail: string | null;
257
257
  };
258
258
  }[];
259
259
  entryPoints: {
260
- metadata: {} | null;
261
260
  id: string;
261
+ metadata: {} | null;
262
262
  createdAt: string;
263
263
  updatedAt: string;
264
264
  channelType: string;
@@ -4,21 +4,21 @@ import * as yup$1 from "yup";
4
4
  //#region src/interface/crud/current-user.d.ts
5
5
  declare const currentUserCrud: CrudSchemaFromOptions<{
6
6
  clientReadSchema: yup$1.ObjectSchema<{
7
- restricted_reason: {
8
- type: "anonymous" | "email_not_verified" | "restricted_by_administrator";
9
- } | null;
10
- primary_email: string | null;
11
- display_name: string | null;
12
- client_metadata: {} | null;
13
- client_read_only_metadata: {} | null;
14
7
  id: string;
8
+ display_name: string | null;
9
+ primary_email: string | null;
10
+ profile_image_url: string | null;
11
+ signed_up_at_millis: number;
15
12
  selected_team_id: string | null;
16
13
  is_anonymous: boolean;
17
14
  is_restricted: boolean;
15
+ restricted_reason: {
16
+ type: "anonymous" | "email_not_verified" | "restricted_by_administrator";
17
+ } | null;
18
18
  requires_totp_mfa: boolean;
19
+ client_metadata: {} | null;
20
+ client_read_only_metadata: {} | null;
19
21
  primary_email_verified: boolean;
20
- profile_image_url: string | null;
21
- signed_up_at_millis: number;
22
22
  has_password: boolean;
23
23
  otp_auth_enabled: boolean;
24
24
  passkey_auth_enabled: boolean;
@@ -34,8 +34,8 @@ declare const currentUserCrud: CrudSchemaFromOptions<{
34
34
  selected_team: {
35
35
  client_metadata?: {} | null | undefined;
36
36
  client_read_only_metadata?: {} | null | undefined;
37
- display_name: string;
38
37
  id: string;
38
+ display_name: string;
39
39
  profile_image_url: string | null;
40
40
  } | null;
41
41
  }, yup$1.AnyObject, {
@@ -90,10 +90,10 @@ declare const currentUserCrud: CrudSchemaFromOptions<{
90
90
  client_metadata?: {} | null | undefined;
91
91
  client_read_only_metadata?: {} | null | undefined;
92
92
  server_metadata?: {} | null | undefined;
93
- display_name: string;
94
93
  id: string;
95
- profile_image_url: string | null;
96
94
  created_at_millis: number;
95
+ display_name: string;
96
+ profile_image_url: string | null;
97
97
  } | null;
98
98
  selected_team_id: string | null;
99
99
  profile_image_url: string | null;
@@ -172,11 +172,11 @@ declare const currentUserCrud: CrudSchemaFromOptions<{
172
172
  requires_totp_mfa: undefined;
173
173
  }, "">;
174
174
  clientUpdateSchema: yup$1.ObjectSchema<{
175
- primary_email: string | null | undefined;
176
175
  display_name: string | null | undefined;
177
- client_metadata: {} | null | undefined;
178
- selected_team_id: string | null | undefined;
176
+ primary_email: string | null | undefined;
179
177
  profile_image_url: string | null | undefined;
178
+ selected_team_id: string | null | undefined;
179
+ client_metadata: {} | null | undefined;
180
180
  otp_auth_enabled: boolean | undefined;
181
181
  passkey_auth_enabled: boolean | undefined;
182
182
  totp_secret_base64: string | null | undefined;