downcity 1.1.279 → 1.1.284

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.
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Admin 用户系统 Dashboard 命令。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 这是 fed CLI 自己的运营视图,直接读取现有 admin 数据并在 CLI 内计算。
6
+ * - 不引入 Dashboard adapter,也不要求 Federation 后端提供跨 service 聚合 API。
7
+ * - 命令层只负责 TUI 交互,数据读取、指标计算和展示格式分别放在 dashboard 模块中。
8
+ */
9
+ import { City } from "@downcity/city";
10
+ import type { admin_tui_runtime } from "../../types/AdminTui.js";
11
+ /**
12
+ * 打开用户系统 Dashboard。
13
+ */
14
+ export declare function manageDashboard(a: City, _base_url: string, runtime: admin_tui_runtime): Promise<void>;
15
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/federation/admin/commands/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAMtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGxE;;GAEG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD3G"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Admin 用户系统 Dashboard 命令。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 这是 fed CLI 自己的运营视图,直接读取现有 admin 数据并在 CLI 内计算。
6
+ * - 不引入 Dashboard adapter,也不要求 Federation 后端提供跨 service 聚合 API。
7
+ * - 命令层只负责 TUI 交互,数据读取、指标计算和展示格式分别放在 dashboard 模块中。
8
+ */
9
+ import { fetch_dashboard_raw_data } from "../dashboard/dashboard-data.js";
10
+ import { dashboard_rows, dashboard_view_title, range_label } from "../dashboard/dashboard-format.js";
11
+ import { build_dashboard_snapshot } from "../dashboard/dashboard-metrics.js";
12
+ import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
13
+ import { t } from "../../../shared/CliLocale.js";
14
+ /**
15
+ * 打开用户系统 Dashboard。
16
+ */
17
+ export async function manageDashboard(a, _base_url, runtime) {
18
+ let raw_data;
19
+ let snapshot;
20
+ let range = "30d";
21
+ while (true) {
22
+ const action = await runtime.select(t({ zh: "用户系统 Dashboard", en: "User system dashboard" }), [
23
+ { label: t({ zh: `概览 (${range_label(range)})`, en: `Overview (${range_label(range)})` }), value: "overview" },
24
+ { label: t({ zh: "用户", en: "Users" }), value: "users" },
25
+ { label: t({ zh: "活跃", en: "Activity" }), value: "activity" },
26
+ { label: t({ zh: "付费", en: "Payment" }), value: "payment" },
27
+ { label: t({ zh: "收入", en: "Revenue" }), value: "revenue" },
28
+ { label: t({ zh: "用量", en: "Usage" }), value: "usage" },
29
+ { label: t({ zh: "健康", en: "Health" }), value: "health" },
30
+ { label: t({ zh: "服务状态", en: "Service status" }), value: "availability" },
31
+ { label: t({ zh: "操作", en: "Actions" }), value: "__section_actions__", disabled: true },
32
+ { label: t({ zh: `切换范围:${range_label(range)}`, en: `Range: ${range_label(range)}` }), value: "range" },
33
+ { label: t({ zh: "刷新", en: "Refresh" }), value: "refresh" },
34
+ { label: t({ zh: "导航", en: "Navigation" }), value: "__section_navigation__", disabled: true },
35
+ { label: t({ zh: "返回", en: "Back" }), value: "back" },
36
+ ]);
37
+ if (!action || action === "back")
38
+ return;
39
+ try {
40
+ if (action === "range") {
41
+ const next_range = await select_range(runtime, range);
42
+ if (next_range) {
43
+ range = next_range;
44
+ snapshot = raw_data ? build_dashboard_snapshot(raw_data, range) : undefined;
45
+ if (snapshot)
46
+ await show_dashboard_view(runtime, "overview", snapshot);
47
+ }
48
+ continue;
49
+ }
50
+ if (action === "refresh" || !raw_data || !snapshot) {
51
+ raw_data = await runtime.with_loading(t({ zh: "读取用户系统 Dashboard", en: "Loading user system dashboard" }), async () => await fetch_dashboard_raw_data(a));
52
+ snapshot = build_dashboard_snapshot(raw_data, range);
53
+ }
54
+ const view = action === "refresh" ? "overview" : action;
55
+ await show_dashboard_view(runtime, view, snapshot);
56
+ }
57
+ catch (error) {
58
+ rethrowAdminAuthError(error);
59
+ await runtime.show_message("error", adminErrorMessage(error));
60
+ }
61
+ }
62
+ }
63
+ /**
64
+ * 选择 Dashboard 时间范围。
65
+ */
66
+ async function select_range(runtime, current_range) {
67
+ const action = await runtime.select(t({ zh: "选择统计范围", en: "Select range" }), [
68
+ range_option("today", current_range),
69
+ range_option("7d", current_range),
70
+ range_option("30d", current_range),
71
+ range_option("all", current_range),
72
+ { label: t({ zh: "导航", en: "Navigation" }), value: "__section_navigation__", disabled: true },
73
+ { label: t({ zh: "返回", en: "Back" }), value: "back" },
74
+ ]);
75
+ if (!action || action === "back")
76
+ return undefined;
77
+ return action;
78
+ }
79
+ /**
80
+ * 构建范围选项。
81
+ */
82
+ function range_option(range, current_range) {
83
+ const current_mark = range === current_range ? t({ zh: "(当前)", en: " (current)" }) : "";
84
+ return {
85
+ label: `${range_label(range)}${current_mark}`,
86
+ value: range,
87
+ hint: range_hint(range),
88
+ };
89
+ }
90
+ /**
91
+ * 范围说明。
92
+ */
93
+ function range_hint(range) {
94
+ if (range === "today")
95
+ return t({ zh: "从本地时间今日 00:00 开始统计。", en: "Count from local midnight today." });
96
+ if (range === "7d")
97
+ return t({ zh: "统计最近 7 天窗口。", en: "Count the latest 7-day window." });
98
+ if (range === "30d")
99
+ return t({ zh: "统计最近 30 天窗口。", en: "Count the latest 30-day window." });
100
+ return t({ zh: "统计已读取的全部数据。", en: "Count all fetched data." });
101
+ }
102
+ /**
103
+ * 展示 Dashboard 视图。
104
+ */
105
+ async function show_dashboard_view(runtime, view, snapshot) {
106
+ await runtime.show_table({
107
+ title: dashboard_view_title(view, snapshot.range),
108
+ columns: [
109
+ t({ zh: "分组", en: "Group" }),
110
+ t({ zh: "指标", en: "Metric" }),
111
+ t({ zh: "值", en: "Value" }),
112
+ ],
113
+ rows: dashboard_rows(view, snapshot),
114
+ empty_message: t({ zh: "暂无 Dashboard 数据。", en: "No dashboard data." }),
115
+ });
116
+ }
117
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../../src/federation/admin/commands/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * fed Admin Dashboard 数据读取模块。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 只读取现有 admin endpoints,不要求后端提供 Dashboard 专用 API。
6
+ * - 每个 endpoint 独立容错,方便 Dashboard 在 service 缺失时仍可展示。
7
+ */
8
+ import { City } from "@downcity/city";
9
+ import type { dashboard_raw_data } from "../../types/AdminDashboard.js";
10
+ /**
11
+ * 读取 Dashboard 原始数据。
12
+ */
13
+ export declare function fetch_dashboard_raw_data(a: City): Promise<dashboard_raw_data>;
14
+ //# sourceMappingURL=dashboard-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-data.d.ts","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-data.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,sCAAsC,CAAC;AAE9C;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmCnF"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * fed Admin Dashboard 数据读取模块。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 只读取现有 admin endpoints,不要求后端提供 Dashboard 专用 API。
6
+ * - 每个 endpoint 独立容错,方便 Dashboard 在 service 缺失时仍可展示。
7
+ */
8
+ /**
9
+ * 读取 Dashboard 原始数据。
10
+ */
11
+ export async function fetch_dashboard_raw_data(a) {
12
+ const services = create_initial_service_state();
13
+ const accounts_users = await read_endpoint(services, "accounts", "users", async () => (await a.service("accounts").get("users")).items);
14
+ const accounts_sessions = await read_endpoint(services, "accounts", "sessions", async () => (await a.service("accounts").get("sessions")).items);
15
+ const usage_events = await read_endpoint(services, "usage", "events", async () => (await a.service("usage").get("events")).items);
16
+ const balance_users = await read_endpoint(services, "balance", "users", async () => await a.balance.listUsers(200));
17
+ const balance_topups = await read_endpoint(services, "balance", "topups", async () => await a.balance.listTopups({ limit: 200 }));
18
+ const payment_payments = await read_endpoint(services, "payment", "payments", async () => (await a.service("payment").get("payments")).items);
19
+ const payment_events = await read_endpoint(services, "payment", "events", async () => (await a.service("payment").get("events")).items);
20
+ return {
21
+ fetched_at: new Date().toISOString(),
22
+ services,
23
+ accounts_users,
24
+ accounts_sessions,
25
+ usage_events,
26
+ balance_users,
27
+ balance_topups,
28
+ payment_payments,
29
+ payment_events,
30
+ };
31
+ }
32
+ /**
33
+ * 创建初始服务状态。
34
+ */
35
+ function create_initial_service_state() {
36
+ return {
37
+ accounts: create_service_state(),
38
+ usage: create_service_state(),
39
+ balance: create_service_state(),
40
+ payment: create_service_state(),
41
+ };
42
+ }
43
+ /**
44
+ * 创建单个服务状态。
45
+ */
46
+ function create_service_state() {
47
+ return {
48
+ status: "missing",
49
+ fetched_endpoints: [],
50
+ message: "",
51
+ };
52
+ }
53
+ /**
54
+ * 读取单个 endpoint。
55
+ */
56
+ async function read_endpoint(services, service_id, endpoint, task) {
57
+ const state = services[service_id];
58
+ try {
59
+ const rows = await task();
60
+ state.fetched_endpoints.push(endpoint);
61
+ state.status = state.status === "error" ? "partial" : "ready";
62
+ return rows;
63
+ }
64
+ catch (error) {
65
+ state.status = state.fetched_endpoints.length > 0 ? "partial" : "missing";
66
+ state.message = read_error_message(error);
67
+ return [];
68
+ }
69
+ }
70
+ /**
71
+ * 读取错误信息。
72
+ */
73
+ function read_error_message(error) {
74
+ return error instanceof Error ? error.message : String(error);
75
+ }
76
+ //# sourceMappingURL=dashboard-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-data.js","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * fed Admin Dashboard 展示格式化模块。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 这里只负责把 metrics 转为 TUI table rows。
6
+ * - 业务计算不放在这里,避免展示层和指标口径耦合。
7
+ */
8
+ import type { admin_tui_table_row } from "../../types/AdminTui.js";
9
+ import type { dashboard_range, dashboard_snapshot, dashboard_view } from "../../types/AdminDashboard.js";
10
+ /**
11
+ * 视图标题。
12
+ */
13
+ export declare function dashboard_view_title(view: dashboard_view, range: dashboard_range): string;
14
+ /**
15
+ * range 展示文本。
16
+ */
17
+ export declare function range_label(range: dashboard_range): string;
18
+ /**
19
+ * 视图行。
20
+ */
21
+ export declare function dashboard_rows(view: dashboard_view, snapshot: dashboard_snapshot): admin_tui_table_row[];
22
+ //# sourceMappingURL=dashboard-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-format.d.ts","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-format.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAEV,eAAe,EACf,kBAAkB,EAClB,cAAc,EACf,MAAM,sCAAsC,CAAC;AAE9C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAUzF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAK1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,GAAG,mBAAmB,EAAE,CASxG"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * fed Admin Dashboard 展示格式化模块。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 这里只负责把 metrics 转为 TUI table rows。
6
+ * - 业务计算不放在这里,避免展示层和指标口径耦合。
7
+ */
8
+ import { t } from "../../../shared/CliLocale.js";
9
+ /**
10
+ * 视图标题。
11
+ */
12
+ export function dashboard_view_title(view, range) {
13
+ const suffix = ` · ${range_label(range)}`;
14
+ if (view === "overview")
15
+ return t({ zh: `用户系统 Dashboard${suffix}`, en: `User system dashboard${suffix}` });
16
+ if (view === "users")
17
+ return t({ zh: `用户${suffix}`, en: `Users${suffix}` });
18
+ if (view === "activity")
19
+ return t({ zh: `活跃${suffix}`, en: `Activity${suffix}` });
20
+ if (view === "payment")
21
+ return t({ zh: `付费${suffix}`, en: `Payment${suffix}` });
22
+ if (view === "revenue")
23
+ return t({ zh: `收入${suffix}`, en: `Revenue${suffix}` });
24
+ if (view === "usage")
25
+ return t({ zh: `用量${suffix}`, en: `Usage${suffix}` });
26
+ if (view === "health")
27
+ return t({ zh: `健康${suffix}`, en: `Health${suffix}` });
28
+ return t({ zh: "服务状态", en: "Service status" });
29
+ }
30
+ /**
31
+ * range 展示文本。
32
+ */
33
+ export function range_label(range) {
34
+ if (range === "today")
35
+ return t({ zh: "今日", en: "Today" });
36
+ if (range === "7d")
37
+ return t({ zh: "7 天", en: "7d" });
38
+ if (range === "30d")
39
+ return t({ zh: "30 天", en: "30d" });
40
+ return t({ zh: "全部", en: "All" });
41
+ }
42
+ /**
43
+ * 视图行。
44
+ */
45
+ export function dashboard_rows(view, snapshot) {
46
+ if (view === "overview")
47
+ return overview_rows(snapshot);
48
+ if (view === "users")
49
+ return user_rows(snapshot);
50
+ if (view === "activity")
51
+ return activity_rows(snapshot);
52
+ if (view === "payment")
53
+ return payment_rows(snapshot);
54
+ if (view === "revenue")
55
+ return revenue_rows(snapshot);
56
+ if (view === "usage")
57
+ return usage_rows(snapshot);
58
+ if (view === "health")
59
+ return health_rows(snapshot);
60
+ return availability_rows(snapshot);
61
+ }
62
+ function overview_rows(snapshot) {
63
+ return [
64
+ row(t({ zh: "用户", en: "Users" }), t({ zh: "注册用户", en: "Registered users" }), format_number(snapshot.users.total_registered)),
65
+ row(t({ zh: "用户", en: "Users" }), t({ zh: "Range 新增", en: "New in range" }), format_number(snapshot.users.new_in_range)),
66
+ row(t({ zh: "用户", en: "Users" }), t({ zh: "当前登录", en: "Current sessions" }), format_number(snapshot.users.current_session_users)),
67
+ row(t({ zh: "活跃", en: "Activity" }), t({ zh: "Range 活跃", en: "Active in range" }), format_number(snapshot.activity.active_in_range)),
68
+ row(t({ zh: "活跃", en: "Activity" }), t({ zh: "Stickiness", en: "Stickiness" }), format_rate(snapshot.activity.stickiness_today_over_30d)),
69
+ row(t({ zh: "付费", en: "Payment" }), t({ zh: "付费用户", en: "Paying users" }), format_number(snapshot.payment.paying_users_total)),
70
+ row(t({ zh: "付费", en: "Payment" }), t({ zh: "Range 首付用户", en: "First paid in range" }), format_number(snapshot.payment.first_paid_users_range)),
71
+ row(t({ zh: "付费", en: "Payment" }), t({ zh: "注册转付费", en: "Registered to paid" }), format_rate(snapshot.payment.registered_to_paid_rate)),
72
+ ...money_rows(t({ zh: "收入", en: "Revenue" }), t({ zh: "Range 收入", en: "Range revenue" }), snapshot.revenue.range),
73
+ ...money_rows(t({ zh: "收入", en: "Revenue" }), t({ zh: "总收入", en: "Total revenue" }), snapshot.revenue.total),
74
+ row(t({ zh: "用量", en: "Usage" }), t({ zh: "Range 调用", en: "Events in range" }), format_number(snapshot.usage.events_range)),
75
+ row(t({ zh: "用量", en: "Usage" }), t({ zh: "错误率", en: "Error rate" }), format_rate(snapshot.usage.error_rate_range)),
76
+ row(t({ zh: "健康", en: "Health" }), t({ zh: "Warnings", en: "Warnings" }), format_number(snapshot.health.stale_data_warnings.length)),
77
+ ];
78
+ }
79
+ function user_rows(snapshot) {
80
+ return [
81
+ row("Accounts", t({ zh: "注册用户", en: "Registered users" }), format_number(snapshot.users.total_registered)),
82
+ row("Accounts", t({ zh: "今日新增", en: "New today" }), format_number(snapshot.users.new_today)),
83
+ row("Accounts", t({ zh: "7 天新增", en: "New 7d" }), format_number(snapshot.users.new_7d)),
84
+ row("Accounts", t({ zh: "30 天新增", en: "New 30d" }), format_number(snapshot.users.new_30d)),
85
+ row("Accounts", t({ zh: "Range 新增", en: "New in range" }), format_number(snapshot.users.new_in_range)),
86
+ row("Accounts", t({ zh: "当前登录", en: "Current sessions" }), format_number(snapshot.users.current_session_users)),
87
+ ...snapshot.users.recent_users.map((item) => row(t({ zh: "最近用户", en: "Recent user" }), read_text(item.user_id ?? item.id), `${read_text(item.auth_email ?? item.email)} ${format_date(item.auth_created_at ?? item.created_at ?? item.createdAt)}`)),
88
+ ];
89
+ }
90
+ function activity_rows(snapshot) {
91
+ return [
92
+ row("Usage", t({ zh: "今日活跃", en: "Active today" }), format_number(snapshot.activity.active_today)),
93
+ row("Usage", t({ zh: "7 天活跃", en: "Active 7d" }), format_number(snapshot.activity.active_7d)),
94
+ row("Usage", t({ zh: "30 天活跃", en: "Active 30d" }), format_number(snapshot.activity.active_30d)),
95
+ row("Usage", t({ zh: "Range 活跃", en: "Active in range" }), format_number(snapshot.activity.active_in_range)),
96
+ row("Usage", "Stickiness", format_rate(snapshot.activity.stickiness_today_over_30d)),
97
+ ...snapshot.activity.recent_events.map((item) => row(t({ zh: "最近事件", en: "Recent event" }), format_date(item.created_at), `${read_text(item.user_id)} · ${read_text(item.service)} · ${read_text(item.status)}`)),
98
+ ];
99
+ }
100
+ function payment_rows(snapshot) {
101
+ return [
102
+ row("Payment", t({ zh: "付费用户", en: "Paying users" }), format_number(snapshot.payment.paying_users_total)),
103
+ row("Payment", t({ zh: "Range 付费用户", en: "Paying users in range" }), format_number(snapshot.payment.paying_users_range)),
104
+ row("Payment", t({ zh: "Range 首付用户", en: "First paid in range" }), format_number(snapshot.payment.first_paid_users_range)),
105
+ row("Payment", t({ zh: "Range 成功订单", en: "Paid orders in range" }), format_number(snapshot.payment.paid_orders_range)),
106
+ row("Payment", t({ zh: "待支付订单", en: "Pending orders" }), format_number(snapshot.payment.pending_orders)),
107
+ row("Payment", t({ zh: "Range 失败订单", en: "Failed orders in range" }), format_number(snapshot.payment.failed_orders_range)),
108
+ row("Conversion", t({ zh: "注册转付费", en: "Registered to paid" }), format_rate(snapshot.payment.registered_to_paid_rate)),
109
+ row("Conversion", t({ zh: "活跃转付费", en: "Active to paid" }), format_rate(snapshot.payment.active_to_paid_rate)),
110
+ ...snapshot.payment.recent_payments.map((item) => row(t({ zh: "最近支付", en: "Recent payment" }), format_date(item.updated_at ?? item.created_at), `${read_text(item.user_id)} · ${format_money_value(item)} · ${read_text(item.status)}`)),
111
+ ];
112
+ }
113
+ function revenue_rows(snapshot) {
114
+ return [
115
+ ...money_rows("Revenue", t({ zh: "总收入", en: "Total revenue" }), snapshot.revenue.total),
116
+ ...money_rows("Revenue", t({ zh: "Range 收入", en: "Range revenue" }), snapshot.revenue.range),
117
+ ...money_rows("Revenue", t({ zh: "今日收入", en: "Today revenue" }), snapshot.revenue.today),
118
+ row("Health", t({ zh: "缺少金额的 paid payment", en: "Paid payments missing amount" }), format_number(snapshot.health.missing_revenue_amount_count)),
119
+ row("Balance", t({ zh: "Range 入账 credits", en: "Paid topup credits in range" }), format_number(snapshot.balance.paid_topup_credits_range)),
120
+ row("Balance", t({ zh: "累计入账 credits", en: "Credited total" }), format_number(snapshot.balance.credited_total)),
121
+ row("Balance", t({ zh: "当前余额 credits", en: "Current balance" }), format_number(snapshot.balance.current_balance_total)),
122
+ row("Balance", t({ zh: "待支付充值单", en: "Pending topups" }), format_number(snapshot.balance.pending_topups)),
123
+ ];
124
+ }
125
+ function usage_rows(snapshot) {
126
+ return [
127
+ row("Usage", t({ zh: "总调用", en: "Total events" }), format_number(snapshot.usage.total_events)),
128
+ row("Usage", t({ zh: "Range 调用", en: "Events in range" }), format_number(snapshot.usage.events_range)),
129
+ row("Usage", t({ zh: "Range 成功", en: "Success in range" }), format_number(snapshot.usage.success_events_range)),
130
+ row("Usage", t({ zh: "Range 失败", en: "Errors in range" }), format_number(snapshot.usage.error_events_range)),
131
+ row("Usage", t({ zh: "错误率", en: "Error rate" }), format_rate(snapshot.usage.error_rate_range)),
132
+ ...snapshot.usage.top_services.map((item) => row("Top service", item.service, format_number(item.count))),
133
+ ...snapshot.usage.top_models.map((item) => row("Top model", item.model_id, format_number(item.count))),
134
+ ];
135
+ }
136
+ function health_rows(snapshot) {
137
+ const warning_rows = snapshot.health.stale_data_warnings.length > 0
138
+ ? snapshot.health.stale_data_warnings.map((warning) => row("Warning", warning, ""))
139
+ : [row("Warning", t({ zh: "暂无", en: "None" }), "")];
140
+ return [
141
+ row("Revenue", t({ zh: "缺少 amount_minor", en: "Missing amount_minor" }), format_number(snapshot.health.missing_revenue_amount_count)),
142
+ row("Payment", t({ zh: "Webhook failed events", en: "Webhook failed events" }), format_number(snapshot.health.payment_webhook_failed_events)),
143
+ row("Usage", t({ zh: "Range 错误率", en: "Range error rate" }), format_rate(snapshot.health.usage_error_rate_range)),
144
+ ...warning_rows,
145
+ ];
146
+ }
147
+ function availability_rows(snapshot) {
148
+ return Object.entries(snapshot.services).map(([service, state]) => row(service, state.status, `${state.fetched_endpoints.join(", ") || "-"}${state.message ? ` · ${state.message}` : ""}`));
149
+ }
150
+ function row(group, metric, value) {
151
+ return { cells: [group, metric, value] };
152
+ }
153
+ function money_rows(group, metric, values) {
154
+ if (values.length === 0)
155
+ return [row(group, metric, "0")];
156
+ return values.map((item) => row(group, `${metric} ${item.currency}`, item.display));
157
+ }
158
+ function format_money_value(item) {
159
+ const currency = read_text(item.currency).toUpperCase() || "UNKNOWN";
160
+ const amount_minor = Number(item.amount_minor);
161
+ if (!Number.isFinite(amount_minor) || amount_minor <= 0)
162
+ return "-";
163
+ const divisor = currency_minor_divisor(currency);
164
+ const amount = amount_minor / divisor;
165
+ try {
166
+ return new Intl.NumberFormat("en-US", { style: "currency", currency }).format(amount);
167
+ }
168
+ catch {
169
+ return `${currency} ${amount.toFixed(divisor === 1 ? 0 : 2)}`;
170
+ }
171
+ }
172
+ function currency_minor_divisor(currency) {
173
+ const zero_decimal = new Set(["BIF", "CLP", "DJF", "GNF", "JPY", "KMF", "KRW", "MGA", "PYG", "RWF", "UGX", "VND", "VUV", "XAF", "XOF", "XPF"]);
174
+ return zero_decimal.has(currency.toUpperCase()) ? 1 : 100;
175
+ }
176
+ function format_number(value) {
177
+ return new Intl.NumberFormat("en-US").format(Number.isFinite(value) ? value : 0);
178
+ }
179
+ function format_rate(value) {
180
+ if (value === null)
181
+ return "-";
182
+ return `${(value * 100).toFixed(1)}%`;
183
+ }
184
+ function read_text(value) {
185
+ return typeof value === "string" ? value.trim() : value == null ? "-" : String(value).trim();
186
+ }
187
+ function format_date(value) {
188
+ const time = read_time(value);
189
+ if (!Number.isFinite(time))
190
+ return "-";
191
+ return new Date(time).toISOString().slice(0, 19);
192
+ }
193
+ function read_time(value) {
194
+ if (value instanceof Date)
195
+ return value.getTime();
196
+ if (typeof value === "number" && Number.isFinite(value))
197
+ return normalize_epoch_time(value);
198
+ if (typeof value === "string" && value.trim()) {
199
+ const numeric_value = Number(value);
200
+ if (Number.isFinite(numeric_value) && /^-?\d+(?:\.\d+)?$/u.test(value.trim()))
201
+ return normalize_epoch_time(numeric_value);
202
+ return Date.parse(value);
203
+ }
204
+ return Number.NaN;
205
+ }
206
+ function normalize_epoch_time(value) {
207
+ return value > 0 && value < 10_000_000_000 ? value * 1000 : value;
208
+ }
209
+ //# sourceMappingURL=dashboard-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-format.js","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * fed Admin Dashboard 指标计算模块。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 所有跨 service 业务指标都在 CLI 内计算。
6
+ * - range 切换只依赖 raw data 重算,不重新请求网络。
7
+ */
8
+ import type { dashboard_range, dashboard_raw_data, dashboard_snapshot } from "../../types/AdminDashboard.js";
9
+ /**
10
+ * 构建 Dashboard 指标快照。
11
+ */
12
+ export declare function build_dashboard_snapshot(raw_data: dashboard_raw_data, range: dashboard_range): dashboard_snapshot;
13
+ //# sourceMappingURL=dashboard-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-metrics.d.ts","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,kBAAkB,EAElB,kBAAkB,EAEnB,MAAM,sCAAsC,CAAC;AAI9C;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAuFjH"}
@@ -0,0 +1,256 @@
1
+ /**
2
+ * fed Admin Dashboard 指标计算模块。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 所有跨 service 业务指标都在 CLI 内计算。
6
+ * - range 切换只依赖 raw data 重算,不重新请求网络。
7
+ */
8
+ const DAY_MS = 24 * 60 * 60 * 1000;
9
+ /**
10
+ * 构建 Dashboard 指标快照。
11
+ */
12
+ export function build_dashboard_snapshot(raw_data, range) {
13
+ const window = create_window(range);
14
+ const paid_payments = raw_data.payment_payments.filter((item) => read_string(item.status) === "paid");
15
+ const paid_payments_with_amount = paid_payments.filter((item) => has_amount_minor(item));
16
+ const range_paid_payments = paid_payments.filter((item) => in_range(item, window));
17
+ const range_paid_payments_with_amount = range_paid_payments.filter((item) => has_amount_minor(item));
18
+ const range_usage_events = raw_data.usage_events.filter((item) => in_range(item, window));
19
+ const first_paid_times = read_first_paid_times(paid_payments);
20
+ const active_in_range = count_unique(range_usage_events.map((item) => read_string(item.user_id)));
21
+ const paying_users_range = count_unique(range_paid_payments.map((item) => read_string(item.user_id)));
22
+ const error_events_range = range_usage_events.filter((item) => read_string(item.status) === "error").length;
23
+ const usage_error_rate_range = safe_rate(error_events_range, range_usage_events.length);
24
+ const users = {
25
+ total_registered: raw_data.accounts_users.length,
26
+ new_today: count_records_since(raw_data.accounts_users, window.today_start),
27
+ new_7d: count_records_since(raw_data.accounts_users, window.seven_days_start),
28
+ new_30d: count_records_since(raw_data.accounts_users, window.thirty_days_start),
29
+ current_session_users: count_unique(raw_data.accounts_sessions
30
+ .filter((item) => read_string(item.status) === "active" || read_time(item.expires_at ?? item.expiresAt) > window.now)
31
+ .map((item) => read_string(item.user_id ?? item.userId))),
32
+ new_in_range: raw_data.accounts_users.filter((item) => in_range(item, window)).length,
33
+ recent_users: sort_recent(raw_data.accounts_users).slice(0, 10),
34
+ };
35
+ const activity = {
36
+ active_today: count_usage_users_since(raw_data.usage_events, window.today_start),
37
+ active_7d: count_usage_users_since(raw_data.usage_events, window.seven_days_start),
38
+ active_30d: count_usage_users_since(raw_data.usage_events, window.thirty_days_start),
39
+ active_in_range,
40
+ stickiness_today_over_30d: safe_rate(count_usage_users_since(raw_data.usage_events, window.today_start), count_usage_users_since(raw_data.usage_events, window.thirty_days_start)),
41
+ recent_events: sort_recent(raw_data.usage_events).slice(0, 20),
42
+ };
43
+ return {
44
+ generated_at: new Date(window.now).toISOString(),
45
+ range,
46
+ services: raw_data.services,
47
+ users,
48
+ activity,
49
+ payment: {
50
+ paying_users_total: first_paid_times.size,
51
+ paying_users_range,
52
+ first_paid_users_range: count_first_paid_in_range(first_paid_times, window),
53
+ paid_orders_range: range_paid_payments.length,
54
+ pending_orders: raw_data.payment_payments.filter((item) => read_string(item.status) === "pending").length,
55
+ failed_orders_range: raw_data.payment_payments.filter((item) => in_range(item, window) && is_failed_payment_status(read_string(item.status))).length,
56
+ registered_to_paid_rate: safe_rate(first_paid_times.size, users.total_registered),
57
+ active_to_paid_rate: safe_rate(paying_users_range, active_in_range),
58
+ recent_payments: sort_recent(raw_data.payment_payments).slice(0, 20),
59
+ },
60
+ revenue: {
61
+ total: read_revenue(paid_payments_with_amount),
62
+ range: read_revenue(range_paid_payments_with_amount),
63
+ today: read_revenue(paid_payments.filter((item) => has_amount_minor(item) && is_since(read_row_time(item), window.today_start))),
64
+ },
65
+ balance: {
66
+ current_balance_total: raw_data.balance_users.reduce((sum, item) => sum + read_number(item.credits), 0),
67
+ credited_total: raw_data.balance_topups
68
+ .filter((item) => read_string(item.status) === "paid")
69
+ .reduce((sum, item) => sum + read_number(item.credits), 0),
70
+ paid_topup_credits_range: raw_data.balance_topups
71
+ .filter((item) => read_string(item.status) === "paid" && in_range(item, window))
72
+ .reduce((sum, item) => sum + read_number(item.credits), 0),
73
+ pending_topups: raw_data.balance_topups.filter((item) => read_string(item.status) === "pending").length,
74
+ },
75
+ usage: {
76
+ total_events: raw_data.usage_events.length,
77
+ events_range: range_usage_events.length,
78
+ success_events_range: range_usage_events.filter((item) => read_string(item.status) === "success").length,
79
+ error_events_range,
80
+ error_rate_range: usage_error_rate_range,
81
+ top_services: read_top_services(range_usage_events),
82
+ top_models: read_top_models(range_usage_events),
83
+ },
84
+ health: {
85
+ missing_revenue_amount_count: paid_payments.length - paid_payments_with_amount.length,
86
+ payment_webhook_failed_events: raw_data.payment_events.filter((item) => read_string(item.sync_status) === "failed").length,
87
+ usage_error_rate_range,
88
+ stale_data_warnings: build_warnings(raw_data, paid_payments.length - paid_payments_with_amount.length, usage_error_rate_range),
89
+ },
90
+ };
91
+ }
92
+ /**
93
+ * 创建时间窗口。
94
+ */
95
+ function create_window(range) {
96
+ const now_date = new Date();
97
+ const today_start = new Date(now_date);
98
+ today_start.setHours(0, 0, 0, 0);
99
+ const now = now_date.getTime();
100
+ const range_start = range === "today"
101
+ ? today_start.getTime()
102
+ : range === "7d"
103
+ ? now - 7 * DAY_MS
104
+ : range === "30d"
105
+ ? now - 30 * DAY_MS
106
+ : undefined;
107
+ return {
108
+ now,
109
+ today_start: today_start.getTime(),
110
+ range_start,
111
+ seven_days_start: now - 7 * DAY_MS,
112
+ thirty_days_start: now - 30 * DAY_MS,
113
+ };
114
+ }
115
+ /**
116
+ * 构建健康警告。
117
+ */
118
+ function build_warnings(raw_data, missing_amount_count, error_rate) {
119
+ const warnings = [];
120
+ if (missing_amount_count > 0)
121
+ warnings.push(`paid payments missing amount_minor: ${missing_amount_count}`);
122
+ if (error_rate !== null && error_rate > 0.05)
123
+ warnings.push(`usage error rate is high: ${(error_rate * 100).toFixed(1)}%`);
124
+ for (const [service, state] of Object.entries(raw_data.services)) {
125
+ if (state.status !== "ready")
126
+ warnings.push(`${service}: ${state.status}${state.message ? ` (${state.message})` : ""}`);
127
+ }
128
+ return warnings;
129
+ }
130
+ function in_range(row, window) {
131
+ if (window.range_start === undefined)
132
+ return true;
133
+ return is_since(read_row_time(row), window.range_start);
134
+ }
135
+ function count_records_since(rows, start_time) {
136
+ return rows.filter((row) => is_since(read_row_created_at(row), start_time)).length;
137
+ }
138
+ function count_usage_users_since(rows, start_time) {
139
+ return count_unique(rows.filter((row) => is_since(row.created_at, start_time)).map((row) => read_string(row.user_id)));
140
+ }
141
+ function read_first_paid_times(rows) {
142
+ const first_paid_times = new Map();
143
+ for (const row of rows) {
144
+ const user_id = read_string(row.user_id);
145
+ const paid_time = read_row_time(row);
146
+ if (!user_id || !Number.isFinite(paid_time))
147
+ continue;
148
+ const current = first_paid_times.get(user_id);
149
+ if (current === undefined || paid_time < current)
150
+ first_paid_times.set(user_id, paid_time);
151
+ }
152
+ return first_paid_times;
153
+ }
154
+ function count_first_paid_in_range(first_paid_times, window) {
155
+ return [...first_paid_times.values()].filter((time) => window.range_start === undefined || time >= window.range_start).length;
156
+ }
157
+ function read_revenue(rows) {
158
+ const by_currency = new Map();
159
+ for (const row of rows) {
160
+ const currency = read_string(row.currency).toUpperCase() || "UNKNOWN";
161
+ by_currency.set(currency, (by_currency.get(currency) ?? 0) + read_number(row.amount_minor));
162
+ }
163
+ return [...by_currency.entries()]
164
+ .sort(([left], [right]) => left.localeCompare(right))
165
+ .map(([currency, amount_minor]) => ({
166
+ currency,
167
+ amount_minor,
168
+ display: format_money(currency, amount_minor),
169
+ }));
170
+ }
171
+ function read_top_services(rows) {
172
+ return read_top_counts(rows, "service").map((item) => ({ service: item.key, count: item.count }));
173
+ }
174
+ function read_top_models(rows) {
175
+ return read_top_counts(rows, "model_id").map((item) => ({ model_id: item.key, count: item.count }));
176
+ }
177
+ function read_top_counts(rows, key) {
178
+ const counts = new Map();
179
+ for (const row of rows) {
180
+ const value = read_string(row[key]);
181
+ if (!value)
182
+ continue;
183
+ counts.set(value, (counts.get(value) ?? 0) + 1);
184
+ }
185
+ return [...counts.entries()]
186
+ .map(([item_key, count]) => ({ key: item_key, count }))
187
+ .sort((left, right) => right.count - left.count || left.key.localeCompare(right.key))
188
+ .slice(0, 5);
189
+ }
190
+ function sort_recent(rows) {
191
+ return [...rows].sort((left, right) => read_row_time(right) - read_row_time(left));
192
+ }
193
+ function has_amount_minor(row) {
194
+ const amount = Number(row.amount_minor);
195
+ return Number.isFinite(amount) && amount > 0;
196
+ }
197
+ function read_row_created_at(row) {
198
+ return read_time(row.createdAt ?? row.created_at ?? row.auth_created_at ?? row.profile_created_at);
199
+ }
200
+ function read_row_time(row) {
201
+ const updated_time = read_time(row.updated_at ?? row.updatedAt);
202
+ return Number.isFinite(updated_time) ? updated_time : read_row_created_at(row);
203
+ }
204
+ function is_since(value, start_time) {
205
+ const time = read_time(value);
206
+ return Number.isFinite(time) && time >= start_time;
207
+ }
208
+ function read_time(value) {
209
+ if (value instanceof Date)
210
+ return value.getTime();
211
+ if (typeof value === "number" && Number.isFinite(value))
212
+ return normalize_epoch_time(value);
213
+ if (typeof value === "string" && value.trim()) {
214
+ const numeric_value = Number(value);
215
+ if (Number.isFinite(numeric_value) && /^-?\d+(?:\.\d+)?$/u.test(value.trim()))
216
+ return normalize_epoch_time(numeric_value);
217
+ return Date.parse(value);
218
+ }
219
+ return Number.NaN;
220
+ }
221
+ function normalize_epoch_time(value) {
222
+ return value > 0 && value < 10_000_000_000 ? value * 1000 : value;
223
+ }
224
+ function is_failed_payment_status(status) {
225
+ return status === "failed" || status === "expired" || status === "canceled";
226
+ }
227
+ function safe_rate(numerator, denominator) {
228
+ if (!Number.isFinite(numerator) || !Number.isFinite(denominator) || denominator <= 0)
229
+ return null;
230
+ return Number((numerator / denominator).toFixed(4));
231
+ }
232
+ function count_unique(values) {
233
+ return new Set(values.filter(Boolean)).size;
234
+ }
235
+ function read_string(value) {
236
+ return typeof value === "string" ? value.trim() : value == null ? "" : String(value).trim();
237
+ }
238
+ function read_number(value) {
239
+ const normalized = Number(value ?? 0);
240
+ return Number.isFinite(normalized) ? normalized : 0;
241
+ }
242
+ function format_money(currency, amount_minor) {
243
+ const divisor = currency_minor_divisor(currency);
244
+ const amount = amount_minor / divisor;
245
+ try {
246
+ return new Intl.NumberFormat("en-US", { style: "currency", currency }).format(amount);
247
+ }
248
+ catch {
249
+ return `${currency} ${amount.toFixed(divisor === 1 ? 0 : 2)}`;
250
+ }
251
+ }
252
+ function currency_minor_divisor(currency) {
253
+ const zero_decimal = new Set(["BIF", "CLP", "DJF", "GNF", "JPY", "KMF", "KRW", "MGA", "PYG", "RWF", "UGX", "VND", "VUV", "XAF", "XOF", "XPF"]);
254
+ return zero_decimal.has(currency.toUpperCase()) ? 1 : 100;
255
+ }
256
+ //# sourceMappingURL=dashboard-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-metrics.js","sourceRoot":"","sources":["../../../../src/federation/admin/dashboard/dashboard-metrics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/federation/admin/loop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAwBxE,wBAAsB,SAAS,CAC7B,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5F,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,GACA,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,iBAAiB,GAAG,MAAM,CAAC,CA+PzD"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/federation/admin/loop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AA0BxE,wBAAsB,SAAS,CAC7B,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5F,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,GACA,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,iBAAiB,GAAG,MAAM,CAAC,CA0QzD"}
@@ -9,6 +9,7 @@ import { City } from "@downcity/city";
9
9
  import { adminErrorMessage, isAdminAuthError } from "./auth-error.js";
10
10
  import { create_admin_tui_runtime } from "../tui/AdminTuiRuntime.js";
11
11
  import { manageEnv } from "./commands/service-env.js";
12
+ import { manageDashboard } from "./commands/dashboard.js";
12
13
  import { manageCities } from "./commands/cities.js";
13
14
  import { manageAccounts } from "./commands/accounts.js";
14
15
  import { manageBalance } from "./commands/balance.js";
@@ -19,6 +20,7 @@ import { manageModels } from "./commands/models.js";
19
20
  import { manageInstruction } from "./commands/instruction.js";
20
21
  import { t } from "../../shared/CliLocale.js";
21
22
  const commands = {
23
+ dashboard: manageDashboard,
22
24
  env: manageEnv,
23
25
  instruction: manageInstruction,
24
26
  models: manageModels,
@@ -57,6 +59,17 @@ export async function adminLoop(session, options) {
57
59
  value: "__section_management__",
58
60
  disabled: true,
59
61
  },
62
+ {
63
+ label: t({
64
+ zh: "用户系统 Dashboard",
65
+ en: "User system dashboard",
66
+ }),
67
+ value: "dashboard",
68
+ hint: t({
69
+ zh: "汇总注册用户、活跃用户、新注册、付费用户、收入、充值和用量等核心指标。",
70
+ en: "Summarize registered users, active users, new users, paid users, revenue, topups, and usage metrics.",
71
+ }),
72
+ },
60
73
  {
61
74
  label: t({
62
75
  zh: "环境变量",
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/federation/admin/loop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,CAAC,EAAE,MAAM,uBAAuB,CAAC;AAE1C,MAAM,QAAQ,GAA4F;IACxG,GAAG,EAAE,SAAS;IACd,WAAW,EAAE,iBAAiB;IAC9B,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,YAAY;CACrB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAqB,EACrB,OAKC;IAED,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC;QACrB,IAAI,EAAE,OAAO;QACb,cAAc,EAAE,OAAO,CAAC,QAAQ;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC;IAC7C,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,wBAAwB,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC;IAExF,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,UAAU,CAClC,OAAO,EAAE,KAAK;eACT,CAAC,QAAQ;gBACV,CAAC,CAAC,CAAC,CAAC;oBACF,EAAE,EAAE,UAAU;oBACd,EAAE,EAAE,kBAAkB;iBACvB,CAAC;gBACF,CAAC,CAAC,CAAC,CAAC;oBACF,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,gBAAgB;iBACrB,CAAC,CAAC,EACP;YACE;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,YAAY;iBACjB,CAAC;gBACF,KAAK,EAAE,wBAAwB;gBAC/B,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,KAAK;iBACV,CAAC;gBACF,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,WAAW;oBACf,EAAE,EAAE,0CAA0C;iBAC/C,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,QAAQ;iBACb,CAAC;gBACF,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,iBAAiB;oBACrB,EAAE,EAAE,mDAAmD;iBACxD,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,UAAU;iBACf,CAAC;gBACF,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,4DAA4D;oBAChE,EAAE,EAAE,uHAAuH;iBAC5H,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,OAAO;iBACZ,CAAC;gBACF,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,iCAAiC;oBACrC,EAAE,EAAE,uFAAuF;iBAC5F,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,SAAS;iBACd,CAAC;gBACF,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,oCAAoC;oBACxC,EAAE,EAAE,qGAAqG;iBAC1G,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,iBAAiB;iBACtB,CAAC;gBACF,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,qDAAqD;oBACzD,EAAE,EAAE,wGAAwG;iBAC7G,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,iBAAiB;iBACtB,CAAC;gBACF,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,gEAAgE;oBACpE,EAAE,EAAE,8HAA8H;iBACnI,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,kBAAkB;iBACvB,CAAC;gBACF,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,oDAAoD;oBACxD,EAAE,EAAE,+EAA+E;iBACpF,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,SAAS;oBACb,EAAE,EAAE,YAAY;iBACjB,CAAC;gBACF,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,iEAAiE;oBACrE,EAAE,EAAE,2FAA2F;iBAChG,CAAC;aACH;YACD,GAAG,CAAC,OAAO,EAAE,OAAO;gBAClB,CAAC,CAAC;oBACA;wBACE,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,MAAM;4BACV,EAAE,EAAE,UAAU;yBACf,CAAC;wBACF,KAAK,EAAE,sBAAsB;wBAC7B,QAAQ,EAAE,IAAI;qBACf;oBACD;wBACE,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,IAAI;4BACR,EAAE,EAAE,MAAM;yBACX,CAAC;wBACF,KAAK,EAAE,MAAM;wBACb,IAAI,EAAE,CAAC,CAAC;4BACN,EAAE,EAAE,sDAAsD;4BAC1D,EAAE,EAAE,+FAA+F;yBACpG,CAAC;qBACH;iBACF;gBACD,CAAC,CAAC,EAAE,CAAC;YACP;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,YAAY;iBACjB,CAAC;gBACF,KAAK,EAAE,wBAAwB;gBAC/B,QAAQ,EAAE,IAAI;aACf;YACD,GAAG,CAAC,QAAQ;gBACV,CAAC,CAAC,CAAC;wBACD,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,IAAI;4BACR,EAAE,EAAE,MAAM;yBACX,CAAC;wBACF,KAAK,EAAE,MAAM;qBACd,CAAC;gBACF,CAAC,CAAC;oBACA;wBACE,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,UAAU;4BACd,EAAE,EAAE,gBAAgB;yBACrB,CAAC;wBACF,KAAK,EAAE,QAAQ;qBAChB;oBACD;wBACE,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,MAAM;4BACV,EAAE,EAAE,QAAQ;yBACb,CAAC;wBACF,KAAK,EAAE,QAAQ;qBAChB;iBACF,CAAC;YACJ;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,MAAM;iBACX,CAAC;gBACF,KAAK,EAAE,MAAM;aACd;SACF,CACF,CAAC;QACF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,KAAK,MAAM,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9C,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;gBACtC,EAAE,EAAE,cAAc;gBAClB,EAAE,EAAE,iBAAiB;aACtB,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,OAAO,CAAC,YAAY,CACxB,OAAO,EACP,CAAC,CAAC;oBACA,EAAE,EAAE,SAAS;oBACb,EAAE,EAAE,8BAA8B;iBACnC,CAAC,CACH,CAAC;gBACF,SAAS;YACX,CAAC;YACD,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/federation/admin/loop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAE,CAAC,EAAE,MAAM,uBAAuB,CAAC;AAE1C,MAAM,QAAQ,GAA4F;IACxG,SAAS,EAAE,eAAe;IAC1B,GAAG,EAAE,SAAS;IACd,WAAW,EAAE,iBAAiB;IAC9B,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,YAAY;CACrB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAqB,EACrB,OAKC;IAED,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC;QACrB,IAAI,EAAE,OAAO;QACb,cAAc,EAAE,OAAO,CAAC,QAAQ;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC;IAC7C,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,wBAAwB,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC;IAExF,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,UAAU,CAClC,OAAO,EAAE,KAAK;eACT,CAAC,QAAQ;gBACV,CAAC,CAAC,CAAC,CAAC;oBACF,EAAE,EAAE,UAAU;oBACd,EAAE,EAAE,kBAAkB;iBACvB,CAAC;gBACF,CAAC,CAAC,CAAC,CAAC;oBACF,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,gBAAgB;iBACrB,CAAC,CAAC,EACP;YACE;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,YAAY;iBACjB,CAAC;gBACF,KAAK,EAAE,wBAAwB;gBAC/B,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,gBAAgB;oBACpB,EAAE,EAAE,uBAAuB;iBAC5B,CAAC;gBACF,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,qCAAqC;oBACzC,EAAE,EAAE,sGAAsG;iBAC3G,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,KAAK;iBACV,CAAC;gBACF,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,WAAW;oBACf,EAAE,EAAE,0CAA0C;iBAC/C,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,QAAQ;iBACb,CAAC;gBACF,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,iBAAiB;oBACrB,EAAE,EAAE,mDAAmD;iBACxD,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,UAAU;iBACf,CAAC;gBACF,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,4DAA4D;oBAChE,EAAE,EAAE,uHAAuH;iBAC5H,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,OAAO;iBACZ,CAAC;gBACF,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,iCAAiC;oBACrC,EAAE,EAAE,uFAAuF;iBAC5F,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,SAAS;iBACd,CAAC;gBACF,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,oCAAoC;oBACxC,EAAE,EAAE,qGAAqG;iBAC1G,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,iBAAiB;iBACtB,CAAC;gBACF,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,qDAAqD;oBACzD,EAAE,EAAE,wGAAwG;iBAC7G,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,iBAAiB;iBACtB,CAAC;gBACF,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,gEAAgE;oBACpE,EAAE,EAAE,8HAA8H;iBACnI,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,kBAAkB;iBACvB,CAAC;gBACF,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,oDAAoD;oBACxD,EAAE,EAAE,+EAA+E;iBACpF,CAAC;aACH;YACD;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,SAAS;oBACb,EAAE,EAAE,YAAY;iBACjB,CAAC;gBACF,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,iEAAiE;oBACrE,EAAE,EAAE,2FAA2F;iBAChG,CAAC;aACH;YACD,GAAG,CAAC,OAAO,EAAE,OAAO;gBAClB,CAAC,CAAC;oBACA;wBACE,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,MAAM;4BACV,EAAE,EAAE,UAAU;yBACf,CAAC;wBACF,KAAK,EAAE,sBAAsB;wBAC7B,QAAQ,EAAE,IAAI;qBACf;oBACD;wBACE,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,IAAI;4BACR,EAAE,EAAE,MAAM;yBACX,CAAC;wBACF,KAAK,EAAE,MAAM;wBACb,IAAI,EAAE,CAAC,CAAC;4BACN,EAAE,EAAE,sDAAsD;4BAC1D,EAAE,EAAE,+FAA+F;yBACpG,CAAC;qBACH;iBACF;gBACD,CAAC,CAAC,EAAE,CAAC;YACP;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,YAAY;iBACjB,CAAC;gBACF,KAAK,EAAE,wBAAwB;gBAC/B,QAAQ,EAAE,IAAI;aACf;YACD,GAAG,CAAC,QAAQ;gBACV,CAAC,CAAC,CAAC;wBACD,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,IAAI;4BACR,EAAE,EAAE,MAAM;yBACX,CAAC;wBACF,KAAK,EAAE,MAAM;qBACd,CAAC;gBACF,CAAC,CAAC;oBACA;wBACE,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,UAAU;4BACd,EAAE,EAAE,gBAAgB;yBACrB,CAAC;wBACF,KAAK,EAAE,QAAQ;qBAChB;oBACD;wBACE,KAAK,EAAE,CAAC,CAAC;4BACP,EAAE,EAAE,MAAM;4BACV,EAAE,EAAE,QAAQ;yBACb,CAAC;wBACF,KAAK,EAAE,QAAQ;qBAChB;iBACF,CAAC;YACJ;gBACE,KAAK,EAAE,CAAC,CAAC;oBACP,EAAE,EAAE,IAAI;oBACR,EAAE,EAAE,MAAM;iBACX,CAAC;gBACF,KAAK,EAAE,MAAM;aACd;SACF,CACF,CAAC;QACF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,KAAK,MAAM,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9C,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;gBACtC,EAAE,EAAE,cAAc;gBAClB,EAAE,EAAE,iBAAiB;aACtB,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,OAAO,CAAC,YAAY,CACxB,OAAO,EACP,CAAC,CAAC;oBACA,EAAE,EAAE,SAAS;oBACb,EAAE,EAAE,8BAA8B;iBACnC,CAAC,CACH,CAAC;gBACF,SAAS;YACX,CAAC;YACD,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * fed Admin 用户系统 Dashboard 类型。
3
+ *
4
+ * 关键说明(中文)
5
+ * - Dashboard 是 CLI 内部运营视图,数据来自现有 admin endpoints。
6
+ * - 类型按 raw data、metrics、view state 分层,避免展示逻辑直接依赖 endpoint 原始形态。
7
+ */
8
+ /**
9
+ * Dashboard 时间范围。
10
+ */
11
+ export type dashboard_range = "today" | "7d" | "30d" | "all";
12
+ /**
13
+ * Dashboard 服务状态。
14
+ */
15
+ export type dashboard_service_status = "ready" | "missing" | "error" | "partial";
16
+ /**
17
+ * Dashboard 依赖服务 ID。
18
+ */
19
+ export type dashboard_service_id = "accounts" | "usage" | "balance" | "payment";
20
+ /**
21
+ * Dashboard 视图。
22
+ */
23
+ export type dashboard_view = "overview" | "users" | "activity" | "payment" | "revenue" | "usage" | "health" | "availability";
24
+ /**
25
+ * Dashboard 服务读取状态。
26
+ */
27
+ export interface dashboard_service_state {
28
+ /** 服务读取状态。 */
29
+ status: dashboard_service_status;
30
+ /** 已成功读取的 endpoint。 */
31
+ fetched_endpoints: string[];
32
+ /** 读取失败或缺失说明。 */
33
+ message: string;
34
+ }
35
+ /**
36
+ * Dashboard 服务状态集合。
37
+ */
38
+ export type dashboard_service_state_map = Record<dashboard_service_id, dashboard_service_state>;
39
+ /**
40
+ * 通用原始记录。
41
+ */
42
+ export type dashboard_record = Record<string, unknown>;
43
+ /**
44
+ * Dashboard 原始数据缓存。
45
+ */
46
+ export interface dashboard_raw_data {
47
+ /** 生成/刷新时间。 */
48
+ fetched_at: string;
49
+ /** 服务状态。 */
50
+ services: dashboard_service_state_map;
51
+ /** accounts 用户记录。 */
52
+ accounts_users: dashboard_record[];
53
+ /** accounts session 记录。 */
54
+ accounts_sessions: dashboard_record[];
55
+ /** usage event 记录。 */
56
+ usage_events: dashboard_record[];
57
+ /** balance account 记录。 */
58
+ balance_users: dashboard_record[];
59
+ /** balance topup 记录。 */
60
+ balance_topups: dashboard_record[];
61
+ /** payment 记录。 */
62
+ payment_payments: dashboard_record[];
63
+ /** payment webhook event 记录。 */
64
+ payment_events: dashboard_record[];
65
+ }
66
+ /**
67
+ * Dashboard 时间窗口。
68
+ */
69
+ export interface dashboard_window {
70
+ /** 当前时间。 */
71
+ now: number;
72
+ /** 今日起点。 */
73
+ today_start: number;
74
+ /** 当前 range 起点;all 时为 undefined。 */
75
+ range_start?: number;
76
+ /** 近 7 天起点。 */
77
+ seven_days_start: number;
78
+ /** 近 30 天起点。 */
79
+ thirty_days_start: number;
80
+ }
81
+ /**
82
+ * 用户指标。
83
+ */
84
+ export interface dashboard_users_metrics {
85
+ /** 总注册用户数。 */
86
+ total_registered: number;
87
+ /** 今日新增用户数。 */
88
+ new_today: number;
89
+ /** 近 7 天新增用户数。 */
90
+ new_7d: number;
91
+ /** 近 30 天新增用户数。 */
92
+ new_30d: number;
93
+ /** 当前未过期 session 去重用户数。 */
94
+ current_session_users: number;
95
+ /** 当前 range 内新增用户数。 */
96
+ new_in_range: number;
97
+ /** 最近用户列表。 */
98
+ recent_users: dashboard_record[];
99
+ }
100
+ /**
101
+ * 活跃指标。
102
+ */
103
+ export interface dashboard_activity_metrics {
104
+ /** 今日活跃用户数。 */
105
+ active_today: number;
106
+ /** 近 7 天活跃用户数。 */
107
+ active_7d: number;
108
+ /** 近 30 天活跃用户数。 */
109
+ active_30d: number;
110
+ /** 当前 range 内活跃用户数。 */
111
+ active_in_range: number;
112
+ /** 今日活跃 / 30 天活跃。 */
113
+ stickiness_today_over_30d: number | null;
114
+ /** 最近 usage event。 */
115
+ recent_events: dashboard_record[];
116
+ }
117
+ /**
118
+ * 支付指标。
119
+ */
120
+ export interface dashboard_payment_metrics {
121
+ /** 至少有一笔 paid payment 的用户数。 */
122
+ paying_users_total: number;
123
+ /** 当前 range 内有 paid payment 的用户数。 */
124
+ paying_users_range: number;
125
+ /** 第一笔 paid payment 发生在当前 range 内的用户数。 */
126
+ first_paid_users_range: number;
127
+ /** 当前 range 内成功订单数。 */
128
+ paid_orders_range: number;
129
+ /** 全量待支付订单数。 */
130
+ pending_orders: number;
131
+ /** 当前 range 内失败/取消/过期订单数。 */
132
+ failed_orders_range: number;
133
+ /** 注册到付费转化率。 */
134
+ registered_to_paid_rate: number | null;
135
+ /** 当前 range 活跃到当前 range 付费转化率。 */
136
+ active_to_paid_rate: number | null;
137
+ /** 最近 payment 记录。 */
138
+ recent_payments: dashboard_record[];
139
+ }
140
+ /**
141
+ * 金额聚合。
142
+ */
143
+ export interface dashboard_money_group {
144
+ /** 币种。 */
145
+ currency: string;
146
+ /** 最小货币单位金额。 */
147
+ amount_minor: number;
148
+ /** 展示文本。 */
149
+ display: string;
150
+ }
151
+ /**
152
+ * 收入指标。
153
+ */
154
+ export interface dashboard_revenue_metrics {
155
+ /** 全量收入。 */
156
+ total: dashboard_money_group[];
157
+ /** 当前 range 收入。 */
158
+ range: dashboard_money_group[];
159
+ /** 今日收入。 */
160
+ today: dashboard_money_group[];
161
+ }
162
+ /**
163
+ * 余额指标。
164
+ */
165
+ export interface dashboard_balance_metrics {
166
+ /** 当前余额 credits 总和。 */
167
+ current_balance_total: number;
168
+ /** 全量已支付 topup credits 总和。 */
169
+ credited_total: number;
170
+ /** 当前 range 内已支付 topup credits。 */
171
+ paid_topup_credits_range: number;
172
+ /** 全量 pending topup 数。 */
173
+ pending_topups: number;
174
+ }
175
+ /**
176
+ * 用量指标。
177
+ */
178
+ export interface dashboard_usage_metrics {
179
+ /** 总 usage event 数。 */
180
+ total_events: number;
181
+ /** 当前 range 内 event 数。 */
182
+ events_range: number;
183
+ /** 当前 range 内 success event 数。 */
184
+ success_events_range: number;
185
+ /** 当前 range 内 error event 数。 */
186
+ error_events_range: number;
187
+ /** 当前 range 内错误率。 */
188
+ error_rate_range: number | null;
189
+ /** Top services。 */
190
+ top_services: Array<{
191
+ service: string;
192
+ count: number;
193
+ }>;
194
+ /** Top models。 */
195
+ top_models: Array<{
196
+ model_id: string;
197
+ count: number;
198
+ }>;
199
+ }
200
+ /**
201
+ * 健康指标。
202
+ */
203
+ export interface dashboard_health_metrics {
204
+ /** paid payment 缺少 amount_minor 的数量。 */
205
+ missing_revenue_amount_count: number;
206
+ /** payment webhook 同步失败事件数。 */
207
+ payment_webhook_failed_events: number;
208
+ /** 当前 range 内 usage 错误率。 */
209
+ usage_error_rate_range: number | null;
210
+ /** 数据健康警告。 */
211
+ stale_data_warnings: string[];
212
+ }
213
+ /**
214
+ * Dashboard 指标快照。
215
+ */
216
+ export interface dashboard_snapshot {
217
+ /** 指标生成时间。 */
218
+ generated_at: string;
219
+ /** 当前 range。 */
220
+ range: dashboard_range;
221
+ /** 服务读取状态。 */
222
+ services: dashboard_service_state_map;
223
+ /** 用户指标。 */
224
+ users: dashboard_users_metrics;
225
+ /** 活跃指标。 */
226
+ activity: dashboard_activity_metrics;
227
+ /** 支付指标。 */
228
+ payment: dashboard_payment_metrics;
229
+ /** 收入指标。 */
230
+ revenue: dashboard_revenue_metrics;
231
+ /** 余额指标。 */
232
+ balance: dashboard_balance_metrics;
233
+ /** 用量指标。 */
234
+ usage: dashboard_usage_metrics;
235
+ /** 健康指标。 */
236
+ health: dashboard_health_metrics;
237
+ }
238
+ //# sourceMappingURL=AdminDashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminDashboard.d.ts","sourceRoot":"","sources":["../../../src/federation/types/AdminDashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * fed Admin 用户系统 Dashboard 类型。
3
+ *
4
+ * 关键说明(中文)
5
+ * - Dashboard 是 CLI 内部运营视图,数据来自现有 admin endpoints。
6
+ * - 类型按 raw data、metrics、view state 分层,避免展示逻辑直接依赖 endpoint 原始形态。
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=AdminDashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminDashboard.js","sourceRoot":"","sources":["../../../src/federation/types/AdminDashboard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "downcity",
3
- "version": "1.1.279",
3
+ "version": "1.1.284",
4
4
  "type": "module",
5
5
  "description": "Downcity CLI — unified City and Agent host management",
6
6
  "bin": {
@@ -23,12 +23,12 @@
23
23
  "@ai-sdk/openai": "^3.0.67",
24
24
  "@ai-sdk/openai-compatible": "^2.0.48",
25
25
  "@ai-sdk/xai": "^3.0.93",
26
- "@downcity/agent": "^1.1.189",
27
- "@downcity/city": "^0.2.139",
28
- "@downcity/plugins": "^1.0.137",
29
- "@downcity/server": "^0.1.43",
30
- "@downcity/shell": "^0.1.61",
31
- "@downcity/type": "0.1.94",
26
+ "@downcity/agent": "^1.1.195",
27
+ "@downcity/city": "^0.2.144",
28
+ "@downcity/plugins": "^1.0.142",
29
+ "@downcity/server": "^0.1.48",
30
+ "@downcity/shell": "^0.1.66",
31
+ "@downcity/type": "0.1.99",
32
32
  "@earendil-works/pi-tui": "^0.74.2",
33
33
  "@larksuiteoapi/node-sdk": "^1.66.0",
34
34
  "@openrouter/ai-sdk-provider": "^2.9.0",