@tianshu-ai/tianshu 0.3.8 → 0.3.11
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/package.json +1 -1
- package/packages/server/dist/cli.d.ts.map +1 -1
- package/packages/server/dist/cli.js +9 -32
- package/packages/server/dist/cli.js.map +1 -1
- package/packages/server/dist/core/config.d.ts +20 -0
- package/packages/server/dist/core/config.d.ts.map +1 -1
- package/packages/server/dist/core/config.js.map +1 -1
- package/packages/server/dist/core/index.d.ts +1 -0
- package/packages/server/dist/core/index.d.ts.map +1 -1
- package/packages/server/dist/core/index.js +1 -0
- package/packages/server/dist/core/index.js.map +1 -1
- package/packages/server/dist/core/urls.d.ts +113 -0
- package/packages/server/dist/core/urls.d.ts.map +1 -0
- package/packages/server/dist/core/urls.js +206 -0
- package/packages/server/dist/core/urls.js.map +1 -0
- package/packages/server/dist/index.js +53 -2
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/setup/checks/network.d.ts.map +1 -1
- package/packages/server/dist/setup/checks/network.js +14 -50
- package/packages/server/dist/setup/checks/network.js.map +1 -1
- package/packages/server/dist/setup/repo-root.d.ts +1 -0
- package/packages/server/dist/setup/repo-root.d.ts.map +1 -1
- package/packages/server/dist/setup/repo-root.js +29 -0
- package/packages/server/dist/setup/repo-root.js.map +1 -1
- package/packages/server/dist/setup/service.d.ts.map +1 -1
- package/packages/server/dist/setup/service.js +9 -29
- package/packages/server/dist/setup/service.js.map +1 -1
- package/packages/server/dist/setup/start-server.d.ts.map +1 -1
- package/packages/server/dist/setup/start-server.js +29 -9
- package/packages/server/dist/setup/start-server.js.map +1 -1
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAiDA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAkBpD;AAkCD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+M1D"}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
// configured the agent to write into.
|
|
19
19
|
import fs from "node:fs";
|
|
20
20
|
import path from "node:path";
|
|
21
|
-
import { GlobalOps, InvalidTenantIdError, TenantAlreadyExistsError, TenantNotFoundError, getTianshuHome,
|
|
21
|
+
import { buildTenantUserUrl, GlobalOps, InvalidTenantIdError, resolvePublicBaseUrl, TenantAlreadyExistsError, TenantNotFoundError, getTianshuHome, } from "./core/index.js";
|
|
22
22
|
import { loadEnv } from "./setup/load-env.js";
|
|
23
23
|
import { runDoctor } from "./setup/doctor.js";
|
|
24
24
|
import { runSetupWizard } from "./setup/wizard.js";
|
|
@@ -190,7 +190,7 @@ export async function main(argv) {
|
|
|
190
190
|
console.log(id);
|
|
191
191
|
return 0;
|
|
192
192
|
}
|
|
193
|
-
const webBase =
|
|
193
|
+
const webBase = resolvePublicBaseUrl();
|
|
194
194
|
const tree = ids.map((tenantId) => ({
|
|
195
195
|
tenantId,
|
|
196
196
|
users: listTenantUsers(tenantId),
|
|
@@ -201,7 +201,7 @@ export async function main(argv) {
|
|
|
201
201
|
users: t.users,
|
|
202
202
|
urls: t.users.map((u) => ({
|
|
203
203
|
userId: u,
|
|
204
|
-
url:
|
|
204
|
+
url: buildTenantUserUrl(webBase, t.tenantId, u),
|
|
205
205
|
})),
|
|
206
206
|
})), null, 2));
|
|
207
207
|
return 0;
|
|
@@ -216,7 +216,7 @@ export async function main(argv) {
|
|
|
216
216
|
}
|
|
217
217
|
console.log(t.tenantId);
|
|
218
218
|
for (const u of t.users) {
|
|
219
|
-
console.log(` ${u.padEnd(16)} ${webBase
|
|
219
|
+
console.log(` ${u.padEnd(16)} ${buildTenantUserUrl(webBase, t.tenantId, u)}`);
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
return 0;
|
|
@@ -300,34 +300,11 @@ function listTenantUsers(tenantId) {
|
|
|
300
300
|
return [];
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
* 2. global config server.publicUrl
|
|
309
|
-
* 3. http://localhost:<webPort> where webPort comes from
|
|
310
|
-
* .env's WEB_PORT or the default 5183
|
|
311
|
-
* The fallback uses the *web* port (vite dev server), not the
|
|
312
|
-
* server port — the URL we print is what the user opens, not
|
|
313
|
-
* what fetch hits.
|
|
314
|
-
*/
|
|
315
|
-
function resolveWebBaseUrl() {
|
|
316
|
-
const envUrl = process.env.TIANSHU_WEB_URL;
|
|
317
|
-
if (envUrl)
|
|
318
|
-
return envUrl.replace(/\/+$/, "");
|
|
319
|
-
try {
|
|
320
|
-
const cfg = loadGlobalConfig();
|
|
321
|
-
const pub = cfg.server?.publicUrl;
|
|
322
|
-
if (pub)
|
|
323
|
-
return pub.replace(/\/+$/, "");
|
|
324
|
-
}
|
|
325
|
-
catch {
|
|
326
|
-
/* no global config yet — fall through */
|
|
327
|
-
}
|
|
328
|
-
const webPort = process.env.WEB_PORT ?? "5183";
|
|
329
|
-
return `http://localhost:${webPort}`;
|
|
330
|
-
}
|
|
303
|
+
// URL/port resolution lives in core/urls.ts — the CLI imports
|
|
304
|
+
// `resolvePublicBaseUrl` / `buildTenantUserUrl` and lets that
|
|
305
|
+
// module own dev/prod detection, env overrides, and publicUrl.
|
|
306
|
+
// (Earlier this file had its own resolver that drifted from
|
|
307
|
+
// doctor's and the wizard's. Don't reintroduce one.)
|
|
331
308
|
// Direct invocation: `node dist/cli.js …`. The `bin/tianshu.mjs`
|
|
332
309
|
// shim also calls `main()` after dynamic-importing this module,
|
|
333
310
|
// so we only auto-run when the module *is* the entry point.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,10 +75,30 @@ export interface McpServerEntry {
|
|
|
75
75
|
}
|
|
76
76
|
/** Fields that ONLY the global config controls. Tenant config attempting these is rejected. */
|
|
77
77
|
export interface GlobalOnlyConfig {
|
|
78
|
+
/**
|
|
79
|
+
* `publicUrl` is the operator-declared URL users open in a
|
|
80
|
+
* browser — e.g. a Cloudflare tunnel hostname. Write this
|
|
81
|
+
* by hand (or via wizard) when you want a stable public
|
|
82
|
+
* URL; nothing inside the server overrides it.
|
|
83
|
+
*
|
|
84
|
+
* `effectivePublicUrl` is auto-written by the running
|
|
85
|
+
* server on each boot to record "this is the localhost
|
|
86
|
+
* URL I'm actually serving the SPA from" (server port in
|
|
87
|
+
* prod / TIANSHU_WEB_DIST mode, web port in dev / vite
|
|
88
|
+
* mode). CLI commands like `tianshu tenant list` read it
|
|
89
|
+
* when the operator hasn't set publicUrl, so they print a
|
|
90
|
+
* URL that actually opens regardless of which install
|
|
91
|
+
* shape is active.
|
|
92
|
+
*
|
|
93
|
+
* Order of preference for "what URL do I print to a human?"
|
|
94
|
+
* TIANSHU_WEB_URL env > server.publicUrl >
|
|
95
|
+
* server.effectivePublicUrl > hard fallback to localhost:port.
|
|
96
|
+
*/
|
|
78
97
|
server?: {
|
|
79
98
|
port?: number;
|
|
80
99
|
corsOrigin?: string;
|
|
81
100
|
publicUrl?: string;
|
|
101
|
+
effectivePublicUrl?: string;
|
|
82
102
|
};
|
|
83
103
|
logging?: {
|
|
84
104
|
level?: "debug" | "info" | "warn" | "error";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAqBA,wEAAwE;AACxE,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,MAAM,EACN;IACE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CACF,CAAC;AAEF,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;wEACoE;IACpE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,GAAG,EAAE,MAAM,CAAC;IACZ;uEACmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;yCAEqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,+FAA+F;AAC/F,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,2DAA2D;AAC3D,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,yCAAyC;AACzC,EAAE;AACF,wEAAwE;AACxE,yEAAyE;AACzE,iCAAiC;AAEjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ export { InvalidTenantIdError, isValidTenantId, validateTenantId, } from "./tena
|
|
|
3
3
|
export { DEFAULTS, loadGlobalConfig, loadTenantConfig, mergeConfigs, resolveTenantConfig, TenantConfigForbiddenFieldError, writeGlobalConfig, writeTenantConfig, type BrandingConfig, type GlobalConfig, type McpServerEntry, type McpUserConfig, type ModelEntry, type ModelsCatalog, type OAuthProviderConfig, type PluginsConfig, type ProviderEntry, type ResolvedConfig, type TenantConfig, type WorkerSettings, } from "./config.js";
|
|
4
4
|
export { McpManager, type McpUserToolsetSnapshot } from "./mcp-manager.js";
|
|
5
5
|
export { DbPool, getDefaultPool } from "./db-pool.js";
|
|
6
|
+
export { buildTenantUserUrl, computeServerEffectivePublicUrl, DEFAULT_SERVER_PORT, DEFAULT_WEB_PORT, detectInstallMode, resolveLocalServerBaseUrl, resolvePublicBaseUrl, resolveServerPort, resolveWebPort, type InstallMode, type UrlContext, } from "./urls.js";
|
|
6
7
|
export { runMigrations, MIGRATIONS } from "./migrations/index.js";
|
|
7
8
|
export { TenantContext, buildTenantContext } from "./tenant-context.js";
|
|
8
9
|
export { GlobalOps, TenantAlreadyExistsError, TenantNotFoundError, type GlobalOpsOptions, } from "./global-ops.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EACL,kBAAkB,EAClB,+BAA+B,EAC/B,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EACL,SAAS,EACT,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,EAC1B,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,UAAU,EACV,SAAS,EACT,eAAe,EACf,UAAU,EACV,aAAa,EACb,KAAK,iBAAiB,GACvB,MAAM,UAAU,CAAC"}
|
|
@@ -8,6 +8,7 @@ export { InvalidTenantIdError, isValidTenantId, validateTenantId, } from "./tena
|
|
|
8
8
|
export { DEFAULTS, loadGlobalConfig, loadTenantConfig, mergeConfigs, resolveTenantConfig, TenantConfigForbiddenFieldError, writeGlobalConfig, writeTenantConfig, } from "./config.js";
|
|
9
9
|
export { McpManager } from "./mcp-manager.js";
|
|
10
10
|
export { DbPool, getDefaultPool } from "./db-pool.js";
|
|
11
|
+
export { buildTenantUserUrl, computeServerEffectivePublicUrl, DEFAULT_SERVER_PORT, DEFAULT_WEB_PORT, detectInstallMode, resolveLocalServerBaseUrl, resolvePublicBaseUrl, resolveServerPort, resolveWebPort, } from "./urls.js";
|
|
11
12
|
export { runMigrations, MIGRATIONS } from "./migrations/index.js";
|
|
12
13
|
export { TenantContext, buildTenantContext } from "./tenant-context.js";
|
|
13
14
|
export { GlobalOps, TenantAlreadyExistsError, TenantNotFoundError, } from "./global-ops.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,sEAAsE;AACtE,kEAAkE;AAClE,8DAA8D;AAE9D,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,EACjB,iBAAiB,GAalB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAA+B,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,sEAAsE;AACtE,kEAAkE;AAClE,8DAA8D;AAE9D,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,EACjB,iBAAiB,GAalB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAA+B,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EACL,kBAAkB,EAClB,+BAA+B,EAC/B,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,GAGf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EACL,SAAS,EACT,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,EAC1B,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,iBAAiB,GAElB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,kBAAkB,GAKnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,UAAU,EACV,SAAS,EACT,eAAe,EACf,UAAU,EACV,aAAa,GAEd,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { type GlobalConfig } from "./config.js";
|
|
2
|
+
export declare const DEFAULT_SERVER_PORT = 3110;
|
|
3
|
+
export declare const DEFAULT_WEB_PORT = 5183;
|
|
4
|
+
/** Two install shapes. See module docstring. */
|
|
5
|
+
export type InstallMode = "dev" | "prod";
|
|
6
|
+
export interface UrlContext {
|
|
7
|
+
/** Pre-loaded global config, if the caller already has it. */
|
|
8
|
+
config?: GlobalConfig;
|
|
9
|
+
/**
|
|
10
|
+
* The tianshu checkout the running CLI lives in. Used only
|
|
11
|
+
* for dev/prod detection. Defaults to walking up from this
|
|
12
|
+
* file (works for both dev checkouts and global installs).
|
|
13
|
+
*/
|
|
14
|
+
repoRoot?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the API server's port:
|
|
18
|
+
* 1. process.env.PORT
|
|
19
|
+
* 2. global config server.port
|
|
20
|
+
* 3. DEFAULT_SERVER_PORT (3110)
|
|
21
|
+
*
|
|
22
|
+
* Matches what the wizard writes to .env and what doctor probes.
|
|
23
|
+
* The running server itself doesn't call this (see module
|
|
24
|
+
* docstring) — it keeps a narrower env-only read so its boot
|
|
25
|
+
* isn't blocked by a missing global config.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveServerPort(ctx?: UrlContext): number;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the *vite dev server* port. Only meaningful in dev
|
|
30
|
+
* mode. We don't read this from global config because it isn't
|
|
31
|
+
* a config field — it's a per-dev-checkout `.env` knob the
|
|
32
|
+
* wizard writes when installing a dev launchd agent.
|
|
33
|
+
*
|
|
34
|
+
* 1. process.env.WEB_PORT
|
|
35
|
+
* 2. DEFAULT_WEB_PORT (5183)
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveWebPort(): number;
|
|
38
|
+
/**
|
|
39
|
+
* Whether this CLI is running from a dev checkout (vite serves
|
|
40
|
+
* the SPA on a separate port) or a global / npm-published
|
|
41
|
+
* install (server hosts the SPA itself on the API port).
|
|
42
|
+
*
|
|
43
|
+
* Heuristic mirrors `setup/repo-root.ts:isDevelopmentCheckout`
|
|
44
|
+
* but kept inline so this module stays import-light (config.ts
|
|
45
|
+
* is the only cross-module dep). The two definitions must
|
|
46
|
+
* agree — if they ever drift, doctor and the wizard will start
|
|
47
|
+
* reporting different modes for the same machine. There's a
|
|
48
|
+
* smoke test in urls.test.ts that pins them together.
|
|
49
|
+
*/
|
|
50
|
+
export declare function detectInstallMode(ctx?: UrlContext): InstallMode;
|
|
51
|
+
/**
|
|
52
|
+
* The URL the user opens in a browser.
|
|
53
|
+
*
|
|
54
|
+
* Resolution order:
|
|
55
|
+
* 1. TIANSHU_WEB_URL env (explicit override — Cloudflare
|
|
56
|
+
* tunnel hostname etc.). Trumps everything.
|
|
57
|
+
* 2. global config server.publicUrl (operator-declared,
|
|
58
|
+
* persisted; same intent as TIANSHU_WEB_URL but written
|
|
59
|
+
* once into config instead of needing env in every shell).
|
|
60
|
+
* 3. global config server.effectivePublicUrl (auto-written
|
|
61
|
+
* by the running server on each boot — reflects which
|
|
62
|
+
* port is actually serving the SPA *right now*, regardless
|
|
63
|
+
* of whether the install is dev or prod shape).
|
|
64
|
+
* 4. http://localhost:<port>, where <port> is:
|
|
65
|
+
* - prod mode → server port (server hosts the SPA itself)
|
|
66
|
+
* - dev mode → web port (vite dev server)
|
|
67
|
+
* This last fallback runs when the server has never
|
|
68
|
+
* booted (so #3 isn't populated yet) AND the operator
|
|
69
|
+
* hasn't declared publicUrl. We still use the dev/prod
|
|
70
|
+
* heuristic from the filesystem here — it's the same
|
|
71
|
+
* one the wizard's launchd plist uses.
|
|
72
|
+
*
|
|
73
|
+
* Always returned without a trailing slash so callers can do
|
|
74
|
+
* `${publicBase}/tenants/...` safely.
|
|
75
|
+
*/
|
|
76
|
+
export declare function resolvePublicBaseUrl(ctx?: UrlContext): string;
|
|
77
|
+
/**
|
|
78
|
+
* What the running server should publish as its
|
|
79
|
+
* `effectivePublicUrl` — i.e. "this is the localhost URL that
|
|
80
|
+
* actually opens the SPA right now". The server calls this
|
|
81
|
+
* during boot and writes the result to global config so CLI
|
|
82
|
+
* commands (which run in separate processes and can't read
|
|
83
|
+
* the server's env) still know which port the SPA lives on.
|
|
84
|
+
*
|
|
85
|
+
* Don't confuse with publicBaseUrl: this one ignores
|
|
86
|
+
* TIANSHU_WEB_URL / publicUrl on purpose. It's the
|
|
87
|
+
* *observed* truth, not the *declared* one.
|
|
88
|
+
*/
|
|
89
|
+
export declare function computeServerEffectivePublicUrl(opts: {
|
|
90
|
+
/** PORT the server is actually listening on. */
|
|
91
|
+
port: number;
|
|
92
|
+
/** True when this process is hosting the SPA itself
|
|
93
|
+
* (TIANSHU_WEB_DIST is set and points at a valid dist). */
|
|
94
|
+
hostsSpa: boolean;
|
|
95
|
+
}): string;
|
|
96
|
+
/**
|
|
97
|
+
* The URL local code uses to talk to the running server's API.
|
|
98
|
+
*
|
|
99
|
+
* Differs from publicBaseUrl deliberately:
|
|
100
|
+
* - `publicBaseUrl` is for HUMANS. It may point at a public
|
|
101
|
+
* Cloudflare tunnel hostname.
|
|
102
|
+
* - `localServerBaseUrl` is for IN-PROCESS PROBES (doctor's
|
|
103
|
+
* health check, the wizard waiting for the server to come
|
|
104
|
+
* up). Those must hit localhost on the actual bind port,
|
|
105
|
+
* regardless of any public override — otherwise doctor
|
|
106
|
+
* would try to probe a tunnel that may be off.
|
|
107
|
+
*
|
|
108
|
+
* No trailing slash.
|
|
109
|
+
*/
|
|
110
|
+
export declare function resolveLocalServerBaseUrl(ctx?: UrlContext): string;
|
|
111
|
+
/** Convenience: build the URL for `tenants/<t>/users/<u>/`. */
|
|
112
|
+
export declare function buildTenantUserUrl(baseUrl: string, tenantId: string, userId: string): string;
|
|
113
|
+
//# sourceMappingURL=urls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../src/core/urls.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAElE,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,UAAe,GAAG,MAAM,CAQ9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,UAAe,GAAG,WAAW,CAUnE;AAcD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,UAAe,GAAG,MAAM,CAWjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb;gEAC4D;IAC5D,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,CAGT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,UAAe,GAAG,MAAM,CAEtE;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,CAER"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// Central place for "where does this server live, in URL form?".
|
|
2
|
+
//
|
|
3
|
+
// Three things were drifting before this module existed:
|
|
4
|
+
// 1. The server process picks a port (env PORT → 3110).
|
|
5
|
+
// 2. The wizard / launchd / doctor pick a port too (env PORT →
|
|
6
|
+
// global config server.port → 3110).
|
|
7
|
+
// 3. The CLI prints user-facing URLs (tenant list, status,
|
|
8
|
+
// wizard banner) and has to know both the *port* and the
|
|
9
|
+
// *mode* (dev = vite on a separate web port; prod = server
|
|
10
|
+
// hosts the SPA on the API port via TIANSHU_WEB_DIST).
|
|
11
|
+
//
|
|
12
|
+
// Each of those used to inline its own resolver. They drifted —
|
|
13
|
+
// the most recent symptom was `tianshu tenant list` printing the
|
|
14
|
+
// vite port (5183) on a prod install, where no vite process
|
|
15
|
+
// exists. This module is the single source of truth.
|
|
16
|
+
//
|
|
17
|
+
// What it does NOT do:
|
|
18
|
+
// - It doesn't decide the *bind port* the running server
|
|
19
|
+
// uses. `index.ts` keeps its own narrow `process.env.PORT
|
|
20
|
+
// ?? 3110` read so it never depends on the global config
|
|
21
|
+
// file existing during boot. (If you want the server to
|
|
22
|
+
// honour global config someday, change index.ts and
|
|
23
|
+
// re-aim the launchd plist env vars; don't change urls.ts.)
|
|
24
|
+
// - It doesn't probe sockets. `setup/checks/network.ts` still
|
|
25
|
+
// owns the actual "is the port answering?" probe, but it
|
|
26
|
+
// gets its port numbers and dev/prod mode from here.
|
|
27
|
+
import fs from "node:fs";
|
|
28
|
+
import path from "node:path";
|
|
29
|
+
import { fileURLToPath } from "node:url";
|
|
30
|
+
import { loadGlobalConfig } from "./config.js";
|
|
31
|
+
export const DEFAULT_SERVER_PORT = 3110;
|
|
32
|
+
export const DEFAULT_WEB_PORT = 5183;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the API server's port:
|
|
35
|
+
* 1. process.env.PORT
|
|
36
|
+
* 2. global config server.port
|
|
37
|
+
* 3. DEFAULT_SERVER_PORT (3110)
|
|
38
|
+
*
|
|
39
|
+
* Matches what the wizard writes to .env and what doctor probes.
|
|
40
|
+
* The running server itself doesn't call this (see module
|
|
41
|
+
* docstring) — it keeps a narrower env-only read so its boot
|
|
42
|
+
* isn't blocked by a missing global config.
|
|
43
|
+
*/
|
|
44
|
+
export function resolveServerPort(ctx = {}) {
|
|
45
|
+
const envPort = parsePort(process.env.PORT);
|
|
46
|
+
if (envPort !== undefined)
|
|
47
|
+
return envPort;
|
|
48
|
+
const cfg = ctx.config ?? safeLoadConfig();
|
|
49
|
+
if (cfg?.server?.port && Number.isFinite(cfg.server.port)) {
|
|
50
|
+
return cfg.server.port;
|
|
51
|
+
}
|
|
52
|
+
return DEFAULT_SERVER_PORT;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolve the *vite dev server* port. Only meaningful in dev
|
|
56
|
+
* mode. We don't read this from global config because it isn't
|
|
57
|
+
* a config field — it's a per-dev-checkout `.env` knob the
|
|
58
|
+
* wizard writes when installing a dev launchd agent.
|
|
59
|
+
*
|
|
60
|
+
* 1. process.env.WEB_PORT
|
|
61
|
+
* 2. DEFAULT_WEB_PORT (5183)
|
|
62
|
+
*/
|
|
63
|
+
export function resolveWebPort() {
|
|
64
|
+
const envPort = parsePort(process.env.WEB_PORT);
|
|
65
|
+
if (envPort !== undefined)
|
|
66
|
+
return envPort;
|
|
67
|
+
return DEFAULT_WEB_PORT;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Whether this CLI is running from a dev checkout (vite serves
|
|
71
|
+
* the SPA on a separate port) or a global / npm-published
|
|
72
|
+
* install (server hosts the SPA itself on the API port).
|
|
73
|
+
*
|
|
74
|
+
* Heuristic mirrors `setup/repo-root.ts:isDevelopmentCheckout`
|
|
75
|
+
* but kept inline so this module stays import-light (config.ts
|
|
76
|
+
* is the only cross-module dep). The two definitions must
|
|
77
|
+
* agree — if they ever drift, doctor and the wizard will start
|
|
78
|
+
* reporting different modes for the same machine. There's a
|
|
79
|
+
* smoke test in urls.test.ts that pins them together.
|
|
80
|
+
*/
|
|
81
|
+
export function detectInstallMode(ctx = {}) {
|
|
82
|
+
try {
|
|
83
|
+
const explicitRoot = ctx.repoRoot;
|
|
84
|
+
if (explicitRoot)
|
|
85
|
+
return modeFromPath(explicitRoot);
|
|
86
|
+
return modeFromPath(path.dirname(fileURLToPath(import.meta.url)));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Conservative fallback: assume prod so we don't print
|
|
90
|
+
// dev-only "open localhost:5183" advice to a real user.
|
|
91
|
+
return "prod";
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function modeFromPath(start) {
|
|
95
|
+
let dir = start;
|
|
96
|
+
for (let i = 0; i < 16; i++) {
|
|
97
|
+
if (fs.existsSync(path.join(dir, ".git")))
|
|
98
|
+
return "dev";
|
|
99
|
+
const parent = path.dirname(dir);
|
|
100
|
+
if (parent === dir)
|
|
101
|
+
break;
|
|
102
|
+
dir = parent;
|
|
103
|
+
}
|
|
104
|
+
if (start.includes(`${path.sep}node_modules${path.sep}`))
|
|
105
|
+
return "prod";
|
|
106
|
+
return "prod";
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* The URL the user opens in a browser.
|
|
110
|
+
*
|
|
111
|
+
* Resolution order:
|
|
112
|
+
* 1. TIANSHU_WEB_URL env (explicit override — Cloudflare
|
|
113
|
+
* tunnel hostname etc.). Trumps everything.
|
|
114
|
+
* 2. global config server.publicUrl (operator-declared,
|
|
115
|
+
* persisted; same intent as TIANSHU_WEB_URL but written
|
|
116
|
+
* once into config instead of needing env in every shell).
|
|
117
|
+
* 3. global config server.effectivePublicUrl (auto-written
|
|
118
|
+
* by the running server on each boot — reflects which
|
|
119
|
+
* port is actually serving the SPA *right now*, regardless
|
|
120
|
+
* of whether the install is dev or prod shape).
|
|
121
|
+
* 4. http://localhost:<port>, where <port> is:
|
|
122
|
+
* - prod mode → server port (server hosts the SPA itself)
|
|
123
|
+
* - dev mode → web port (vite dev server)
|
|
124
|
+
* This last fallback runs when the server has never
|
|
125
|
+
* booted (so #3 isn't populated yet) AND the operator
|
|
126
|
+
* hasn't declared publicUrl. We still use the dev/prod
|
|
127
|
+
* heuristic from the filesystem here — it's the same
|
|
128
|
+
* one the wizard's launchd plist uses.
|
|
129
|
+
*
|
|
130
|
+
* Always returned without a trailing slash so callers can do
|
|
131
|
+
* `${publicBase}/tenants/...` safely.
|
|
132
|
+
*/
|
|
133
|
+
export function resolvePublicBaseUrl(ctx = {}) {
|
|
134
|
+
const envUrl = process.env.TIANSHU_WEB_URL;
|
|
135
|
+
if (envUrl)
|
|
136
|
+
return stripTrailingSlash(envUrl);
|
|
137
|
+
const cfg = ctx.config ?? safeLoadConfig();
|
|
138
|
+
const cfgUrl = cfg?.server?.publicUrl;
|
|
139
|
+
if (cfgUrl)
|
|
140
|
+
return stripTrailingSlash(cfgUrl);
|
|
141
|
+
const effective = cfg?.server?.effectivePublicUrl;
|
|
142
|
+
if (effective)
|
|
143
|
+
return stripTrailingSlash(effective);
|
|
144
|
+
const mode = detectInstallMode(ctx);
|
|
145
|
+
const port = mode === "prod" ? resolveServerPort({ config: cfg }) : resolveWebPort();
|
|
146
|
+
return `http://localhost:${port}`;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* What the running server should publish as its
|
|
150
|
+
* `effectivePublicUrl` — i.e. "this is the localhost URL that
|
|
151
|
+
* actually opens the SPA right now". The server calls this
|
|
152
|
+
* during boot and writes the result to global config so CLI
|
|
153
|
+
* commands (which run in separate processes and can't read
|
|
154
|
+
* the server's env) still know which port the SPA lives on.
|
|
155
|
+
*
|
|
156
|
+
* Don't confuse with publicBaseUrl: this one ignores
|
|
157
|
+
* TIANSHU_WEB_URL / publicUrl on purpose. It's the
|
|
158
|
+
* *observed* truth, not the *declared* one.
|
|
159
|
+
*/
|
|
160
|
+
export function computeServerEffectivePublicUrl(opts) {
|
|
161
|
+
if (opts.hostsSpa)
|
|
162
|
+
return `http://localhost:${opts.port}`;
|
|
163
|
+
return `http://localhost:${resolveWebPort()}`;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The URL local code uses to talk to the running server's API.
|
|
167
|
+
*
|
|
168
|
+
* Differs from publicBaseUrl deliberately:
|
|
169
|
+
* - `publicBaseUrl` is for HUMANS. It may point at a public
|
|
170
|
+
* Cloudflare tunnel hostname.
|
|
171
|
+
* - `localServerBaseUrl` is for IN-PROCESS PROBES (doctor's
|
|
172
|
+
* health check, the wizard waiting for the server to come
|
|
173
|
+
* up). Those must hit localhost on the actual bind port,
|
|
174
|
+
* regardless of any public override — otherwise doctor
|
|
175
|
+
* would try to probe a tunnel that may be off.
|
|
176
|
+
*
|
|
177
|
+
* No trailing slash.
|
|
178
|
+
*/
|
|
179
|
+
export function resolveLocalServerBaseUrl(ctx = {}) {
|
|
180
|
+
return `http://localhost:${resolveServerPort(ctx)}`;
|
|
181
|
+
}
|
|
182
|
+
/** Convenience: build the URL for `tenants/<t>/users/<u>/`. */
|
|
183
|
+
export function buildTenantUserUrl(baseUrl, tenantId, userId) {
|
|
184
|
+
return `${stripTrailingSlash(baseUrl)}/tenants/${tenantId}/users/${userId}/`;
|
|
185
|
+
}
|
|
186
|
+
// ─── helpers ────────────────────────────────────────────────
|
|
187
|
+
function parsePort(raw) {
|
|
188
|
+
if (!raw)
|
|
189
|
+
return undefined;
|
|
190
|
+
const n = Number.parseInt(raw, 10);
|
|
191
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
192
|
+
return undefined;
|
|
193
|
+
return n;
|
|
194
|
+
}
|
|
195
|
+
function stripTrailingSlash(s) {
|
|
196
|
+
return s.replace(/\/+$/, "");
|
|
197
|
+
}
|
|
198
|
+
function safeLoadConfig() {
|
|
199
|
+
try {
|
|
200
|
+
return loadGlobalConfig();
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=urls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/core/urls.ts"],"names":[],"mappings":"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"}
|