@marinoscar/platform-web 0.1.0-next.19 → 0.1.0-next.21

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 (174) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +5 -3
  3. package/dist/alerts/headless/client.d.ts +134 -0
  4. package/dist/alerts/headless/client.d.ts.map +1 -0
  5. package/dist/alerts/headless/client.js +105 -0
  6. package/dist/alerts/headless/client.js.map +1 -0
  7. package/dist/alerts/headless/format.d.ts +95 -0
  8. package/dist/alerts/headless/format.d.ts.map +1 -0
  9. package/dist/alerts/headless/format.js +164 -0
  10. package/dist/alerts/headless/format.js.map +1 -0
  11. package/dist/alerts/headless/hooks.d.ts +245 -0
  12. package/dist/alerts/headless/hooks.d.ts.map +1 -0
  13. package/dist/alerts/headless/hooks.js +315 -0
  14. package/dist/alerts/headless/hooks.js.map +1 -0
  15. package/dist/alerts/headless/index.d.ts +9 -0
  16. package/dist/alerts/headless/index.d.ts.map +1 -0
  17. package/dist/alerts/headless/index.js +9 -0
  18. package/dist/alerts/headless/index.js.map +1 -0
  19. package/dist/alerts/headless/rule-draft.d.ts +175 -0
  20. package/dist/alerts/headless/rule-draft.d.ts.map +1 -0
  21. package/dist/alerts/headless/rule-draft.js +261 -0
  22. package/dist/alerts/headless/rule-draft.js.map +1 -0
  23. package/dist/alerts/ui/AlertIncidentDrawer.d.ts +30 -0
  24. package/dist/alerts/ui/AlertIncidentDrawer.d.ts.map +1 -0
  25. package/dist/alerts/ui/AlertIncidentDrawer.js +33 -0
  26. package/dist/alerts/ui/AlertIncidentDrawer.js.map +1 -0
  27. package/dist/alerts/ui/AlertRuleDialog.d.ts +47 -0
  28. package/dist/alerts/ui/AlertRuleDialog.d.ts.map +1 -0
  29. package/dist/alerts/ui/AlertRuleDialog.js +124 -0
  30. package/dist/alerts/ui/AlertRuleDialog.js.map +1 -0
  31. package/dist/alerts/ui/AlertRuleTestResult.d.ts +23 -0
  32. package/dist/alerts/ui/AlertRuleTestResult.d.ts.map +1 -0
  33. package/dist/alerts/ui/AlertRuleTestResult.js +30 -0
  34. package/dist/alerts/ui/AlertRuleTestResult.js.map +1 -0
  35. package/dist/alerts/ui/AlertsPage.d.ts +41 -0
  36. package/dist/alerts/ui/AlertsPage.d.ts.map +1 -0
  37. package/dist/alerts/ui/AlertsPage.js +238 -0
  38. package/dist/alerts/ui/AlertsPage.js.map +1 -0
  39. package/dist/alerts/ui/FiringAlertsBanner.d.ts +28 -0
  40. package/dist/alerts/ui/FiringAlertsBanner.d.ts.map +1 -0
  41. package/dist/alerts/ui/FiringAlertsBanner.js +45 -0
  42. package/dist/alerts/ui/FiringAlertsBanner.js.map +1 -0
  43. package/dist/alerts/ui/copy.d.ts +15 -0
  44. package/dist/alerts/ui/copy.d.ts.map +1 -0
  45. package/dist/alerts/ui/copy.js +14 -0
  46. package/dist/alerts/ui/copy.js.map +1 -0
  47. package/dist/alerts/ui/index.d.ts +14 -0
  48. package/dist/alerts/ui/index.d.ts.map +1 -0
  49. package/dist/alerts/ui/index.js +12 -0
  50. package/dist/alerts/ui/index.js.map +1 -0
  51. package/dist/alerts/ui/parts.d.ts +26 -0
  52. package/dist/alerts/ui/parts.d.ts.map +1 -0
  53. package/dist/alerts/ui/parts.js +27 -0
  54. package/dist/alerts/ui/parts.js.map +1 -0
  55. package/dist/alerts/ui/settings.d.ts +27 -0
  56. package/dist/alerts/ui/settings.d.ts.map +1 -0
  57. package/dist/alerts/ui/settings.js +37 -0
  58. package/dist/alerts/ui/settings.js.map +1 -0
  59. package/dist/nodes/headless/api.d.ts +3 -1
  60. package/dist/nodes/headless/api.d.ts.map +1 -1
  61. package/dist/nodes/headless/api.js +22 -0
  62. package/dist/nodes/headless/api.js.map +1 -1
  63. package/dist/nodes/headless/index.d.ts +7 -2
  64. package/dist/nodes/headless/index.d.ts.map +1 -1
  65. package/dist/nodes/headless/index.js +4 -1
  66. package/dist/nodes/headless/index.js.map +1 -1
  67. package/dist/nodes/headless/node-events.d.ts +43 -0
  68. package/dist/nodes/headless/node-events.d.ts.map +1 -0
  69. package/dist/nodes/headless/node-events.js +150 -0
  70. package/dist/nodes/headless/node-events.js.map +1 -0
  71. package/dist/nodes/headless/power.d.ts +43 -0
  72. package/dist/nodes/headless/power.d.ts.map +1 -0
  73. package/dist/nodes/headless/power.js +74 -0
  74. package/dist/nodes/headless/power.js.map +1 -0
  75. package/dist/nodes/headless/types.d.ts +40 -3
  76. package/dist/nodes/headless/types.d.ts.map +1 -1
  77. package/dist/nodes/headless/types.js +1 -1
  78. package/dist/nodes/headless/types.js.map +1 -1
  79. package/dist/nodes/headless/use-node-events.d.ts +59 -0
  80. package/dist/nodes/headless/use-node-events.d.ts.map +1 -0
  81. package/dist/nodes/headless/use-node-events.js +159 -0
  82. package/dist/nodes/headless/use-node-events.js.map +1 -0
  83. package/dist/nodes/ui/NodeEventsTimeline.d.ts +39 -0
  84. package/dist/nodes/ui/NodeEventsTimeline.d.ts.map +1 -0
  85. package/dist/nodes/ui/NodeEventsTimeline.js +63 -0
  86. package/dist/nodes/ui/NodeEventsTimeline.js.map +1 -0
  87. package/dist/nodes/ui/NodePowerBadge.d.ts +27 -0
  88. package/dist/nodes/ui/NodePowerBadge.d.ts.map +1 -0
  89. package/dist/nodes/ui/NodePowerBadge.js +48 -0
  90. package/dist/nodes/ui/NodePowerBadge.js.map +1 -0
  91. package/dist/nodes/ui/NodeVitalsDialog.d.ts +11 -1
  92. package/dist/nodes/ui/NodeVitalsDialog.d.ts.map +1 -1
  93. package/dist/nodes/ui/NodeVitalsDialog.js +14 -5
  94. package/dist/nodes/ui/NodeVitalsDialog.js.map +1 -1
  95. package/dist/nodes/ui/WorkersPage.d.ts.map +1 -1
  96. package/dist/nodes/ui/WorkersPage.js +2 -1
  97. package/dist/nodes/ui/WorkersPage.js.map +1 -1
  98. package/dist/nodes/ui/workerVitals.d.ts +17 -1
  99. package/dist/nodes/ui/workerVitals.d.ts.map +1 -1
  100. package/dist/nodes/ui/workerVitals.js +43 -0
  101. package/dist/nodes/ui/workerVitals.js.map +1 -1
  102. package/dist/nodes/ui/workersTable.d.ts.map +1 -1
  103. package/dist/nodes/ui/workersTable.js +2 -1
  104. package/dist/nodes/ui/workersTable.js.map +1 -1
  105. package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts +1 -1
  106. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts +11 -0
  107. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts.map +1 -1
  108. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js +17 -2
  109. package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js.map +1 -1
  110. package/dist/webhooks/headless/client.d.ts +101 -0
  111. package/dist/webhooks/headless/client.d.ts.map +1 -0
  112. package/dist/webhooks/headless/client.js +105 -0
  113. package/dist/webhooks/headless/client.js.map +1 -0
  114. package/dist/webhooks/headless/event-selection.d.ts +119 -0
  115. package/dist/webhooks/headless/event-selection.d.ts.map +1 -0
  116. package/dist/webhooks/headless/event-selection.js +225 -0
  117. package/dist/webhooks/headless/event-selection.js.map +1 -0
  118. package/dist/webhooks/headless/format.d.ts +84 -0
  119. package/dist/webhooks/headless/format.d.ts.map +1 -0
  120. package/dist/webhooks/headless/format.js +142 -0
  121. package/dist/webhooks/headless/format.js.map +1 -0
  122. package/dist/webhooks/headless/hooks.d.ts +199 -0
  123. package/dist/webhooks/headless/hooks.d.ts.map +1 -0
  124. package/dist/webhooks/headless/hooks.js +249 -0
  125. package/dist/webhooks/headless/hooks.js.map +1 -0
  126. package/dist/webhooks/headless/index.d.ts +9 -0
  127. package/dist/webhooks/headless/index.d.ts.map +1 -0
  128. package/dist/webhooks/headless/index.js +9 -0
  129. package/dist/webhooks/headless/index.js.map +1 -0
  130. package/dist/webhooks/ui/WebhookDeliveryDrawer.d.ts +32 -0
  131. package/dist/webhooks/ui/WebhookDeliveryDrawer.d.ts.map +1 -0
  132. package/dist/webhooks/ui/WebhookDeliveryDrawer.js +64 -0
  133. package/dist/webhooks/ui/WebhookDeliveryDrawer.js.map +1 -0
  134. package/dist/webhooks/ui/WebhookEndpointDetail.d.ts +21 -0
  135. package/dist/webhooks/ui/WebhookEndpointDetail.d.ts.map +1 -0
  136. package/dist/webhooks/ui/WebhookEndpointDetail.js +96 -0
  137. package/dist/webhooks/ui/WebhookEndpointDetail.js.map +1 -0
  138. package/dist/webhooks/ui/WebhookEndpointDialog.d.ts +39 -0
  139. package/dist/webhooks/ui/WebhookEndpointDialog.d.ts.map +1 -0
  140. package/dist/webhooks/ui/WebhookEndpointDialog.js +79 -0
  141. package/dist/webhooks/ui/WebhookEndpointDialog.js.map +1 -0
  142. package/dist/webhooks/ui/WebhookEventPicker.d.ts +30 -0
  143. package/dist/webhooks/ui/WebhookEventPicker.d.ts.map +1 -0
  144. package/dist/webhooks/ui/WebhookEventPicker.js +33 -0
  145. package/dist/webhooks/ui/WebhookEventPicker.js.map +1 -0
  146. package/dist/webhooks/ui/WebhookSecretDialog.d.ts +27 -0
  147. package/dist/webhooks/ui/WebhookSecretDialog.d.ts.map +1 -0
  148. package/dist/webhooks/ui/WebhookSecretDialog.js +52 -0
  149. package/dist/webhooks/ui/WebhookSecretDialog.js.map +1 -0
  150. package/dist/webhooks/ui/WebhookSignatureHelp.d.ts +18 -0
  151. package/dist/webhooks/ui/WebhookSignatureHelp.d.ts.map +1 -0
  152. package/dist/webhooks/ui/WebhookSignatureHelp.js +40 -0
  153. package/dist/webhooks/ui/WebhookSignatureHelp.js.map +1 -0
  154. package/dist/webhooks/ui/WebhooksPage.d.ts +47 -0
  155. package/dist/webhooks/ui/WebhooksPage.d.ts.map +1 -0
  156. package/dist/webhooks/ui/WebhooksPage.js +172 -0
  157. package/dist/webhooks/ui/WebhooksPage.js.map +1 -0
  158. package/dist/webhooks/ui/copy.d.ts +24 -0
  159. package/dist/webhooks/ui/copy.d.ts.map +1 -0
  160. package/dist/webhooks/ui/copy.js +34 -0
  161. package/dist/webhooks/ui/copy.js.map +1 -0
  162. package/dist/webhooks/ui/index.d.ts +15 -0
  163. package/dist/webhooks/ui/index.d.ts.map +1 -0
  164. package/dist/webhooks/ui/index.js +12 -0
  165. package/dist/webhooks/ui/index.js.map +1 -0
  166. package/dist/webhooks/ui/parts.d.ts +25 -0
  167. package/dist/webhooks/ui/parts.d.ts.map +1 -0
  168. package/dist/webhooks/ui/parts.js +28 -0
  169. package/dist/webhooks/ui/parts.js.map +1 -0
  170. package/dist/webhooks/ui/settings.d.ts +58 -0
  171. package/dist/webhooks/ui/settings.d.ts.map +1 -0
  172. package/dist/webhooks/ui/settings.js +79 -0
  173. package/dist/webhooks/ui/settings.js.map +1 -0
  174. package/package.json +18 -2
@@ -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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"}
@@ -0,0 +1,315 @@
1
+ // =============================================================================
2
+ // The alerts hooks (issue #1047): reads with a load state, and the writes
3
+ // =============================================================================
4
+ //
5
+ // A failure becomes a sentence in `error` (a stable refusal code mapped to
6
+ // words, else the API's message); a write resolves with `null` (or `false`)
7
+ // instead of throwing. `useAlertSummary` polls every 30 seconds while the tab
8
+ // is visible, for the dashboard banner.
9
+ // =============================================================================
10
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
11
+ import { ALERT_ERROR_CODES } from '@marinoscar/platform-contract/alerts';
12
+ import { isPlatformApiError, usePlatformApi } from '../../core/index.js';
13
+ import { createAlertsApi, } from './client.js';
14
+ const CODE_MESSAGES = {
15
+ [ALERT_ERROR_CODES.RULE_NOT_FOUND]: 'That alert rule no longer exists.',
16
+ [ALERT_ERROR_CODES.INCIDENT_NOT_FOUND]: 'That incident no longer exists.',
17
+ [ALERT_ERROR_CODES.UNKNOWN_KIND]: 'That rule kind is not available on this deployment.',
18
+ [ALERT_ERROR_CODES.INVALID_CONFIG]: 'The rule configuration is not valid for its kind.',
19
+ [ALERT_ERROR_CODES.STARTER_RULE_PROTECTED]: 'Built-in rules cannot be deleted. Disable the rule instead.',
20
+ };
21
+ /** The default poll interval of {@link useAlertSummary}, in milliseconds. */
22
+ const SUMMARY_POLL_MS = 30_000;
23
+ /**
24
+ * An alerts API failure in words: the refusal code's sentence (`code` or
25
+ * `details.reason`), else the API's message, else `fallback`.
26
+ *
27
+ * @param error - what the call rejected with.
28
+ * @param fallback - the sentence when nothing better is known.
29
+ * @returns the message.
30
+ *
31
+ * @stability experimental
32
+ */
33
+ export function alertErrorMessage(error, fallback) {
34
+ if (isPlatformApiError(error)) {
35
+ const details = error.details;
36
+ const reason = typeof details?.reason === 'string' ? details.reason : undefined;
37
+ for (const code of [error.code, reason]) {
38
+ if (typeof code === 'string' && CODE_MESSAGES[code])
39
+ return CODE_MESSAGES[code];
40
+ }
41
+ if (typeof error.message === 'string' && error.message !== '')
42
+ return error.message;
43
+ }
44
+ return fallback;
45
+ }
46
+ function useMounted() {
47
+ const mounted = useRef(true);
48
+ useEffect(() => {
49
+ mounted.current = true;
50
+ return () => {
51
+ mounted.current = false;
52
+ };
53
+ }, []);
54
+ return useCallback(() => mounted.current, []);
55
+ }
56
+ /** Runs `load` now and on `refresh`, keeping only the newest answer. */
57
+ function useLoad(load, fallback) {
58
+ const mounted = useMounted();
59
+ const [data, setData] = useState(null);
60
+ const [isLoading, setIsLoading] = useState(load !== null);
61
+ const [error, setError] = useState(null);
62
+ const seq = useRef(0);
63
+ const refresh = useCallback(async () => {
64
+ if (!load)
65
+ return;
66
+ const ticket = ++seq.current;
67
+ setIsLoading(true);
68
+ try {
69
+ const next = await load();
70
+ if (!mounted() || ticket !== seq.current)
71
+ return;
72
+ setData(next);
73
+ setError(null);
74
+ }
75
+ catch (err) {
76
+ if (mounted() && ticket === seq.current)
77
+ setError(alertErrorMessage(err, fallback));
78
+ }
79
+ finally {
80
+ if (mounted() && ticket === seq.current)
81
+ setIsLoading(false);
82
+ }
83
+ }, [load, fallback, mounted]);
84
+ useEffect(() => {
85
+ if (!load) {
86
+ seq.current += 1;
87
+ setData(null);
88
+ setIsLoading(false);
89
+ setError(null);
90
+ return;
91
+ }
92
+ void refresh();
93
+ }, [load, refresh]);
94
+ return { data, isLoading, error, refresh };
95
+ }
96
+ /** Calls `callback` every `intervalMs` while the document is visible. */
97
+ function useVisibleInterval(callback, intervalMs) {
98
+ const ref = useRef(callback);
99
+ ref.current = callback;
100
+ useEffect(() => {
101
+ if (intervalMs <= 0 || typeof document === 'undefined')
102
+ return;
103
+ let timer = null;
104
+ const stop = () => {
105
+ if (timer !== null)
106
+ clearInterval(timer);
107
+ timer = null;
108
+ };
109
+ const start = () => {
110
+ if (timer === null)
111
+ timer = setInterval(() => ref.current(), intervalMs);
112
+ };
113
+ const onVisibility = () => {
114
+ if (document.visibilityState === 'hidden') {
115
+ stop();
116
+ }
117
+ else {
118
+ ref.current();
119
+ start();
120
+ }
121
+ };
122
+ if (document.visibilityState !== 'hidden')
123
+ start();
124
+ document.addEventListener('visibilitychange', onVisibility);
125
+ return () => {
126
+ stop();
127
+ document.removeEventListener('visibilitychange', onVisibility);
128
+ };
129
+ }, [intervalMs]);
130
+ }
131
+ /**
132
+ * The alerts client over the host's transport, memoised.
133
+ *
134
+ * @returns the client.
135
+ *
136
+ * @stability experimental
137
+ */
138
+ export function useAlertsApi() {
139
+ const api = usePlatformApi();
140
+ return useMemo(() => createAlertsApi(api), [api]);
141
+ }
142
+ /**
143
+ * The rules (`GET /admin/alerts/rules`), reloaded when a filter changes.
144
+ *
145
+ * @param query - optional filters.
146
+ * @returns the rules and the load state.
147
+ *
148
+ * @extensionPoint hook
149
+ * @stability experimental
150
+ */
151
+ export function useAlertRules(query = {}) {
152
+ const client = useAlertsApi();
153
+ const { kind, severity, enabled } = query;
154
+ const load = useCallback(() => client.listRules({
155
+ ...(kind ? { kind } : {}),
156
+ ...(severity ? { severity } : {}),
157
+ ...(enabled === undefined ? {} : { enabled }),
158
+ }), [client, kind, severity, enabled]);
159
+ const { data, isLoading, error, refresh } = useLoad(load, 'Could not load the alert rules.');
160
+ return { rules: data ?? [], isLoading, error, refresh };
161
+ }
162
+ /**
163
+ * One rule (`GET /admin/alerts/rules/:id`).
164
+ *
165
+ * @param id - the rule id, or `null` for none.
166
+ * @returns the rule and the load state.
167
+ *
168
+ * @extensionPoint hook
169
+ * @stability experimental
170
+ */
171
+ export function useAlertRule(id) {
172
+ const client = useAlertsApi();
173
+ const load = useMemo(() => (id ? () => client.getRule(id) : null), [client, id]);
174
+ const { data, isLoading, error, refresh } = useLoad(load, 'Could not load the alert rule.');
175
+ return { rule: data, isLoading, error, refresh };
176
+ }
177
+ /**
178
+ * The registered rule kinds (`GET /admin/alerts/kinds`).
179
+ *
180
+ * @param options - `enabled: false` skips the request.
181
+ * @returns the kinds and the load state.
182
+ *
183
+ * @extensionPoint hook
184
+ * @stability experimental
185
+ */
186
+ export function useAlertKinds(options = {}) {
187
+ const enabled = options.enabled ?? true;
188
+ const client = useAlertsApi();
189
+ const load = useMemo(() => (enabled ? () => client.listKinds() : null), [client, enabled]);
190
+ const { data, isLoading, error } = useLoad(load, 'Could not load the rule kinds.');
191
+ return { kinds: data ?? [], isLoading, error };
192
+ }
193
+ /**
194
+ * One page of incidents (`GET /admin/alerts/incidents`), reloaded when the
195
+ * page or a filter changes.
196
+ *
197
+ * @param query - the one-based page, the page size and the filters.
198
+ * @returns the page and the load state.
199
+ *
200
+ * @extensionPoint hook
201
+ * @stability experimental
202
+ */
203
+ export function useAlertIncidents(query = {}) {
204
+ const client = useAlertsApi();
205
+ const { state, severity, ruleId, page, pageSize } = query;
206
+ const load = useCallback(() => client.listIncidents({
207
+ ...(state ? { state } : {}),
208
+ ...(severity ? { severity } : {}),
209
+ ...(ruleId ? { ruleId } : {}),
210
+ ...(page === undefined ? {} : { page }),
211
+ ...(pageSize === undefined ? {} : { pageSize }),
212
+ }), [client, state, severity, ruleId, page, pageSize]);
213
+ const { data, isLoading, error, refresh } = useLoad(load, 'Could not load the incidents.');
214
+ return {
215
+ incidents: data?.items ?? [],
216
+ total: data?.total ?? 0,
217
+ totalPages: data?.totalPages ?? 0,
218
+ isLoading,
219
+ error,
220
+ refresh,
221
+ };
222
+ }
223
+ /**
224
+ * One incident (`GET /admin/alerts/incidents/:id`).
225
+ *
226
+ * @param id - the incident id, or `null` for none.
227
+ * @returns the incident and the load state.
228
+ *
229
+ * @extensionPoint hook
230
+ * @stability experimental
231
+ */
232
+ export function useAlertIncident(id) {
233
+ const client = useAlertsApi();
234
+ const load = useMemo(() => (id ? () => client.getIncident(id) : null), [client, id]);
235
+ const { data, isLoading, error, refresh } = useLoad(load, 'Could not load the incident.');
236
+ return { incident: data, isLoading, error, refresh };
237
+ }
238
+ /**
239
+ * The firing summary (`GET /admin/alerts/summary`), polled every 30 seconds
240
+ * while the tab is visible.
241
+ *
242
+ * @param options - `enabled: false` skips the request (a viewer without
243
+ * `alerts:read`); `intervalMs` changes the poll (0 turns it off).
244
+ * @returns the summary and the load state.
245
+ *
246
+ * @extensionPoint hook
247
+ * @stability experimental
248
+ */
249
+ export function useAlertSummary(options = {}) {
250
+ const enabled = options.enabled ?? true;
251
+ const intervalMs = options.intervalMs ?? SUMMARY_POLL_MS;
252
+ const client = useAlertsApi();
253
+ const load = useMemo(() => (enabled ? () => client.summary() : null), [client, enabled]);
254
+ const { data, isLoading, error, refresh } = useLoad(load, 'Could not load the alert summary.');
255
+ useVisibleInterval(() => void refresh(), enabled ? intervalMs : 0);
256
+ return { summary: data, isLoading, error, refresh };
257
+ }
258
+ /**
259
+ * The metrics the rule editor offers (`GET /admin/telemetry/schema`).
260
+ *
261
+ * @param options - `enabled: false` skips the request.
262
+ * @returns the metrics and the load state.
263
+ *
264
+ * @extensionPoint hook
265
+ * @stability experimental
266
+ */
267
+ export function useAlertMetricCatalog(options = {}) {
268
+ const enabled = options.enabled ?? true;
269
+ const client = useAlertsApi();
270
+ const load = useMemo(() => (enabled ? () => client.metricCatalog() : null), [client, enabled]);
271
+ const { data, isLoading, error } = useLoad(load, 'The metric list is not available; type a metric name.');
272
+ return { metrics: data ?? [], isLoading, error };
273
+ }
274
+ /**
275
+ * The alerts writes, with one shared pending flag and error.
276
+ *
277
+ * @returns the actions and their state.
278
+ *
279
+ * @extensionPoint hook
280
+ * @stability experimental
281
+ */
282
+ export function useAlertMutations() {
283
+ const client = useAlertsApi();
284
+ const mounted = useMounted();
285
+ const [pendingCount, setPendingCount] = useState(0);
286
+ const [error, setError] = useState(null);
287
+ const run = useCallback(async (call, fallback) => {
288
+ setPendingCount((count) => count + 1);
289
+ setError(null);
290
+ try {
291
+ return await call();
292
+ }
293
+ catch (err) {
294
+ if (mounted())
295
+ setError(alertErrorMessage(err, fallback));
296
+ return null;
297
+ }
298
+ finally {
299
+ if (mounted())
300
+ setPendingCount((count) => count - 1);
301
+ }
302
+ }, [mounted]);
303
+ return {
304
+ create: useCallback((input) => run(() => client.createRule(input), 'The rule could not be created.'), [client, run]),
305
+ update: useCallback((id, patch) => run(() => client.updateRule(id, patch), 'The rule could not be saved.'), [client, run]),
306
+ toggle: useCallback((id, enabled) => run(() => client.updateRule(id, { enabled }), enabled ? 'The rule could not be enabled.' : 'The rule could not be disabled.'), [client, run]),
307
+ remove: useCallback(async (id) => (await run(async () => (await client.deleteRule(id), true), 'The rule could not be deleted.')) === true, [client, run]),
308
+ test: useCallback((id) => run(() => client.testRule(id), 'The rule could not be tested.'), [client, run]),
309
+ acknowledge: useCallback((id) => run(() => client.acknowledge(id), 'The incident could not be acknowledged.'), [client, run]),
310
+ pending: pendingCount > 0,
311
+ error,
312
+ reset: useCallback(() => setError(null), []),
313
+ };
314
+ }
315
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/alerts/headless/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { ALERTS_BASE_PATH, ALERTS_METRIC_CATALOG_PATH, createAlertsApi, metricCatalogFromSchema, } from './client.js';
2
+ export type { AlertIncidentPage, AlertIncidentsQuery, AlertMetricCatalogEntry, AlertRulesQuery, AlertsApi, } from './client.js';
3
+ export { ALERT_AGGREGATION_LABELS, ALERT_COMPARATOR_LABELS, ALERT_SEVERITY_LABELS, ALERT_SEVERITY_TONES, ALERT_STATE_LABELS, ALERT_STATE_TONES, alertFiringTotal, alertKindLabel, alertTopSeverity, formatAlertLabels, formatAlertSeconds, } from './format.js';
4
+ export type { AlertTone } from './format.js';
5
+ export { alertErrorMessage, useAlertIncident, useAlertIncidents, useAlertKinds, useAlertMetricCatalog, useAlertMutations, useAlertRule, useAlertRules, useAlertSummary, useAlertsApi, } from './hooks.js';
6
+ export type { AlertIncidentState, AlertIncidentsState, AlertKindsState, AlertMetricCatalogState, AlertMutations, AlertRuleState, AlertRulesState, AlertSummaryState, } from './hooks.js';
7
+ export { ALERT_FORM_KINDS, alertKindHasNoConfig, alertRuleDraftFromRule, buildAlertRuleConfig, buildAlertRulePayload, emptyAlertRuleDraft, } from './rule-draft.js';
8
+ export type { AlertAttrDraft, AlertRuleDraft, AlertRulePayloadResult, MetricThresholdDraft, NodeEventDraft, } from './rule-draft.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/alerts/headless/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ // `@marinoscar/platform-web/alerts/headless`: the alerts client, hooks and pure
2
+ // helpers (issue #1047): rules, kinds, incidents, the firing summary, the
3
+ // metric catalog the rule editor picks from, the editor's draft model and
4
+ // alerts in words. No UI. Documented in ../README.md.
5
+ export { ALERTS_BASE_PATH, ALERTS_METRIC_CATALOG_PATH, createAlertsApi, metricCatalogFromSchema, } from './client.js';
6
+ export { ALERT_AGGREGATION_LABELS, ALERT_COMPARATOR_LABELS, ALERT_SEVERITY_LABELS, ALERT_SEVERITY_TONES, ALERT_STATE_LABELS, ALERT_STATE_TONES, alertFiringTotal, alertKindLabel, alertTopSeverity, formatAlertLabels, formatAlertSeconds, } from './format.js';
7
+ export { alertErrorMessage, useAlertIncident, useAlertIncidents, useAlertKinds, useAlertMetricCatalog, useAlertMutations, useAlertRule, useAlertRules, useAlertSummary, useAlertsApi, } from './hooks.js';
8
+ export { ALERT_FORM_KINDS, alertKindHasNoConfig, alertRuleDraftFromRule, buildAlertRuleConfig, buildAlertRulePayload, emptyAlertRuleDraft, } from './rule-draft.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/alerts/headless/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,0EAA0E;AAC1E,sDAAsD;AAEtD,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,eAAe,EACf,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAQrB,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC;AAWpB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC"}