@tokenbuddy/tb-admin 1.0.14 → 1.0.27
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/dist/src/bootstrap-registry.d.ts +1 -0
- package/dist/src/bootstrap-registry.d.ts.map +1 -1
- package/dist/src/bootstrap-registry.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +294 -13
- package/dist/src/cli.js.map +1 -1
- package/dist/src/client.d.ts +12 -3
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +12 -8
- package/dist/src/client.js.map +1 -1
- package/dist/src/display-format.d.ts +39 -0
- package/dist/src/display-format.d.ts.map +1 -0
- package/dist/src/display-format.js +354 -0
- package/dist/src/display-format.js.map +1 -0
- package/dist/src/server-cmd.d.ts +25 -1
- package/dist/src/server-cmd.d.ts.map +1 -1
- package/dist/src/server-cmd.js +116 -16
- package/dist/src/server-cmd.js.map +1 -1
- package/dist/src/ui-actions.d.ts +90 -0
- package/dist/src/ui-actions.d.ts.map +1 -0
- package/dist/src/ui-actions.js +823 -0
- package/dist/src/ui-actions.js.map +1 -0
- package/dist/src/ui-command.d.ts +4 -0
- package/dist/src/ui-command.d.ts.map +1 -0
- package/dist/src/ui-command.js +37 -0
- package/dist/src/ui-command.js.map +1 -0
- package/dist/src/ui-server.d.ts +22 -0
- package/dist/src/ui-server.d.ts.map +1 -0
- package/dist/src/ui-server.js +261 -0
- package/dist/src/ui-server.js.map +1 -0
- package/dist/src/ui-state.d.ts +140 -0
- package/dist/src/ui-state.d.ts.map +1 -0
- package/dist/src/ui-state.js +438 -0
- package/dist/src/ui-state.js.map +1 -0
- package/dist/src/ui-static.d.ts +2 -0
- package/dist/src/ui-static.d.ts.map +1 -0
- package/dist/src/ui-static.js +469 -0
- package/dist/src/ui-static.js.map +1 -0
- package/dist/src/upstream-balance-probe.d.ts +41 -0
- package/dist/src/upstream-balance-probe.d.ts.map +1 -0
- package/dist/src/upstream-balance-probe.js +379 -0
- package/dist/src/upstream-balance-probe.js.map +1 -0
- package/package.json +1 -1
- package/src/bootstrap-registry.ts +1 -0
- package/src/cli.ts +335 -13
- package/src/client.ts +13 -8
- package/src/display-format.ts +398 -0
- package/src/server-cmd.ts +145 -20
- package/src/ui-actions.ts +958 -0
- package/src/ui-command.ts +39 -0
- package/src/ui-server.ts +322 -0
- package/src/ui-state.ts +614 -0
- package/src/ui-static.ts +472 -0
- package/src/upstream-balance-probe.ts +505 -0
- package/tests/admin.test.ts +1404 -2
package/dist/src/client.d.ts
CHANGED
|
@@ -8,8 +8,17 @@ export declare class AdminClient {
|
|
|
8
8
|
constructor(baseUrl: string, token: string);
|
|
9
9
|
private request;
|
|
10
10
|
get(path: string): Promise<any>;
|
|
11
|
-
put(path: string, body?: any
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
put(path: string, body?: any, headers?: {
|
|
12
|
+
[key: string]: string;
|
|
13
|
+
}): Promise<any>;
|
|
14
|
+
post(path: string, body?: any, headers?: {
|
|
15
|
+
[key: string]: string;
|
|
16
|
+
}): Promise<any>;
|
|
17
|
+
patch(path: string, body?: any, headers?: {
|
|
18
|
+
[key: string]: string;
|
|
19
|
+
}): Promise<any>;
|
|
20
|
+
delete(path: string, body?: any, headers?: {
|
|
21
|
+
[key: string]: string;
|
|
22
|
+
}): Promise<any>;
|
|
14
23
|
}
|
|
15
24
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/src/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;YAK5B,OAAO;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;YAK5B,OAAO;IA8BR,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI/B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIhF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIlF,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;CAGjG"}
|
package/dist/src/client.js
CHANGED
|
@@ -9,11 +9,12 @@ export class AdminClient {
|
|
|
9
9
|
this.baseUrl = baseUrl.replace(/\/+$/, "");
|
|
10
10
|
this.token = token;
|
|
11
11
|
}
|
|
12
|
-
async request(path, method, body) {
|
|
12
|
+
async request(path, method, body, extraHeaders = {}) {
|
|
13
13
|
const url = `${this.baseUrl}${path}`;
|
|
14
14
|
const headers = {
|
|
15
15
|
"Content-Type": "application/json",
|
|
16
|
-
"Authorization": `Bearer ${this.token}
|
|
16
|
+
"Authorization": `Bearer ${this.token}`,
|
|
17
|
+
...extraHeaders
|
|
17
18
|
};
|
|
18
19
|
const options = {
|
|
19
20
|
method,
|
|
@@ -38,14 +39,17 @@ export class AdminClient {
|
|
|
38
39
|
async get(path) {
|
|
39
40
|
return this.request(path, "GET");
|
|
40
41
|
}
|
|
41
|
-
async put(path, body) {
|
|
42
|
-
return this.request(path, "PUT", body);
|
|
42
|
+
async put(path, body, headers) {
|
|
43
|
+
return this.request(path, "PUT", body, headers);
|
|
43
44
|
}
|
|
44
|
-
async post(path, body) {
|
|
45
|
-
return this.request(path, "POST", body);
|
|
45
|
+
async post(path, body, headers) {
|
|
46
|
+
return this.request(path, "POST", body, headers);
|
|
46
47
|
}
|
|
47
|
-
async
|
|
48
|
-
return this.request(path, "
|
|
48
|
+
async patch(path, body, headers) {
|
|
49
|
+
return this.request(path, "PATCH", body, headers);
|
|
50
|
+
}
|
|
51
|
+
async delete(path, body, headers) {
|
|
52
|
+
return this.request(path, "DELETE", body, headers);
|
|
49
53
|
}
|
|
50
54
|
}
|
|
51
55
|
//# sourceMappingURL=client.js.map
|
package/dist/src/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,OAAO,CAAS;IAChB,KAAK,CAAS;IAEtB,YAAY,OAAe,EAAE,KAAa;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAAc,EAAE,IAAU;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,OAAO,CAAS;IAChB,KAAK,CAAS;IAEtB,YAAY,OAAe,EAAE,KAAa;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAAc,EAAE,IAAU,EAAE,eAA0C,EAAE;QAC1G,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,OAAO,GAA8B;YACzC,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;YACvC,GAAG,YAAY;SAChB,CAAC;QAEF,MAAM,OAAO,GAAgB;YAC3B,MAAM;YACN,OAAO;SACR,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,IAAU,EAAE,OAAmC;QAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,IAAU,EAAE,OAAmC;QAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,IAAU,EAAE,OAAmC;QAC9E,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,IAAU,EAAE,OAAmC;QAC/E,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare const UNKNOWN_VALUE = "\u2014";
|
|
2
|
+
export declare function formatTokenCount(value: number | undefined | null, options?: {
|
|
3
|
+
compact?: boolean;
|
|
4
|
+
}): string;
|
|
5
|
+
export declare function formatTokenPair(input: number | undefined | null, output: number | undefined | null, options?: {
|
|
6
|
+
compact?: boolean;
|
|
7
|
+
separator?: string;
|
|
8
|
+
}): string;
|
|
9
|
+
export declare function formatCount(value: number | undefined | null): string;
|
|
10
|
+
export declare function formatMoney(micros: number | undefined | null, options?: {
|
|
11
|
+
digits?: number;
|
|
12
|
+
ledger?: boolean;
|
|
13
|
+
signed?: boolean;
|
|
14
|
+
}): string;
|
|
15
|
+
export declare function formatMoneyPair(actualMicros: number | undefined | null, referenceMicros: number | undefined | null, options?: {
|
|
16
|
+
digits?: number;
|
|
17
|
+
}): string;
|
|
18
|
+
export declare function formatDuration(valueMs: number | undefined | null): string;
|
|
19
|
+
export declare function formatPercent(value: number | undefined | null): string;
|
|
20
|
+
export declare function formatDiscountRatio(discountRatio: number | undefined | null): string;
|
|
21
|
+
export declare function formatPriceMicrosPerMillion(value: number | undefined | null): string;
|
|
22
|
+
export declare function formatPricePair(inputMicros: number | undefined | null, outputMicros: number | undefined | null): string;
|
|
23
|
+
export declare function normalizeStatusLabel(status: string | undefined | null): string;
|
|
24
|
+
export type StatusTone = "green" | "amber" | "red" | "blue" | "gray";
|
|
25
|
+
export declare function statusTone(status: string | undefined | null): StatusTone;
|
|
26
|
+
export declare function formatHash(value: string | undefined | null, length?: number): string;
|
|
27
|
+
export declare function formatSellerId(value: string | undefined | null): string;
|
|
28
|
+
export declare function formatTimeCompact(iso: string | undefined | null): string;
|
|
29
|
+
export declare function formatTimeFull(iso: string | undefined | null): string;
|
|
30
|
+
export declare function formatTimeLedger(iso: string | undefined | null): string;
|
|
31
|
+
export declare function formatRouteSwitchTime(iso: string | undefined | null): string;
|
|
32
|
+
export declare function formatBalanceAmount(usdMicros: number | undefined | null, currency: string | undefined | null): string;
|
|
33
|
+
export declare function formatSellerCapacity(used: number | undefined | null, limit: number | undefined | null): string;
|
|
34
|
+
export declare function formatSpeed(value: number | undefined | null): string;
|
|
35
|
+
export type CanonicalStatus = "ok" | "online" | "configured" | "pending" | "degraded" | "error" | "unknown";
|
|
36
|
+
export declare function formatSellerStatus(status: string | undefined | null): CanonicalStatus;
|
|
37
|
+
export declare function sellerStatusTone(status: string | undefined | null): StatusTone;
|
|
38
|
+
export declare function displayFormatBundle(): string;
|
|
39
|
+
//# sourceMappingURL=display-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-format.d.ts","sourceRoot":"","sources":["../../src/display-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
// Shared display formatters for TokenBuddy UI surfaces.
|
|
2
|
+
//
|
|
3
|
+
// This module is a portable copy of `packages/tb-ui/src/lib/display-format.ts`
|
|
4
|
+
// and the canonical formatter functions declared in `DESIGN.md`
|
|
5
|
+
// ("Formatter Implementation" section). Keep both files in sync — the
|
|
6
|
+
// rule from DESIGN.md is:
|
|
7
|
+
// "Do not add new per-page formatting helpers for these domains.
|
|
8
|
+
// If a page needs a different display, add an explicit option
|
|
9
|
+
// to the shared formatter."
|
|
10
|
+
//
|
|
11
|
+
// Differences vs. the React copy:
|
|
12
|
+
// 1. No React-only imports.
|
|
13
|
+
// 2. Adds `formatBalanceAmount` and `formatSellerStatus` for the
|
|
14
|
+
// admin surface, because the admin UI surfaces live balance
|
|
15
|
+
// numbers and node-status dots that the buyer UI never shows.
|
|
16
|
+
export const UNKNOWN_VALUE = "—";
|
|
17
|
+
const PAD2 = (n) => (n < 10 ? `0${n}` : `${n}`);
|
|
18
|
+
export function formatTokenCount(value, options = {}) {
|
|
19
|
+
if (!Number.isFinite(value))
|
|
20
|
+
return UNKNOWN_VALUE;
|
|
21
|
+
const numeric = value;
|
|
22
|
+
if (options.compact === false)
|
|
23
|
+
return Math.round(numeric).toLocaleString("en-US");
|
|
24
|
+
if (numeric < 10_000)
|
|
25
|
+
return Math.round(numeric).toLocaleString("en-US");
|
|
26
|
+
if (numeric < 1_000_000)
|
|
27
|
+
return `${(numeric / 1_000).toFixed(1)}K`;
|
|
28
|
+
if (numeric < 1_000_000_000)
|
|
29
|
+
return `${(numeric / 1_000_000).toFixed(1)}M`;
|
|
30
|
+
return `${(numeric / 1_000_000_000).toFixed(2)}B`;
|
|
31
|
+
}
|
|
32
|
+
export function formatTokenPair(input, output, options = {}) {
|
|
33
|
+
const separator = options.separator ?? " / ";
|
|
34
|
+
return `In ${formatTokenCount(input, options)}${separator}Out ${formatTokenCount(output, options)}`;
|
|
35
|
+
}
|
|
36
|
+
export function formatCount(value) {
|
|
37
|
+
if (!Number.isFinite(value))
|
|
38
|
+
return UNKNOWN_VALUE;
|
|
39
|
+
return Math.round(value).toLocaleString("en-US");
|
|
40
|
+
}
|
|
41
|
+
export function formatMoney(micros, options = {}) {
|
|
42
|
+
if (!Number.isFinite(micros))
|
|
43
|
+
return UNKNOWN_VALUE;
|
|
44
|
+
const amount = Math.abs(micros / 1_000_000);
|
|
45
|
+
const digits = options.digits ?? (options.ledger && amount < 0.01 ? 6 : 4);
|
|
46
|
+
const formatted = `$${(micros / 1_000_000).toFixed(digits)}`;
|
|
47
|
+
return options.signed && micros >= 0 ? `+${formatted}` : formatted;
|
|
48
|
+
}
|
|
49
|
+
export function formatMoneyPair(actualMicros, referenceMicros, options = {}) {
|
|
50
|
+
if (!Number.isFinite(actualMicros) && !Number.isFinite(referenceMicros))
|
|
51
|
+
return UNKNOWN_VALUE;
|
|
52
|
+
return `${formatMoney(actualMicros, options)} / ${formatMoney(referenceMicros, options)}`;
|
|
53
|
+
}
|
|
54
|
+
export function formatDuration(valueMs) {
|
|
55
|
+
if (!Number.isFinite(valueMs))
|
|
56
|
+
return UNKNOWN_VALUE;
|
|
57
|
+
const ms = Math.max(0, Math.round(valueMs));
|
|
58
|
+
if (ms < 1000)
|
|
59
|
+
return `${ms}ms`;
|
|
60
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
61
|
+
}
|
|
62
|
+
export function formatPercent(value) {
|
|
63
|
+
if (!Number.isFinite(value))
|
|
64
|
+
return UNKNOWN_VALUE;
|
|
65
|
+
return `${Math.round(value * 100)}%`;
|
|
66
|
+
}
|
|
67
|
+
export function formatDiscountRatio(discountRatio) {
|
|
68
|
+
if (!Number.isFinite(discountRatio))
|
|
69
|
+
return UNKNOWN_VALUE;
|
|
70
|
+
const discount = Math.max(0, 1 - discountRatio);
|
|
71
|
+
return formatPercent(discount);
|
|
72
|
+
}
|
|
73
|
+
export function formatPriceMicrosPerMillion(value) {
|
|
74
|
+
return formatMoney(value, { digits: 4 });
|
|
75
|
+
}
|
|
76
|
+
export function formatPricePair(inputMicros, outputMicros) {
|
|
77
|
+
return formatMoneyPair(inputMicros, outputMicros, { digits: 4 });
|
|
78
|
+
}
|
|
79
|
+
export function normalizeStatusLabel(status) {
|
|
80
|
+
if (!status)
|
|
81
|
+
return UNKNOWN_VALUE;
|
|
82
|
+
return status.trim().toLowerCase().replaceAll("_", " ");
|
|
83
|
+
}
|
|
84
|
+
export function statusTone(status) {
|
|
85
|
+
const normalized = normalizeStatusLabel(status);
|
|
86
|
+
if (normalized === "ok" ||
|
|
87
|
+
normalized === "online" ||
|
|
88
|
+
normalized === "configured" ||
|
|
89
|
+
normalized === "settled" ||
|
|
90
|
+
normalized === "completed" ||
|
|
91
|
+
normalized === "success" ||
|
|
92
|
+
normalized === "active" ||
|
|
93
|
+
normalized === "healthy") {
|
|
94
|
+
return "green";
|
|
95
|
+
}
|
|
96
|
+
if (normalized === "fallback" ||
|
|
97
|
+
normalized === "pending" ||
|
|
98
|
+
normalized === "degraded" ||
|
|
99
|
+
normalized === "preview" ||
|
|
100
|
+
normalized === "draining" ||
|
|
101
|
+
normalized === "busy capacity" ||
|
|
102
|
+
normalized === "auth unknown") {
|
|
103
|
+
return "amber";
|
|
104
|
+
}
|
|
105
|
+
if (normalized === "failed" ||
|
|
106
|
+
normalized === "error" ||
|
|
107
|
+
normalized === "canceled" ||
|
|
108
|
+
normalized === "unhealthy" ||
|
|
109
|
+
normalized === "offline") {
|
|
110
|
+
return "red";
|
|
111
|
+
}
|
|
112
|
+
if (normalized === "running")
|
|
113
|
+
return "blue";
|
|
114
|
+
return "gray";
|
|
115
|
+
}
|
|
116
|
+
export function formatHash(value, length = 32) {
|
|
117
|
+
if (!value)
|
|
118
|
+
return UNKNOWN_VALUE;
|
|
119
|
+
return value.length > length ? `${value.slice(0, length)}...` : value;
|
|
120
|
+
}
|
|
121
|
+
export function formatSellerId(value) {
|
|
122
|
+
if (!value)
|
|
123
|
+
return UNKNOWN_VALUE;
|
|
124
|
+
if (value.startsWith("tbs-") && value.length > 10)
|
|
125
|
+
return value.slice(0, 10);
|
|
126
|
+
if (value.length <= 12)
|
|
127
|
+
return value;
|
|
128
|
+
return value.slice(0, 12);
|
|
129
|
+
}
|
|
130
|
+
export function formatTimeCompact(iso) {
|
|
131
|
+
if (!iso)
|
|
132
|
+
return UNKNOWN_VALUE;
|
|
133
|
+
const d = new Date(iso);
|
|
134
|
+
if (Number.isNaN(d.getTime()))
|
|
135
|
+
return UNKNOWN_VALUE;
|
|
136
|
+
const now = new Date();
|
|
137
|
+
const sameDay = d.getFullYear() === now.getFullYear() &&
|
|
138
|
+
d.getMonth() === now.getMonth() &&
|
|
139
|
+
d.getDate() === now.getDate();
|
|
140
|
+
const time = `${PAD2(d.getHours())}:${PAD2(d.getMinutes())}`;
|
|
141
|
+
if (sameDay)
|
|
142
|
+
return time;
|
|
143
|
+
return `${PAD2(d.getMonth() + 1)}/${PAD2(d.getDate())} ${time}`;
|
|
144
|
+
}
|
|
145
|
+
export function formatTimeFull(iso) {
|
|
146
|
+
if (!iso)
|
|
147
|
+
return UNKNOWN_VALUE;
|
|
148
|
+
const d = new Date(iso);
|
|
149
|
+
if (Number.isNaN(d.getTime()))
|
|
150
|
+
return UNKNOWN_VALUE;
|
|
151
|
+
return (`${d.getFullYear()}-${PAD2(d.getMonth() + 1)}-${PAD2(d.getDate())} ` +
|
|
152
|
+
`${PAD2(d.getHours())}:${PAD2(d.getMinutes())}:${PAD2(d.getSeconds())}`);
|
|
153
|
+
}
|
|
154
|
+
export function formatTimeLedger(iso) {
|
|
155
|
+
if (!iso)
|
|
156
|
+
return UNKNOWN_VALUE;
|
|
157
|
+
const d = new Date(iso);
|
|
158
|
+
if (Number.isNaN(d.getTime()))
|
|
159
|
+
return UNKNOWN_VALUE;
|
|
160
|
+
return (`${d.getFullYear()}/${PAD2(d.getMonth() + 1)}/${PAD2(d.getDate())} ` +
|
|
161
|
+
`${PAD2(d.getHours())}:${PAD2(d.getMinutes())}:${PAD2(d.getSeconds())}`);
|
|
162
|
+
}
|
|
163
|
+
export function formatRouteSwitchTime(iso) {
|
|
164
|
+
return formatTimeCompact(iso);
|
|
165
|
+
}
|
|
166
|
+
// --- admin-only extensions ---------------------------------------------------
|
|
167
|
+
export function formatBalanceAmount(usdMicros, currency) {
|
|
168
|
+
if (!Number.isFinite(usdMicros))
|
|
169
|
+
return UNKNOWN_VALUE;
|
|
170
|
+
const amount = usdMicros / 1_000_000;
|
|
171
|
+
const digits = Math.abs(amount) >= 100 ? 0 : 2;
|
|
172
|
+
const code = (currency || "USD").toUpperCase();
|
|
173
|
+
return `${code} ${amount.toFixed(digits)}`;
|
|
174
|
+
}
|
|
175
|
+
export function formatSellerCapacity(used, limit) {
|
|
176
|
+
if (!Number.isFinite(used) && !Number.isFinite(limit))
|
|
177
|
+
return UNKNOWN_VALUE;
|
|
178
|
+
const u = Number.isFinite(used) ? Math.round(used) : UNKNOWN_VALUE;
|
|
179
|
+
const l = Number.isFinite(limit) ? Math.round(limit) : UNKNOWN_VALUE;
|
|
180
|
+
return `${u} / ${l}`;
|
|
181
|
+
}
|
|
182
|
+
export function formatSpeed(value) {
|
|
183
|
+
if (!Number.isFinite(value))
|
|
184
|
+
return UNKNOWN_VALUE;
|
|
185
|
+
return `${value.toFixed(1)} tok/s`;
|
|
186
|
+
}
|
|
187
|
+
const SELLER_STATUS_MAP = {
|
|
188
|
+
active: "ok",
|
|
189
|
+
healthy: "ok",
|
|
190
|
+
online: "online",
|
|
191
|
+
configured: "configured",
|
|
192
|
+
pending: "pending",
|
|
193
|
+
draining: "degraded",
|
|
194
|
+
degraded: "degraded",
|
|
195
|
+
busy_capacity: "degraded",
|
|
196
|
+
offline: "error",
|
|
197
|
+
unhealthy: "error",
|
|
198
|
+
error: "error",
|
|
199
|
+
auth_unknown: "unknown",
|
|
200
|
+
unknown: "unknown"
|
|
201
|
+
};
|
|
202
|
+
export function formatSellerStatus(status) {
|
|
203
|
+
const key = String(status || "unknown")
|
|
204
|
+
.trim()
|
|
205
|
+
.toLowerCase()
|
|
206
|
+
.replace(/-/g, "_");
|
|
207
|
+
return SELLER_STATUS_MAP[key] || "unknown";
|
|
208
|
+
}
|
|
209
|
+
export function sellerStatusTone(status) {
|
|
210
|
+
return statusTone(formatSellerStatus(status));
|
|
211
|
+
}
|
|
212
|
+
// Inlined browser bundle — emits a self-invoking function that
|
|
213
|
+
// attaches the same formatter API to `window.__tbFmt`. The HTML
|
|
214
|
+
// served by `tb-admin ui` includes this bundle verbatim so the
|
|
215
|
+
// page can use the shared spec-compliant helpers without an
|
|
216
|
+
// extra <script src> round-trip. The JS bodies below MUST stay
|
|
217
|
+
// in lockstep with the TS implementations above.
|
|
218
|
+
export function displayFormatBundle() {
|
|
219
|
+
return `(() => {
|
|
220
|
+
const UNKNOWN_VALUE = ${JSON.stringify(UNKNOWN_VALUE)};
|
|
221
|
+
const PAD2 = (n) => (n < 10 ? "0" + n : "" + n);
|
|
222
|
+
function formatTokenCount(value, options) {
|
|
223
|
+
options = options || {};
|
|
224
|
+
if (!Number.isFinite(value)) return UNKNOWN_VALUE;
|
|
225
|
+
const numeric = value;
|
|
226
|
+
if (options.compact === false) return Math.round(numeric).toLocaleString("en-US");
|
|
227
|
+
if (numeric < 10000) return Math.round(numeric).toLocaleString("en-US");
|
|
228
|
+
if (numeric < 1000000) return (numeric / 1000).toFixed(1) + "K";
|
|
229
|
+
if (numeric < 1000000000) return (numeric / 1000000).toFixed(1) + "M";
|
|
230
|
+
return (numeric / 1000000000).toFixed(2) + "B";
|
|
231
|
+
}
|
|
232
|
+
function formatTokenPair(input, output, options) {
|
|
233
|
+
options = options || {};
|
|
234
|
+
const separator = options.separator == null ? " / " : options.separator;
|
|
235
|
+
return "In " + formatTokenCount(input, options) + separator + "Out " + formatTokenCount(output, options);
|
|
236
|
+
}
|
|
237
|
+
function formatCount(value) {
|
|
238
|
+
if (!Number.isFinite(value)) return UNKNOWN_VALUE;
|
|
239
|
+
return Math.round(value).toLocaleString("en-US");
|
|
240
|
+
}
|
|
241
|
+
function formatMoney(micros, options) {
|
|
242
|
+
options = options || {};
|
|
243
|
+
if (!Number.isFinite(micros)) return UNKNOWN_VALUE;
|
|
244
|
+
const amount = Math.abs(micros / 1000000);
|
|
245
|
+
const digits = options.digits != null ? options.digits : (options.ledger && amount < 0.01 ? 6 : 4);
|
|
246
|
+
const formatted = "$" + (micros / 1000000).toFixed(digits);
|
|
247
|
+
return options.signed && micros >= 0 ? "+" + formatted : formatted;
|
|
248
|
+
}
|
|
249
|
+
function formatMoneyPair(actualMicros, referenceMicros, options) {
|
|
250
|
+
options = options || {};
|
|
251
|
+
if (!Number.isFinite(actualMicros) && !Number.isFinite(referenceMicros)) return UNKNOWN_VALUE;
|
|
252
|
+
return formatMoney(actualMicros, options) + " / " + formatMoney(referenceMicros, options);
|
|
253
|
+
}
|
|
254
|
+
function formatDuration(valueMs) {
|
|
255
|
+
if (!Number.isFinite(valueMs)) return UNKNOWN_VALUE;
|
|
256
|
+
const ms = Math.max(0, Math.round(valueMs));
|
|
257
|
+
if (ms < 1000) return ms + "ms";
|
|
258
|
+
return (ms / 1000).toFixed(2) + "s";
|
|
259
|
+
}
|
|
260
|
+
function formatPercent(value) {
|
|
261
|
+
if (!Number.isFinite(value)) return UNKNOWN_VALUE;
|
|
262
|
+
return Math.round(value * 100) + "%";
|
|
263
|
+
}
|
|
264
|
+
function formatDiscountRatio(discountRatio) {
|
|
265
|
+
if (!Number.isFinite(discountRatio)) return UNKNOWN_VALUE;
|
|
266
|
+
const discount = Math.max(0, 1 - discountRatio);
|
|
267
|
+
return formatPercent(discount);
|
|
268
|
+
}
|
|
269
|
+
function formatPriceMicrosPerMillion(value) { return formatMoney(value, { digits: 4 }); }
|
|
270
|
+
function formatPricePair(inputMicros, outputMicros) { return formatMoneyPair(inputMicros, outputMicros, { digits: 4 }); }
|
|
271
|
+
function normalizeStatusLabel(status) {
|
|
272
|
+
if (!status) return UNKNOWN_VALUE;
|
|
273
|
+
return String(status).trim().toLowerCase().replaceAll("_", " ");
|
|
274
|
+
}
|
|
275
|
+
function statusTone(status) {
|
|
276
|
+
const n = normalizeStatusLabel(status);
|
|
277
|
+
if (n === "ok" || n === "online" || n === "configured" || n === "settled" || n === "completed" || n === "success" || n === "active" || n === "healthy") return "green";
|
|
278
|
+
if (n === "fallback" || n === "pending" || n === "degraded" || n === "preview" || n === "draining" || n === "busy capacity" || n === "auth unknown") return "amber";
|
|
279
|
+
if (n === "failed" || n === "error" || n === "canceled" || n === "unhealthy" || n === "offline") return "red";
|
|
280
|
+
if (n === "running") return "blue";
|
|
281
|
+
return "gray";
|
|
282
|
+
}
|
|
283
|
+
function formatHash(value, length) {
|
|
284
|
+
if (length == null) length = 32;
|
|
285
|
+
if (!value) return UNKNOWN_VALUE;
|
|
286
|
+
return value.length > length ? value.slice(0, length) + "..." : value;
|
|
287
|
+
}
|
|
288
|
+
function formatSellerId(value) {
|
|
289
|
+
if (!value) return UNKNOWN_VALUE;
|
|
290
|
+
if (value.startsWith("tbs-") && value.length > 10) return value.slice(0, 10);
|
|
291
|
+
if (value.length <= 12) return value;
|
|
292
|
+
return value.slice(0, 12);
|
|
293
|
+
}
|
|
294
|
+
function formatTimeCompact(iso) {
|
|
295
|
+
if (!iso) return UNKNOWN_VALUE;
|
|
296
|
+
const d = new Date(iso);
|
|
297
|
+
if (Number.isNaN(d.getTime())) return UNKNOWN_VALUE;
|
|
298
|
+
const now = new Date();
|
|
299
|
+
const sameDay = d.getFullYear() === now.getFullYear() && d.getMonth() === now.getMonth() && d.getDate() === now.getDate();
|
|
300
|
+
const time = PAD2(d.getHours()) + ":" + PAD2(d.getMinutes());
|
|
301
|
+
if (sameDay) return time;
|
|
302
|
+
return PAD2(d.getMonth() + 1) + "/" + PAD2(d.getDate()) + " " + time;
|
|
303
|
+
}
|
|
304
|
+
function formatTimeFull(iso) {
|
|
305
|
+
if (!iso) return UNKNOWN_VALUE;
|
|
306
|
+
const d = new Date(iso);
|
|
307
|
+
if (Number.isNaN(d.getTime())) return UNKNOWN_VALUE;
|
|
308
|
+
return d.getFullYear() + "-" + PAD2(d.getMonth() + 1) + "-" + PAD2(d.getDate()) + " " + PAD2(d.getHours()) + ":" + PAD2(d.getMinutes()) + ":" + PAD2(d.getSeconds());
|
|
309
|
+
}
|
|
310
|
+
function formatTimeLedger(iso) {
|
|
311
|
+
if (!iso) return UNKNOWN_VALUE;
|
|
312
|
+
const d = new Date(iso);
|
|
313
|
+
if (Number.isNaN(d.getTime())) return UNKNOWN_VALUE;
|
|
314
|
+
return d.getFullYear() + "/" + PAD2(d.getMonth() + 1) + "/" + PAD2(d.getDate()) + " " + PAD2(d.getHours()) + ":" + PAD2(d.getMinutes()) + ":" + PAD2(d.getSeconds());
|
|
315
|
+
}
|
|
316
|
+
function formatRouteSwitchTime(iso) { return formatTimeCompact(iso); }
|
|
317
|
+
function formatBalanceAmount(usdMicros, currency) {
|
|
318
|
+
if (!Number.isFinite(usdMicros)) return UNKNOWN_VALUE;
|
|
319
|
+
const amount = usdMicros / 1000000;
|
|
320
|
+
const digits = Math.abs(amount) >= 100 ? 0 : 2;
|
|
321
|
+
const code = (currency || "USD").toUpperCase();
|
|
322
|
+
return code + " " + amount.toFixed(digits);
|
|
323
|
+
}
|
|
324
|
+
function formatSellerCapacity(used, limit) {
|
|
325
|
+
if (!Number.isFinite(used) && !Number.isFinite(limit)) return UNKNOWN_VALUE;
|
|
326
|
+
const u = Number.isFinite(used) ? Math.round(used) : UNKNOWN_VALUE;
|
|
327
|
+
const l = Number.isFinite(limit) ? Math.round(limit) : UNKNOWN_VALUE;
|
|
328
|
+
return u + " / " + l;
|
|
329
|
+
}
|
|
330
|
+
function formatSpeed(value) {
|
|
331
|
+
if (!Number.isFinite(value)) return UNKNOWN_VALUE;
|
|
332
|
+
return value.toFixed(1) + " tok/s";
|
|
333
|
+
}
|
|
334
|
+
const SELLER_STATUS_MAP = {
|
|
335
|
+
active: "ok", healthy: "ok", online: "online", configured: "configured",
|
|
336
|
+
pending: "pending", draining: "degraded", degraded: "degraded",
|
|
337
|
+
busy_capacity: "degraded", offline: "error", unhealthy: "error",
|
|
338
|
+
error: "error", auth_unknown: "unknown", unknown: "unknown"
|
|
339
|
+
};
|
|
340
|
+
function formatSellerStatus(status) {
|
|
341
|
+
const key = String(status || "unknown").trim().toLowerCase().replace(/-/g, "_");
|
|
342
|
+
return SELLER_STATUS_MAP[key] || "unknown";
|
|
343
|
+
}
|
|
344
|
+
function sellerStatusTone(status) { return statusTone(formatSellerStatus(status)); }
|
|
345
|
+
window.__tbFmt = {
|
|
346
|
+
UNKNOWN_VALUE, formatTokenCount, formatTokenPair, formatCount, formatMoney, formatMoneyPair,
|
|
347
|
+
formatDuration, formatPercent, formatDiscountRatio, formatPriceMicrosPerMillion, formatPricePair,
|
|
348
|
+
normalizeStatusLabel, statusTone, formatHash, formatSellerId, formatTimeCompact, formatTimeFull,
|
|
349
|
+
formatTimeLedger, formatRouteSwitchTime, formatBalanceAmount, formatSellerCapacity, formatSpeed,
|
|
350
|
+
formatSellerStatus, sellerStatusTone
|
|
351
|
+
};
|
|
352
|
+
})();`;
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=display-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-format.js","sourceRoot":"","sources":["../../src/display-format.ts"],"names":[],"mappings":"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"}
|
package/dist/src/server-cmd.d.ts
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
+
import { execSync, spawnSync, type SpawnSyncReturns } from "child_process";
|
|
1
2
|
import { SellerProviderConfig } from "./config.js";
|
|
3
|
+
type ExecRunner = (command: string, options?: Parameters<typeof execSync>[1]) => string | Buffer;
|
|
4
|
+
type SpawnRunner = (command: string, args?: string[], options?: Parameters<typeof spawnSync>[2]) => SpawnSyncReturns<string | Buffer>;
|
|
5
|
+
export interface DockerImageInspection {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
error?: string;
|
|
8
|
+
exitCode?: number;
|
|
9
|
+
}
|
|
10
|
+
export type ImageInspectRunner = (image: string) => DockerImageInspection;
|
|
11
|
+
export interface FlyProviderRuntime {
|
|
12
|
+
checkFlyctlInstalled?: (flyctlPath?: string) => boolean;
|
|
13
|
+
execSync?: ExecRunner;
|
|
14
|
+
spawnSync?: SpawnRunner;
|
|
15
|
+
imageInspector?: ImageInspectRunner;
|
|
16
|
+
}
|
|
2
17
|
/**
|
|
3
18
|
* 检查 flyctl 是否在 PATH 中(或在指定路径)。
|
|
4
19
|
*
|
|
@@ -6,6 +21,8 @@ import { SellerProviderConfig } from "./config.js";
|
|
|
6
21
|
* @returns 是否可用
|
|
7
22
|
*/
|
|
8
23
|
export declare function checkFlyctlInstalled(flyctlPath?: string): boolean;
|
|
24
|
+
export declare function inspectDockerImage(image: string): DockerImageInspection;
|
|
25
|
+
export declare function requirePublishedDockerImage(image: string, inspectImage?: ImageInspectRunner): void;
|
|
9
26
|
export declare function parseFlyMachineIds(json: string, app: string): string[];
|
|
10
27
|
/**
|
|
11
28
|
* `FlyProvider.createSeller` 的输入。
|
|
@@ -22,6 +39,7 @@ export interface SellerCreateOptions {
|
|
|
22
39
|
volumeSizeGb?: number;
|
|
23
40
|
volumeId?: string;
|
|
24
41
|
volumeSnapshotRetentionDays?: number;
|
|
42
|
+
initialConfigPath?: string;
|
|
25
43
|
dryRun?: boolean;
|
|
26
44
|
}
|
|
27
45
|
/**
|
|
@@ -30,8 +48,12 @@ export interface SellerCreateOptions {
|
|
|
30
48
|
*/
|
|
31
49
|
export declare class FlyProvider {
|
|
32
50
|
private providerConfig?;
|
|
33
|
-
|
|
51
|
+
private readonly runtime;
|
|
52
|
+
constructor(providerConfig?: SellerProviderConfig, runtime?: FlyProviderRuntime);
|
|
34
53
|
private get flyctl();
|
|
54
|
+
private flyExecOptions;
|
|
55
|
+
private flySpawnOptions;
|
|
56
|
+
private flyEnv;
|
|
35
57
|
/**
|
|
36
58
|
* List apps on Fly.io
|
|
37
59
|
*/
|
|
@@ -40,6 +62,7 @@ export declare class FlyProvider {
|
|
|
40
62
|
* Create and deploy a new seller app on Fly.io
|
|
41
63
|
*/
|
|
42
64
|
createSeller(options: SellerCreateOptions): string;
|
|
65
|
+
private importCreateSecrets;
|
|
43
66
|
/**
|
|
44
67
|
* Destroy a seller app on Fly.io.
|
|
45
68
|
* @param nameOrApp Either a bare name (e.g. "86d81e") or a full app name (e.g. "tbs-86d81e").
|
|
@@ -64,4 +87,5 @@ export declare class FlyProvider {
|
|
|
64
87
|
dryRun?: boolean;
|
|
65
88
|
}): string;
|
|
66
89
|
}
|
|
90
|
+
export {};
|
|
67
91
|
//# sourceMappingURL=server-cmd.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-cmd.d.ts","sourceRoot":"","sources":["../../src/server-cmd.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-cmd.d.ts","sourceRoot":"","sources":["../../src/server-cmd.ts"],"names":[],"mappings":"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"}
|