@marinoscar/platform-web 0.1.0-next.18 → 0.1.0-next.20

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 (256) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +5 -3
  3. package/dist/ai/headless/errors.d.ts +7 -0
  4. package/dist/ai/headless/errors.d.ts.map +1 -1
  5. package/dist/ai/headless/errors.js +2 -0
  6. package/dist/ai/headless/errors.js.map +1 -1
  7. package/dist/ai/headless/types.d.ts +30 -5
  8. package/dist/ai/headless/types.d.ts.map +1 -1
  9. package/dist/ai/headless/types.js +22 -10
  10. package/dist/ai/headless/types.js.map +1 -1
  11. package/dist/ai/headless/use-ai-usage.d.ts +5 -2
  12. package/dist/ai/headless/use-ai-usage.d.ts.map +1 -1
  13. package/dist/ai/headless/use-ai-usage.js +15 -5
  14. package/dist/ai/headless/use-ai-usage.js.map +1 -1
  15. package/dist/ai/ui/AiUsagePage.d.ts.map +1 -1
  16. package/dist/ai/ui/AiUsagePage.js +7 -5
  17. package/dist/ai/ui/AiUsagePage.js.map +1 -1
  18. package/dist/ai/ui/shared/AiErrorAlert.d.ts.map +1 -1
  19. package/dist/ai/ui/shared/AiErrorAlert.js +5 -1
  20. package/dist/ai/ui/shared/AiErrorAlert.js.map +1 -1
  21. package/dist/ai/ui/usage/aiUsageFormat.d.ts +9 -6
  22. package/dist/ai/ui/usage/aiUsageFormat.d.ts.map +1 -1
  23. package/dist/ai/ui/usage/aiUsageFormat.js +28 -12
  24. package/dist/ai/ui/usage/aiUsageFormat.js.map +1 -1
  25. package/dist/ai/ui/user/MyAiUsageSection.d.ts.map +1 -1
  26. package/dist/ai/ui/user/MyAiUsageSection.js +5 -2
  27. package/dist/ai/ui/user/MyAiUsageSection.js.map +1 -1
  28. package/dist/ai/ui/user/aiErrorText.d.ts +4 -1
  29. package/dist/ai/ui/user/aiErrorText.d.ts.map +1 -1
  30. package/dist/ai/ui/user/aiErrorText.js +10 -2
  31. package/dist/ai/ui/user/aiErrorText.js.map +1 -1
  32. package/dist/alerts/headless/client.d.ts +134 -0
  33. package/dist/alerts/headless/client.d.ts.map +1 -0
  34. package/dist/alerts/headless/client.js +105 -0
  35. package/dist/alerts/headless/client.js.map +1 -0
  36. package/dist/alerts/headless/format.d.ts +95 -0
  37. package/dist/alerts/headless/format.d.ts.map +1 -0
  38. package/dist/alerts/headless/format.js +164 -0
  39. package/dist/alerts/headless/format.js.map +1 -0
  40. package/dist/alerts/headless/hooks.d.ts +245 -0
  41. package/dist/alerts/headless/hooks.d.ts.map +1 -0
  42. package/dist/alerts/headless/hooks.js +315 -0
  43. package/dist/alerts/headless/hooks.js.map +1 -0
  44. package/dist/alerts/headless/index.d.ts +9 -0
  45. package/dist/alerts/headless/index.d.ts.map +1 -0
  46. package/dist/alerts/headless/index.js +9 -0
  47. package/dist/alerts/headless/index.js.map +1 -0
  48. package/dist/alerts/headless/rule-draft.d.ts +175 -0
  49. package/dist/alerts/headless/rule-draft.d.ts.map +1 -0
  50. package/dist/alerts/headless/rule-draft.js +261 -0
  51. package/dist/alerts/headless/rule-draft.js.map +1 -0
  52. package/dist/alerts/ui/AlertIncidentDrawer.d.ts +30 -0
  53. package/dist/alerts/ui/AlertIncidentDrawer.d.ts.map +1 -0
  54. package/dist/alerts/ui/AlertIncidentDrawer.js +33 -0
  55. package/dist/alerts/ui/AlertIncidentDrawer.js.map +1 -0
  56. package/dist/alerts/ui/AlertRuleDialog.d.ts +47 -0
  57. package/dist/alerts/ui/AlertRuleDialog.d.ts.map +1 -0
  58. package/dist/alerts/ui/AlertRuleDialog.js +124 -0
  59. package/dist/alerts/ui/AlertRuleDialog.js.map +1 -0
  60. package/dist/alerts/ui/AlertRuleTestResult.d.ts +23 -0
  61. package/dist/alerts/ui/AlertRuleTestResult.d.ts.map +1 -0
  62. package/dist/alerts/ui/AlertRuleTestResult.js +30 -0
  63. package/dist/alerts/ui/AlertRuleTestResult.js.map +1 -0
  64. package/dist/alerts/ui/AlertsPage.d.ts +41 -0
  65. package/dist/alerts/ui/AlertsPage.d.ts.map +1 -0
  66. package/dist/alerts/ui/AlertsPage.js +238 -0
  67. package/dist/alerts/ui/AlertsPage.js.map +1 -0
  68. package/dist/alerts/ui/FiringAlertsBanner.d.ts +28 -0
  69. package/dist/alerts/ui/FiringAlertsBanner.d.ts.map +1 -0
  70. package/dist/alerts/ui/FiringAlertsBanner.js +45 -0
  71. package/dist/alerts/ui/FiringAlertsBanner.js.map +1 -0
  72. package/dist/alerts/ui/copy.d.ts +15 -0
  73. package/dist/alerts/ui/copy.d.ts.map +1 -0
  74. package/dist/alerts/ui/copy.js +14 -0
  75. package/dist/alerts/ui/copy.js.map +1 -0
  76. package/dist/alerts/ui/index.d.ts +14 -0
  77. package/dist/alerts/ui/index.d.ts.map +1 -0
  78. package/dist/alerts/ui/index.js +12 -0
  79. package/dist/alerts/ui/index.js.map +1 -0
  80. package/dist/alerts/ui/parts.d.ts +26 -0
  81. package/dist/alerts/ui/parts.d.ts.map +1 -0
  82. package/dist/alerts/ui/parts.js +27 -0
  83. package/dist/alerts/ui/parts.js.map +1 -0
  84. package/dist/alerts/ui/settings.d.ts +27 -0
  85. package/dist/alerts/ui/settings.d.ts.map +1 -0
  86. package/dist/alerts/ui/settings.js +37 -0
  87. package/dist/alerts/ui/settings.js.map +1 -0
  88. package/dist/core/http/client.d.ts.map +1 -1
  89. package/dist/core/http/client.js +7 -0
  90. package/dist/core/http/client.js.map +1 -1
  91. package/dist/core/http/sse.d.ts.map +1 -1
  92. package/dist/core/http/sse.js +3 -1
  93. package/dist/core/http/sse.js.map +1 -1
  94. package/dist/core/index.d.ts +1 -0
  95. package/dist/core/index.d.ts.map +1 -1
  96. package/dist/core/index.js +1 -0
  97. package/dist/core/index.js.map +1 -1
  98. package/dist/core/time-zone/format.d.ts +6 -2
  99. package/dist/core/time-zone/format.d.ts.map +1 -1
  100. package/dist/core/time-zone/format.js +27 -25
  101. package/dist/core/time-zone/format.js.map +1 -1
  102. package/dist/core/time-zone/request.d.ts +17 -0
  103. package/dist/core/time-zone/request.d.ts.map +1 -0
  104. package/dist/core/time-zone/request.js +26 -0
  105. package/dist/core/time-zone/request.js.map +1 -0
  106. package/dist/datatable/headless/export/exportModel.d.ts +7 -1
  107. package/dist/datatable/headless/export/exportModel.d.ts.map +1 -1
  108. package/dist/datatable/headless/export/exportModel.js +10 -2
  109. package/dist/datatable/headless/export/exportModel.js.map +1 -1
  110. package/dist/datatable/headless/filter/dateRange.d.ts +40 -0
  111. package/dist/datatable/headless/filter/dateRange.d.ts.map +1 -0
  112. package/dist/datatable/headless/filter/dateRange.js +53 -0
  113. package/dist/datatable/headless/filter/dateRange.js.map +1 -0
  114. package/dist/datatable/headless/filter/filterTypes.d.ts.map +1 -1
  115. package/dist/datatable/headless/filter/filterTypes.js +24 -4
  116. package/dist/datatable/headless/filter/filterTypes.js.map +1 -1
  117. package/dist/datatable/headless/index.d.ts +2 -0
  118. package/dist/datatable/headless/index.d.ts.map +1 -1
  119. package/dist/datatable/headless/index.js +1 -0
  120. package/dist/datatable/headless/index.js.map +1 -1
  121. package/dist/db-backup/internal/time-zones.d.ts +3 -0
  122. package/dist/db-backup/internal/time-zones.d.ts.map +1 -0
  123. package/dist/db-backup/internal/time-zones.js +24 -0
  124. package/dist/db-backup/internal/time-zones.js.map +1 -0
  125. package/dist/db-backup/ui/DbBackupConfigPanel.d.ts +11 -6
  126. package/dist/db-backup/ui/DbBackupConfigPanel.d.ts.map +1 -1
  127. package/dist/db-backup/ui/DbBackupConfigPanel.js +18 -11
  128. package/dist/db-backup/ui/DbBackupConfigPanel.js.map +1 -1
  129. package/dist/identity/ui/tokens/CreatePatDialog.d.ts +17 -0
  130. package/dist/identity/ui/tokens/CreatePatDialog.d.ts.map +1 -1
  131. package/dist/identity/ui/tokens/CreatePatDialog.js +34 -11
  132. package/dist/identity/ui/tokens/CreatePatDialog.js.map +1 -1
  133. package/dist/nodes/headless/api.d.ts +3 -1
  134. package/dist/nodes/headless/api.d.ts.map +1 -1
  135. package/dist/nodes/headless/api.js +22 -0
  136. package/dist/nodes/headless/api.js.map +1 -1
  137. package/dist/nodes/headless/index.d.ts +7 -2
  138. package/dist/nodes/headless/index.d.ts.map +1 -1
  139. package/dist/nodes/headless/index.js +4 -1
  140. package/dist/nodes/headless/index.js.map +1 -1
  141. package/dist/nodes/headless/node-events.d.ts +43 -0
  142. package/dist/nodes/headless/node-events.d.ts.map +1 -0
  143. package/dist/nodes/headless/node-events.js +150 -0
  144. package/dist/nodes/headless/node-events.js.map +1 -0
  145. package/dist/nodes/headless/power.d.ts +43 -0
  146. package/dist/nodes/headless/power.d.ts.map +1 -0
  147. package/dist/nodes/headless/power.js +74 -0
  148. package/dist/nodes/headless/power.js.map +1 -0
  149. package/dist/nodes/headless/types.d.ts +40 -3
  150. package/dist/nodes/headless/types.d.ts.map +1 -1
  151. package/dist/nodes/headless/types.js +1 -1
  152. package/dist/nodes/headless/types.js.map +1 -1
  153. package/dist/nodes/headless/use-node-events.d.ts +59 -0
  154. package/dist/nodes/headless/use-node-events.d.ts.map +1 -0
  155. package/dist/nodes/headless/use-node-events.js +159 -0
  156. package/dist/nodes/headless/use-node-events.js.map +1 -0
  157. package/dist/nodes/ui/NodeEventsTimeline.d.ts +39 -0
  158. package/dist/nodes/ui/NodeEventsTimeline.d.ts.map +1 -0
  159. package/dist/nodes/ui/NodeEventsTimeline.js +63 -0
  160. package/dist/nodes/ui/NodeEventsTimeline.js.map +1 -0
  161. package/dist/nodes/ui/NodePowerBadge.d.ts +27 -0
  162. package/dist/nodes/ui/NodePowerBadge.d.ts.map +1 -0
  163. package/dist/nodes/ui/NodePowerBadge.js +48 -0
  164. package/dist/nodes/ui/NodePowerBadge.js.map +1 -0
  165. package/dist/nodes/ui/NodeVitalsDialog.d.ts +11 -1
  166. package/dist/nodes/ui/NodeVitalsDialog.d.ts.map +1 -1
  167. package/dist/nodes/ui/NodeVitalsDialog.js +14 -5
  168. package/dist/nodes/ui/NodeVitalsDialog.js.map +1 -1
  169. package/dist/nodes/ui/WorkersPage.d.ts.map +1 -1
  170. package/dist/nodes/ui/WorkersPage.js +2 -1
  171. package/dist/nodes/ui/WorkersPage.js.map +1 -1
  172. package/dist/nodes/ui/workerVitals.d.ts +17 -1
  173. package/dist/nodes/ui/workerVitals.d.ts.map +1 -1
  174. package/dist/nodes/ui/workerVitals.js +43 -0
  175. package/dist/nodes/ui/workerVitals.js.map +1 -1
  176. package/dist/nodes/ui/workersTable.d.ts.map +1 -1
  177. package/dist/nodes/ui/workersTable.js +2 -1
  178. package/dist/nodes/ui/workersTable.js.map +1 -1
  179. package/dist/settings/ui/ProfileSettings.d.ts +1 -1
  180. package/dist/settings/ui/ProfileSettings.d.ts.map +1 -1
  181. package/dist/settings/ui/UserSettingsSection.d.ts +1 -1
  182. package/dist/settings/ui/UserSettingsSection.d.ts.map +1 -1
  183. package/dist/sharing/internal/format.d.ts +10 -1
  184. package/dist/sharing/internal/format.d.ts.map +1 -1
  185. package/dist/sharing/internal/format.js +10 -1
  186. package/dist/sharing/internal/format.js.map +1 -1
  187. package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts +1 -1
  188. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts +11 -0
  189. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts.map +1 -1
  190. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js +17 -2
  191. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js.map +1 -1
  192. package/dist/webhooks/headless/client.d.ts +101 -0
  193. package/dist/webhooks/headless/client.d.ts.map +1 -0
  194. package/dist/webhooks/headless/client.js +105 -0
  195. package/dist/webhooks/headless/client.js.map +1 -0
  196. package/dist/webhooks/headless/event-selection.d.ts +119 -0
  197. package/dist/webhooks/headless/event-selection.d.ts.map +1 -0
  198. package/dist/webhooks/headless/event-selection.js +225 -0
  199. package/dist/webhooks/headless/event-selection.js.map +1 -0
  200. package/dist/webhooks/headless/format.d.ts +84 -0
  201. package/dist/webhooks/headless/format.d.ts.map +1 -0
  202. package/dist/webhooks/headless/format.js +142 -0
  203. package/dist/webhooks/headless/format.js.map +1 -0
  204. package/dist/webhooks/headless/hooks.d.ts +199 -0
  205. package/dist/webhooks/headless/hooks.d.ts.map +1 -0
  206. package/dist/webhooks/headless/hooks.js +249 -0
  207. package/dist/webhooks/headless/hooks.js.map +1 -0
  208. package/dist/webhooks/headless/index.d.ts +9 -0
  209. package/dist/webhooks/headless/index.d.ts.map +1 -0
  210. package/dist/webhooks/headless/index.js +9 -0
  211. package/dist/webhooks/headless/index.js.map +1 -0
  212. package/dist/webhooks/ui/WebhookDeliveryDrawer.d.ts +32 -0
  213. package/dist/webhooks/ui/WebhookDeliveryDrawer.d.ts.map +1 -0
  214. package/dist/webhooks/ui/WebhookDeliveryDrawer.js +64 -0
  215. package/dist/webhooks/ui/WebhookDeliveryDrawer.js.map +1 -0
  216. package/dist/webhooks/ui/WebhookEndpointDetail.d.ts +21 -0
  217. package/dist/webhooks/ui/WebhookEndpointDetail.d.ts.map +1 -0
  218. package/dist/webhooks/ui/WebhookEndpointDetail.js +96 -0
  219. package/dist/webhooks/ui/WebhookEndpointDetail.js.map +1 -0
  220. package/dist/webhooks/ui/WebhookEndpointDialog.d.ts +39 -0
  221. package/dist/webhooks/ui/WebhookEndpointDialog.d.ts.map +1 -0
  222. package/dist/webhooks/ui/WebhookEndpointDialog.js +79 -0
  223. package/dist/webhooks/ui/WebhookEndpointDialog.js.map +1 -0
  224. package/dist/webhooks/ui/WebhookEventPicker.d.ts +30 -0
  225. package/dist/webhooks/ui/WebhookEventPicker.d.ts.map +1 -0
  226. package/dist/webhooks/ui/WebhookEventPicker.js +33 -0
  227. package/dist/webhooks/ui/WebhookEventPicker.js.map +1 -0
  228. package/dist/webhooks/ui/WebhookSecretDialog.d.ts +27 -0
  229. package/dist/webhooks/ui/WebhookSecretDialog.d.ts.map +1 -0
  230. package/dist/webhooks/ui/WebhookSecretDialog.js +52 -0
  231. package/dist/webhooks/ui/WebhookSecretDialog.js.map +1 -0
  232. package/dist/webhooks/ui/WebhookSignatureHelp.d.ts +18 -0
  233. package/dist/webhooks/ui/WebhookSignatureHelp.d.ts.map +1 -0
  234. package/dist/webhooks/ui/WebhookSignatureHelp.js +40 -0
  235. package/dist/webhooks/ui/WebhookSignatureHelp.js.map +1 -0
  236. package/dist/webhooks/ui/WebhooksPage.d.ts +47 -0
  237. package/dist/webhooks/ui/WebhooksPage.d.ts.map +1 -0
  238. package/dist/webhooks/ui/WebhooksPage.js +172 -0
  239. package/dist/webhooks/ui/WebhooksPage.js.map +1 -0
  240. package/dist/webhooks/ui/copy.d.ts +24 -0
  241. package/dist/webhooks/ui/copy.d.ts.map +1 -0
  242. package/dist/webhooks/ui/copy.js +34 -0
  243. package/dist/webhooks/ui/copy.js.map +1 -0
  244. package/dist/webhooks/ui/index.d.ts +15 -0
  245. package/dist/webhooks/ui/index.d.ts.map +1 -0
  246. package/dist/webhooks/ui/index.js +12 -0
  247. package/dist/webhooks/ui/index.js.map +1 -0
  248. package/dist/webhooks/ui/parts.d.ts +25 -0
  249. package/dist/webhooks/ui/parts.d.ts.map +1 -0
  250. package/dist/webhooks/ui/parts.js +28 -0
  251. package/dist/webhooks/ui/parts.js.map +1 -0
  252. package/dist/webhooks/ui/settings.d.ts +58 -0
  253. package/dist/webhooks/ui/settings.d.ts.map +1 -0
  254. package/dist/webhooks/ui/settings.js +79 -0
  255. package/dist/webhooks/ui/settings.js.map +1 -0
  256. package/package.json +18 -2
@@ -0,0 +1,164 @@
1
+ // =============================================================================
2
+ // Alerts in words (issue #1047): labels for severities, states, comparators,
3
+ // aggregations and kinds, and the summary's totals. Pure; no React.
4
+ // =============================================================================
5
+ import { ALERT_KIND_IDS } from '@marinoscar/platform-contract/alerts';
6
+ /**
7
+ * Each severity in words.
8
+ *
9
+ * @stability experimental
10
+ */
11
+ export const ALERT_SEVERITY_LABELS = Object.freeze({
12
+ critical: 'Critical',
13
+ warning: 'Warning',
14
+ info: 'Info',
15
+ });
16
+ /**
17
+ * The tone of each severity.
18
+ *
19
+ * @stability experimental
20
+ */
21
+ export const ALERT_SEVERITY_TONES = Object.freeze({
22
+ critical: 'error',
23
+ warning: 'warning',
24
+ info: 'info',
25
+ });
26
+ /**
27
+ * Each incident state in words.
28
+ *
29
+ * @stability experimental
30
+ */
31
+ export const ALERT_STATE_LABELS = Object.freeze({
32
+ pending: 'Pending',
33
+ firing: 'Firing',
34
+ resolved: 'Resolved',
35
+ });
36
+ /**
37
+ * The tone of each incident state.
38
+ *
39
+ * @stability experimental
40
+ */
41
+ export const ALERT_STATE_TONES = Object.freeze({
42
+ pending: 'warning',
43
+ firing: 'error',
44
+ resolved: 'success',
45
+ });
46
+ /**
47
+ * Each comparator in words and as a symbol.
48
+ *
49
+ * @stability experimental
50
+ */
51
+ export const ALERT_COMPARATOR_LABELS = Object.freeze({
52
+ gt: 'greater than (>)',
53
+ gte: 'at least (≥)',
54
+ lt: 'less than (<)',
55
+ lte: 'at most (≤)',
56
+ eq: 'equal to (=)',
57
+ neq: 'not equal to (≠)',
58
+ });
59
+ /**
60
+ * Each aggregation in words.
61
+ *
62
+ * @stability experimental
63
+ */
64
+ export const ALERT_AGGREGATION_LABELS = Object.freeze({
65
+ avg: 'Average',
66
+ max: 'Maximum',
67
+ min: 'Minimum',
68
+ sum: 'Sum',
69
+ last: 'Last value',
70
+ rate: 'Rate per minute',
71
+ });
72
+ const BUILTIN_KIND_LABELS = Object.freeze({
73
+ [ALERT_KIND_IDS.METRIC_THRESHOLD]: 'Metric threshold',
74
+ [ALERT_KIND_IDS.NODE_EVENT]: 'Node event',
75
+ [ALERT_KIND_IDS.VERDICT]: 'Dashboard verdict',
76
+ [ALERT_KIND_IDS.NODE_OFFLINE]: 'Node offline',
77
+ [ALERT_KIND_IDS.TELEMETRY_UNAVAILABLE]: 'Telemetry unavailable',
78
+ });
79
+ /**
80
+ * A kind id in words: the label `GET /kinds` gave, else the built-in label,
81
+ * else the id itself.
82
+ *
83
+ * @param kind - the kind id.
84
+ * @param kinds - the registered kinds, when loaded.
85
+ * @returns the label.
86
+ *
87
+ * @stability experimental
88
+ */
89
+ export function alertKindLabel(kind, kinds = []) {
90
+ return kinds.find((entry) => entry.id === kind)?.label ?? BUILTIN_KIND_LABELS[kind] ?? kind;
91
+ }
92
+ /**
93
+ * The firing count of a summary, in total.
94
+ *
95
+ * @param summary - `GET /admin/alerts/summary`.
96
+ * @returns critical + warning + info.
97
+ *
98
+ * @stability experimental
99
+ */
100
+ export function alertFiringTotal(summary) {
101
+ if (!summary)
102
+ return 0;
103
+ return summary.firing.critical + summary.firing.warning + summary.firing.info;
104
+ }
105
+ /**
106
+ * The most serious severity that has a firing incident, or `null`.
107
+ *
108
+ * @param summary - `GET /admin/alerts/summary`.
109
+ * @returns the severity.
110
+ *
111
+ * @stability experimental
112
+ */
113
+ export function alertTopSeverity(summary) {
114
+ if (!summary)
115
+ return null;
116
+ if (summary.firing.critical > 0)
117
+ return 'critical';
118
+ if (summary.firing.warning > 0)
119
+ return 'warning';
120
+ if (summary.firing.info > 0)
121
+ return 'info';
122
+ return null;
123
+ }
124
+ /**
125
+ * An incident's labels as `key=value` text, in key order; `''` for none.
126
+ *
127
+ * @param labels - the labels.
128
+ * @returns the text.
129
+ *
130
+ * @stability experimental
131
+ */
132
+ export function formatAlertLabels(labels) {
133
+ return Object.keys(labels)
134
+ .sort()
135
+ .map((key) => `${key}=${labels[key]}`)
136
+ .join(', ');
137
+ }
138
+ /**
139
+ * A duration in seconds as short words (`90` is `1 min 30 s`, `3600` is `1 h`).
140
+ *
141
+ * @param seconds - whole seconds.
142
+ * @returns the text.
143
+ *
144
+ * @stability experimental
145
+ */
146
+ export function formatAlertSeconds(seconds) {
147
+ if (seconds <= 0)
148
+ return '0 s';
149
+ const parts = [];
150
+ const days = Math.floor(seconds / 86_400);
151
+ const hours = Math.floor((seconds % 86_400) / 3600);
152
+ const minutes = Math.floor((seconds % 3600) / 60);
153
+ const rest = seconds % 60;
154
+ if (days)
155
+ parts.push(`${days} d`);
156
+ if (hours)
157
+ parts.push(`${hours} h`);
158
+ if (minutes)
159
+ parts.push(`${minutes} min`);
160
+ if (rest)
161
+ parts.push(`${rest} s`);
162
+ return parts.join(' ');
163
+ }
164
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/alerts/headless/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ import type { AlertIncident, AlertKind, AlertRule, AlertRuleTestResponse, AlertSummary, CreateAlertRule, UpdateAlertRule } from '@marinoscar/platform-contract/alerts';
2
+ import { type AlertIncidentsQuery, type AlertMetricCatalogEntry, type AlertRulesQuery, type AlertsApi } from './client.js';
3
+ /**
4
+ * An alerts API failure in words: the refusal code's sentence (`code` or
5
+ * `details.reason`), else the API's message, else `fallback`.
6
+ *
7
+ * @param error - what the call rejected with.
8
+ * @param fallback - the sentence when nothing better is known.
9
+ * @returns the message.
10
+ *
11
+ * @stability experimental
12
+ */
13
+ export declare function alertErrorMessage(error: unknown, fallback: string): string;
14
+ /**
15
+ * The alerts client over the host's transport, memoised.
16
+ *
17
+ * @returns the client.
18
+ *
19
+ * @stability experimental
20
+ */
21
+ export declare function useAlertsApi(): AlertsApi;
22
+ /**
23
+ * What {@link useAlertRules} returns.
24
+ *
25
+ * @stability experimental
26
+ */
27
+ export interface AlertRulesState {
28
+ /** The rules, in the API's order. */
29
+ rules: AlertRule[];
30
+ /** Whether a load is in flight. */
31
+ isLoading: boolean;
32
+ /** A load failure, in words. */
33
+ error: string | null;
34
+ /** Reloads now. */
35
+ refresh: () => Promise<void>;
36
+ }
37
+ /**
38
+ * The rules (`GET /admin/alerts/rules`), reloaded when a filter changes.
39
+ *
40
+ * @param query - optional filters.
41
+ * @returns the rules and the load state.
42
+ *
43
+ * @extensionPoint hook
44
+ * @stability experimental
45
+ */
46
+ export declare function useAlertRules(query?: AlertRulesQuery): AlertRulesState;
47
+ /**
48
+ * What {@link useAlertRule} returns.
49
+ *
50
+ * @stability experimental
51
+ */
52
+ export interface AlertRuleState {
53
+ /** The rule, once loaded. */
54
+ rule: AlertRule | null;
55
+ /** Whether a load is in flight. */
56
+ isLoading: boolean;
57
+ /** A load failure, in words. */
58
+ error: string | null;
59
+ /** Reloads now. */
60
+ refresh: () => Promise<void>;
61
+ }
62
+ /**
63
+ * One rule (`GET /admin/alerts/rules/:id`).
64
+ *
65
+ * @param id - the rule id, or `null` for none.
66
+ * @returns the rule and the load state.
67
+ *
68
+ * @extensionPoint hook
69
+ * @stability experimental
70
+ */
71
+ export declare function useAlertRule(id: string | null): AlertRuleState;
72
+ /**
73
+ * What {@link useAlertKinds} returns.
74
+ *
75
+ * @stability experimental
76
+ */
77
+ export interface AlertKindsState {
78
+ /** The registered kinds. */
79
+ kinds: AlertKind[];
80
+ /** Whether the load is in flight. */
81
+ isLoading: boolean;
82
+ /** A load failure, in words. */
83
+ error: string | null;
84
+ }
85
+ /**
86
+ * The registered rule kinds (`GET /admin/alerts/kinds`).
87
+ *
88
+ * @param options - `enabled: false` skips the request.
89
+ * @returns the kinds and the load state.
90
+ *
91
+ * @extensionPoint hook
92
+ * @stability experimental
93
+ */
94
+ export declare function useAlertKinds(options?: {
95
+ enabled?: boolean;
96
+ }): AlertKindsState;
97
+ /**
98
+ * What {@link useAlertIncidents} returns.
99
+ *
100
+ * @stability experimental
101
+ */
102
+ export interface AlertIncidentsState {
103
+ /** The page of incidents. */
104
+ incidents: AlertIncident[];
105
+ /** Incidents matching the filters, across every page. */
106
+ total: number;
107
+ /** Pages at the requested page size. */
108
+ totalPages: number;
109
+ /** Whether a load is in flight. */
110
+ isLoading: boolean;
111
+ /** A load failure, in words. */
112
+ error: string | null;
113
+ /** Reloads the current page now. */
114
+ refresh: () => Promise<void>;
115
+ }
116
+ /**
117
+ * One page of incidents (`GET /admin/alerts/incidents`), reloaded when the
118
+ * page or a filter changes.
119
+ *
120
+ * @param query - the one-based page, the page size and the filters.
121
+ * @returns the page and the load state.
122
+ *
123
+ * @extensionPoint hook
124
+ * @stability experimental
125
+ */
126
+ export declare function useAlertIncidents(query?: AlertIncidentsQuery): AlertIncidentsState;
127
+ /**
128
+ * What {@link useAlertIncident} returns.
129
+ *
130
+ * @stability experimental
131
+ */
132
+ export interface AlertIncidentState {
133
+ /** The incident, once loaded. */
134
+ incident: AlertIncident | null;
135
+ /** Whether a load is in flight. */
136
+ isLoading: boolean;
137
+ /** A load failure, in words. */
138
+ error: string | null;
139
+ /** Reloads now. */
140
+ refresh: () => Promise<void>;
141
+ }
142
+ /**
143
+ * One incident (`GET /admin/alerts/incidents/:id`).
144
+ *
145
+ * @param id - the incident id, or `null` for none.
146
+ * @returns the incident and the load state.
147
+ *
148
+ * @extensionPoint hook
149
+ * @stability experimental
150
+ */
151
+ export declare function useAlertIncident(id: string | null): AlertIncidentState;
152
+ /**
153
+ * What {@link useAlertSummary} returns.
154
+ *
155
+ * @stability experimental
156
+ */
157
+ export interface AlertSummaryState {
158
+ /** The firing counts, once loaded. */
159
+ summary: AlertSummary | null;
160
+ /** Whether a load is in flight. */
161
+ isLoading: boolean;
162
+ /** A load failure, in words. */
163
+ error: string | null;
164
+ /** Reloads now. */
165
+ refresh: () => Promise<void>;
166
+ }
167
+ /**
168
+ * The firing summary (`GET /admin/alerts/summary`), polled every 30 seconds
169
+ * while the tab is visible.
170
+ *
171
+ * @param options - `enabled: false` skips the request (a viewer without
172
+ * `alerts:read`); `intervalMs` changes the poll (0 turns it off).
173
+ * @returns the summary and the load state.
174
+ *
175
+ * @extensionPoint hook
176
+ * @stability experimental
177
+ */
178
+ export declare function useAlertSummary(options?: {
179
+ enabled?: boolean;
180
+ intervalMs?: number;
181
+ }): AlertSummaryState;
182
+ /**
183
+ * What {@link useAlertMetricCatalog} returns.
184
+ *
185
+ * @stability experimental
186
+ */
187
+ export interface AlertMetricCatalogState {
188
+ /** The metric tables and their attributes. */
189
+ metrics: AlertMetricCatalogEntry[];
190
+ /** Whether the load is in flight. */
191
+ isLoading: boolean;
192
+ /**
193
+ * A load failure, in words (telemetry off, store unreachable, or no
194
+ * `telemetry:query`). The picker then takes a typed name instead.
195
+ */
196
+ error: string | null;
197
+ }
198
+ /**
199
+ * The metrics the rule editor offers (`GET /admin/telemetry/schema`).
200
+ *
201
+ * @param options - `enabled: false` skips the request.
202
+ * @returns the metrics and the load state.
203
+ *
204
+ * @extensionPoint hook
205
+ * @stability experimental
206
+ */
207
+ export declare function useAlertMetricCatalog(options?: {
208
+ enabled?: boolean;
209
+ }): AlertMetricCatalogState;
210
+ /**
211
+ * What {@link useAlertMutations} returns. Each action resolves with the API's
212
+ * answer, or `null` (`false`) when it refused (see `error`).
213
+ *
214
+ * @stability experimental
215
+ */
216
+ export interface AlertMutations {
217
+ /** `POST /admin/alerts/rules`. */
218
+ create: (input: CreateAlertRule) => Promise<AlertRule | null>;
219
+ /** `PATCH /admin/alerts/rules/:id`. */
220
+ update: (id: string, patch: UpdateAlertRule) => Promise<AlertRule | null>;
221
+ /** `PATCH /admin/alerts/rules/:id` with `{ enabled }`. */
222
+ toggle: (id: string, enabled: boolean) => Promise<AlertRule | null>;
223
+ /** `DELETE /admin/alerts/rules/:id`; resolves `true` on success. */
224
+ remove: (id: string) => Promise<boolean>;
225
+ /** `POST /admin/alerts/rules/:id/test`: the dry run's observations. */
226
+ test: (id: string) => Promise<AlertRuleTestResponse | null>;
227
+ /** `POST /admin/alerts/incidents/:id/acknowledge`. */
228
+ acknowledge: (id: string) => Promise<AlertIncident | null>;
229
+ /** Whether a write is in flight. */
230
+ pending: boolean;
231
+ /** The last refusal, in words. */
232
+ error: string | null;
233
+ /** Clears `error`. */
234
+ reset: () => void;
235
+ }
236
+ /**
237
+ * The alerts writes, with one shared pending flag and error.
238
+ *
239
+ * @returns the actions and their state.
240
+ *
241
+ * @extensionPoint hook
242
+ * @stability experimental
243
+ */
244
+ export declare function useAlertMutations(): AlertMutations;
245
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/alerts/headless/hooks.ts"],"names":[],"mappings":"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"}