@trops/dash-core 0.1.53 → 0.1.55
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/index.esm.js +142 -107
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +142 -107
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -9527,18 +9527,29 @@ function headerTemplateToRows(headerTemplate, nextRowId) {
|
|
|
9527
9527
|
}
|
|
9528
9528
|
|
|
9529
9529
|
/**
|
|
9530
|
-
* Serialize the current form state into a
|
|
9530
|
+
* Serialize the current form state into a bare MCP JSON config string.
|
|
9531
9531
|
*
|
|
9532
|
-
* Output format:
|
|
9532
|
+
* Output format (stdio):
|
|
9533
9533
|
* {
|
|
9534
|
-
* "
|
|
9535
|
-
*
|
|
9536
|
-
*
|
|
9534
|
+
* "type": "stdio",
|
|
9535
|
+
* "command": "npx",
|
|
9536
|
+
* "args": ["-y", "package-name"],
|
|
9537
|
+
* "env": { "API_KEY": "${API_KEY}" }
|
|
9538
|
+
* }
|
|
9539
|
+
*
|
|
9540
|
+
* Output format (HTTP):
|
|
9541
|
+
* {
|
|
9542
|
+
* "type": "streamable_http",
|
|
9543
|
+
* "url": "https://example.com/mcp",
|
|
9544
|
+
* "headerTemplate": { "Authorization": "Bearer {{apiKey}}" }
|
|
9537
9545
|
* }
|
|
9538
9546
|
*
|
|
9539
|
-
*
|
|
9547
|
+
* Credential values are NOT embedded — env values use ${FIELD_NAME} syntax
|
|
9548
|
+
* to reference credential fields entered separately in the form.
|
|
9549
|
+
*
|
|
9550
|
+
* @param {string} name - The provider name (unused in output, kept for API compat)
|
|
9540
9551
|
* @param {string} transport - "stdio" or "streamable_http"
|
|
9541
|
-
* @param {object} fields - { command, args, envMappingRows, url, headerRows
|
|
9552
|
+
* @param {object} fields - { command, args, envMappingRows, url, headerRows }
|
|
9542
9553
|
* @returns {string} Formatted JSON string
|
|
9543
9554
|
*/
|
|
9544
9555
|
function formStateToMcpJson(name, transport, fields) {
|
|
@@ -9551,9 +9562,7 @@ function formStateToMcpJson(name, transport, fields) {
|
|
|
9551
9562
|
_fields$url = fields.url,
|
|
9552
9563
|
url = _fields$url === void 0 ? "" : _fields$url,
|
|
9553
9564
|
_fields$headerRows = fields.headerRows,
|
|
9554
|
-
headerRows = _fields$headerRows === void 0 ? [] : _fields$headerRows
|
|
9555
|
-
_fields$credentialDat = fields.credentialData,
|
|
9556
|
-
credentialData = _fields$credentialDat === void 0 ? {} : _fields$credentialDat;
|
|
9565
|
+
headerRows = _fields$headerRows === void 0 ? [] : _fields$headerRows;
|
|
9557
9566
|
var serverConfig;
|
|
9558
9567
|
if (transport === "stdio") {
|
|
9559
9568
|
var argsArray = args.trim().split(/\s+/).filter(Boolean);
|
|
@@ -9561,11 +9570,12 @@ function formStateToMcpJson(name, transport, fields) {
|
|
|
9561
9570
|
envMappingRows.forEach(function (row) {
|
|
9562
9571
|
var envVar = row.envVar.trim();
|
|
9563
9572
|
var credField = row.credField.trim();
|
|
9564
|
-
if (envVar) {
|
|
9565
|
-
env[envVar] =
|
|
9573
|
+
if (envVar && credField) {
|
|
9574
|
+
env[envVar] = "${".concat(credField, "}");
|
|
9566
9575
|
}
|
|
9567
9576
|
});
|
|
9568
9577
|
serverConfig = {
|
|
9578
|
+
type: "stdio",
|
|
9569
9579
|
command: command.trim()
|
|
9570
9580
|
};
|
|
9571
9581
|
if (argsArray.length > 0) serverConfig.args = argsArray;
|
|
@@ -9573,29 +9583,36 @@ function formStateToMcpJson(name, transport, fields) {
|
|
|
9573
9583
|
} else {
|
|
9574
9584
|
// streamable_http
|
|
9575
9585
|
serverConfig = {
|
|
9586
|
+
type: "streamable_http",
|
|
9576
9587
|
url: url.trim()
|
|
9577
9588
|
};
|
|
9578
|
-
var
|
|
9589
|
+
var headerTemplate = {};
|
|
9579
9590
|
headerRows.forEach(function (row) {
|
|
9580
9591
|
var hName = row.headerName.trim();
|
|
9581
9592
|
var hValue = row.headerValue.trim();
|
|
9582
9593
|
if (hName && hValue) {
|
|
9583
|
-
|
|
9594
|
+
headerTemplate[hName] = hValue;
|
|
9584
9595
|
}
|
|
9585
9596
|
});
|
|
9586
|
-
if (Object.keys(
|
|
9597
|
+
if (Object.keys(headerTemplate).length > 0) serverConfig.headerTemplate = headerTemplate;
|
|
9587
9598
|
}
|
|
9588
|
-
return JSON.stringify(
|
|
9589
|
-
mcpServers: _defineProperty({}, name || "server-name", serverConfig)
|
|
9590
|
-
}, null, 2);
|
|
9599
|
+
return JSON.stringify(serverConfig, null, 2);
|
|
9591
9600
|
}
|
|
9592
9601
|
|
|
9593
9602
|
/**
|
|
9594
|
-
* Parse
|
|
9603
|
+
* Parse an MCP JSON config string back into form state.
|
|
9595
9604
|
*
|
|
9596
|
-
* Accepts:
|
|
9597
|
-
* - { "
|
|
9598
|
-
* -
|
|
9605
|
+
* Accepts multiple input formats:
|
|
9606
|
+
* - Bare config: { "command": ..., "args": [...], "env": { "KEY": "${FIELD}" } }
|
|
9607
|
+
* - Wrapped: { "mcpServers": { "name": { ... } } } — unwraps and uses key as providerName
|
|
9608
|
+
*
|
|
9609
|
+
* Transport detection:
|
|
9610
|
+
* - Explicit `type` or `transport` field
|
|
9611
|
+
* - Inferred: `url` present → streamable_http, `command` present → stdio
|
|
9612
|
+
*
|
|
9613
|
+
* stdio env value parsing:
|
|
9614
|
+
* - "${FIELD_NAME}" → envVar = key, credField = FIELD_NAME (reference syntax)
|
|
9615
|
+
* - "literal-value" → envVar = key, credField = key, credentialData[key] = value
|
|
9599
9616
|
*
|
|
9600
9617
|
* @param {string} jsonString - The JSON to parse
|
|
9601
9618
|
* @param {Function} nextRowId - Function that returns a unique row ID
|
|
@@ -9622,15 +9639,22 @@ function mcpJsonToFormState(jsonString, nextRowId) {
|
|
|
9622
9639
|
var _entries$ = _slicedToArray(entries[0], 2);
|
|
9623
9640
|
providerName = _entries$[0];
|
|
9624
9641
|
serverConfig = _entries$[1];
|
|
9625
|
-
} else if (parsed.command || parsed.url) {
|
|
9642
|
+
} else if (parsed.command || parsed.url || parsed.type || parsed.transport) {
|
|
9626
9643
|
serverConfig = parsed;
|
|
9627
9644
|
} else {
|
|
9628
9645
|
return {
|
|
9629
|
-
error: "Unrecognized format: expected
|
|
9646
|
+
error: "Unrecognized format: expected a server config with command, url, or type"
|
|
9630
9647
|
};
|
|
9631
9648
|
}
|
|
9632
|
-
|
|
9633
|
-
|
|
9649
|
+
|
|
9650
|
+
// Determine transport from type/transport field or infer from contents
|
|
9651
|
+
var explicitType = serverConfig.type || serverConfig.transport;
|
|
9652
|
+
var transport;
|
|
9653
|
+
if (explicitType) {
|
|
9654
|
+
transport = explicitType === "stdio" ? "stdio" : "streamable_http";
|
|
9655
|
+
} else {
|
|
9656
|
+
transport = serverConfig.url ? "streamable_http" : "stdio";
|
|
9657
|
+
}
|
|
9634
9658
|
var result = {
|
|
9635
9659
|
providerName: providerName,
|
|
9636
9660
|
transport: transport,
|
|
@@ -9650,12 +9674,24 @@ function mcpJsonToFormState(jsonString, nextRowId) {
|
|
|
9650
9674
|
var _ref6 = _slicedToArray(_ref5, 2),
|
|
9651
9675
|
envVar = _ref6[0],
|
|
9652
9676
|
value = _ref6[1];
|
|
9653
|
-
|
|
9654
|
-
|
|
9655
|
-
|
|
9656
|
-
credField
|
|
9657
|
-
|
|
9658
|
-
|
|
9677
|
+
// Check for ${FIELD_NAME} reference syntax
|
|
9678
|
+
var refMatch = typeof value === "string" && value.match(/^\$\{(.+)\}$/);
|
|
9679
|
+
if (refMatch) {
|
|
9680
|
+
// Reference syntax — credField is the extracted name, no credential value
|
|
9681
|
+
result.envMappingRows.push({
|
|
9682
|
+
id: nextRowId(),
|
|
9683
|
+
envVar: envVar,
|
|
9684
|
+
credField: refMatch[1]
|
|
9685
|
+
});
|
|
9686
|
+
} else {
|
|
9687
|
+
// Literal value — use envVar as credField and store the value
|
|
9688
|
+
result.envMappingRows.push({
|
|
9689
|
+
id: nextRowId(),
|
|
9690
|
+
envVar: envVar,
|
|
9691
|
+
credField: envVar
|
|
9692
|
+
});
|
|
9693
|
+
result.credentialData[envVar] = value || "";
|
|
9694
|
+
}
|
|
9659
9695
|
});
|
|
9660
9696
|
}
|
|
9661
9697
|
} else {
|
|
@@ -26756,7 +26792,7 @@ var CustomMcpServerForm = function CustomMcpServerForm(_ref2) {
|
|
|
26756
26792
|
setJsonError(null);
|
|
26757
26793
|
},
|
|
26758
26794
|
language: "json",
|
|
26759
|
-
placeholder: '{\n "
|
|
26795
|
+
placeholder: '{\n "type": "stdio",\n "command": "npx",\n "args": ["-y", "package-name"],\n "env": {\n "API_KEY": "${API_KEY}"\n }\n}'
|
|
26760
26796
|
})]
|
|
26761
26797
|
}), viewMode === "form" && /*#__PURE__*/jsxs(Fragment, {
|
|
26762
26798
|
children: [/*#__PURE__*/jsxs("div", {
|
|
@@ -27605,42 +27641,46 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
27605
27641
|
var appContext = useContext(AppContext);
|
|
27606
27642
|
var providers = (appContext === null || appContext === void 0 ? void 0 : appContext.providers) || {};
|
|
27607
27643
|
var refreshProviders = appContext === null || appContext === void 0 ? void 0 : appContext.refreshProviders;
|
|
27608
|
-
var _useState = useState(
|
|
27644
|
+
var _useState = useState("credentials"),
|
|
27609
27645
|
_useState2 = _slicedToArray(_useState, 2),
|
|
27610
|
-
|
|
27611
|
-
|
|
27612
|
-
var _useState3 = useState(
|
|
27646
|
+
providerTab = _useState2[0],
|
|
27647
|
+
setProviderTab = _useState2[1];
|
|
27648
|
+
var _useState3 = useState(null),
|
|
27613
27649
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
27614
|
-
|
|
27615
|
-
|
|
27650
|
+
selectedName = _useState4[0],
|
|
27651
|
+
setSelectedName = _useState4[1];
|
|
27616
27652
|
var _useState5 = useState(false),
|
|
27617
27653
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
27618
|
-
|
|
27619
|
-
|
|
27620
|
-
var _useState7 = useState(
|
|
27654
|
+
isCreating = _useState6[0],
|
|
27655
|
+
setIsCreating = _useState6[1];
|
|
27656
|
+
var _useState7 = useState(false),
|
|
27621
27657
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
27622
|
-
|
|
27623
|
-
|
|
27658
|
+
isEditing = _useState8[0],
|
|
27659
|
+
setIsEditing = _useState8[1];
|
|
27624
27660
|
var _useState9 = useState(""),
|
|
27625
27661
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
27626
|
-
|
|
27627
|
-
|
|
27628
|
-
var _useState1 = useState(
|
|
27662
|
+
formName = _useState0[0],
|
|
27663
|
+
setFormName = _useState0[1];
|
|
27664
|
+
var _useState1 = useState(""),
|
|
27629
27665
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
27630
|
-
|
|
27631
|
-
|
|
27632
|
-
var _useState11 = useState(
|
|
27666
|
+
formType = _useState10[0],
|
|
27667
|
+
setFormType = _useState10[1];
|
|
27668
|
+
var _useState11 = useState({}),
|
|
27633
27669
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
27634
|
-
|
|
27635
|
-
|
|
27636
|
-
var _useState13 = useState(
|
|
27670
|
+
formCredentials = _useState12[0],
|
|
27671
|
+
setFormCredentials = _useState12[1];
|
|
27672
|
+
var _useState13 = useState(null),
|
|
27637
27673
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
27638
|
-
|
|
27639
|
-
|
|
27674
|
+
deleteTarget = _useState14[0],
|
|
27675
|
+
setDeleteTarget = _useState14[1];
|
|
27640
27676
|
var _useState15 = useState(false),
|
|
27641
27677
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
27642
|
-
|
|
27643
|
-
|
|
27678
|
+
isAddingMcp = _useState16[0],
|
|
27679
|
+
setIsAddingMcp = _useState16[1];
|
|
27680
|
+
var _useState17 = useState(false),
|
|
27681
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
27682
|
+
isEditingMcp = _useState18[0],
|
|
27683
|
+
setIsEditingMcp = _useState18[1];
|
|
27644
27684
|
|
|
27645
27685
|
// Row ID counter for env/header rows in MCP edit mode
|
|
27646
27686
|
var nextRowIdRef = useRef(0);
|
|
@@ -27683,6 +27723,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
27683
27723
|
credentials: credentials
|
|
27684
27724
|
}, function () {
|
|
27685
27725
|
resetForm();
|
|
27726
|
+
setProviderTab("credentials");
|
|
27686
27727
|
refreshProviders && refreshProviders();
|
|
27687
27728
|
}, function (e, err) {
|
|
27688
27729
|
return (void 0);
|
|
@@ -27691,6 +27732,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
27691
27732
|
function handleStartEdit(name, provider) {
|
|
27692
27733
|
setSelectedName(name);
|
|
27693
27734
|
setIsCreating(false);
|
|
27735
|
+
setProviderTab(provider.providerClass === "mcp" ? "mcp" : "credentials");
|
|
27694
27736
|
if (provider.providerClass === "mcp") {
|
|
27695
27737
|
setIsEditingMcp(true);
|
|
27696
27738
|
setIsEditing(false);
|
|
@@ -27755,6 +27797,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
27755
27797
|
setIsAddingMcp(false);
|
|
27756
27798
|
refreshProviders && refreshProviders();
|
|
27757
27799
|
setSelectedName(providerName);
|
|
27800
|
+
setProviderTab("mcp");
|
|
27758
27801
|
}, function (e, err) {
|
|
27759
27802
|
return (void 0);
|
|
27760
27803
|
});
|
|
@@ -27776,6 +27819,7 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
27776
27819
|
mcpConfig: mcpConfig
|
|
27777
27820
|
}, function () {
|
|
27778
27821
|
setSelectedName(providerName);
|
|
27822
|
+
setProviderTab("mcp");
|
|
27779
27823
|
setIsEditingMcp(false);
|
|
27780
27824
|
resetForm();
|
|
27781
27825
|
refreshProviders && refreshProviders();
|
|
@@ -27800,19 +27844,39 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
27800
27844
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
27801
27845
|
}, [createRequested]);
|
|
27802
27846
|
var selectedProvider = selectedName && providers[selectedName] ? providers[selectedName] : null;
|
|
27803
|
-
var
|
|
27804
|
-
|
|
27805
|
-
|
|
27806
|
-
|
|
27807
|
-
|
|
27808
|
-
|
|
27847
|
+
var activeProviders = providerTab === "credentials" ? credentialProviders : mcpProviders;
|
|
27848
|
+
var activeIcon = providerTab === "credentials" ? "key" : "server";
|
|
27849
|
+
var listContent = /*#__PURE__*/jsxs(Fragment, {
|
|
27850
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
27851
|
+
className: "px-2 pt-2",
|
|
27852
|
+
children: /*#__PURE__*/jsx(Tabs3, {
|
|
27853
|
+
value: providerTab,
|
|
27854
|
+
onValueChange: setProviderTab,
|
|
27855
|
+
backgroundColor: "bg-transparent",
|
|
27856
|
+
spacing: "p-0",
|
|
27857
|
+
children: /*#__PURE__*/jsxs(Tabs3.List, {
|
|
27858
|
+
className: "w-full flex",
|
|
27859
|
+
spacing: "p-0.5",
|
|
27860
|
+
children: [/*#__PURE__*/jsx(Tabs3.Trigger, {
|
|
27861
|
+
value: "credentials",
|
|
27862
|
+
className: "flex-1",
|
|
27863
|
+
children: "API Credentials"
|
|
27864
|
+
}), /*#__PURE__*/jsx(Tabs3.Trigger, {
|
|
27865
|
+
value: "mcp",
|
|
27866
|
+
className: "flex-1",
|
|
27867
|
+
children: "MCP Servers"
|
|
27868
|
+
})]
|
|
27869
|
+
})
|
|
27870
|
+
})
|
|
27871
|
+
}), /*#__PURE__*/jsxs(Sidebar.Content, {
|
|
27872
|
+
children: [activeProviders.map(function (_ref8) {
|
|
27809
27873
|
var _ref9 = _slicedToArray(_ref8, 2),
|
|
27810
27874
|
name = _ref9[0],
|
|
27811
27875
|
provider = _ref9[1];
|
|
27812
27876
|
var isSelected = selectedName === name && !isCreating;
|
|
27813
27877
|
return /*#__PURE__*/jsx(Sidebar.Item, {
|
|
27814
27878
|
icon: /*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
27815
|
-
icon:
|
|
27879
|
+
icon: activeIcon,
|
|
27816
27880
|
className: "h-3.5 w-3.5"
|
|
27817
27881
|
}),
|
|
27818
27882
|
active: isSelected,
|
|
@@ -27829,54 +27893,25 @@ var ProvidersSection = function ProvidersSection(_ref) {
|
|
|
27829
27893
|
className: isSelected ? "bg-white/10 opacity-100" : "",
|
|
27830
27894
|
children: name
|
|
27831
27895
|
}, name);
|
|
27832
|
-
})
|
|
27833
|
-
|
|
27834
|
-
|
|
27835
|
-
|
|
27836
|
-
|
|
27837
|
-
|
|
27838
|
-
var _ref1 = _slicedToArray(_ref0, 2),
|
|
27839
|
-
name = _ref1[0],
|
|
27840
|
-
provider = _ref1[1];
|
|
27841
|
-
var isSelected = selectedName === name && !isCreating;
|
|
27842
|
-
return /*#__PURE__*/jsx(Sidebar.Item, {
|
|
27843
|
-
icon: /*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
27844
|
-
icon: "server",
|
|
27845
|
-
className: "h-3.5 w-3.5"
|
|
27846
|
-
}),
|
|
27847
|
-
active: isSelected,
|
|
27896
|
+
}), activeProviders.length === 0 && /*#__PURE__*/jsx("span", {
|
|
27897
|
+
className: "text-sm opacity-40 py-8 text-center",
|
|
27898
|
+
children: providerTab === "credentials" ? "No API credentials configured" : "No MCP servers configured"
|
|
27899
|
+
}), providerTab === "mcp" && /*#__PURE__*/jsx("div", {
|
|
27900
|
+
className: "px-3 py-3 mt-2 border-t border-white/10",
|
|
27901
|
+
children: /*#__PURE__*/jsxs("button", {
|
|
27848
27902
|
onClick: function onClick() {
|
|
27849
|
-
|
|
27903
|
+
setIsAddingMcp(true);
|
|
27904
|
+
setSelectedName(null);
|
|
27850
27905
|
setIsCreating(false);
|
|
27851
27906
|
setIsEditing(false);
|
|
27852
|
-
setIsAddingMcp(false);
|
|
27853
|
-
resetForm();
|
|
27854
27907
|
},
|
|
27855
|
-
|
|
27856
|
-
|
|
27857
|
-
|
|
27858
|
-
|
|
27859
|
-
|
|
27860
|
-
}
|
|
27908
|
+
className: "flex items-center gap-2 text-sm text-blue-400 hover:text-blue-300 transition-colors w-full",
|
|
27909
|
+
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
27910
|
+
icon: "plus",
|
|
27911
|
+
className: "h-3 w-3"
|
|
27912
|
+
}), "Add MCP Server"]
|
|
27913
|
+
})
|
|
27861
27914
|
})]
|
|
27862
|
-
}), providerEntries.length === 0 && /*#__PURE__*/jsx("span", {
|
|
27863
|
-
className: "text-sm opacity-40 py-8 text-center",
|
|
27864
|
-
children: "No providers configured"
|
|
27865
|
-
}), /*#__PURE__*/jsx("div", {
|
|
27866
|
-
className: "px-3 py-3 mt-2 border-t border-white/10",
|
|
27867
|
-
children: /*#__PURE__*/jsxs("button", {
|
|
27868
|
-
onClick: function onClick() {
|
|
27869
|
-
setIsAddingMcp(true);
|
|
27870
|
-
setSelectedName(null);
|
|
27871
|
-
setIsCreating(false);
|
|
27872
|
-
setIsEditing(false);
|
|
27873
|
-
},
|
|
27874
|
-
className: "flex items-center gap-2 text-sm text-blue-400 hover:text-blue-300 transition-colors w-full",
|
|
27875
|
-
children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
|
|
27876
|
-
icon: "plus",
|
|
27877
|
-
className: "h-3 w-3"
|
|
27878
|
-
}), "Add MCP Server"]
|
|
27879
|
-
})
|
|
27880
27915
|
})]
|
|
27881
27916
|
});
|
|
27882
27917
|
var detailContent = null;
|