@tianshu-ai/tianshu 0.68.4 → 0.69.1
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/setup/checks/service.d.ts +3 -0
- package/packages/server/dist/setup/checks/service.d.ts.map +1 -0
- package/packages/server/dist/setup/checks/service.js +294 -0
- package/packages/server/dist/setup/checks/service.js.map +1 -0
- package/packages/server/dist/setup/doctor.d.ts.map +1 -1
- package/packages/server/dist/setup/doctor.js +2 -0
- package/packages/server/dist/setup/doctor.js.map +1 -1
- package/packages/web/dist/assets/{DataSourceConfigForm-DZwpjn9T.js → DataSourceConfigForm-CzdiPDZ0.js} +1 -1
- package/packages/web/dist/assets/{bundle-web-GZ-GMV8k.js → bundle-web-C3T36RFz.js} +1 -1
- package/packages/web/dist/assets/{index-DF_F7aWZ.js → index-BzNZTUmo.js} +76 -76
- package/packages/web/dist/assets/{react-force-graph-2d-BkjVkSQz.js → react-force-graph-2d-CpJznz3n.js} +1 -1
- package/packages/web/dist/index.html +1 -1
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/setup/checks/service.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQ/C,wBAAgB,YAAY,IAAI,UAAU,CAmFzC"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
// Service backend check: launchd (macOS) / systemd (Linux).
|
|
2
|
+
//
|
|
3
|
+
// Verifies:
|
|
4
|
+
// 1. plist/unit file exists and is loaded
|
|
5
|
+
// 2. Service is running (has a PID)
|
|
6
|
+
// 3. ProgramArguments / ExecStart points at the SAME node/npm
|
|
7
|
+
// binary that the current CLI process is using
|
|
8
|
+
// 4. WorkingDirectory matches the current install path
|
|
9
|
+
//
|
|
10
|
+
// The last two catch the common drift scenario: user upgrades
|
|
11
|
+
// node via nvm, or moves the checkout, but the launchd plist
|
|
12
|
+
// still points at the old path. `tianshu restart` runs fine
|
|
13
|
+
// from the CLI (which uses the new node) but the service keeps
|
|
14
|
+
// respawning under the old binary — sometimes a completely
|
|
15
|
+
// different tianshu version.
|
|
16
|
+
import fs from "node:fs";
|
|
17
|
+
import path from "node:path";
|
|
18
|
+
import os from "node:os";
|
|
19
|
+
import { getBackend, backendName, isServiceManaged, } from "../service-backend.js";
|
|
20
|
+
import { findRepoRoot } from "../repo-root.js";
|
|
21
|
+
export function checkService() {
|
|
22
|
+
const lines = [];
|
|
23
|
+
const platform = backendName();
|
|
24
|
+
if (!isServiceManaged()) {
|
|
25
|
+
lines.push({
|
|
26
|
+
severity: "ok",
|
|
27
|
+
text: `Platform ${os.platform()} — no service backend`,
|
|
28
|
+
detail: "Service checks only apply to macOS (launchd) and Linux (systemd).",
|
|
29
|
+
});
|
|
30
|
+
return { title: "Service", lines };
|
|
31
|
+
}
|
|
32
|
+
const backend = getBackend();
|
|
33
|
+
if (!backend) {
|
|
34
|
+
lines.push({
|
|
35
|
+
severity: "warning",
|
|
36
|
+
text: `Could not load ${platform} backend`,
|
|
37
|
+
});
|
|
38
|
+
return { title: "Service", lines };
|
|
39
|
+
}
|
|
40
|
+
// Resolve what label + plist the current install SHOULD use.
|
|
41
|
+
let repoRoot;
|
|
42
|
+
try {
|
|
43
|
+
repoRoot = findRepoRoot();
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
lines.push({
|
|
47
|
+
severity: "warning",
|
|
48
|
+
text: "Could not determine install path",
|
|
49
|
+
detail: "findRepoRoot() failed — skipping service checks.",
|
|
50
|
+
});
|
|
51
|
+
return { title: "Service", lines };
|
|
52
|
+
}
|
|
53
|
+
const label = backend.resolveLabel(repoRoot);
|
|
54
|
+
const status = backend.readStatus(label);
|
|
55
|
+
// 1. Plist/unit exists?
|
|
56
|
+
if (!status.installed) {
|
|
57
|
+
lines.push({
|
|
58
|
+
severity: "warning",
|
|
59
|
+
text: `No ${platform} service installed (${label})`,
|
|
60
|
+
detail: `Run \`tianshu start\` to install and start the service.`,
|
|
61
|
+
});
|
|
62
|
+
return { title: "Service", lines };
|
|
63
|
+
}
|
|
64
|
+
lines.push({
|
|
65
|
+
severity: "ok",
|
|
66
|
+
text: `${platform} service installed: ${label}`,
|
|
67
|
+
detail: status.plistPath,
|
|
68
|
+
});
|
|
69
|
+
// 2. Loaded + running?
|
|
70
|
+
if (!status.loaded) {
|
|
71
|
+
lines.push({
|
|
72
|
+
severity: "warning",
|
|
73
|
+
text: "Service not loaded",
|
|
74
|
+
detail: `Run \`tianshu start\` or \`tianshu restart\` to load it.`,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
else if (status.pid) {
|
|
78
|
+
lines.push({
|
|
79
|
+
severity: "ok",
|
|
80
|
+
text: `Service running (PID ${status.pid})`,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
lines.push({
|
|
85
|
+
severity: "warning",
|
|
86
|
+
text: "Service loaded but not running",
|
|
87
|
+
detail: status.lastExitStatus != null
|
|
88
|
+
? `Last exit status: ${status.lastExitStatus}. Check logs with \`tianshu logs\`.`
|
|
89
|
+
: `Run \`tianshu restart\` to start it.`,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// 3 & 4. Parse the plist/unit and compare paths.
|
|
93
|
+
if (platform === "launchd") {
|
|
94
|
+
checkLaunchdPaths(status.plistPath, repoRoot, lines);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
checkSystemdPaths(label, repoRoot, lines);
|
|
98
|
+
}
|
|
99
|
+
return { title: "Service", lines };
|
|
100
|
+
}
|
|
101
|
+
// ── launchd: parse plist XML and compare ────────────────────────────
|
|
102
|
+
function checkLaunchdPaths(plistPath, repoRoot, lines) {
|
|
103
|
+
let body;
|
|
104
|
+
try {
|
|
105
|
+
body = fs.readFileSync(plistPath, "utf8");
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
lines.push({
|
|
109
|
+
severity: "warning",
|
|
110
|
+
text: "Cannot read plist file",
|
|
111
|
+
detail: plistPath,
|
|
112
|
+
});
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// WorkingDirectory
|
|
116
|
+
const wdMatch = body.match(/<key>WorkingDirectory<\/key>\s*<string>([^<]+)<\/string>/);
|
|
117
|
+
const plistWorkDir = wdMatch ? path.resolve(wdMatch[1]) : null;
|
|
118
|
+
const currentWorkDir = path.resolve(repoRoot);
|
|
119
|
+
if (!plistWorkDir) {
|
|
120
|
+
lines.push({
|
|
121
|
+
severity: "warning",
|
|
122
|
+
text: "Plist missing WorkingDirectory",
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
else if (plistWorkDir === currentWorkDir) {
|
|
126
|
+
lines.push({
|
|
127
|
+
severity: "ok",
|
|
128
|
+
text: "WorkingDirectory matches current install",
|
|
129
|
+
detail: plistWorkDir,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
lines.push({
|
|
134
|
+
severity: "blocker",
|
|
135
|
+
text: "WorkingDirectory mismatch",
|
|
136
|
+
detail: `Plist: ${plistWorkDir}\n` +
|
|
137
|
+
`CLI: ${currentWorkDir}\n` +
|
|
138
|
+
`The service is running from a different install. Run \`tianshu restart\` to update the plist.`,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// ProgramArguments — extract the first <string> (the binary path)
|
|
142
|
+
const progMatch = body.match(/<key>ProgramArguments<\/key>\s*<array>\s*<string>([^<]+)<\/string>/);
|
|
143
|
+
const plistBinary = progMatch ? path.resolve(progMatch[1]) : null;
|
|
144
|
+
// The current CLI's npm/node path
|
|
145
|
+
const currentNpm = resolveCurrentNpmPath();
|
|
146
|
+
const currentNode = path.resolve(process.execPath);
|
|
147
|
+
if (!plistBinary) {
|
|
148
|
+
lines.push({
|
|
149
|
+
severity: "warning",
|
|
150
|
+
text: "Cannot parse ProgramArguments from plist",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// The plist usually points at npm; compare with current npm.
|
|
155
|
+
// Also check if the node version directory differs (nvm scenario).
|
|
156
|
+
const plistResolved = path.resolve(plistBinary);
|
|
157
|
+
const binaryMatch = plistResolved === path.resolve(currentNpm);
|
|
158
|
+
// Also check node version directory: if plist npm is under
|
|
159
|
+
// /Users/x/.nvm/versions/node/v22.x/... and current is v24.x/...,
|
|
160
|
+
// that's a version drift.
|
|
161
|
+
const plistNodeDir = extractNodeVersionDir(plistResolved);
|
|
162
|
+
const currentNodeDir = extractNodeVersionDir(currentNpm) ?? extractNodeVersionDir(currentNode);
|
|
163
|
+
if (binaryMatch) {
|
|
164
|
+
lines.push({
|
|
165
|
+
severity: "ok",
|
|
166
|
+
text: "ProgramArguments binary matches current CLI",
|
|
167
|
+
detail: plistResolved,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
// Different binary — check if it's just an nvm version drift
|
|
172
|
+
const isNvmDrift = plistNodeDir && currentNodeDir && plistNodeDir !== currentNodeDir;
|
|
173
|
+
lines.push({
|
|
174
|
+
severity: "blocker",
|
|
175
|
+
text: "ProgramArguments binary mismatch",
|
|
176
|
+
detail: `Plist: ${plistResolved}\n` +
|
|
177
|
+
`Current: ${path.resolve(currentNpm)}\n` +
|
|
178
|
+
(isNvmDrift
|
|
179
|
+
? `Looks like an nvm version change (${plistNodeDir} → ${currentNodeDir}). `
|
|
180
|
+
: "") +
|
|
181
|
+
`Run \`tianshu restart\` to update the plist.`,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// ── systemd: parse unit file ────────────────────────────────────────
|
|
187
|
+
function checkSystemdPaths(label, repoRoot, lines) {
|
|
188
|
+
// systemd user units live in ~/.config/systemd/user/
|
|
189
|
+
const unitPath = path.join(os.homedir(), ".config", "systemd", "user", `${label}.service`);
|
|
190
|
+
let body;
|
|
191
|
+
try {
|
|
192
|
+
body = fs.readFileSync(unitPath, "utf8");
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Try system-wide unit
|
|
196
|
+
try {
|
|
197
|
+
body = fs.readFileSync(`/etc/systemd/system/${label}.service`, "utf8");
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
lines.push({
|
|
201
|
+
severity: "warning",
|
|
202
|
+
text: "Cannot read systemd unit file",
|
|
203
|
+
detail: unitPath,
|
|
204
|
+
});
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// WorkingDirectory
|
|
209
|
+
const wdMatch = body.match(/^WorkingDirectory=(.+)$/m);
|
|
210
|
+
const unitWorkDir = wdMatch ? path.resolve(wdMatch[1]) : null;
|
|
211
|
+
const currentWorkDir = path.resolve(repoRoot);
|
|
212
|
+
if (unitWorkDir && unitWorkDir !== currentWorkDir) {
|
|
213
|
+
lines.push({
|
|
214
|
+
severity: "blocker",
|
|
215
|
+
text: "WorkingDirectory mismatch",
|
|
216
|
+
detail: `Unit: ${unitWorkDir}\n` +
|
|
217
|
+
`CLI: ${currentWorkDir}\n` +
|
|
218
|
+
`Run \`tianshu restart\` to update.`,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
else if (unitWorkDir) {
|
|
222
|
+
lines.push({
|
|
223
|
+
severity: "ok",
|
|
224
|
+
text: "WorkingDirectory matches",
|
|
225
|
+
detail: unitWorkDir,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
// ExecStart binary
|
|
229
|
+
const execMatch = body.match(/^ExecStart=(.+)$/m);
|
|
230
|
+
if (execMatch) {
|
|
231
|
+
const execBinary = execMatch[1].split(/\s+/)[0];
|
|
232
|
+
const currentNpm = resolveCurrentNpmPath();
|
|
233
|
+
if (execBinary && path.resolve(execBinary) !== path.resolve(currentNpm)) {
|
|
234
|
+
lines.push({
|
|
235
|
+
severity: "blocker",
|
|
236
|
+
text: "ExecStart binary mismatch",
|
|
237
|
+
detail: `Unit: ${execBinary}\n` +
|
|
238
|
+
`Current: ${currentNpm}\n` +
|
|
239
|
+
`Run \`tianshu restart\` to update.`,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
lines.push({
|
|
244
|
+
severity: "ok",
|
|
245
|
+
text: "ExecStart binary matches",
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// ── helpers ─────────────────────────────────────────────────────────
|
|
251
|
+
/** Resolve where `tianshu` CLI lives and derive the npm binary
|
|
252
|
+
* from the same bin directory. This is more reliable than
|
|
253
|
+
* `which npm` (which fails when PATH is incomplete) and more
|
|
254
|
+
* meaningful than process.execPath (which is node, not tianshu).
|
|
255
|
+
*
|
|
256
|
+
* Chain: which tianshu → realpath → .../bin/tianshu.mjs
|
|
257
|
+
* → dirname → .../bin/npm */
|
|
258
|
+
function resolveCurrentNpmPath() {
|
|
259
|
+
const { execSync } = require("node:child_process");
|
|
260
|
+
// 1. Try `which tianshu` → follow symlink → derive bin dir
|
|
261
|
+
try {
|
|
262
|
+
const tianshuBin = execSync("which tianshu", { encoding: "utf8" }).trim();
|
|
263
|
+
if (tianshuBin) {
|
|
264
|
+
// Follow symlink to real path
|
|
265
|
+
const real = fs.realpathSync(tianshuBin);
|
|
266
|
+
// real = .../lib/node_modules/@tianshu-ai/tianshu/bin/tianshu.mjs
|
|
267
|
+
// The npm binary is in the same bin dir as the symlink origin
|
|
268
|
+
const binDir = path.dirname(tianshuBin);
|
|
269
|
+
const npmInBin = path.join(binDir, "npm");
|
|
270
|
+
if (fs.existsSync(npmInBin))
|
|
271
|
+
return npmInBin;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch { /* not installed globally */ }
|
|
275
|
+
// 2. Derive from process.execPath (node binary)
|
|
276
|
+
const derived = path.join(path.dirname(process.execPath), "npm");
|
|
277
|
+
if (fs.existsSync(derived))
|
|
278
|
+
return derived;
|
|
279
|
+
// 3. Last resort
|
|
280
|
+
try {
|
|
281
|
+
return execSync("which npm", { encoding: "utf8" }).trim();
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
return "/usr/bin/env npm";
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/** Extract the nvm version directory segment, e.g.
|
|
288
|
+
* "/Users/x/.nvm/versions/node/v22.16.0" from a full path.
|
|
289
|
+
* Returns null if the path doesn't contain an nvm layout. */
|
|
290
|
+
function extractNodeVersionDir(p) {
|
|
291
|
+
const match = p.match(/(\.nvm\/versions\/node\/v[\d.]+)/);
|
|
292
|
+
return match ? match[1] : null;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/setup/checks/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/setup/doctor.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/setup/doctor.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA2B9C,MAAM,WAAW,UAAU;IACzB;4DACwD;IACxD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;oEACgE;IAChE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;0DACsD;IACtD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mDAAmD;IACnD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,GAAE,UAAe,GACpB,OAAO,CAAC,YAAY,CAAC,CAiCvB;AAED,wDAAwD;AACxD,wBAAsB,SAAS,CAAC,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BtE;AAED;;;oCAGoC;AACpC,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;KAAE,EAAE,CAAC;CAC3D,CAAC,CAaD"}
|
|
@@ -25,6 +25,7 @@ import * as fs from "node:fs";
|
|
|
25
25
|
import { checkTenants } from "./checks/tenants.js";
|
|
26
26
|
import { checkDb } from "./checks/db.js";
|
|
27
27
|
import { checkAuth } from "./checks/auth.js";
|
|
28
|
+
import { checkService } from "./checks/service.js";
|
|
28
29
|
import { getTianshuHome } from "../core/paths.js";
|
|
29
30
|
import { loadGlobalConfig, loadTenantConfig } from "../core/config.js";
|
|
30
31
|
export async function collectDoctorReport(opts = {}) {
|
|
@@ -40,6 +41,7 @@ export async function collectDoctorReport(opts = {}) {
|
|
|
40
41
|
groups.push(checkTenants());
|
|
41
42
|
groups.push(checkDb());
|
|
42
43
|
groups.push(checkAuth());
|
|
44
|
+
groups.push(checkService());
|
|
43
45
|
// Per-plugin host prerequisites (manifest.setup). Only check
|
|
44
46
|
// plugins that are enabled in at least one tenant — disabled
|
|
45
47
|
// plugins don't need their prerequisites satisfied.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/setup/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/setup/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{C as t,E as n,S as r,_ as i,b as a,g as o,h as s,v as c,w as l,x as u,y as d}from"./index-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{C as t,E as n,S as r,_ as i,b as a,g as o,h as s,v as c,w as l,x as u,y as d}from"./index-BzNZTUmo.js";var f=e(n(),1),p=o(),m=[{id:`neo4j`,name:`Neo4j`,fields:[{key:`uri`,label:`ds.field.uri`,placeholder:`bolt://localhost:7687`,required:!0},{key:`username`,label:`ds.field.username`,placeholder:`neo4j`,required:!0},{key:`password`,label:`ds.field.password`,secret:!0,required:!0},{key:`database`,label:`ds.field.database`,placeholder:`neo4j`}]},{id:`mysql`,name:`MySQL`,fields:[{key:`host`,label:`ds.field.host`,placeholder:`localhost`,required:!0},{key:`port`,label:`ds.field.port`,placeholder:`3306`},{key:`username`,label:`ds.field.username`,placeholder:`root`,required:!0},{key:`password`,label:`ds.field.password`,secret:!0,required:!0},{key:`database`,label:`ds.field.database`,required:!0}]},{id:`rest`,name:`REST API`,fields:[{key:`baseUrl`,label:`ds.field.baseUrl`,placeholder:`https://api.example.com`,required:!0},{key:`headers`,label:`ds.field.headers`,placeholder:`{"Authorization": "Bearer ..."}`},{key:`timeout`,label:`ds.field.timeout`,placeholder:`30000`}]}],h=`w-full rounded-md border border-border-default bg-bg-elevated px-3 py-1.5 text-[12px] text-fg-default outline-none placeholder:text-fg-fainter focus:border-brand-500`;function g({plugin:e}){let n=s(),o=t(e=>e.setPlugins),[g,_]=(0,f.useState)(m),[v,y]=(0,f.useState)({}),[b,x]=(0,f.useState)(!1),[S,C]=(0,f.useState)(!1),[w,T]=(0,f.useState)(null),[E,D]=(0,f.useState)({}),[O,k]=(0,f.useState)(!1),[A,j]=(0,f.useState)(``),[M,N]=(0,f.useState)(m[0]?.id??``);(0,f.useEffect)(()=>{fetch(`/api/p/datasource/types`,{credentials:`include`}).then(e=>e.ok?e.json():null).then(e=>{e?.types?.length>0&&(_(e.types),N(t=>t||e.types[0].id))}).catch(()=>{})},[]),(0,f.useEffect)(()=>{let t=e.config?.connections;t&&typeof t==`object`&&y(t)},[e.config]);function P(e,t,n){y(r=>({...r,[e]:{...r[e],[t]:n}})),x(!0)}function F(e){y(t=>{let n={...t};return delete n[e],n}),x(!0)}function I(){let e=A.trim().replace(/[^a-zA-Z0-9_-]/g,`-`);e&&!v[e]&&(y(t=>({...t,[e]:{type:M,description:``}})),j(``),k(!1),x(!0))}async function L(){C(!0),T(null);try{let e=await l.setPluginConfig(`datasource`,{connections:v});o(e.plugins),x(!1)}catch(e){T(e instanceof Error?e.message:String(e))}finally{C(!1)}}async function R(e){D(t=>({...t,[e]:{ok:!1,msg:n(`ds.testing`)}}));try{let t=await(await fetch(`/api/p/datasource/test/${encodeURIComponent(e)}`,{method:`POST`,credentials:`include`})).json();D(r=>({...r,[e]:{ok:!!t.ok,msg:t.ok?n(`ds.connected`):t.error||n(`ds.failed`)}}))}catch(t){D(n=>({...n,[e]:{ok:!1,msg:t instanceof Error?t.message:String(t)}}))}}let z=Object.keys(v);return(0,p.jsxs)(`div`,{className:`space-y-4`,children:[z.length===0&&!O&&(0,p.jsx)(`p`,{className:`text-[12px] text-fg-faint`,children:n(`ds.noConnections`)}),z.map(e=>{let t=v[e],a=g.find(e=>e.id===t.type),o=E[e];return(0,p.jsxs)(`div`,{className:`rounded-lg border border-border-subtle p-3 space-y-2`,children:[(0,p.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`text-[13px] font-medium text-fg-default`,children:e}),(0,p.jsx)(`span`,{className:`rounded bg-bg-raised px-1.5 py-0.5 text-[10px] text-fg-faint`,children:t.type})]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,p.jsxs)(`button`,{type:`button`,onClick:()=>R(e),disabled:b,className:`inline-flex items-center gap-1 rounded px-2 py-1 text-[11px] text-fg-muted hover:bg-bg-raised disabled:opacity-40`,title:n(b?`ds.saveFirst`:`ds.testConnection`),children:[(0,p.jsx)(i,{size:12}),` `,n(`ds.test`)]}),(0,p.jsx)(`button`,{type:`button`,onClick:()=>F(e),className:`rounded p-1 text-fg-faint hover:bg-bg-raised hover:text-danger`,children:(0,p.jsx)(c,{size:12})})]})]}),o&&(0,p.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] ${o.ok?`text-success`:`text-danger`}`,children:[o.ok?(0,p.jsx)(r,{size:12}):(0,p.jsx)(u,{size:12}),o.msg]}),(0,p.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`label`,{className:`mb-0.5 block text-[11px] text-fg-faint`,children:n(`ds.description`)}),(0,p.jsx)(`input`,{className:h,value:String(t.description??``),onChange:t=>P(e,`description`,t.target.value),placeholder:n(`ds.descriptionPlaceholder`),autoComplete:`off`})]}),a?.fields.map(r=>r.showWhen&&!Object.entries(r.showWhen).every(([e,n])=>String(t[e]??``)===n)?null:(0,p.jsxs)(`div`,{children:[(0,p.jsxs)(`label`,{className:`mb-0.5 block text-[11px] text-fg-faint`,children:[n(r.label),r.required?` *`:``]}),r.fieldType===`select`&&r.options?(0,p.jsx)(`select`,{className:h,value:String(t[r.key]??r.options[0]?.value??``),onChange:t=>P(e,r.key,t.target.value),children:r.options.map(e=>(0,p.jsx)(`option`,{value:e.value,children:e.label},e.value))}):(0,p.jsx)(`input`,{className:h,type:r.secret?`password`:`text`,value:String(t[r.key]??``),onChange:t=>P(e,r.key,t.target.value),placeholder:r.placeholder,autoComplete:`off`,"data-1p-ignore":!0,"data-lpignore":`true`})]},r.key))]})]},e)}),O?(0,p.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-dashed border-border-default p-3`,children:[(0,p.jsx)(`input`,{className:h+` max-w-[160px]`,value:A,onChange:e=>j(e.target.value),placeholder:n(`ds.connectionName`),autoComplete:`off`,autoFocus:!0,onKeyDown:e=>e.key===`Enter`&&I()}),(0,p.jsx)(`select`,{className:h+` max-w-[120px]`,value:M,onChange:e=>N(e.target.value),children:g.map(e=>(0,p.jsx)(`option`,{value:e.id,children:e.name},e.id))}),(0,p.jsx)(`button`,{type:`button`,onClick:I,disabled:!A.trim(),className:`rounded-md bg-brand-600 px-3 py-1.5 text-[12px] font-medium text-white hover:bg-brand-500 disabled:opacity-40`,children:n(`ds.add`)}),(0,p.jsx)(`button`,{type:`button`,onClick:()=>k(!1),className:`text-[12px] text-fg-faint hover:text-fg-default`,children:n(`common.cancel`)})]}):(0,p.jsxs)(`button`,{type:`button`,onClick:()=>k(!0),className:`inline-flex items-center gap-1 rounded-md border border-dashed border-border-default px-3 py-1.5 text-[12px] text-fg-muted hover:bg-bg-raised`,children:[(0,p.jsx)(d,{size:12}),` `,n(`ds.addDataSource`)]}),w&&(0,p.jsx)(`div`,{className:`rounded-md border border-rose-700/50 bg-rose-950/40 px-3 py-2 text-[12px] text-danger`,children:w}),(0,p.jsx)(`div`,{className:`flex items-center gap-2 border-t border-border-subtle pt-3`,children:(0,p.jsxs)(`button`,{type:`button`,onClick:L,disabled:!b||S,className:`inline-flex items-center gap-1.5 rounded-md bg-brand-600 px-3 py-1.5 text-[12px] font-medium text-white hover:bg-brand-500 disabled:cursor-not-allowed disabled:opacity-50`,children:[S?(0,p.jsx)(a,{className:`inline h-3 w-3 animate-spin`}):null,n(`common.save`)]})})]})}export{g as DataSourceConfigForm};
|