downcity 1.1.128 → 1.1.145
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.
- package/city/admin/commands/accounts.d.ts +2 -1
- package/city/admin/commands/accounts.d.ts.map +1 -1
- package/city/admin/commands/accounts.js +26 -25
- package/city/admin/commands/accounts.js.map +1 -1
- package/city/admin/commands/balance.d.ts +2 -1
- package/city/admin/commands/balance.d.ts.map +1 -1
- package/city/admin/commands/balance.js +88 -74
- package/city/admin/commands/balance.js.map +1 -1
- package/city/admin/commands/custom.d.ts +2 -1
- package/city/admin/commands/custom.d.ts.map +1 -1
- package/city/admin/commands/custom.js +16 -19
- package/city/admin/commands/custom.js.map +1 -1
- package/city/admin/commands/instruction.d.ts +2 -1
- package/city/admin/commands/instruction.d.ts.map +1 -1
- package/city/admin/commands/instruction.js +3 -2
- package/city/admin/commands/instruction.js.map +1 -1
- package/city/admin/commands/models.d.ts +2 -1
- package/city/admin/commands/models.d.ts.map +1 -1
- package/city/admin/commands/models.js +35 -31
- package/city/admin/commands/models.js.map +1 -1
- package/city/admin/commands/payment.d.ts +2 -1
- package/city/admin/commands/payment.d.ts.map +1 -1
- package/city/admin/commands/payment.js +28 -28
- package/city/admin/commands/payment.js.map +1 -1
- package/city/admin/commands/service-env.d.ts +2 -1
- package/city/admin/commands/service-env.d.ts.map +1 -1
- package/city/admin/commands/service-env.js +72 -74
- package/city/admin/commands/service-env.js.map +1 -1
- package/city/admin/commands/towns.d.ts +2 -1
- package/city/admin/commands/towns.d.ts.map +1 -1
- package/city/admin/commands/towns.js +39 -41
- package/city/admin/commands/towns.js.map +1 -1
- package/city/admin/commands/usage.d.ts +2 -1
- package/city/admin/commands/usage.d.ts.map +1 -1
- package/city/admin/commands/usage.js +27 -25
- package/city/admin/commands/usage.js.map +1 -1
- package/city/admin/loop.d.ts +6 -2
- package/city/admin/loop.d.ts.map +1 -1
- package/city/admin/loop.js +124 -90
- package/city/admin/loop.js.map +1 -1
- package/city/app.d.ts.map +1 -1
- package/city/app.js +159 -63
- package/city/app.js.map +1 -1
- package/city/auth/admin.js +2 -2
- package/city/auth/admin.js.map +1 -1
- package/city/auth/server-switch.d.ts.map +1 -1
- package/city/auth/server-switch.js +3 -39
- package/city/auth/server-switch.js.map +1 -1
- package/city/command/RootCommand.d.ts.map +1 -1
- package/city/command/RootCommand.js +6 -1
- package/city/command/RootCommand.js.map +1 -1
- package/city/core/env.d.ts +1 -1
- package/city/core/env.d.ts.map +1 -1
- package/city/core/env.js +4 -3
- package/city/core/env.js.map +1 -1
- package/city/core/session.d.ts +11 -0
- package/city/core/session.d.ts.map +1 -1
- package/city/core/session.js +26 -0
- package/city/core/session.js.map +1 -1
- package/city/core/ui.d.ts +1 -1
- package/city/core/ui.d.ts.map +1 -1
- package/city/core/ui.js +1 -1
- package/city/core/ui.js.map +1 -1
- package/city/create/commands/create.js +1 -1
- package/city/create/commands/create.js.map +1 -1
- package/city/deploy/runtime/CloudflareAccountResolver.js +1 -1
- package/city/deploy/runtime/CloudflareAccountResolver.js.map +1 -1
- package/city/home/HomeMenu.d.ts.map +1 -1
- package/city/home/HomeMenu.js +32 -2
- package/city/home/HomeMenu.js.map +1 -1
- package/city/i18n.d.ts +1 -0
- package/city/i18n.d.ts.map +1 -1
- package/city/i18n.js +1 -0
- package/city/i18n.js.map +1 -1
- package/city/index.d.ts +1 -0
- package/city/index.d.ts.map +1 -1
- package/city/index.js +14 -2
- package/city/index.js.map +1 -1
- package/city/tui/AdminTuiRuntime.d.ts +13 -0
- package/city/tui/AdminTuiRuntime.d.ts.map +1 -0
- package/city/tui/AdminTuiRuntime.js +559 -0
- package/city/tui/AdminTuiRuntime.js.map +1 -0
- package/city/tui/CityDashboard.d.ts +22 -0
- package/city/tui/CityDashboard.d.ts.map +1 -0
- package/city/tui/CityDashboard.js +280 -0
- package/city/tui/CityDashboard.js.map +1 -0
- package/city/tui/Prompts.d.ts +61 -0
- package/city/tui/Prompts.d.ts.map +1 -0
- package/city/tui/Prompts.js +394 -0
- package/city/tui/Prompts.js.map +1 -0
- package/city/types/AdminTui.d.ts +68 -0
- package/city/types/AdminTui.d.ts.map +1 -0
- package/city/types/AdminTui.js +9 -0
- package/city/types/AdminTui.js.map +1 -0
- package/city/types/Interactive.d.ts +2 -6
- package/city/types/Interactive.d.ts.map +1 -1
- package/city/types/Tui.d.ts +25 -0
- package/city/types/Tui.d.ts.map +1 -0
- package/city/types/Tui.js +9 -0
- package/city/types/Tui.js.map +1 -0
- package/city/workspace/ServerWorkspace.d.ts +3 -2
- package/city/workspace/ServerWorkspace.d.ts.map +1 -1
- package/city/workspace/ServerWorkspace.js +262 -7
- package/city/workspace/ServerWorkspace.js.map +1 -1
- package/package.json +5 -5
- package/town/agent/AgentChat.d.ts.map +1 -1
- package/town/agent/AgentChat.js +21 -88
- package/town/agent/AgentChat.js.map +1 -1
- package/town/agent/AgentChatInteractiveRenderer.d.ts +2 -2
- package/town/agent/AgentChatInteractiveRenderer.d.ts.map +1 -1
- package/town/agent/AgentChatInteractiveRenderer.js.map +1 -1
- package/town/agent/AgentChatTui.d.ts +25 -0
- package/town/agent/AgentChatTui.d.ts.map +1 -0
- package/town/agent/AgentChatTui.js +253 -0
- package/town/agent/AgentChatTui.js.map +1 -0
- package/town/agent/AgentManager.js +1 -1
- package/town/agent/AgentManager.js.map +1 -1
- package/town/agent/AgentReset.js +1 -1
- package/town/agent/AgentReset.js.map +1 -1
- package/town/agent/AgentSelection.js +1 -1
- package/town/agent/AgentSelection.js.map +1 -1
- package/town/agent/Init.js +1 -1
- package/town/agent/Init.js.map +1 -1
- package/town/command/ChatAuthCommand.js +1 -1
- package/town/command/ChatAuthCommand.js.map +1 -1
- package/town/command/PluginCommand.js +1 -1
- package/town/command/PluginCommand.js.map +1 -1
- package/town/command/RootCommand.d.ts.map +1 -1
- package/town/command/RootCommand.js +6 -4
- package/town/command/RootCommand.js.map +1 -1
- package/town/command/TokenCommand.js +1 -1
- package/town/command/TokenCommand.js.map +1 -1
- package/town/index.d.ts +1 -0
- package/town/index.d.ts.map +1 -1
- package/town/index.js +14 -2
- package/town/index.js.map +1 -1
- package/town/shared/ChatManager.d.ts.map +1 -1
- package/town/shared/ChatManager.js +1 -1
- package/town/shared/ChatManager.js.map +1 -1
- package/town/shared/CityConnection.d.ts.map +1 -1
- package/town/shared/CityConnection.js +31 -3
- package/town/shared/CityConnection.js.map +1 -1
- package/town/shared/CityStateStore.d.ts +9 -0
- package/town/shared/CityStateStore.d.ts.map +1 -1
- package/town/shared/CityStateStore.js +25 -0
- package/town/shared/CityStateStore.js.map +1 -1
- package/town/shared/CityUserLogin.js +1 -1
- package/town/shared/CityUserLogin.js.map +1 -1
- package/town/shared/CliLocale.d.ts +1 -0
- package/town/shared/CliLocale.d.ts.map +1 -1
- package/town/shared/CliLocale.js +1 -0
- package/town/shared/CliLocale.js.map +1 -1
- package/town/shared/InteractiveLocale.d.ts +12 -0
- package/town/shared/InteractiveLocale.d.ts.map +1 -0
- package/town/shared/InteractiveLocale.js +74 -0
- package/town/shared/InteractiveLocale.js.map +1 -0
- package/town/shared/TownManager.d.ts.map +1 -1
- package/town/shared/TownManager.js +84 -54
- package/town/shared/TownManager.js.map +1 -1
- package/town/tui/Prompts.d.ts +42 -0
- package/town/tui/Prompts.d.ts.map +1 -0
- package/town/tui/Prompts.js +510 -0
- package/town/tui/Prompts.js.map +1 -0
- package/town/tui/TownDashboard.d.ts +20 -0
- package/town/tui/TownDashboard.d.ts.map +1 -0
- package/town/tui/TownDashboard.js +386 -0
- package/town/tui/TownDashboard.js.map +1 -0
- package/town/types/AgentChatInteractive.d.ts +17 -0
- package/town/types/AgentChatInteractive.d.ts.map +1 -1
- package/town/types/AgentChatInteractive.js +0 -7
- package/town/types/AgentChatInteractive.js.map +1 -1
- package/town/types/TownCityState.d.ts +5 -0
- package/town/types/TownCityState.d.ts.map +1 -1
- package/town/types/Tui.d.ts +25 -0
- package/town/types/Tui.d.ts.map +1 -0
- package/town/types/Tui.js +9 -0
- package/town/types/Tui.js.map +1 -0
- package/city/workspace/ServerManagement.d.ts +0 -13
- package/city/workspace/ServerManagement.d.ts.map +0 -1
- package/city/workspace/ServerManagement.js +0 -144
- package/city/workspace/ServerManagement.js.map +0 -1
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
* Admin Accounts 管理命令。
|
|
3
3
|
*/
|
|
4
4
|
import { City } from "@downcity/city";
|
|
5
|
-
|
|
5
|
+
import type { admin_tui_runtime } from "../../types/AdminTui.js";
|
|
6
|
+
export declare function manageAccounts(a: City, _baseUrl: string, runtime: admin_tui_runtime): Promise<void>;
|
|
6
7
|
//# sourceMappingURL=accounts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,wBAAsB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCzG"}
|
|
@@ -1,43 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Admin Accounts 管理命令。
|
|
3
3
|
*/
|
|
4
|
-
import { select, isCancel } from "@clack/prompts";
|
|
5
|
-
import { showError } from "../../core/ui.js";
|
|
6
4
|
import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
|
|
7
|
-
export async function manageAccounts(a) {
|
|
5
|
+
export async function manageAccounts(a, _baseUrl, runtime) {
|
|
8
6
|
const svc = a.service("accounts");
|
|
9
7
|
while (true) {
|
|
10
|
-
const act = await select(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
],
|
|
17
|
-
});
|
|
18
|
-
if (!act || isCancel(act) || act === "back")
|
|
8
|
+
const act = await runtime.select("Accounts", [
|
|
9
|
+
{ label: "List users", value: "users" },
|
|
10
|
+
{ label: "List sessions", value: "sessions" },
|
|
11
|
+
{ label: "Back", value: "back" },
|
|
12
|
+
]);
|
|
13
|
+
if (!act || act === "back")
|
|
19
14
|
return;
|
|
20
15
|
try {
|
|
21
16
|
if (act === "users") {
|
|
22
|
-
const b = await svc.get("users");
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
const b = await runtime.with_loading("Users", async () => await svc.get("users"));
|
|
18
|
+
await runtime.show_table({
|
|
19
|
+
title: `${b.items.length} Users`,
|
|
20
|
+
columns: ["User ID", "Email", "Created"],
|
|
21
|
+
rows: b.items.map((u) => ({
|
|
22
|
+
cells: [u.user_id, u.email, u.created_at.slice(0, 10)],
|
|
23
|
+
})),
|
|
24
|
+
empty_message: "No users.",
|
|
25
|
+
});
|
|
28
26
|
}
|
|
29
27
|
else {
|
|
30
|
-
const b = await svc.get("sessions");
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
const b = await runtime.with_loading("Sessions", async () => await svc.get("sessions"));
|
|
29
|
+
await runtime.show_table({
|
|
30
|
+
title: `${b.items.length} Sessions`,
|
|
31
|
+
columns: ["Session ID", "User ID", "Status"],
|
|
32
|
+
rows: b.items.map((s) => ({
|
|
33
|
+
cells: [s.session_id, s.user_id, s.status],
|
|
34
|
+
})),
|
|
35
|
+
empty_message: "No sessions.",
|
|
36
|
+
});
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
catch (e) {
|
|
39
40
|
rethrowAdminAuthError(e);
|
|
40
|
-
|
|
41
|
+
await runtime.show_message("error", adminErrorMessage(e));
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/admin/commands/accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/admin/commands/accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,CAAO,EAAE,QAAgB,EAAE,OAA0B;IACxF,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE;YACzC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE;YACvC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;YAC7C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;SACjC,CAAC,CAAC;QACL,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO;QAEnC,IAAI,CAAC;YACH,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAsE,OAAO,CAAC,CAAC,CAAC;gBACvJ,MAAM,OAAO,CAAC,UAAU,CAAC;oBACvB,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,QAAQ;oBAChC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC;oBACxC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACxB,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;qBACvD,CAAC,CAAC;oBACH,aAAa,EAAE,WAAW;iBAC3B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAuE,UAAU,CAAC,CAAC,CAAC;gBAC9J,MAAM,OAAO,CAAC,UAAU,CAAC;oBACvB,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,WAAW;oBACnC,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;oBAC5C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACxB,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;qBAC3C,CAAC,CAAC;oBACH,aAAa,EAAE,cAAc;iBAC9B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
* Admin Balance 管理命令。
|
|
3
3
|
*/
|
|
4
4
|
import { City } from "@downcity/city";
|
|
5
|
-
|
|
5
|
+
import type { admin_tui_runtime } from "../../types/AdminTui.js";
|
|
6
|
+
export declare function manageBalance(a: City, _baseUrl: string, runtime: admin_tui_runtime): Promise<void>;
|
|
6
7
|
//# sourceMappingURL=balance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/balance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/balance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,wBAAsB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6JxG"}
|
|
@@ -1,143 +1,157 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Admin Balance 管理命令。
|
|
3
3
|
*/
|
|
4
|
-
import { isCancel, select } from "@clack/prompts";
|
|
5
|
-
import { askText, showError, showSuccess } from "../../core/ui.js";
|
|
6
4
|
import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
|
|
7
|
-
export async function manageBalance(a) {
|
|
5
|
+
export async function manageBalance(a, _baseUrl, runtime) {
|
|
8
6
|
while (true) {
|
|
9
|
-
const act = await select(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
],
|
|
24
|
-
});
|
|
25
|
-
if (!act || isCancel(act) || act === "back")
|
|
7
|
+
const act = await runtime.select("Balance", [
|
|
8
|
+
{ label: "List users", value: "users" },
|
|
9
|
+
{ label: "History", value: "history" },
|
|
10
|
+
{ label: "Topups", value: "topups" },
|
|
11
|
+
{ label: "Redeem codes", value: "redeem_codes" },
|
|
12
|
+
{ label: "Add balance", value: "add" },
|
|
13
|
+
{ label: "Subtract balance", value: "sub" },
|
|
14
|
+
{ label: "Finish topup", value: "finish" },
|
|
15
|
+
{ label: "Cancel topup", value: "cancel" },
|
|
16
|
+
{ label: "Create redeem code", value: "create_redeem_code" },
|
|
17
|
+
{ label: "Disable redeem code", value: "disable_redeem_code" },
|
|
18
|
+
{ label: "Back", value: "back" },
|
|
19
|
+
]);
|
|
20
|
+
if (!act || act === "back")
|
|
26
21
|
return;
|
|
27
22
|
try {
|
|
28
23
|
if (act === "users") {
|
|
29
|
-
const items = await a.balance.listUsers(30);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
24
|
+
const items = await runtime.with_loading("Balance Accounts", async () => await a.balance.listUsers(30));
|
|
25
|
+
await runtime.show_table({
|
|
26
|
+
title: `${items.length} Balance Accounts`,
|
|
27
|
+
columns: ["User", "Balance", "Unit", "Updated"],
|
|
28
|
+
rows: items.map((item) => ({
|
|
29
|
+
cells: [item.user_id, String(item.balance), item.unit, item.updated_at.slice(0, 19)],
|
|
30
|
+
})),
|
|
31
|
+
empty_message: "No balance accounts.",
|
|
32
|
+
});
|
|
35
33
|
continue;
|
|
36
34
|
}
|
|
37
35
|
if (act === "history") {
|
|
38
|
-
const userId = await
|
|
39
|
-
const items = await a.balance.listHistory({
|
|
36
|
+
const userId = await runtime.text("user_id (optional)");
|
|
37
|
+
const items = await runtime.with_loading("Balance History", async () => await a.balance.listHistory({
|
|
40
38
|
limit: 30,
|
|
41
39
|
user_id: userId ?? "",
|
|
40
|
+
}));
|
|
41
|
+
await runtime.show_table({
|
|
42
|
+
title: `${items.length} Balance History`,
|
|
43
|
+
columns: ["Created", "User", "Kind", "Amount", "Balance After", "Note"],
|
|
44
|
+
rows: items.map((item) => ({
|
|
45
|
+
cells: [item.created_at.slice(0, 19), item.user_id, item.kind, String(item.amount), String(item.balance_after), item.note],
|
|
46
|
+
})),
|
|
47
|
+
empty_message: "No balance history.",
|
|
42
48
|
});
|
|
43
|
-
console.log(`\n${items.length} balance history entries:\n`);
|
|
44
|
-
for (const item of items) {
|
|
45
|
-
console.log(` ${item.created_at.slice(0, 19)} ${item.user_id.padEnd(20)} ${item.kind.padEnd(8)} ${String(item.amount).padStart(6)} -> ${String(item.balance_after).padStart(6)} ${item.note}`);
|
|
46
|
-
}
|
|
47
|
-
console.log("");
|
|
48
49
|
continue;
|
|
49
50
|
}
|
|
50
51
|
if (act === "topups") {
|
|
51
|
-
const userId = await
|
|
52
|
-
const items = await a.balance.listTopups({
|
|
52
|
+
const userId = await runtime.text("user_id (optional)");
|
|
53
|
+
const items = await runtime.with_loading("Topups", async () => await a.balance.listTopups({
|
|
53
54
|
limit: 30,
|
|
54
55
|
user_id: userId ?? "",
|
|
56
|
+
}));
|
|
57
|
+
await runtime.show_table({
|
|
58
|
+
title: `${items.length} Topups`,
|
|
59
|
+
columns: ["Topup ID", "User", "Amount", "Unit", "Status", "Note"],
|
|
60
|
+
rows: items.map((item) => ({
|
|
61
|
+
cells: [item.topup_id, item.user_id, String(item.amount), item.unit, item.status, item.note],
|
|
62
|
+
})),
|
|
63
|
+
empty_message: "No topups.",
|
|
55
64
|
});
|
|
56
|
-
console.log(`\n${items.length} topup orders:\n`);
|
|
57
|
-
for (const item of items) {
|
|
58
|
-
console.log(` ${item.topup_id.padEnd(24)} ${item.user_id.padEnd(20)} ${String(item.amount).padStart(6)} ${item.unit.padEnd(10)} [${item.status}] ${item.note}`);
|
|
59
|
-
}
|
|
60
|
-
console.log("");
|
|
61
65
|
continue;
|
|
62
66
|
}
|
|
63
67
|
if (act === "redeem_codes") {
|
|
64
|
-
const status = await
|
|
65
|
-
const userId = await
|
|
66
|
-
const items = await a.balance.redeemCodes.list({
|
|
68
|
+
const status = await runtime.text("status (optional: active/redeemed/disabled)");
|
|
69
|
+
const userId = await runtime.text("redeemed_by_user_id (optional)");
|
|
70
|
+
const items = await runtime.with_loading("Redeem Codes", async () => await a.balance.redeemCodes.list({
|
|
67
71
|
limit: 30,
|
|
68
72
|
status: normalizeRedeemCodeStatus(status),
|
|
69
73
|
user_id: userId ?? "",
|
|
74
|
+
}));
|
|
75
|
+
await runtime.show_table({
|
|
76
|
+
title: `${items.length} Redeem Codes`,
|
|
77
|
+
columns: ["Redeem Code ID", "Code", "Amount", "Unit", "Status", "Owner", "Note"],
|
|
78
|
+
rows: items.map((item) => ({
|
|
79
|
+
cells: [
|
|
80
|
+
item.redeem_code_id,
|
|
81
|
+
item.code_mask,
|
|
82
|
+
String(item.amount),
|
|
83
|
+
item.unit,
|
|
84
|
+
item.status,
|
|
85
|
+
item.redeemed_by_user_id || "-",
|
|
86
|
+
item.note,
|
|
87
|
+
],
|
|
88
|
+
})),
|
|
89
|
+
empty_message: "No redeem codes.",
|
|
70
90
|
});
|
|
71
|
-
console.log(`\n${items.length} redeem codes:\n`);
|
|
72
|
-
for (const item of items) {
|
|
73
|
-
const owner = item.redeemed_by_user_id || "-";
|
|
74
|
-
console.log(` ${item.redeem_code_id.padEnd(24)} ${item.code_mask.padEnd(22)} ${String(item.amount).padStart(6)} ${item.unit.padEnd(10)} [${item.status.padEnd(8)}] ${owner.padEnd(20)} ${item.note}`);
|
|
75
|
-
}
|
|
76
|
-
console.log("");
|
|
77
91
|
continue;
|
|
78
92
|
}
|
|
79
93
|
if (act === "add" || act === "sub") {
|
|
80
|
-
const userId = await
|
|
94
|
+
const userId = await runtime.text("user_id");
|
|
81
95
|
if (!userId)
|
|
82
96
|
continue;
|
|
83
|
-
const rawAmount = await
|
|
97
|
+
const rawAmount = await runtime.text("amount");
|
|
84
98
|
if (!rawAmount)
|
|
85
99
|
continue;
|
|
86
100
|
const amount = Number(rawAmount);
|
|
87
101
|
if (!Number.isInteger(amount) || amount <= 0) {
|
|
88
|
-
|
|
102
|
+
await runtime.show_message("error", "amount must be a positive integer");
|
|
89
103
|
continue;
|
|
90
104
|
}
|
|
91
|
-
const note = await
|
|
92
|
-
const account = act === "add"
|
|
105
|
+
const note = await runtime.text("note (optional)");
|
|
106
|
+
const account = await runtime.with_loading("Update Balance", async () => act === "add"
|
|
93
107
|
? await a.balance.add({ user_id: userId, amount, note: note ?? "" })
|
|
94
|
-
: await a.balance.sub({ user_id: userId, amount, note: note ?? "" });
|
|
95
|
-
|
|
108
|
+
: await a.balance.sub({ user_id: userId, amount, note: note ?? "" }));
|
|
109
|
+
await runtime.show_message("success", `balance updated: ${account.user_id} -> ${account.balance} ${account.unit}`);
|
|
96
110
|
continue;
|
|
97
111
|
}
|
|
98
112
|
if (act === "create_redeem_code") {
|
|
99
|
-
const rawAmount = await
|
|
113
|
+
const rawAmount = await runtime.text("amount");
|
|
100
114
|
if (!rawAmount)
|
|
101
115
|
continue;
|
|
102
116
|
const amount = Number(rawAmount);
|
|
103
117
|
if (!Number.isInteger(amount) || amount <= 0) {
|
|
104
|
-
|
|
118
|
+
await runtime.show_message("error", "amount must be a positive integer");
|
|
105
119
|
continue;
|
|
106
120
|
}
|
|
107
|
-
const code = await
|
|
108
|
-
const note = await
|
|
109
|
-
const issued = await a.balance.redeemCodes.create({
|
|
121
|
+
const code = await runtime.text("custom redeem_code (optional)");
|
|
122
|
+
const note = await runtime.text("note (optional)");
|
|
123
|
+
const issued = await runtime.with_loading("Create Redeem Code", async () => await a.balance.redeemCodes.create({
|
|
110
124
|
amount,
|
|
111
125
|
code: code ?? "",
|
|
112
126
|
note: note ?? "",
|
|
113
|
-
});
|
|
114
|
-
|
|
127
|
+
}));
|
|
128
|
+
await runtime.show_text("Redeem Code Created", `redeem_code created: ${issued.redeem_code_id}\ncode: ${issued.code}\namount: +${issued.amount} ${issued.unit}`);
|
|
115
129
|
continue;
|
|
116
130
|
}
|
|
117
131
|
if (act === "disable_redeem_code") {
|
|
118
|
-
const redeemCodeId = await
|
|
132
|
+
const redeemCodeId = await runtime.text("redeem_code_id");
|
|
119
133
|
if (!redeemCodeId)
|
|
120
134
|
continue;
|
|
121
|
-
const note = await
|
|
122
|
-
const item = await a.balance.redeemCodes.disable({
|
|
135
|
+
const note = await runtime.text("note (optional)");
|
|
136
|
+
const item = await runtime.with_loading("Disable Redeem Code", async () => await a.balance.redeemCodes.disable({
|
|
123
137
|
redeem_code_id: redeemCodeId,
|
|
124
138
|
note: note ?? "",
|
|
125
|
-
});
|
|
126
|
-
|
|
139
|
+
}));
|
|
140
|
+
await runtime.show_message("success", `redeem_code updated: ${item.redeem_code_id} -> ${item.status}`);
|
|
127
141
|
continue;
|
|
128
142
|
}
|
|
129
|
-
const topupId = await
|
|
143
|
+
const topupId = await runtime.text("topup_id");
|
|
130
144
|
if (!topupId)
|
|
131
145
|
continue;
|
|
132
|
-
const note = await
|
|
133
|
-
const topup = act === "finish"
|
|
146
|
+
const note = await runtime.text("note (optional)");
|
|
147
|
+
const topup = await runtime.with_loading("Update Topup", async () => act === "finish"
|
|
134
148
|
? await a.balance.finishTopup({ topup_id: topupId, note: note ?? "" })
|
|
135
|
-
: await a.balance.cancelTopup({ topup_id: topupId, note: note ?? "" });
|
|
136
|
-
|
|
149
|
+
: await a.balance.cancelTopup({ topup_id: topupId, note: note ?? "" }));
|
|
150
|
+
await runtime.show_message("success", `topup updated: ${topup.topup_id} -> ${topup.status}`);
|
|
137
151
|
}
|
|
138
152
|
catch (e) {
|
|
139
153
|
rethrowAdminAuthError(e);
|
|
140
|
-
|
|
154
|
+
await runtime.show_message("error", adminErrorMessage(e));
|
|
141
155
|
}
|
|
142
156
|
}
|
|
143
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/admin/commands/balance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/admin/commands/balance.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
* Admin Custom Service 命令。
|
|
3
3
|
*/
|
|
4
4
|
import { City } from "@downcity/city";
|
|
5
|
-
|
|
5
|
+
import type { admin_tui_runtime } from "../../types/AdminTui.js";
|
|
6
|
+
export declare function manageCustom(a: City, _baseUrl: string, runtime: admin_tui_runtime): Promise<void>;
|
|
6
7
|
//# sourceMappingURL=custom.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/custom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/custom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCvG"}
|
|
@@ -1,46 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Admin Custom Service 命令。
|
|
3
3
|
*/
|
|
4
|
-
import { select, isCancel } from "@clack/prompts";
|
|
5
|
-
import { askText, showError } from "../../core/ui.js";
|
|
6
4
|
import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
|
|
7
|
-
export async function manageCustom(a) {
|
|
5
|
+
export async function manageCustom(a, _baseUrl, runtime) {
|
|
8
6
|
while (true) {
|
|
9
|
-
const name = await
|
|
7
|
+
const name = await runtime.text("service name (empty to go back)");
|
|
10
8
|
if (!name)
|
|
11
9
|
return;
|
|
12
|
-
const act = await select(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
],
|
|
19
|
-
});
|
|
20
|
-
if (!act || isCancel(act) || act === "back")
|
|
10
|
+
const act = await runtime.select(name, [
|
|
11
|
+
{ label: "GET", value: "get" },
|
|
12
|
+
{ label: "POST", value: "post" },
|
|
13
|
+
{ label: "Back", value: "back" },
|
|
14
|
+
]);
|
|
15
|
+
if (!act || act === "back")
|
|
21
16
|
return;
|
|
22
17
|
try {
|
|
23
18
|
const svc = a.service(name);
|
|
24
19
|
if (act === "get") {
|
|
25
|
-
const path = await
|
|
26
|
-
|
|
20
|
+
const path = await runtime.text("path") ?? "";
|
|
21
|
+
const result = await runtime.with_loading(`${name} GET`, async () => await svc.get(path));
|
|
22
|
+
await runtime.show_json(`${name} GET ${path || "/"}`, result);
|
|
27
23
|
}
|
|
28
24
|
else {
|
|
29
|
-
const raw = await
|
|
25
|
+
const raw = await runtime.text("body (JSON)") ?? "{}";
|
|
30
26
|
let body;
|
|
31
27
|
try {
|
|
32
28
|
body = JSON.parse(raw);
|
|
33
29
|
}
|
|
34
30
|
catch {
|
|
35
|
-
|
|
31
|
+
await runtime.show_message("error", "Invalid JSON body");
|
|
36
32
|
continue;
|
|
37
33
|
}
|
|
38
|
-
|
|
34
|
+
const result = await runtime.with_loading(`${name} POST`, async () => await svc.action("").invoke(body));
|
|
35
|
+
await runtime.show_json(`${name} POST`, result);
|
|
39
36
|
}
|
|
40
37
|
}
|
|
41
38
|
catch (e) {
|
|
42
39
|
rethrowAdminAuthError(e);
|
|
43
|
-
|
|
40
|
+
await runtime.show_message("error", adminErrorMessage(e));
|
|
44
41
|
}
|
|
45
42
|
}
|
|
46
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/admin/commands/custom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/admin/commands/custom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,CAAO,EAAE,QAAgB,EAAE,OAA0B;IACtF,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;YACnC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YAC9B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAChC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;SACjC,CAAC,CAAC;QACL,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO;QAEnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1F,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,QAAQ,IAAI,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;gBACtD,IAAI,IAA6B,CAAC;gBAClC,IAAI,CAAC;oBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;oBACzD,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzG,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,OAAO,EAAE,MAAM,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Admin City 说明文档查看命令。
|
|
3
3
|
*/
|
|
4
4
|
import { City } from "@downcity/city";
|
|
5
|
+
import type { admin_tui_runtime } from "../../types/AdminTui.js";
|
|
5
6
|
/**
|
|
6
7
|
* 展示当前 City 聚合后的说明文档。
|
|
7
8
|
*/
|
|
8
|
-
export declare function manageInstruction(a: City): Promise<void>;
|
|
9
|
+
export declare function manageInstruction(a: City, _baseUrl: string, runtime: admin_tui_runtime): Promise<void>;
|
|
9
10
|
//# sourceMappingURL=instruction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/instruction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"instruction.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/instruction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,IAAI,EACP,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* 展示当前 City 聚合后的说明文档。
|
|
6
6
|
*/
|
|
7
|
-
export async function manageInstruction(a) {
|
|
8
|
-
|
|
7
|
+
export async function manageInstruction(a, _baseUrl, runtime) {
|
|
8
|
+
const content = await runtime.with_loading("City Instruction", async () => await a.instruction());
|
|
9
|
+
await runtime.show_text("City Instruction", content);
|
|
9
10
|
}
|
|
10
11
|
//# sourceMappingURL=instruction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instruction.js","sourceRoot":"","sources":["../../../src/admin/commands/instruction.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"instruction.js","sourceRoot":"","sources":["../../../src/admin/commands/instruction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,CAAO,EACP,QAAgB,EAChB,OAA0B;IAE1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAClG,MAAM,OAAO,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* - 如果模型缺少 provider key,会在这里直接显示缺失项。
|
|
8
8
|
*/
|
|
9
9
|
import { City } from "@downcity/city";
|
|
10
|
+
import type { admin_tui_runtime } from "../../types/AdminTui.js";
|
|
10
11
|
/**
|
|
11
12
|
* 展示全部代码注册模型及其运行状态。
|
|
12
13
|
*/
|
|
13
|
-
export declare function manageModels(a: City): Promise<void>;
|
|
14
|
+
export declare function manageModels(a: City, _baseUrl: string, runtime: admin_tui_runtime): Promise<void>;
|
|
14
15
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DvG"}
|