@soulbatical/tetra-ui 0.2.10 → 0.2.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.
@@ -0,0 +1,44 @@
1
+ export interface ApiTokensPageProps {
2
+ language?: "en" | "nl";
3
+ tokenPrefix: string;
4
+ mcpUrl: string;
5
+ translations?: {
6
+ en?: Partial<ApiTokensTranslations>;
7
+ nl?: Partial<ApiTokensTranslations>;
8
+ };
9
+ }
10
+ export interface ApiTokensTranslations {
11
+ title: string;
12
+ description: string;
13
+ createToken: string;
14
+ tokenName: string;
15
+ namePlaceholder: string;
16
+ create: string;
17
+ cancel: string;
18
+ newTokenWarning: string;
19
+ copied: string;
20
+ copy: string;
21
+ noTokens: string;
22
+ revoke: string;
23
+ revokeConfirm: string;
24
+ revoked: string;
25
+ active: string;
26
+ lastUsed: string;
27
+ never: string;
28
+ created: string;
29
+ usage: string;
30
+ totalCalls: string;
31
+ last7d: string;
32
+ last30d: string;
33
+ last90d: string;
34
+ topTools: string;
35
+ calls: string;
36
+ connectWith: string;
37
+ mcpAuthApprove: string;
38
+ mcpAuthApproveDesc: string;
39
+ mcpAuthDevice: string;
40
+ mcpAuthApproveBtn: string;
41
+ mcpAuthDeny: string;
42
+ }
43
+ export declare function ApiTokensPage({ language, tokenPrefix, mcpUrl, translations: customTranslations, }: ApiTokensPageProps): import("react/jsx-runtime").JSX.Element;
44
+ //# sourceMappingURL=ApiTokensPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiTokensPage.d.ts","sourceRoot":"","sources":["../../src/mcp/ApiTokensPage.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE;QACb,EAAE,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACpC,EAAE,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;KACrC,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAoGD,wBAAgB,aAAa,CAAC,EAC5B,QAAe,EACf,WAAW,EACX,MAAM,EACN,YAAY,EAAE,kBAAkB,GACjC,EAAE,kBAAkB,2CAqfpB"}
@@ -0,0 +1,358 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useEffect, useCallback } from "react";
4
+ let useSearchParams = () => ({ get: () => null });
5
+ try {
6
+ useSearchParams = require("next/navigation").useSearchParams;
7
+ }
8
+ catch {
9
+ // next/navigation not available
10
+ }
11
+ const defaultTranslations = {
12
+ en: {
13
+ title: "API Tokens",
14
+ description: "API tokens allow AI tools to access your data via the MCP protocol.",
15
+ createToken: "Create token",
16
+ tokenName: "Token name",
17
+ namePlaceholder: "e.g. OpenCode",
18
+ create: "Create",
19
+ cancel: "Cancel",
20
+ newTokenWarning: "Copy this token now. It won't be shown again.",
21
+ copied: "Copied!",
22
+ copy: "Copy",
23
+ noTokens: "No API tokens yet.",
24
+ revoke: "Revoke",
25
+ revokeConfirm: "Are you sure you want to revoke this token?",
26
+ revoked: "Revoked",
27
+ active: "Active",
28
+ lastUsed: "Last used",
29
+ never: "Never",
30
+ created: "Created",
31
+ usage: "API Usage",
32
+ totalCalls: "Total calls",
33
+ last7d: "Last 7 days",
34
+ last30d: "Last 30 days",
35
+ last90d: "Last 90 days",
36
+ topTools: "Most used tools",
37
+ calls: "calls",
38
+ connectWith: "Connect your AI tool",
39
+ mcpAuthApprove: "Approve MCP connection",
40
+ mcpAuthApproveDesc: "An AI tool is requesting access to your data.",
41
+ mcpAuthDevice: "Device",
42
+ mcpAuthApproveBtn: "Approve & generate token",
43
+ mcpAuthDeny: "Deny",
44
+ },
45
+ nl: {
46
+ title: "API Tokens",
47
+ description: "API tokens geven AI-tools toegang tot je data via het MCP protocol.",
48
+ createToken: "Token aanmaken",
49
+ tokenName: "Token naam",
50
+ namePlaceholder: "bijv. OpenCode",
51
+ create: "Aanmaken",
52
+ cancel: "Annuleren",
53
+ newTokenWarning: "Kopieer dit token nu. Het wordt niet meer getoond.",
54
+ copied: "Gekopieerd!",
55
+ copy: "Kopieer",
56
+ noTokens: "Nog geen API tokens.",
57
+ revoke: "Intrekken",
58
+ revokeConfirm: "Weet je zeker dat je dit token wilt intrekken?",
59
+ revoked: "Ingetrokken",
60
+ active: "Actief",
61
+ lastUsed: "Laatst gebruikt",
62
+ never: "Nooit",
63
+ created: "Aangemaakt",
64
+ usage: "API Gebruik",
65
+ totalCalls: "Totaal calls",
66
+ last7d: "Afgelopen 7 dagen",
67
+ last30d: "Afgelopen 30 dagen",
68
+ last90d: "Afgelopen 90 dagen",
69
+ topTools: "Meest gebruikte tools",
70
+ calls: "calls",
71
+ connectWith: "Verbind je AI tool",
72
+ mcpAuthApprove: "MCP verbinding goedkeuren",
73
+ mcpAuthApproveDesc: "Een AI-tool vraagt toegang tot je data.",
74
+ mcpAuthDevice: "Apparaat",
75
+ mcpAuthApproveBtn: "Goedkeuren & token genereren",
76
+ mcpAuthDeny: "Weigeren",
77
+ },
78
+ };
79
+ const MCP_CLIENTS = [
80
+ { id: "opencode", label: "OpenCode" },
81
+ { id: "claude", label: "Claude Code" },
82
+ { id: "cursor", label: "Cursor" },
83
+ { id: "vscode", label: "VS Code" },
84
+ { id: "codex", label: "Codex" },
85
+ { id: "gemini", label: "Gemini CLI" },
86
+ { id: "windsurf", label: "Windsurf" },
87
+ { id: "goose", label: "Goose" },
88
+ { id: "factory", label: "Factory" },
89
+ { id: "kiro", label: "Kiro" },
90
+ ];
91
+ export function ApiTokensPage({ language = "en", tokenPrefix, mcpUrl, translations: customTranslations, }) {
92
+ const t = { ...defaultTranslations[language], ...customTranslations?.[language] };
93
+ const searchParams = useSearchParams();
94
+ const dateLocale = language === "nl" ? "nl-NL" : "en-US";
95
+ const [tokens, setTokens] = useState([]);
96
+ const [usage, setUsage] = useState(null);
97
+ const [usagePeriod, setUsagePeriod] = useState("30d");
98
+ const [loading, setLoading] = useState(true);
99
+ const [selectedClient, setSelectedClient] = useState("opencode");
100
+ const [showCreate, setShowCreate] = useState(false);
101
+ const [newName, setNewName] = useState("");
102
+ const [creating, setCreating] = useState(false);
103
+ const [newToken, setNewToken] = useState(null);
104
+ const [copied, setCopied] = useState(false);
105
+ const [error, setError] = useState(null);
106
+ const mcpAuthId = searchParams.get("mcp_auth");
107
+ const [approving, setApproving] = useState(false);
108
+ const [approved, setApproved] = useState(false);
109
+ const [mcpAuthDevice, setMcpAuthDevice] = useState(null);
110
+ const [mcpAuthValid, setMcpAuthValid] = useState(false);
111
+ const [mcpAuthError, setMcpAuthError] = useState(null);
112
+ useEffect(() => {
113
+ if (!mcpAuthId)
114
+ return;
115
+ fetch(`/api/mcp-auth/status/${mcpAuthId}`)
116
+ .then(async (res) => {
117
+ if (res.ok) {
118
+ const body = await res.json();
119
+ const data = body.data ?? body;
120
+ if (data.status === "pending") {
121
+ setMcpAuthDevice(data.device_name);
122
+ setMcpAuthValid(true);
123
+ }
124
+ else {
125
+ setMcpAuthError("already_approved");
126
+ }
127
+ }
128
+ else {
129
+ setMcpAuthError("expired");
130
+ }
131
+ })
132
+ .catch(() => setMcpAuthError("expired"));
133
+ }, [mcpAuthId]);
134
+ const loadTokens = useCallback(async () => {
135
+ const res = await fetch("/api/mcp-tokens");
136
+ if (res.ok) {
137
+ const body = await res.json();
138
+ setTokens((body.data ?? body).tokens || []);
139
+ }
140
+ setLoading(false);
141
+ }, []);
142
+ const loadUsage = useCallback(async (period) => {
143
+ const res = await fetch(`/api/mcp-usage?period=${period}`);
144
+ if (res.ok) {
145
+ const body = await res.json();
146
+ setUsage(body.data ?? body);
147
+ }
148
+ }, []);
149
+ useEffect(() => {
150
+ loadTokens();
151
+ loadUsage(usagePeriod);
152
+ }, [loadTokens, loadUsage, usagePeriod]);
153
+ async function handleCreate() {
154
+ setCreating(true);
155
+ setError(null);
156
+ const res = await fetch("/api/mcp-tokens", {
157
+ method: "POST",
158
+ headers: { "Content-Type": "application/json" },
159
+ body: JSON.stringify({ name: newName || undefined }),
160
+ });
161
+ if (res.ok) {
162
+ const body = await res.json();
163
+ const data = body.data ?? body;
164
+ setNewToken(data.token);
165
+ setShowCreate(false);
166
+ setNewName("");
167
+ loadTokens();
168
+ }
169
+ else {
170
+ const errBody = await res.json().catch(() => ({}));
171
+ setError(errBody.message || errBody.error || `Error: ${res.status}`);
172
+ }
173
+ setCreating(false);
174
+ }
175
+ async function handleRevoke(tokenId) {
176
+ if (!confirm(t.revokeConfirm))
177
+ return;
178
+ await fetch(`/api/mcp-tokens/${tokenId}`, { method: "DELETE" });
179
+ loadTokens();
180
+ }
181
+ async function handleMcpApprove() {
182
+ if (!mcpAuthId)
183
+ return;
184
+ setApproving(true);
185
+ const res = await fetch(`/api/mcp-auth/approve/${mcpAuthId}`, { method: "POST" });
186
+ if (res.ok) {
187
+ setApproved(true);
188
+ loadTokens();
189
+ }
190
+ setApproving(false);
191
+ }
192
+ function copyToken() {
193
+ if (newToken) {
194
+ navigator.clipboard.writeText(newToken);
195
+ setCopied(true);
196
+ setTimeout(() => setCopied(false), 2000);
197
+ }
198
+ }
199
+ const getClientConfig = (clientId) => {
200
+ const configs = {
201
+ opencode: {
202
+ code: `{
203
+ "$schema": "https://opencode.ai/config.json",
204
+ "mcp": {
205
+ "${tokenPrefix.replace(/_$/, "")}": {
206
+ "type": "remote",
207
+ "url": "${mcpUrl}",
208
+ "enabled": true,
209
+ "headers": {
210
+ "Authorization": "Bearer YOUR_TOKEN"
211
+ }
212
+ }
213
+ }
214
+ }`,
215
+ },
216
+ claude: {
217
+ code: `{
218
+ "mcpServers": {
219
+ "${tokenPrefix.replace(/_$/, "")}": {
220
+ "type": "http",
221
+ "url": "${mcpUrl}",
222
+ "headers": {
223
+ "Authorization": "Bearer YOUR_TOKEN"
224
+ }
225
+ }
226
+ }
227
+ }`,
228
+ cli: `claude mcp add --scope project --transport http ${tokenPrefix.replace(/_$/, "")} "${mcpUrl}" --header "Authorization: Bearer YOUR_TOKEN"`,
229
+ },
230
+ cursor: {
231
+ code: `{
232
+ "mcpServers": {
233
+ "${tokenPrefix.replace(/_$/, "")}": {
234
+ "url": "${mcpUrl}",
235
+ "headers": {
236
+ "Authorization": "Bearer YOUR_TOKEN"
237
+ }
238
+ }
239
+ }
240
+ }`,
241
+ },
242
+ vscode: {
243
+ code: `{
244
+ "servers": {
245
+ "${tokenPrefix.replace(/_$/, "")}": {
246
+ "type": "http",
247
+ "url": "${mcpUrl}",
248
+ "headers": {
249
+ "Authorization": "Bearer YOUR_TOKEN"
250
+ }
251
+ }
252
+ }
253
+ }`,
254
+ },
255
+ codex: {
256
+ code: `[mcp_servers.${tokenPrefix.replace(/_$/, "")}]
257
+ url = "${mcpUrl}"
258
+ headers = { Authorization = "Bearer YOUR_TOKEN" }
259
+
260
+ [features]
261
+ rmcp_client = true`,
262
+ cli: `codex mcp add ${tokenPrefix.replace(/_$/, "")} --url ${mcpUrl} --header "Authorization: Bearer YOUR_TOKEN"`,
263
+ },
264
+ gemini: {
265
+ code: `{
266
+ "mcpServers": {
267
+ "${tokenPrefix.replace(/_$/, "")}": {
268
+ "httpUrl": "${mcpUrl}",
269
+ "headers": {
270
+ "Authorization": "Bearer YOUR_TOKEN"
271
+ }
272
+ }
273
+ }
274
+ }`,
275
+ cli: `gemini mcp add -t http ${tokenPrefix.replace(/_$/, "")} ${mcpUrl}`,
276
+ },
277
+ windsurf: {
278
+ code: `{
279
+ "mcpServers": {
280
+ "${tokenPrefix.replace(/_$/, "")}": {
281
+ "command": "npx",
282
+ "args": [
283
+ "-y",
284
+ "mcp-remote",
285
+ "${mcpUrl}",
286
+ "--header",
287
+ "Authorization: Bearer YOUR_TOKEN"
288
+ ]
289
+ }
290
+ }
291
+ }`,
292
+ note: language === "nl"
293
+ ? "Windsurf ondersteunt geen remote HTTP MCP servers. Gebruik mcp-remote als proxy."
294
+ : "Windsurf does not support remote MCP servers over HTTP. Use mcp-remote as a proxy.",
295
+ },
296
+ goose: {
297
+ code: `extensions:
298
+ ${tokenPrefix.replace(/_$/, "")}:
299
+ enabled: true
300
+ type: streamable_http
301
+ uri: "${mcpUrl}"
302
+ headers:
303
+ Authorization: "Bearer YOUR_TOKEN"
304
+ timeout: 300`,
305
+ cli: `goose session --with-streamable-http-extension "${mcpUrl}"`,
306
+ },
307
+ factory: {
308
+ code: `{
309
+ "mcpServers": {
310
+ "${tokenPrefix.replace(/_$/, "")}": {
311
+ "type": "http",
312
+ "url": "${mcpUrl}",
313
+ "headers": {
314
+ "Authorization": "Bearer YOUR_TOKEN"
315
+ }
316
+ }
317
+ }
318
+ }`,
319
+ cli: `droid mcp add ${tokenPrefix.replace(/_$/, "")} ${mcpUrl} --type http`,
320
+ },
321
+ kiro: {
322
+ code: `{
323
+ "mcpServers": {
324
+ "${tokenPrefix.replace(/_$/, "")}": {
325
+ "url": "${mcpUrl}",
326
+ "headers": {
327
+ "Authorization": "Bearer YOUR_TOKEN"
328
+ }
329
+ }
330
+ }
331
+ }`,
332
+ },
333
+ };
334
+ return configs[clientId];
335
+ };
336
+ return (_jsxs("div", { children: [_jsx("h1", { className: "mb-6 text-xl font-bold text-heading", children: t.title }), _jsx("p", { className: "mb-6 text-sm text-secondary", children: t.description }), mcpAuthId && mcpAuthValid && !approved && (_jsxs("div", { className: "mb-6 rounded-xl border-2 border-blue-300 bg-blue-50 p-6", children: [_jsx("h2", { className: "mb-1 text-sm font-semibold text-blue-900", children: t.mcpAuthApprove }), _jsx("p", { className: "mb-2 text-sm text-blue-700", children: t.mcpAuthApproveDesc }), mcpAuthDevice && (_jsxs("p", { className: "mb-4 text-sm font-medium text-blue-800", children: [t.mcpAuthDevice, ": ", mcpAuthDevice] })), _jsxs("div", { className: "flex gap-3", children: [_jsx("button", { onClick: handleMcpApprove, disabled: approving, className: "rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 disabled:opacity-50", children: approving ? "..." : t.mcpAuthApproveBtn }), _jsx("button", { onClick: () => window.history.replaceState({}, "", window.location.pathname), className: "rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50", children: t.mcpAuthDeny })] })] })), mcpAuthId && mcpAuthError && !approved && (_jsx("div", { className: "mb-6 rounded-xl border border-red-200 bg-red-50 p-4", children: _jsx("p", { className: "text-sm text-red-700", children: mcpAuthError === "expired"
337
+ ? language === "nl"
338
+ ? "Dit verzoek is verlopen. Probeer het opnieuw vanuit je AI tool."
339
+ : "This connection request has expired. Please try again from your AI tool."
340
+ : language === "nl"
341
+ ? "Deze verbinding is al goedgekeurd."
342
+ : "This connection was already approved." }) })), approved && (_jsx("div", { className: "mb-6 rounded-xl border border-green-300 bg-green-50 p-4", children: _jsx("p", { className: "text-sm font-medium text-green-800", children: language === "nl"
343
+ ? "Verbinding goedgekeurd. De AI tool ontvangt het token automatisch."
344
+ : "Connection approved. The AI tool will receive the token automatically." }) })), newToken && (_jsxs("div", { className: "mb-6 rounded-xl border-2 border-amber-300 bg-amber-50 p-4", children: [_jsx("p", { className: "mb-2 text-sm font-medium text-amber-800", children: t.newTokenWarning }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { className: "flex-1 overflow-x-auto rounded bg-amber-100 px-3 py-2 text-xs font-mono text-amber-900", children: newToken }), _jsx("button", { onClick: copyToken, className: "shrink-0 rounded-lg bg-amber-600 px-3 py-2 text-sm font-medium text-white hover:bg-amber-700", children: copied ? t.copied : t.copy })] })] })), _jsxs("div", { className: "mb-6 rounded-xl border border-gray-200 bg-white p-6", children: [_jsxs("div", { className: "mb-4 flex items-center justify-between", children: [_jsx("h2", { className: "text-sm font-semibold text-gray-900", children: t.title }), !showCreate && (_jsx("button", { onClick: () => setShowCreate(true), className: "rounded-lg bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700", children: t.createToken }))] }), showCreate && (_jsxs("div", { className: "mb-4 flex flex-col gap-3 rounded-lg border border-gray-200 bg-gray-50 p-3", children: [_jsxs("div", { className: "flex items-end gap-3", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: "mb-1 block text-xs font-medium text-gray-600", children: t.tokenName }), _jsx("input", { type: "text", value: newName, onChange: (e) => setNewName(e.target.value), placeholder: t.namePlaceholder, className: "w-full rounded-lg border border-gray-300 px-3 py-1.5 text-sm outline-none focus:border-blue-500", onKeyDown: (e) => e.key === "Enter" && handleCreate() })] }), _jsx("button", { onClick: handleCreate, disabled: creating, className: "rounded-lg bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700 disabled:opacity-50", children: t.create }), _jsx("button", { onClick: () => {
345
+ setShowCreate(false);
346
+ setNewName("");
347
+ }, className: "rounded-lg border border-gray-300 px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-100", children: t.cancel })] }), error && _jsx("p", { className: "text-sm text-red-600", children: error })] })), loading ? (_jsx("p", { className: "text-sm text-gray-500", children: "Loading..." })) : tokens.length === 0 ? (_jsx("p", { className: "text-sm text-gray-500", children: t.noTokens })) : (_jsx("div", { className: "divide-y divide-gray-100", children: tokens.map((token) => (_jsxs("div", { className: "flex items-center justify-between py-3", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-gray-900", children: token.name }), _jsxs("p", { className: "text-xs text-gray-500", children: [t.created, " ", new Date(token.created_at).toLocaleDateString(dateLocale), " \u00B7 ", t.lastUsed, " ", token.last_used_at
348
+ ? new Date(token.last_used_at).toLocaleDateString(dateLocale)
349
+ : t.never] })] }), _jsx("div", { className: "flex items-center gap-2", children: token.is_active ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-700", children: t.active }), _jsx("button", { onClick: () => handleRevoke(token.id), className: "rounded-lg border border-red-200 px-2.5 py-1 text-xs font-medium text-red-600 hover:bg-red-50", children: t.revoke })] })) : (_jsx("span", { className: "rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-500", children: t.revoked })) })] }, token.id))) }))] }), _jsxs("div", { className: "mb-6 rounded-xl border border-gray-200 bg-white p-6", children: [_jsx("h2", { className: "mb-4 text-sm font-semibold text-gray-900", children: t.connectWith }), _jsx("div", { className: "mb-4 flex flex-wrap gap-2", children: MCP_CLIENTS.map((client) => (_jsx("button", { onClick: () => setSelectedClient(client.id), className: `rounded-lg px-3 py-1.5 text-xs font-medium transition-colors ${selectedClient === client.id
350
+ ? "bg-blue-600 text-white"
351
+ : "bg-gray-100 text-gray-700 hover:bg-gray-200"}`, children: client.label }, client.id))) }), (() => {
352
+ const config = getClientConfig(selectedClient);
353
+ if (!config)
354
+ return null;
355
+ return (_jsxs("div", { children: [_jsx("code", { className: "block rounded bg-gray-100 px-3 py-2 text-xs font-mono text-gray-800 whitespace-pre-wrap", children: config.code }), config.note && _jsx("p", { className: "mt-3 text-xs text-gray-500", children: config.note }), config.cli && (_jsxs(_Fragment, { children: [_jsx("p", { className: "mt-3 text-xs text-gray-500", children: language === "nl" ? "Of gebruik de CLI:" : "Or use the CLI:" }), _jsx("code", { className: "mt-1 block rounded bg-gray-100 px-3 py-2 text-xs font-mono text-gray-800", children: config.cli })] }))] }));
356
+ })()] }), _jsxs("div", { className: "rounded-xl border border-gray-200 bg-white p-6", children: [_jsxs("div", { className: "mb-4 flex items-center justify-between", children: [_jsx("h2", { className: "text-sm font-semibold text-gray-900", children: t.usage }), _jsxs("select", { value: usagePeriod, onChange: (e) => setUsagePeriod(e.target.value), className: "rounded-lg border border-gray-300 px-2 py-1 text-xs", children: [_jsx("option", { value: "7d", children: t.last7d }), _jsx("option", { value: "30d", children: t.last30d }), _jsx("option", { value: "90d", children: t.last90d })] })] }), usage ? (_jsxs("div", { children: [_jsxs("p", { className: "mb-4 text-2xl font-bold text-gray-900", children: [usage.total_calls, " ", _jsx("span", { className: "text-sm font-normal text-gray-500", children: t.totalCalls })] }), usage.by_tool.length > 0 && (_jsxs("div", { children: [_jsx("p", { className: "mb-2 text-xs font-medium text-gray-500", children: t.topTools }), _jsx("div", { className: "space-y-1.5", children: usage.by_tool.slice(0, 5).map((item) => (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-sm text-gray-700", children: item.tool }), _jsxs("span", { className: "text-xs text-gray-500", children: [item.count, " ", t.calls] })] }, item.tool))) })] }))] })) : (_jsx("p", { className: "text-sm text-gray-500", children: "Loading..." }))] })] }));
357
+ }
358
+ //# sourceMappingURL=ApiTokensPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiTokensPage.js","sourceRoot":"","sources":["../../src/mcp/ApiTokensPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { ApiTokensPage } from "./ApiTokensPage.js";
2
+ export type { ApiTokensPageProps, ApiTokensTranslations } from "./ApiTokensPage.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ApiTokensPage } from "./ApiTokensPage.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "0.2.10",
7
+ "version": "0.2.11",
8
8
  "description": "Shared React frontend framework for Tetra platform projects (Soulbatical BV) — config-driven components, hooks, providers, and styling",
9
9
  "type": "module",
10
10
  "main": "dist/index.js",
@@ -65,6 +65,11 @@
65
65
  "import": "./dist/affiliate.js",
66
66
  "default": "./dist/affiliate.js"
67
67
  },
68
+ "./mcp": {
69
+ "types": "./dist/mcp/index.d.ts",
70
+ "import": "./dist/mcp/index.js",
71
+ "default": "./dist/mcp/index.js"
72
+ },
68
73
  "./tailwind-preset": {
69
74
  "types": "./dist/tailwind-preset.d.ts",
70
75
  "import": "./dist/tailwind-preset.js",