@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/server-cmd.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { execSync } from "child_process";
|
|
1
|
+
import { execSync, spawnSync } from "child_process";
|
|
2
|
+
import * as fs from "fs";
|
|
2
3
|
/**
|
|
3
4
|
* 检查 flyctl 是否在 PATH 中(或在指定路径)。
|
|
4
5
|
*
|
|
@@ -14,6 +15,36 @@ export function checkFlyctlInstalled(flyctlPath) {
|
|
|
14
15
|
return false;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
18
|
+
export function inspectDockerImage(image) {
|
|
19
|
+
const result = spawnSync("docker", ["buildx", "imagetools", "inspect", image], {
|
|
20
|
+
encoding: "utf8",
|
|
21
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
22
|
+
});
|
|
23
|
+
return dockerImageInspectionFromResult(result);
|
|
24
|
+
}
|
|
25
|
+
export function requirePublishedDockerImage(image, inspectImage = inspectDockerImage) {
|
|
26
|
+
const inspection = inspectImage(image);
|
|
27
|
+
if (inspection.ok) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const detail = inspection.error ? ` Detail: ${inspection.error.trim()}` : "";
|
|
31
|
+
throw new Error(`seller image is not published or is not accessible: ${image}. ` +
|
|
32
|
+
`Publish it first with RELEASE_VERSION=<v> bash scripts/release/all.sh, or pass an existing registry.fly.io/tb-seller:<v> tag. ` +
|
|
33
|
+
`No Fly app was created.${detail}`);
|
|
34
|
+
}
|
|
35
|
+
function dockerImageInspectionFromResult(result) {
|
|
36
|
+
if (result.error) {
|
|
37
|
+
return { ok: false, error: result.error.message };
|
|
38
|
+
}
|
|
39
|
+
if (result.status !== 0) {
|
|
40
|
+
return {
|
|
41
|
+
ok: false,
|
|
42
|
+
exitCode: result.status ?? undefined,
|
|
43
|
+
error: (result.stderr || result.stdout || "").toString()
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return { ok: true };
|
|
47
|
+
}
|
|
17
48
|
export function parseFlyMachineIds(json, app) {
|
|
18
49
|
let parsed;
|
|
19
50
|
try {
|
|
@@ -45,20 +76,51 @@ export function parseFlyMachineIds(json, app) {
|
|
|
45
76
|
*/
|
|
46
77
|
export class FlyProvider {
|
|
47
78
|
providerConfig;
|
|
48
|
-
|
|
79
|
+
runtime;
|
|
80
|
+
constructor(providerConfig, runtime) {
|
|
49
81
|
this.providerConfig = providerConfig;
|
|
82
|
+
this.runtime = {
|
|
83
|
+
checkFlyctlInstalled,
|
|
84
|
+
execSync,
|
|
85
|
+
spawnSync,
|
|
86
|
+
imageInspector: inspectDockerImage,
|
|
87
|
+
...runtime
|
|
88
|
+
};
|
|
50
89
|
}
|
|
51
90
|
get flyctl() {
|
|
52
91
|
return this.providerConfig?.flyctl_path || "flyctl";
|
|
53
92
|
}
|
|
93
|
+
flyExecOptions(options = {}) {
|
|
94
|
+
return {
|
|
95
|
+
...options,
|
|
96
|
+
env: this.flyEnv(options.env)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
flySpawnOptions(options = {}) {
|
|
100
|
+
return {
|
|
101
|
+
...options,
|
|
102
|
+
env: this.flyEnv(options.env)
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
flyEnv(env) {
|
|
106
|
+
const configuredToken = this.providerConfig?.token;
|
|
107
|
+
const merged = {
|
|
108
|
+
...process.env,
|
|
109
|
+
...(env || {})
|
|
110
|
+
};
|
|
111
|
+
if (configuredToken && !merged.FLY_API_TOKEN) {
|
|
112
|
+
merged.FLY_API_TOKEN = configuredToken;
|
|
113
|
+
}
|
|
114
|
+
return merged;
|
|
115
|
+
}
|
|
54
116
|
/**
|
|
55
117
|
* List apps on Fly.io
|
|
56
118
|
*/
|
|
57
119
|
listApps() {
|
|
58
|
-
if (!checkFlyctlInstalled(this.flyctl)) {
|
|
120
|
+
if (!this.runtime.checkFlyctlInstalled(this.flyctl)) {
|
|
59
121
|
throw new Error(`\`${this.flyctl}\` is not installed on your system PATH.`);
|
|
60
122
|
}
|
|
61
|
-
return execSync(`${this.flyctl} apps list`, { encoding: "utf8" });
|
|
123
|
+
return this.runtime.execSync(`${this.flyctl} apps list`, this.flyExecOptions({ encoding: "utf8" }));
|
|
62
124
|
}
|
|
63
125
|
/**
|
|
64
126
|
* Create and deploy a new seller app on Fly.io
|
|
@@ -83,6 +145,7 @@ export class FlyProvider {
|
|
|
83
145
|
|| 1;
|
|
84
146
|
const volumeSnapshotRetentionDays = options.volumeSnapshotRetentionDays;
|
|
85
147
|
const volumeId = options.volumeId;
|
|
148
|
+
const initialConfigPath = options.initialConfigPath;
|
|
86
149
|
if (!targetImage) {
|
|
87
150
|
throw new Error("seller create requires --image registry.fly.io/tb-seller:<v>");
|
|
88
151
|
}
|
|
@@ -99,27 +162,54 @@ export class FlyProvider {
|
|
|
99
162
|
];
|
|
100
163
|
if (flyConfig)
|
|
101
164
|
lines.push(` Fly config: ${flyConfig}`);
|
|
165
|
+
if (initialConfigPath)
|
|
166
|
+
lines.push(` Initial config secret: TOKENBUDDY_SELLER_CONFIG_B64 from ${initialConfigPath}`);
|
|
102
167
|
if (volumeId)
|
|
103
168
|
lines.push(` Volume ID: ${volumeId}`);
|
|
104
169
|
if (volumeSnapshotRetentionDays !== undefined)
|
|
105
170
|
lines.push(` Volume snapshot retention: ${volumeSnapshotRetentionDays} days`);
|
|
106
171
|
return lines.join("\n");
|
|
107
172
|
}
|
|
108
|
-
if (!checkFlyctlInstalled(this.flyctl)) {
|
|
173
|
+
if (!this.runtime.checkFlyctlInstalled(this.flyctl)) {
|
|
109
174
|
throw new Error(`\`${this.flyctl}\` is not installed on PATH.`);
|
|
110
175
|
}
|
|
111
176
|
if (!operatorSecret) {
|
|
112
177
|
throw new Error("operator_secret is required. Provide --operator-secret or configure seller_providers.fly.operator_secret");
|
|
113
178
|
}
|
|
179
|
+
requireReadableFile(flyConfig, "Fly config");
|
|
180
|
+
if (initialConfigPath) {
|
|
181
|
+
requireReadableFile(initialConfigPath, "Initial seller config");
|
|
182
|
+
}
|
|
183
|
+
requirePublishedDockerImage(targetImage, this.runtime.imageInspector);
|
|
114
184
|
console.log(`[Fly.io] Creating app ${appName}...`);
|
|
115
|
-
execSync(`${this.flyctl} apps create ${appName} --machines`, { stdio: "inherit" });
|
|
185
|
+
this.runtime.execSync(`${this.flyctl} apps create ${appName} --machines`, this.flyExecOptions({ stdio: "inherit" }));
|
|
116
186
|
console.log(`[Fly.io] Setting secrets...`);
|
|
117
|
-
|
|
187
|
+
this.importCreateSecrets(appName, operatorSecret, initialConfigPath);
|
|
118
188
|
console.log(`[Fly.io] Deploying image ${targetImage}...`);
|
|
119
|
-
const deployCmd = `${this.flyctl} deploy -c ${flyConfig} --image ${targetImage} --region ${targetRegion} --app ${appName} --now`;
|
|
120
|
-
execSync(deployCmd, { stdio: "inherit" });
|
|
189
|
+
const deployCmd = `${this.flyctl} deploy -c ${flyConfig} --image ${targetImage} --primary-region ${targetRegion} --app ${appName} --now`;
|
|
190
|
+
this.runtime.execSync(deployCmd, this.flyExecOptions({ stdio: "inherit" }));
|
|
121
191
|
return `Successfully deployed ${appName} on Fly.io`;
|
|
122
192
|
}
|
|
193
|
+
importCreateSecrets(appName, operatorSecret, initialConfigPath) {
|
|
194
|
+
const lines = [
|
|
195
|
+
"ALLOW_MOCK=false",
|
|
196
|
+
`OPERATOR_SECRET=${operatorSecret}`
|
|
197
|
+
];
|
|
198
|
+
if (initialConfigPath) {
|
|
199
|
+
const configContent = fs.readFileSync(initialConfigPath, "utf8");
|
|
200
|
+
lines.push(`TOKENBUDDY_SELLER_CONFIG_B64=${Buffer.from(configContent, "utf8").toString("base64")}`);
|
|
201
|
+
}
|
|
202
|
+
const result = this.runtime.spawnSync(this.flyctl, ["secrets", "import", "--stage", "--app", appName], this.flySpawnOptions({
|
|
203
|
+
input: `${lines.join("\n")}\n`,
|
|
204
|
+
stdio: ["pipe", "inherit", "inherit"]
|
|
205
|
+
}));
|
|
206
|
+
if (result.error) {
|
|
207
|
+
throw result.error;
|
|
208
|
+
}
|
|
209
|
+
if (result.status !== 0) {
|
|
210
|
+
throw new Error(`flyctl secrets import failed with exit code ${result.status}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
123
213
|
/**
|
|
124
214
|
* Destroy a seller app on Fly.io.
|
|
125
215
|
* @param nameOrApp Either a bare name (e.g. "86d81e") or a full app name (e.g. "tbs-86d81e").
|
|
@@ -131,11 +221,11 @@ export class FlyProvider {
|
|
|
131
221
|
if (dryRun) {
|
|
132
222
|
return `[DRY-RUN] Will destroy fly app: ${appName}`;
|
|
133
223
|
}
|
|
134
|
-
if (!checkFlyctlInstalled(this.flyctl)) {
|
|
224
|
+
if (!this.runtime.checkFlyctlInstalled(this.flyctl)) {
|
|
135
225
|
throw new Error(`\`${this.flyctl}\` is not installed.`);
|
|
136
226
|
}
|
|
137
227
|
console.log(`[Fly.io] Destroying app ${appName}...`);
|
|
138
|
-
execSync(`${this.flyctl} apps destroy ${appName} --yes`, { stdio: "inherit" });
|
|
228
|
+
this.runtime.execSync(`${this.flyctl} apps destroy ${appName} --yes`, this.flyExecOptions({ stdio: "inherit" }));
|
|
139
229
|
return `Successfully destroyed ${appName} on Fly.io`;
|
|
140
230
|
}
|
|
141
231
|
/**
|
|
@@ -143,10 +233,10 @@ export class FlyProvider {
|
|
|
143
233
|
*/
|
|
144
234
|
statusApp(name) {
|
|
145
235
|
const appName = name.includes("-") ? name : `tb-seller-${name}`;
|
|
146
|
-
if (!checkFlyctlInstalled(this.flyctl)) {
|
|
236
|
+
if (!this.runtime.checkFlyctlInstalled(this.flyctl)) {
|
|
147
237
|
throw new Error(`\`${this.flyctl}\` is not installed.`);
|
|
148
238
|
}
|
|
149
|
-
return execSync(`${this.flyctl} status --app ${appName}`, { encoding: "utf8" });
|
|
239
|
+
return this.runtime.execSync(`${this.flyctl} status --app ${appName}`, this.flyExecOptions({ encoding: "utf8" }));
|
|
150
240
|
}
|
|
151
241
|
/**
|
|
152
242
|
* Update an existing seller app's Machines to a new image.
|
|
@@ -167,16 +257,26 @@ export class FlyProvider {
|
|
|
167
257
|
lines.push(" Volumes: unchanged");
|
|
168
258
|
return lines.join("\n");
|
|
169
259
|
}
|
|
170
|
-
if (!checkFlyctlInstalled(this.flyctl)) {
|
|
260
|
+
if (!this.runtime.checkFlyctlInstalled(this.flyctl)) {
|
|
171
261
|
throw new Error(`\`${this.flyctl}\` is not installed.`);
|
|
172
262
|
}
|
|
173
|
-
const machinesJson = execSync(`${this.flyctl} machines list --app ${app} --json`, { encoding: "utf8" });
|
|
263
|
+
const machinesJson = this.runtime.execSync(`${this.flyctl} machines list --app ${app} --json`, this.flyExecOptions({ encoding: "utf8" }));
|
|
174
264
|
const machineIds = parseFlyMachineIds(machinesJson, app);
|
|
175
265
|
console.log(`[Fly.io] Updating ${app} image on ${machineIds.length} machine(s)...`);
|
|
176
266
|
for (const machineId of machineIds) {
|
|
177
|
-
execSync(`${this.flyctl} machine update ${machineId} --app ${app} --image ${targetImage} --yes`, { stdio: "inherit" });
|
|
267
|
+
this.runtime.execSync(`${this.flyctl} machine update ${machineId} --app ${app} --image ${targetImage} --yes`, this.flyExecOptions({ stdio: "inherit" }));
|
|
178
268
|
}
|
|
179
269
|
return `Successfully updated ${app} image`;
|
|
180
270
|
}
|
|
181
271
|
}
|
|
272
|
+
function requireReadableFile(filePath, label) {
|
|
273
|
+
if (!fs.existsSync(filePath)) {
|
|
274
|
+
throw new Error(`${label} file does not exist: ${filePath}`);
|
|
275
|
+
}
|
|
276
|
+
const stat = fs.statSync(filePath);
|
|
277
|
+
if (!stat.isFile()) {
|
|
278
|
+
throw new Error(`${label} path is not a file: ${filePath}`);
|
|
279
|
+
}
|
|
280
|
+
fs.accessSync(filePath, fs.constants.R_OK);
|
|
281
|
+
}
|
|
182
282
|
//# sourceMappingURL=server-cmd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-cmd.js","sourceRoot":"","sources":["../../src/server-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"server-cmd.js","sourceRoot":"","sources":["../../src/server-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ConfigManager } from "./config.js";
|
|
2
|
+
export interface UiActionResult {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
stdout: string;
|
|
5
|
+
stderr: string;
|
|
6
|
+
command: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface CreateSellerRequest {
|
|
9
|
+
sellerName: string;
|
|
10
|
+
region: string;
|
|
11
|
+
image: string;
|
|
12
|
+
upstreamWebsite: string;
|
|
13
|
+
upstreamUrl: string;
|
|
14
|
+
upstreamApiKey: string;
|
|
15
|
+
upstreamBalanceProbeTemplate?: string;
|
|
16
|
+
upstreamBalanceProbeUrl?: string;
|
|
17
|
+
upstreamBalanceProbeUserId?: string;
|
|
18
|
+
upstreamBalanceProbeRechargeUrl?: string;
|
|
19
|
+
upstreamBalanceUrl?: string;
|
|
20
|
+
upstreamUserId?: string;
|
|
21
|
+
upstreamRechargeUrl?: string;
|
|
22
|
+
maxConnections: number;
|
|
23
|
+
maxQueueDepth: number;
|
|
24
|
+
markupRatio: number;
|
|
25
|
+
discountRatio: number;
|
|
26
|
+
paymentMethods?: string[] | string;
|
|
27
|
+
paymentMethod?: string;
|
|
28
|
+
clawtipPayTo?: string;
|
|
29
|
+
clawtipSm4KeyBase64?: string;
|
|
30
|
+
clawtipSkillSlug?: string;
|
|
31
|
+
clawtipSkillId?: string;
|
|
32
|
+
clawtipDescription?: string;
|
|
33
|
+
clawtipResourceUrl?: string;
|
|
34
|
+
clawtipActivationFeeFen?: number;
|
|
35
|
+
clawtipMicrosPerFen?: number;
|
|
36
|
+
flyConfig?: string;
|
|
37
|
+
operatorSecret?: string;
|
|
38
|
+
app?: string;
|
|
39
|
+
dryRun?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface UiActionsOptions {
|
|
42
|
+
configManager: ConfigManager;
|
|
43
|
+
configPath?: string;
|
|
44
|
+
profile?: string;
|
|
45
|
+
url?: string;
|
|
46
|
+
token?: string;
|
|
47
|
+
fetchJson?: (url: string, init?: RequestInit) => Promise<unknown>;
|
|
48
|
+
commandRunner?: (args: string[], timeoutMs: number) => Promise<UiActionResult>;
|
|
49
|
+
}
|
|
50
|
+
type ConfigPatch = Record<string, unknown>;
|
|
51
|
+
export type UiActionProgressStatus = "pending" | "running" | "succeeded" | "failed" | "skipped";
|
|
52
|
+
export type UiActionProgressStepId = "check_registry" | "validate_config" | "create_deployment" | "wait_seller" | "apply_config" | "refresh_models" | "publish_registry";
|
|
53
|
+
export interface UiActionProgressEvent {
|
|
54
|
+
stepId: UiActionProgressStepId;
|
|
55
|
+
status: UiActionProgressStatus;
|
|
56
|
+
title: string;
|
|
57
|
+
message?: string;
|
|
58
|
+
result?: UiActionResult;
|
|
59
|
+
}
|
|
60
|
+
type UiActionProgressReporter = (event: UiActionProgressEvent) => void;
|
|
61
|
+
export declare class UiActions {
|
|
62
|
+
private readonly state;
|
|
63
|
+
private readonly options;
|
|
64
|
+
private readonly commandRunner?;
|
|
65
|
+
constructor(options: UiActionsOptions);
|
|
66
|
+
updateSellerConfig(id: string, patch: ConfigPatch): Promise<UiActionResult>;
|
|
67
|
+
createSeller(request: CreateSellerRequest, progress?: UiActionProgressReporter): Promise<{
|
|
68
|
+
result: UiActionResult;
|
|
69
|
+
configValidation: UiActionResult;
|
|
70
|
+
readiness?: UiActionResult;
|
|
71
|
+
configPut?: UiActionResult;
|
|
72
|
+
modelsRefresh?: UiActionResult;
|
|
73
|
+
registryPublish?: UiActionResult;
|
|
74
|
+
configPreview: Record<string, unknown>;
|
|
75
|
+
publishRegistry: "completed" | "failed" | "skipped";
|
|
76
|
+
}>;
|
|
77
|
+
setRegistryStatus(id: string, status: "active" | "draining" | "offline"): Promise<UiActionResult>;
|
|
78
|
+
deleteDeployment(id: string, confirm: boolean): Promise<UiActionResult>;
|
|
79
|
+
private withTempYaml;
|
|
80
|
+
private withTempJson;
|
|
81
|
+
private runAdmin;
|
|
82
|
+
private waitForSellerReady;
|
|
83
|
+
private refreshSellerModelsWithRetry;
|
|
84
|
+
private publishCreatedSellerRegistryEntry;
|
|
85
|
+
private fetchSellerOperatorJson;
|
|
86
|
+
private fetchSellerOperatorJsonOptional;
|
|
87
|
+
}
|
|
88
|
+
export declare function runTbAdmin(args: string[], timeoutMs: number): Promise<UiActionResult>;
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=ui-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-actions.d.ts","sourceRoot":"","sources":["../../src/ui-actions.ts"],"names":[],"mappings":"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"}
|