diff --git a/web/src/services/api.ts b/web/src/services/api.ts
index 673ccc1..63b5d88 100644
--- a/web/src/services/api.ts
+++ b/web/src/services/api.ts
@@ -6,6 +6,7 @@ import type {
ImportHistoryItem,
IntegrationStatus,
UmeAlarmItem,
+ UmeAlarmSubscriptionStatus,
UmeNeItem,
UmeSyncStatusResponse,
UmeTokenStatus,
@@ -100,6 +101,15 @@ export const fetchAlarms = (params: {
return apiGet
(`/v1/alarms?${p.toString()}`);
};
+export const fetchUmeAlarmSubscriptionStatus = () =>
+ apiGet("/v1/ume/alarm-subscription/status");
+
+export const establishUmeAlarmSubscription = () =>
+ apiPost("/v1/ume/alarm-subscription/establish", {});
+
+export const cancelUmeAlarmSubscription = () =>
+ apiPost("/v1/ume/alarm-subscription/cancel", {});
+
export const fetchUmeSyncStatus = (params: { page: number; pageSize: number }) => {
const p = new URLSearchParams();
p.set("page", String(Math.max(1, Number(params.page || 1))));
diff --git a/web/src/types.ts b/web/src/types.ts
index ef01a10..dc8db9d 100644
--- a/web/src/types.ts
+++ b/web/src/types.ts
@@ -89,12 +89,26 @@ export type UmeSyncJobItem = {
ended_at?: string | null;
};
+export type UmeAlarmSubscriptionStatus = {
+ ok?: boolean;
+ created?: boolean;
+ already_exists?: boolean;
+ active: boolean;
+ subscription_id?: string;
+ wss_uri?: string;
+ topic?: string;
+ ws_consumer_status?: string;
+ ws_consumer_last_error?: string;
+ ws_consumer_last_run_at?: string | null;
+};
+
export type UmeSyncStatusResponse = {
total?: number;
page?: number;
page_size?: number;
items: UmeSyncJobItem[];
latest_by_domain?: Record;
+ alarm_subscription?: UmeAlarmSubscriptionStatus;
runtime_tasks?: Array<{
task: string;
status: string;