adonisjs-server-stats 1.9.0 → 1.10.3

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 (227) hide show
  1. package/README.md +23 -14
  2. package/dist/core/config-utils.d.ts +8 -0
  3. package/dist/core/constants.d.ts +4 -0
  4. package/dist/core/dashboard-data-controller.d.ts +16 -0
  5. package/dist/core/dashboard-data-helpers.d.ts +12 -0
  6. package/dist/core/debug-data-controller.d.ts +4 -0
  7. package/dist/core/define-config-helpers.d.ts +25 -0
  8. package/dist/core/feature-detect-helpers.d.ts +36 -0
  9. package/dist/core/formatters-helpers.d.ts +23 -0
  10. package/dist/core/index.js +596 -509
  11. package/dist/core/log-utils-helpers.d.ts +13 -0
  12. package/dist/core/metrics.d.ts +3 -28
  13. package/dist/core/pagination.d.ts +0 -9
  14. package/dist/core/server-stats-controller.d.ts +6 -0
  15. package/dist/core/split-pane.d.ts +18 -0
  16. package/dist/core/trace-utils.d.ts +5 -0
  17. package/dist/core/transmit-helpers.d.ts +7 -0
  18. package/dist/core/types-dashboard.d.ts +178 -0
  19. package/dist/core/types-diagnostics.d.ts +85 -0
  20. package/dist/core/types.d.ts +11 -443
  21. package/dist/react/{CacheSection-xH75hwXu.js → CacheSection-baMZotSn.js} +2 -2
  22. package/dist/react/CacheTab-2cw_rMzj.js +117 -0
  23. package/dist/react/{ConfigSection-D8BO1Ry9.js → ConfigSection-DGgqjAal.js} +1 -1
  24. package/dist/react/{ConfigTab-CcN-tfjv.js → ConfigTab-H3OnYqmK.js} +1 -1
  25. package/dist/react/CustomPaneTab-B6r7ha0u.js +98 -0
  26. package/dist/react/{EmailsSection-BzlsTdPs.js → EmailsSection-C-UZISG-.js} +2 -2
  27. package/dist/react/EmailsTab-DbK4Eobn.js +139 -0
  28. package/dist/react/{EventsSection-CGQWiIdV.js → EventsSection-C7RQW_LY.js} +2 -2
  29. package/dist/react/EventsTab-CfVr7AiM.js +57 -0
  30. package/dist/react/{FilterBar-DQRXpWrb.js → FilterBar-CQ7bD669.js} +15 -15
  31. package/dist/react/{JobsSection-D7AHQmZi.js → JobsSection-CQHNK_Ls.js} +2 -2
  32. package/dist/react/{JobsTab-B3Lfdqed.js → JobsTab-znzf6jzk.js} +54 -42
  33. package/dist/react/{LogsSection-Cly1dpvS.js → LogsSection-Dmm3rE2B.js} +9 -3
  34. package/dist/react/LogsTab-D8unMV5P.js +108 -0
  35. package/dist/react/{OverviewSection-CkBGFEWq.js → OverviewSection-ABP9ueBo.js} +1 -1
  36. package/dist/react/{QueriesSection-CfCpnNUD.js → QueriesSection-CnmSkznA.js} +2 -2
  37. package/dist/react/{QueriesTab-DbBmAqzO.js → QueriesTab-BQzcxEiW.js} +37 -40
  38. package/dist/react/RelatedLogs-3A8RuGKH.js +52 -0
  39. package/dist/react/RequestsSection-kW79_M7k.js +341 -0
  40. package/dist/react/{RoutesSection-CRqF-cNM.js → RoutesSection-BRhxrtjZ.js} +2 -2
  41. package/dist/react/RoutesTab-CpYH5lUw.js +68 -0
  42. package/dist/react/TimelineTab-DjLR35Ce.js +214 -0
  43. package/dist/react/index-CsImORX6.js +1121 -0
  44. package/dist/react/index.js +1 -1
  45. package/dist/react/react/components/{Dashboard/shared → shared}/FilterBar.d.ts +4 -3
  46. package/dist/react/react/components/shared/RelatedLogs.d.ts +7 -0
  47. package/dist/react/react/hooks/useDashboardData.d.ts +4 -8
  48. package/dist/react/style.css +1 -1
  49. package/dist/src/collectors/app_collector.d.ts +0 -8
  50. package/dist/src/collectors/app_collector.js +45 -52
  51. package/dist/src/collectors/auto_detect.d.ts +0 -23
  52. package/dist/src/collectors/auto_detect.js +33 -55
  53. package/dist/src/collectors/db_pool_collector.d.ts +14 -16
  54. package/dist/src/collectors/db_pool_collector.js +72 -57
  55. package/dist/src/collectors/log_collector.d.ts +0 -47
  56. package/dist/src/collectors/log_collector.js +36 -65
  57. package/dist/src/collectors/queue_collector.d.ts +0 -20
  58. package/dist/src/collectors/queue_collector.js +60 -76
  59. package/dist/src/collectors/redis_collector.d.ts +10 -10
  60. package/dist/src/collectors/redis_collector.js +69 -66
  61. package/dist/src/config/deprecation_migration.d.ts +7 -0
  62. package/dist/src/config/deprecation_migration.js +201 -0
  63. package/dist/src/controller/debug_controller.d.ts +1 -1
  64. package/dist/src/controller/debug_controller.js +87 -81
  65. package/dist/src/dashboard/cache_handlers.d.ts +14 -0
  66. package/dist/src/dashboard/cache_handlers.js +52 -0
  67. package/dist/src/dashboard/chart_aggregator.d.ts +0 -7
  68. package/dist/src/dashboard/chart_aggregator.js +68 -50
  69. package/dist/src/dashboard/coalesce_cache.d.ts +25 -0
  70. package/dist/src/dashboard/coalesce_cache.js +47 -0
  71. package/dist/src/dashboard/dashboard_controller.d.ts +11 -37
  72. package/dist/src/dashboard/dashboard_controller.js +52 -532
  73. package/dist/src/dashboard/dashboard_page_assets.d.ts +17 -0
  74. package/dist/src/dashboard/dashboard_page_assets.js +51 -0
  75. package/dist/src/dashboard/dashboard_store.d.ts +19 -217
  76. package/dist/src/dashboard/dashboard_store.js +115 -1069
  77. package/dist/src/dashboard/dashboard_types.d.ts +83 -0
  78. package/dist/src/dashboard/dashboard_types.js +4 -0
  79. package/dist/src/dashboard/detail_queries.d.ts +19 -0
  80. package/dist/src/dashboard/detail_queries.js +98 -0
  81. package/dist/src/dashboard/email_event_builder.d.ts +8 -0
  82. package/dist/src/dashboard/email_event_builder.js +65 -0
  83. package/dist/src/dashboard/explain_query.d.ts +8 -0
  84. package/dist/src/dashboard/explain_query.js +22 -0
  85. package/dist/src/dashboard/filter_handlers.d.ts +23 -0
  86. package/dist/src/dashboard/filter_handlers.js +56 -0
  87. package/dist/src/dashboard/filtered_queries.d.ts +15 -0
  88. package/dist/src/dashboard/filtered_queries.js +155 -0
  89. package/dist/src/dashboard/flush_manager.d.ts +25 -0
  90. package/dist/src/dashboard/flush_manager.js +107 -0
  91. package/dist/src/dashboard/format_helpers.d.ts +126 -0
  92. package/dist/src/dashboard/format_helpers.js +140 -0
  93. package/dist/src/dashboard/inspector_manager.d.ts +36 -0
  94. package/dist/src/dashboard/inspector_manager.js +102 -0
  95. package/dist/src/dashboard/integrations/config_inspector.js +11 -13
  96. package/dist/src/dashboard/integrations/queue_inspector.d.ts +3 -3
  97. package/dist/src/dashboard/integrations/queue_inspector.js +13 -10
  98. package/dist/src/dashboard/jobs_handlers.d.ts +14 -0
  99. package/dist/src/dashboard/jobs_handlers.js +61 -0
  100. package/dist/src/dashboard/knex_factory.d.ts +18 -0
  101. package/dist/src/dashboard/knex_factory.js +91 -0
  102. package/dist/src/dashboard/migrator.js +30 -153
  103. package/dist/src/dashboard/migrator_tables.d.ts +19 -0
  104. package/dist/src/dashboard/migrator_tables.js +153 -0
  105. package/dist/src/dashboard/overview_queries.d.ts +66 -0
  106. package/dist/src/dashboard/overview_queries.js +155 -0
  107. package/dist/src/dashboard/overview_query_runners.d.ts +25 -0
  108. package/dist/src/dashboard/overview_query_runners.js +84 -0
  109. package/dist/src/dashboard/overview_store_queries.d.ts +40 -0
  110. package/dist/src/dashboard/overview_store_queries.js +69 -0
  111. package/dist/src/dashboard/paginate_helper.d.ts +12 -0
  112. package/dist/src/dashboard/paginate_helper.js +33 -0
  113. package/dist/src/dashboard/query_explain_handler.d.ts +10 -0
  114. package/dist/src/dashboard/query_explain_handler.js +80 -0
  115. package/dist/src/dashboard/read_queries.d.ts +32 -0
  116. package/dist/src/dashboard/read_queries.js +107 -0
  117. package/dist/src/dashboard/saved_filter_queries.d.ts +10 -0
  118. package/dist/src/dashboard/saved_filter_queries.js +24 -0
  119. package/dist/src/dashboard/storage_stats.d.ts +41 -0
  120. package/dist/src/dashboard/storage_stats.js +81 -0
  121. package/dist/src/dashboard/write_queue.d.ts +106 -0
  122. package/dist/src/dashboard/write_queue.js +225 -0
  123. package/dist/src/data/data_access.d.ts +6 -36
  124. package/dist/src/data/data_access.js +43 -188
  125. package/dist/src/data/data_access_helpers.d.ts +130 -0
  126. package/dist/src/data/data_access_helpers.js +212 -0
  127. package/dist/src/debug/debug_store.js +37 -32
  128. package/dist/src/debug/email_collector.d.ts +1 -10
  129. package/dist/src/debug/email_collector.js +78 -81
  130. package/dist/src/debug/event_collector.d.ts +0 -9
  131. package/dist/src/debug/event_collector.js +79 -62
  132. package/dist/src/debug/query_collector.js +23 -19
  133. package/dist/src/debug/route_inspector.d.ts +1 -5
  134. package/dist/src/debug/route_inspector.js +50 -51
  135. package/dist/src/debug/trace_collector.d.ts +10 -2
  136. package/dist/src/debug/trace_collector.js +23 -16
  137. package/dist/src/debug/types.d.ts +5 -1
  138. package/dist/src/define_config.d.ts +0 -65
  139. package/dist/src/define_config.js +93 -333
  140. package/dist/src/edge/client/dashboard.js +2 -2
  141. package/dist/src/edge/client/debug-panel-deferred.js +1 -1
  142. package/dist/src/edge/client/stats-bar.js +1 -1
  143. package/dist/src/edge/client-vue/dashboard.js +5 -5
  144. package/dist/src/edge/client-vue/debug-panel-deferred.js +3 -3
  145. package/dist/src/edge/client-vue/stats-bar.js +3 -3
  146. package/dist/src/edge/plugin.d.ts +0 -16
  147. package/dist/src/edge/plugin.js +57 -64
  148. package/dist/src/engine/request_metrics.d.ts +1 -0
  149. package/dist/src/engine/request_metrics.js +32 -42
  150. package/dist/src/middleware/request_tracking_middleware.d.ts +3 -8
  151. package/dist/src/middleware/request_tracking_middleware.js +65 -91
  152. package/dist/src/provider/auth_middleware_detector.d.ts +16 -0
  153. package/dist/src/provider/auth_middleware_detector.js +97 -0
  154. package/dist/src/provider/boot_helpers.d.ts +20 -0
  155. package/dist/src/provider/boot_helpers.js +91 -0
  156. package/dist/src/provider/boot_initializer.d.ts +28 -0
  157. package/dist/src/provider/boot_initializer.js +35 -0
  158. package/dist/src/provider/dashboard_init.d.ts +30 -0
  159. package/dist/src/provider/dashboard_init.js +138 -0
  160. package/dist/src/provider/dashboard_setup.d.ts +25 -0
  161. package/dist/src/provider/dashboard_setup.js +78 -0
  162. package/dist/src/provider/diagnostics.d.ts +134 -0
  163. package/dist/src/provider/diagnostics.js +127 -0
  164. package/dist/src/provider/email_bridge.d.ts +43 -0
  165. package/dist/src/provider/email_bridge.js +80 -0
  166. package/dist/src/provider/email_helpers.d.ts +13 -0
  167. package/dist/src/provider/email_helpers.js +68 -0
  168. package/dist/src/provider/pino_hook.d.ts +17 -0
  169. package/dist/src/provider/pino_hook.js +35 -0
  170. package/dist/src/provider/provider_helpers_extra.d.ts +47 -0
  171. package/dist/src/provider/provider_helpers_extra.js +177 -0
  172. package/dist/src/provider/server_stats_provider.d.ts +39 -85
  173. package/dist/src/provider/server_stats_provider.js +131 -936
  174. package/dist/src/provider/shutdown_helpers.d.ts +43 -0
  175. package/dist/src/provider/shutdown_helpers.js +70 -0
  176. package/dist/src/provider/toolbar_setup.d.ts +57 -0
  177. package/dist/src/provider/toolbar_setup.js +141 -0
  178. package/dist/src/routes/dashboard_routes.d.ts +14 -0
  179. package/dist/src/routes/dashboard_routes.js +197 -0
  180. package/dist/src/routes/debug_routes.d.ts +14 -0
  181. package/dist/src/routes/debug_routes.js +101 -0
  182. package/dist/src/routes/register_routes.d.ts +0 -78
  183. package/dist/src/routes/register_routes.js +22 -347
  184. package/dist/src/routes/stats_routes.d.ts +5 -0
  185. package/dist/src/routes/stats_routes.js +14 -0
  186. package/dist/src/styles/components.css +177 -0
  187. package/dist/src/styles/dashboard.css +8 -90
  188. package/dist/src/styles/debug-panel.css +10 -31
  189. package/dist/src/types.d.ts +306 -15
  190. package/dist/vue/{CacheSection-Cx-hj09X.js → CacheSection-ITqvpfH5.js} +1 -1
  191. package/dist/vue/{ConfigSection-CMXyryf6.js → ConfigSection-DTn3GslE.js} +1 -1
  192. package/dist/vue/{EmailsSection-DgKl9xGT.js → EmailsSection-DtLJ4XoS.js} +1 -1
  193. package/dist/vue/{EventsSection-BNMCAim1.js → EventsSection-BOYYz0Ty.js} +1 -1
  194. package/dist/vue/{JobsSection-CCMgMlxd.js → JobsSection-BazTxcJL.js} +1 -1
  195. package/dist/vue/{LogsSection-CvOnTxUu.js → LogsSection-D55PjTKX.js} +9 -3
  196. package/dist/vue/{LogsTab-Bg3o0Mm6.js → LogsTab-47zEK7jL.js} +4 -1
  197. package/dist/vue/{OverviewSection-CHgaKtUR.js → OverviewSection-1uBKo-Tu.js} +1 -1
  198. package/dist/vue/{QueriesSection-BnHRD98z.js → QueriesSection-rpoZ4ogd.js} +1 -1
  199. package/dist/vue/RelatedLogs.vue_vue_type_script_setup_true_lang-CB2_TzYW.js +84 -0
  200. package/dist/vue/RequestsSection-x7LvT0MC.js +401 -0
  201. package/dist/vue/{RoutesSection-BrceOcKQ.js → RoutesSection-CCD0zZqQ.js} +1 -1
  202. package/dist/vue/TimelineTab-zj5Z5OdT.js +338 -0
  203. package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts +4 -0
  204. package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts +4 -0
  205. package/dist/vue/components/{Dashboard/sections/TimelineSection.vue.d.ts → shared/RelatedLogs.vue.d.ts} +5 -6
  206. package/dist/vue/composables/useDashboardData.d.ts +12 -23
  207. package/dist/vue/index-C8MxnS7Q.js +1232 -0
  208. package/dist/vue/index.js +1 -1
  209. package/dist/vue/style.css +1 -1
  210. package/package.json +1 -1
  211. package/dist/react/CacheTab-DYmsZJJ1.js +0 -123
  212. package/dist/react/CustomPaneTab-D7_o3Ec6.js +0 -104
  213. package/dist/react/EmailsTab-Uh2CQY3o.js +0 -153
  214. package/dist/react/EventsTab-CC6DQzEm.js +0 -63
  215. package/dist/react/LogsTab-BbYK-iyh.js +0 -103
  216. package/dist/react/RequestsSection-Cb5a6MlT.js +0 -209
  217. package/dist/react/RoutesTab-Bwreij3e.js +0 -74
  218. package/dist/react/TimelineSection-B2y06kRE.js +0 -158
  219. package/dist/react/TimelineTab-6hthfdBB.js +0 -193
  220. package/dist/react/WaterfallChart-Cj73WdfM.js +0 -100
  221. package/dist/react/index-CecA4IdQ.js +0 -1075
  222. package/dist/react/react/components/Dashboard/sections/TimelineSection.d.ts +0 -8
  223. package/dist/vue/RequestsSection-B-uSlM0f.js +0 -243
  224. package/dist/vue/TimelineSection-CfvnA2Oo.js +0 -186
  225. package/dist/vue/TimelineTab-Db6lKKsD.js +0 -250
  226. package/dist/vue/WaterfallChart.vue_vue_type_script_setup_true_lang-tZ13cNj1.js +0 -118
  227. package/dist/vue/index-oLxS08vN.js +0 -1235
@@ -0,0 +1,117 @@
1
+ import { jsx as e, jsxs as a } from "react/jsx-runtime";
2
+ import { useState as b, useMemo as z, useCallback as B } from "react";
3
+ import { formatTtl as K, formatCacheSize as S } from "adonisjs-server-stats/core";
4
+ import { u as F } from "./useDashboardApiBase-Bi36pJ2L.js";
5
+ import { u as L, J as $ } from "./index-CsImORX6.js";
6
+ import { u as j } from "./useResizableTable-CNJmACdt.js";
7
+ import { F as A } from "./FilterBar-CQ7bD669.js";
8
+ function O({ options: d, dashboardPath: f }) {
9
+ const { dashApiBase: u, resolvedOptions: y } = F(f, d), { data: t, isLoading: v, error: p } = L("cache", y), [i, k] = b(""), [r, h] = b(null), [g, o] = b(null), n = z(() => {
10
+ const s = t?.keys || [];
11
+ if (!i) return s;
12
+ const m = i.toLowerCase();
13
+ return s.filter((l) => l.key.toLowerCase().includes(m));
14
+ }, [t, i]), C = B(
15
+ async (s) => {
16
+ if (r === s) {
17
+ h(null), o(null);
18
+ return;
19
+ }
20
+ h(s);
21
+ try {
22
+ const { baseUrl: m = "", authToken: l } = d || {}, x = u || d?.debugEndpoint || "/admin/api/debug", R = `${m}${x}/cache/${encodeURIComponent(s)}`, N = { Accept: "application/json" };
23
+ l && (N.Authorization = `Bearer ${l}`);
24
+ const T = await (await fetch(R, {
25
+ headers: N,
26
+ credentials: l ? "omit" : "same-origin"
27
+ })).json();
28
+ o(T);
29
+ } catch {
30
+ o({ error: "Failed to fetch key value" });
31
+ }
32
+ },
33
+ [r, d, u]
34
+ ), w = j([n]);
35
+ if (v && !t)
36
+ return /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading cache data..." });
37
+ if (p)
38
+ return /* @__PURE__ */ a("div", { className: "ss-dbg-empty", children: [
39
+ "Error: ",
40
+ p.message
41
+ ] });
42
+ if (!t)
43
+ return /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Cache inspector not available" });
44
+ const c = t.stats || t;
45
+ return /* @__PURE__ */ a("div", { children: [
46
+ /* @__PURE__ */ a("div", { className: "ss-dbg-cache-stats", children: [
47
+ /* @__PURE__ */ a("div", { className: "ss-dbg-cache-stat", children: [
48
+ /* @__PURE__ */ e("span", { className: "ss-dbg-cache-stat-label", children: "Hit Rate:" }),
49
+ /* @__PURE__ */ a("span", { className: "ss-dbg-cache-stat-value", children: [
50
+ c.hitRate !== null && c.hitRate !== void 0 ? c.hitRate.toFixed(1) : "0",
51
+ "%"
52
+ ] })
53
+ ] }),
54
+ /* @__PURE__ */ a("div", { className: "ss-dbg-cache-stat", children: [
55
+ /* @__PURE__ */ e("span", { className: "ss-dbg-cache-stat-label", children: "Hits:" }),
56
+ /* @__PURE__ */ e("span", { className: "ss-dbg-cache-stat-value", children: c.totalHits ?? 0 })
57
+ ] }),
58
+ /* @__PURE__ */ a("div", { className: "ss-dbg-cache-stat", children: [
59
+ /* @__PURE__ */ e("span", { className: "ss-dbg-cache-stat-label", children: "Misses:" }),
60
+ /* @__PURE__ */ e("span", { className: "ss-dbg-cache-stat-value", children: c.totalMisses ?? 0 })
61
+ ] }),
62
+ /* @__PURE__ */ a("div", { className: "ss-dbg-cache-stat", children: [
63
+ /* @__PURE__ */ e("span", { className: "ss-dbg-cache-stat-label", children: "Keys:" }),
64
+ /* @__PURE__ */ e("span", { className: "ss-dbg-cache-stat-value", children: c.keyCount ?? "-" })
65
+ ] })
66
+ ] }),
67
+ /* @__PURE__ */ e(
68
+ A,
69
+ {
70
+ search: i,
71
+ onSearchChange: k,
72
+ placeholder: "Filter keys...",
73
+ summary: `${n.length} keys`
74
+ }
75
+ ),
76
+ r && !!g && /* @__PURE__ */ a("div", { className: "ss-dbg-cache-detail", children: [
77
+ /* @__PURE__ */ e("strong", { children: r }),
78
+ /* @__PURE__ */ a("button", { type: "button", className: "ss-dbg-btn-clear", onClick: () => h(null), children: [
79
+ "←",
80
+ " Back"
81
+ ] }),
82
+ /* @__PURE__ */ e($, { data: g, classPrefix: "ss-dbg" })
83
+ ] }),
84
+ n.length === 0 ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "No cache keys found" }) : /* @__PURE__ */ a("table", { ref: w, className: "ss-dbg-table", children: [
85
+ /* @__PURE__ */ a("colgroup", { children: [
86
+ /* @__PURE__ */ e("col", {}),
87
+ /* @__PURE__ */ e("col", { style: { width: "80px" } }),
88
+ /* @__PURE__ */ e("col", { style: { width: "80px" } }),
89
+ /* @__PURE__ */ e("col", { style: { width: "80px" } })
90
+ ] }),
91
+ /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ a("tr", { children: [
92
+ /* @__PURE__ */ e("th", { children: "Key" }),
93
+ /* @__PURE__ */ e("th", { children: "Type" }),
94
+ /* @__PURE__ */ e("th", { children: "TTL" }),
95
+ /* @__PURE__ */ e("th", { children: "Size" })
96
+ ] }) }),
97
+ /* @__PURE__ */ e("tbody", { children: n.map((s) => /* @__PURE__ */ a(
98
+ "tr",
99
+ {
100
+ className: "ss-dbg-email-row",
101
+ onClick: () => C(s.key),
102
+ children: [
103
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-sql", children: s.key }),
104
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-muted", children: s.type }),
105
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-muted", children: s.ttl > 0 ? K(s.ttl) : "-" }),
106
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-dim", children: s.size > 0 ? S(s.size) : "-" })
107
+ ]
108
+ },
109
+ s.key
110
+ )) })
111
+ ] })
112
+ ] });
113
+ }
114
+ export {
115
+ O as CacheTab,
116
+ O as default
117
+ };
@@ -1,5 +1,5 @@
1
1
  import { jsx as t } from "react/jsx-runtime";
2
- import { a as i } from "./index-CecA4IdQ.js";
2
+ import { a as i } from "./index-CsImORX6.js";
3
3
  import { C as n } from "./ConfigContent-CnsEI4j3.js";
4
4
  function m({ options: o = {} }) {
5
5
  const { data: a, isLoading: s } = i("config", o);
@@ -1,6 +1,6 @@
1
1
  import { jsxs as i, jsx as n } from "react/jsx-runtime";
2
2
  import { u as f } from "./useDashboardApiBase-Bi36pJ2L.js";
3
- import { u as m } from "./index-CecA4IdQ.js";
3
+ import { u as m } from "./index-CsImORX6.js";
4
4
  import { C as d } from "./ConfigContent-CnsEI4j3.js";
5
5
  function b({ options: r, dashboardPath: o }) {
6
6
  const { resolvedOptions: a } = f(o, r), { data: e, isLoading: t, error: s } = m("config", a);
@@ -0,0 +1,98 @@
1
+ import { jsxs as l, jsx as r } from "react/jsx-runtime";
2
+ import { useState as L, useMemo as b } from "react";
3
+ import { compactPreview as x, formatDuration as A, durationSeverity as f, timeAgo as u, formatTime as p } from "adonisjs-server-stats/core";
4
+ import { u as D } from "./index-CsImORX6.js";
5
+ import { u as M } from "./useResizableTable-CNJmACdt.js";
6
+ import { F as $ } from "./FilterBar-CQ7bD669.js";
7
+ function P({ pane: t, options: g }) {
8
+ ({
9
+ ...g
10
+ });
11
+ const { data: o, isLoading: y, error: h, clearData: N } = D(
12
+ t.endpoint.replace(/^\//, ""),
13
+ {
14
+ ...g,
15
+ debugEndpoint: ""
16
+ // Use endpoint directly
17
+ }
18
+ ), [i, S] = L(""), c = b(() => {
19
+ if (!o) return [];
20
+ const e = t.dataKey || t.id;
21
+ let s = o;
22
+ for (const n of e.split("."))
23
+ s = s?.[n];
24
+ return Array.isArray(s) ? s : [];
25
+ }, [o, t.dataKey, t.id]), d = b(() => {
26
+ if (!i) return c;
27
+ const e = i.toLowerCase(), s = t.columns.filter((n) => n.searchable).map((n) => n.key);
28
+ return s.length === 0 ? c : c.filter(
29
+ (n) => s.some((a) => {
30
+ const m = n[a];
31
+ return m !== null && String(m).toLowerCase().includes(e);
32
+ })
33
+ );
34
+ }, [c, i, t.columns]), w = (e, s) => {
35
+ if (e == null)
36
+ return /* @__PURE__ */ r("span", { className: "ss-dbg-c-dim", children: "-" });
37
+ switch (s.format || "text") {
38
+ case "time":
39
+ return /* @__PURE__ */ r("span", { className: "ss-dbg-event-time", title: p(e), children: typeof e == "number" ? u(e) : String(e) });
40
+ case "timeAgo":
41
+ return /* @__PURE__ */ r("span", { className: "ss-dbg-event-time", title: p(e), children: u(e) });
42
+ case "duration": {
43
+ const a = typeof e == "number" ? e : parseFloat(String(e));
44
+ return isNaN(a) ? String(e) : /* @__PURE__ */ r(
45
+ "span",
46
+ {
47
+ className: `ss-dbg-duration ${f(a) === "very-slow" ? "ss-dbg-very-slow" : f(a) === "slow" ? "ss-dbg-slow" : ""}`,
48
+ children: A(a)
49
+ }
50
+ );
51
+ }
52
+ case "method":
53
+ return /* @__PURE__ */ r("span", { className: `ss-dbg-method ss-dbg-method-${String(e).toLowerCase()}`, children: String(e) });
54
+ case "json": {
55
+ let a = e;
56
+ if (typeof e == "string")
57
+ try {
58
+ a = JSON.parse(e);
59
+ } catch {
60
+ }
61
+ return x(a, 80);
62
+ }
63
+ case "badge": {
64
+ const a = String(e).toLowerCase(), k = (s.badgeColorMap || {})[a] || "muted";
65
+ return /* @__PURE__ */ r("span", { className: `ss-dbg-badge ss-dbg-badge-${k}`, children: String(e) });
66
+ }
67
+ default:
68
+ return String(e);
69
+ }
70
+ }, C = M([d]);
71
+ return y && !o ? /* @__PURE__ */ l("div", { className: "ss-dbg-empty", children: [
72
+ "Loading ",
73
+ t.label,
74
+ "..."
75
+ ] }) : h ? /* @__PURE__ */ l("div", { className: "ss-dbg-empty", children: [
76
+ "Error: ",
77
+ h.message
78
+ ] }) : /* @__PURE__ */ l("div", { children: [
79
+ t.search && /* @__PURE__ */ r(
80
+ $,
81
+ {
82
+ search: i,
83
+ onSearchChange: S,
84
+ placeholder: t.search.placeholder,
85
+ summary: `${d.length} items`,
86
+ children: t.clearable && /* @__PURE__ */ r("button", { type: "button", className: "ss-dbg-btn-clear", onClick: N, children: "Clear" })
87
+ }
88
+ ),
89
+ d.length === 0 ? /* @__PURE__ */ r("div", { className: "ss-dbg-empty", children: "No data" }) : /* @__PURE__ */ l("table", { ref: C, className: "ss-dbg-table", children: [
90
+ /* @__PURE__ */ r("thead", { children: /* @__PURE__ */ r("tr", { children: t.columns.map((e) => /* @__PURE__ */ r("th", { children: e.label }, e.key)) }) }),
91
+ /* @__PURE__ */ r("tbody", { children: d.map((e, s) => /* @__PURE__ */ r("tr", { children: t.columns.map((n) => /* @__PURE__ */ r("td", { children: w(e[n.key], n) }, n.key)) }, e.id ?? s)) })
92
+ ] })
93
+ ] });
94
+ }
95
+ export {
96
+ P as CustomPaneTab,
97
+ P as default
98
+ };
@@ -1,9 +1,9 @@
1
1
  import { jsxs as r, jsx as a, Fragment as i } from "react/jsx-runtime";
2
2
  import { useState as n, useEffect as N, useCallback as C } from "react";
3
3
  import { timeAgo as P, formatTime as A } from "adonisjs-server-stats/core";
4
- import { a as T } from "./index-CecA4IdQ.js";
4
+ import { a as T } from "./index-CsImORX6.js";
5
5
  import { D as j } from "./DataTable-YyShr5B-.js";
6
- import { F as $ } from "./FilterBar-DQRXpWrb.js";
6
+ import { F as $ } from "./FilterBar-CQ7bD669.js";
7
7
  import { P as F } from "./Pagination-BkmzUDY8.js";
8
8
  function q({ options: d = {} }) {
9
9
  const [y, h] = n(1), [o, g] = n(""), [p, c] = n(null), [u, m] = n(null), { data: v, meta: l, isLoading: x } = T("emails", { ...d, page: y, search: o }), w = v || [];
@@ -0,0 +1,139 @@
1
+ import { jsx as e, jsxs as s } from "react/jsx-runtime";
2
+ import { useState as n, useMemo as f, useCallback as v } from "react";
3
+ import { timeAgo as j, formatTime as k } from "adonisjs-server-stats/core";
4
+ import { u as A } from "./index-CsImORX6.js";
5
+ import { u as P } from "./useResizableTable-CNJmACdt.js";
6
+ import { F as q } from "./FilterBar-CQ7bD669.js";
7
+ function B({ options: d }) {
8
+ const { data: o, isLoading: y, error: u } = A("emails", d), [c, N] = n(""), [g, b] = n(null), [p, h] = n(null), [x, m] = n(!1), a = f(() => {
9
+ const t = o?.emails || [];
10
+ if (!c) return t;
11
+ const l = c.toLowerCase();
12
+ return t.filter(
13
+ (r) => (r.subject || "").toLowerCase().includes(l) || (r.to || "").toLowerCase().includes(l) || (r.from || "").toLowerCase().includes(l) || (r.mailer || "").toLowerCase().includes(l)
14
+ );
15
+ }, [o, c]), i = f(() => a.find((t) => t.id === g), [a, g]), C = v(
16
+ async (t) => {
17
+ if (b(t.id), h(t.html || null), !t.html && t.id) {
18
+ m(!0);
19
+ try {
20
+ const l = d?.debugEndpoint || "/admin/api/debug", r = {};
21
+ d?.authToken && (r.Authorization = `Bearer ${d.authToken}`);
22
+ const w = await fetch(`${l}/emails/${t.id}/preview`, {
23
+ headers: r,
24
+ credentials: d?.authToken ? "omit" : "include"
25
+ });
26
+ w.ok && h(await w.text());
27
+ } catch {
28
+ } finally {
29
+ m(!1);
30
+ }
31
+ }
32
+ },
33
+ [d]
34
+ ), L = v(() => {
35
+ b(null), h(null), m(!1);
36
+ }, []), T = {
37
+ sent: "ss-dbg-email-status-sent",
38
+ sending: "ss-dbg-email-status-sending",
39
+ queueing: "ss-dbg-email-status-queued",
40
+ queued: "ss-dbg-email-status-queued",
41
+ failed: "ss-dbg-email-status-failed"
42
+ }, S = P([a]);
43
+ return y && !o ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading emails..." }) : u ? /* @__PURE__ */ s("div", { className: "ss-dbg-empty", children: [
44
+ "Error: ",
45
+ u.message
46
+ ] }) : i ? /* @__PURE__ */ s("div", { className: "ss-dbg-email-preview", children: [
47
+ /* @__PURE__ */ s("div", { className: "ss-dbg-email-preview-header", children: [
48
+ /* @__PURE__ */ s("div", { className: "ss-dbg-email-preview-meta", children: [
49
+ /* @__PURE__ */ s("div", { children: [
50
+ /* @__PURE__ */ e("strong", { children: "Subject:" }),
51
+ " ",
52
+ i.subject
53
+ ] }),
54
+ /* @__PURE__ */ s("div", { children: [
55
+ /* @__PURE__ */ e("strong", { children: "From:" }),
56
+ " ",
57
+ i.from
58
+ ] }),
59
+ /* @__PURE__ */ s("div", { children: [
60
+ /* @__PURE__ */ e("strong", { children: "To:" }),
61
+ " ",
62
+ i.to
63
+ ] }),
64
+ i.cc && /* @__PURE__ */ s("div", { children: [
65
+ /* @__PURE__ */ e("strong", { children: "CC:" }),
66
+ " ",
67
+ i.cc
68
+ ] })
69
+ ] }),
70
+ /* @__PURE__ */ e("button", { className: "ss-dbg-btn-clear", onClick: L, type: "button", children: "×" })
71
+ ] }),
72
+ x ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading preview..." }) : p ? /* @__PURE__ */ e(
73
+ "iframe",
74
+ {
75
+ className: "ss-dbg-email-iframe",
76
+ srcDoc: p,
77
+ title: "Email preview",
78
+ sandbox: ""
79
+ }
80
+ ) : /* @__PURE__ */ e("div", { style: { padding: "12px", whiteSpace: "pre-wrap" }, children: i.text || "No content" })
81
+ ] }) : /* @__PURE__ */ s("div", { children: [
82
+ /* @__PURE__ */ e(
83
+ q,
84
+ {
85
+ search: c,
86
+ onSearchChange: N,
87
+ placeholder: "Filter emails...",
88
+ summary: `${a.length} emails`
89
+ }
90
+ ),
91
+ a.length === 0 ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "No emails captured" }) : /* @__PURE__ */ s("table", { ref: S, className: "ss-dbg-table", children: [
92
+ /* @__PURE__ */ s("colgroup", { children: [
93
+ /* @__PURE__ */ e("col", { style: { width: "50px" } }),
94
+ /* @__PURE__ */ e("col", { style: { width: "140px" } }),
95
+ /* @__PURE__ */ e("col", { style: { width: "140px" } }),
96
+ /* @__PURE__ */ e("col", {}),
97
+ /* @__PURE__ */ e("col", { style: { width: "70px" } }),
98
+ /* @__PURE__ */ e("col", { style: { width: "80px" } }),
99
+ /* @__PURE__ */ e("col", { style: { width: "40px" } }),
100
+ /* @__PURE__ */ e("col", { style: { width: "80px" } })
101
+ ] }),
102
+ /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ s("tr", { children: [
103
+ /* @__PURE__ */ e("th", { children: "#" }),
104
+ /* @__PURE__ */ e("th", { children: "From" }),
105
+ /* @__PURE__ */ e("th", { children: "To" }),
106
+ /* @__PURE__ */ e("th", { children: "Subject" }),
107
+ /* @__PURE__ */ e("th", { children: "Status" }),
108
+ /* @__PURE__ */ e("th", { children: "Mailer" }),
109
+ /* @__PURE__ */ e("th", { title: "Attachments", children: "📎" }),
110
+ /* @__PURE__ */ e("th", { children: "Time" })
111
+ ] }) }),
112
+ /* @__PURE__ */ e("tbody", { children: a.map((t) => /* @__PURE__ */ s("tr", { className: "ss-dbg-email-row", onClick: () => C(t), children: [
113
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-dim", style: { whiteSpace: "nowrap" }, children: t.id }),
114
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-secondary", title: t.from, children: t.from }),
115
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-secondary", title: t.to, children: t.to }),
116
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-sql", children: t.subject }),
117
+ /* @__PURE__ */ e("td", { children: /* @__PURE__ */ e("span", { className: `ss-dbg-email-status ${T[t.status] || ""}`, children: t.status }) }),
118
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-muted", children: t.mailer }),
119
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-dim", style: { textAlign: "center" }, children: t.attachmentCount > 0 ? t.attachmentCount : "-" }),
120
+ /* @__PURE__ */ e(
121
+ "td",
122
+ {
123
+ className: "ss-dbg-event-time",
124
+ title: k(
125
+ t.timestamp || t.created_at || t.createdAt
126
+ ),
127
+ children: j(
128
+ t.timestamp || t.created_at || t.createdAt
129
+ )
130
+ }
131
+ )
132
+ ] }, t.id)) })
133
+ ] })
134
+ ] });
135
+ }
136
+ export {
137
+ B as EmailsTab,
138
+ B as default
139
+ };
@@ -1,9 +1,9 @@
1
1
  import { jsxs as o, jsx as e, Fragment as g } from "react/jsx-runtime";
2
2
  import { useState as d, useEffect as f } from "react";
3
3
  import { timeAgo as y, formatTime as u } from "adonisjs-server-stats/core";
4
- import { a as b, J as N } from "./index-CecA4IdQ.js";
4
+ import { a as b, J as N } from "./index-CsImORX6.js";
5
5
  import { D as x } from "./DataTable-YyShr5B-.js";
6
- import { F as P } from "./FilterBar-DQRXpWrb.js";
6
+ import { F as P } from "./FilterBar-CQ7bD669.js";
7
7
  import { P as k } from "./Pagination-BkmzUDY8.js";
8
8
  function L({ options: m = {} }) {
9
9
  const [c, i] = d(1), [r, p] = d(""), { data: l, meta: t, isLoading: h } = b("events", { ...m, page: c, search: r }), v = l || [];
@@ -0,0 +1,57 @@
1
+ import { jsx as e, jsxs as s } from "react/jsx-runtime";
2
+ import { useState as u, useMemo as g } from "react";
3
+ import { timeAgo as p, formatTime as b } from "adonisjs-server-stats/core";
4
+ import { u as f, J as v } from "./index-CsImORX6.js";
5
+ import { u as w } from "./useResizableTable-CNJmACdt.js";
6
+ import { F as y } from "./FilterBar-CQ7bD669.js";
7
+ function D({ options: c }) {
8
+ const { data: i, isLoading: o, error: d } = f("events", c), [a, m] = u(""), n = g(() => {
9
+ const t = i?.events || [];
10
+ if (!a) return t;
11
+ const r = a.toLowerCase();
12
+ return t.filter(
13
+ (l) => (l.event || "").toLowerCase().includes(r) || (l.data || "").toLowerCase().includes(r)
14
+ );
15
+ }, [i, a]), h = w([n]);
16
+ return o && !i ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading events..." }) : d ? /* @__PURE__ */ s("div", { className: "ss-dbg-empty", children: [
17
+ "Error: ",
18
+ d.message
19
+ ] }) : /* @__PURE__ */ s("div", { children: [
20
+ /* @__PURE__ */ e(
21
+ y,
22
+ {
23
+ search: a,
24
+ onSearchChange: m,
25
+ placeholder: "Filter events...",
26
+ summary: `${n.length} events`
27
+ }
28
+ ),
29
+ n.length === 0 ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "No events captured" }) : /* @__PURE__ */ s("table", { ref: h, className: "ss-dbg-table", children: [
30
+ /* @__PURE__ */ s("colgroup", { children: [
31
+ /* @__PURE__ */ e("col", { style: { width: "50px" } }),
32
+ /* @__PURE__ */ e("col", { style: { width: "20%" } }),
33
+ /* @__PURE__ */ e("col", {}),
34
+ /* @__PURE__ */ e("col", { style: { width: "80px" } })
35
+ ] }),
36
+ /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ s("tr", { children: [
37
+ /* @__PURE__ */ e("th", { children: "#" }),
38
+ /* @__PURE__ */ e("th", { children: "Event" }),
39
+ /* @__PURE__ */ e("th", { children: "Data" }),
40
+ /* @__PURE__ */ e("th", { children: "Time" })
41
+ ] }) }),
42
+ /* @__PURE__ */ e("tbody", { children: n.map((t) => {
43
+ const r = t.timestamp || t.created_at || t.createdAt;
44
+ return /* @__PURE__ */ s("tr", { children: [
45
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-dim", style: { whiteSpace: "nowrap" }, children: t.id }),
46
+ /* @__PURE__ */ e("td", { className: "ss-dbg-event-name", children: t.event }),
47
+ /* @__PURE__ */ e("td", { className: "ss-dbg-event-data", children: /* @__PURE__ */ e(v, { data: t.data, maxPreviewLength: 80, classPrefix: "ss-dbg" }) }),
48
+ /* @__PURE__ */ e("td", { className: "ss-dbg-event-time", title: b(r), children: p(r) })
49
+ ] }, t.id);
50
+ }) })
51
+ ] })
52
+ ] });
53
+ }
54
+ export {
55
+ D as EventsTab,
56
+ D as default
57
+ };
@@ -1,24 +1,24 @@
1
1
  import { jsxs as l, jsx as s } from "react/jsx-runtime";
2
- import { useCallback as h } from "react";
2
+ import { useCallback as m } from "react";
3
3
  import { TAB_ICONS as o } from "adonisjs-server-stats/core";
4
- function v({
5
- search: r,
4
+ function p({
5
+ search: t,
6
6
  onSearchChange: e,
7
7
  placeholder: i = "Search...",
8
- summary: a,
9
- children: t,
8
+ summary: r,
9
+ children: a,
10
10
  className: n = ""
11
11
  }) {
12
- const c = h(() => {
12
+ const c = m(() => {
13
13
  e("");
14
14
  }, [e]);
15
- return /* @__PURE__ */ l("div", { className: `ss-dash-filter-bar ${n}`, children: [
16
- a != null && /* @__PURE__ */ s("span", { className: "ss-dash-summary", children: a }),
17
- /* @__PURE__ */ l("div", { className: "ss-dash-search-wrapper", children: [
15
+ return /* @__PURE__ */ l("div", { className: `ss-dbg-filter-bar ${n}`, children: [
16
+ r != null && /* @__PURE__ */ s("span", { className: "ss-dbg-summary", children: r }),
17
+ /* @__PURE__ */ l("div", { className: "ss-dbg-search-wrapper", children: [
18
18
  /* @__PURE__ */ s(
19
19
  "svg",
20
20
  {
21
- className: "ss-dash-search-icon",
21
+ className: "ss-dbg-search-icon",
22
22
  width: "14",
23
23
  height: "14",
24
24
  viewBox: o.search.viewBox,
@@ -34,17 +34,17 @@ function v({
34
34
  "input",
35
35
  {
36
36
  type: "text",
37
- className: "ss-dash-search",
37
+ className: "ss-dbg-search",
38
38
  placeholder: i,
39
- value: r,
39
+ value: t,
40
40
  onChange: (d) => e(d.target.value)
41
41
  }
42
42
  ),
43
- r && /* @__PURE__ */ s("button", { type: "button", className: "ss-dash-search-clear", onClick: c, children: "×" })
43
+ t && /* @__PURE__ */ s("button", { type: "button", className: "ss-dbg-search-clear", onClick: c, children: "×" })
44
44
  ] }),
45
- t && /* @__PURE__ */ s("div", { className: "ss-dash-filter-controls", children: t })
45
+ a && /* @__PURE__ */ s("div", { className: "ss-dbg-filter-controls", children: a })
46
46
  ] });
47
47
  }
48
48
  export {
49
- v as F
49
+ p as F
50
50
  };
@@ -1,9 +1,9 @@
1
1
  import { jsxs as l, jsx as a, Fragment as C } from "react/jsx-runtime";
2
2
  import { useState as c, useCallback as D } from "react";
3
3
  import { extractJobs as F, extractJobStats as J, JOB_STATUS_FILTERS as T, getJobStatusBadgeColor as A, formatDuration as B, timeAgo as _, formatTime as L } from "adonisjs-server-stats/core";
4
- import { a as R, B as $, J as M } from "./index-CecA4IdQ.js";
4
+ import { a as R, B as $, J as M } from "./index-CsImORX6.js";
5
5
  import { D as O } from "./DataTable-YyShr5B-.js";
6
- import { F as U } from "./FilterBar-DQRXpWrb.js";
6
+ import { F as U } from "./FilterBar-CQ7bD669.js";
7
7
  import { P as E } from "./Pagination-BkmzUDY8.js";
8
8
  function H({ options: N = {} }) {
9
9
  const [v, m] = c(1), [p, j] = c(""), [o, f] = c("all"), [x, d] = c(