@samanhappy/mcphub 1.0.40 → 1.0.42

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.
Files changed (103) hide show
  1. package/README.fr.md +1 -1
  2. package/README.md +1 -1
  3. package/README.zh.md +1 -1
  4. package/dist/clients/legacyMcpClient.js +37 -0
  5. package/dist/clients/legacyMcpClient.js.map +1 -0
  6. package/dist/controllers/mcpbController.js +8 -0
  7. package/dist/controllers/mcpbController.js.map +1 -1
  8. package/dist/controllers/oauthCallbackController.js +91 -45
  9. package/dist/controllers/oauthCallbackController.js.map +1 -1
  10. package/dist/controllers/serverController.js +52 -7
  11. package/dist/controllers/serverController.js.map +1 -1
  12. package/dist/middlewares/index.js +10 -7
  13. package/dist/middlewares/index.js.map +1 -1
  14. package/dist/routes/index.js +8 -2
  15. package/dist/routes/index.js.map +1 -1
  16. package/dist/services/betterAuthConfig.js +19 -0
  17. package/dist/services/betterAuthConfig.js.map +1 -1
  18. package/dist/services/keepAliveService.js +1 -2
  19. package/dist/services/keepAliveService.js.map +1 -1
  20. package/dist/services/mcpOAuthProvider.js +14 -1
  21. package/dist/services/mcpOAuthProvider.js.map +1 -1
  22. package/dist/services/mcpService.js +76 -40
  23. package/dist/services/mcpService.js.map +1 -1
  24. package/dist/services/oauthService.js +1 -2
  25. package/dist/services/oauthService.js.map +1 -1
  26. package/dist/services/proxy.js +0 -8
  27. package/dist/services/proxy.js.map +1 -1
  28. package/dist/services/sseService.js +5 -5
  29. package/dist/services/sseService.js.map +1 -1
  30. package/dist/services/vectorSearchService.js +24 -11
  31. package/dist/services/vectorSearchService.js.map +1 -1
  32. package/dist/utils/jsonSchemaValidator.js +5 -5
  33. package/dist/utils/jsonSchemaValidator.js.map +1 -1
  34. package/dist/utils/mcpProtocol.js +9 -0
  35. package/dist/utils/mcpProtocol.js.map +1 -0
  36. package/dist/utils/oauthIssuer.js +16 -9
  37. package/dist/utils/oauthIssuer.js.map +1 -1
  38. package/dist/utils/rateLimit.js +20 -2
  39. package/dist/utils/rateLimit.js.map +1 -1
  40. package/dist/utils/requireAdmin.js +8 -0
  41. package/dist/utils/requireAdmin.js.map +1 -1
  42. package/dist/utils/smartRouting.js +69 -27
  43. package/dist/utils/smartRouting.js.map +1 -1
  44. package/frontend/dist/assets/{ActivityPage-B5DanW8q.js → ActivityPage-DTouw-He.js} +2 -2
  45. package/frontend/dist/assets/{ActivityPage-B5DanW8q.js.map → ActivityPage-DTouw-He.js.map} +1 -1
  46. package/frontend/dist/assets/{CopyClientConfigDialog-C6U6_eyy.js → CopyClientConfigDialog-BtO0YcVK.js} +2 -2
  47. package/frontend/dist/assets/{CopyClientConfigDialog-C6U6_eyy.js.map → CopyClientConfigDialog-BtO0YcVK.js.map} +1 -1
  48. package/frontend/dist/assets/{CredentialsPage-CXK8Xkao.js → CredentialsPage-BeSMd9m4.js} +2 -2
  49. package/frontend/dist/assets/{CredentialsPage-CXK8Xkao.js.map → CredentialsPage-BeSMd9m4.js.map} +1 -1
  50. package/frontend/dist/assets/Dashboard-DuaKaJAK.js +2 -0
  51. package/frontend/dist/assets/{Dashboard-LIC6BqIA.js.map → Dashboard-DuaKaJAK.js.map} +1 -1
  52. package/frontend/dist/assets/{EndpointCopy-CeZbEsF2.js → EndpointCopy-Bos3ZWUc.js} +2 -2
  53. package/frontend/dist/assets/{EndpointCopy-CeZbEsF2.js.map → EndpointCopy-Bos3ZWUc.js.map} +1 -1
  54. package/frontend/dist/assets/GroupsPage-Cv3lZSCh.js +33 -0
  55. package/frontend/dist/assets/{GroupsPage-DwVaRIap.js.map → GroupsPage-Cv3lZSCh.js.map} +1 -1
  56. package/frontend/dist/assets/{LoginPage-CPqSMwWO.js → LoginPage-DUnjHB-q.js} +2 -2
  57. package/frontend/dist/assets/{LoginPage-CPqSMwWO.js.map → LoginPage-DUnjHB-q.js.map} +1 -1
  58. package/frontend/dist/assets/{LogsPage-eCHGem9T.js → LogsPage-BxjYh1MS.js} +2 -2
  59. package/frontend/dist/assets/{LogsPage-eCHGem9T.js.map → LogsPage-BxjYh1MS.js.map} +1 -1
  60. package/frontend/dist/assets/MarketPage-BnxAofuO.js +2 -0
  61. package/frontend/dist/assets/MarketPage-BnxAofuO.js.map +1 -0
  62. package/frontend/dist/assets/{OAuthConsentPage-DJITYpCM.js → OAuthConsentPage-rAx5ELdp.js} +2 -2
  63. package/frontend/dist/assets/{OAuthConsentPage-DJITYpCM.js.map → OAuthConsentPage-rAx5ELdp.js.map} +1 -1
  64. package/frontend/dist/assets/{PromptsPage-DQ02iDOJ.js → PromptsPage-Bh4Woe2Q.js} +2 -2
  65. package/frontend/dist/assets/{PromptsPage-DQ02iDOJ.js.map → PromptsPage-Bh4Woe2Q.js.map} +1 -1
  66. package/frontend/dist/assets/{ResourcesPage-mUU0DVus.js → ResourcesPage-BREUhWYG.js} +2 -2
  67. package/frontend/dist/assets/{ResourcesPage-mUU0DVus.js.map → ResourcesPage-BREUhWYG.js.map} +1 -1
  68. package/frontend/dist/assets/{ServersPage-DsS8j6tl.js → ServersPage-DCqew7Dq.js} +5 -5
  69. package/frontend/dist/assets/{ServersPage-DsS8j6tl.js.map → ServersPage-DCqew7Dq.js.map} +1 -1
  70. package/frontend/dist/assets/SettingsPage-DGAB-Jy8.js +12 -0
  71. package/frontend/dist/assets/SettingsPage-DGAB-Jy8.js.map +1 -0
  72. package/frontend/dist/assets/{StatusDot-Bcv2BwIL.js → StatusDot-CYPIH-Iz.js} +2 -2
  73. package/frontend/dist/assets/{StatusDot-Bcv2BwIL.js.map → StatusDot-CYPIH-Iz.js.map} +1 -1
  74. package/frontend/dist/assets/{ToggleGroup-C_7sDUlr.js → ToggleGroup-B4Lt01jM.js} +2 -2
  75. package/frontend/dist/assets/{ToggleGroup-C_7sDUlr.js.map → ToggleGroup-B4Lt01jM.js.map} +1 -1
  76. package/frontend/dist/assets/{UsersPage-ufaG2-Ag.js → UsersPage-LvOfLsJc.js} +2 -2
  77. package/frontend/dist/assets/{UsersPage-ufaG2-Ag.js.map → UsersPage-LvOfLsJc.js.map} +1 -1
  78. package/frontend/dist/assets/clipboard--jmjkvaW.js +2 -0
  79. package/frontend/dist/assets/clipboard--jmjkvaW.js.map +1 -0
  80. package/frontend/dist/assets/index-Cv7we3z-.css +1 -0
  81. package/frontend/dist/assets/index-qPkrYLbl.js +3 -0
  82. package/frontend/dist/assets/index-qPkrYLbl.js.map +1 -0
  83. package/frontend/dist/assets/{resourceService-CN5cMjQ0.js → resourceService-DkIvmxRC.js} +2 -2
  84. package/frontend/dist/assets/{resourceService-CN5cMjQ0.js.map → resourceService-DkIvmxRC.js.map} +1 -1
  85. package/frontend/dist/assets/{useCostData-B9XzWVsV.js → useCostData-B-uPi7i8.js} +2 -2
  86. package/frontend/dist/assets/{useCostData-B9XzWVsV.js.map → useCostData-B-uPi7i8.js.map} +1 -1
  87. package/frontend/dist/assets/{variableDetection-Dxw0g2ON.js → variableDetection-RlrBM33Q.js} +2 -2
  88. package/frontend/dist/assets/{variableDetection-Dxw0g2ON.js.map → variableDetection-RlrBM33Q.js.map} +1 -1
  89. package/frontend/dist/index.html +3 -6
  90. package/package.json +12 -3
  91. package/frontend/dist/assets/Dashboard-LIC6BqIA.js +0 -2
  92. package/frontend/dist/assets/GroupsPage-DwVaRIap.js +0 -33
  93. package/frontend/dist/assets/MarketPage-RqD2-rxq.js +0 -3
  94. package/frontend/dist/assets/MarketPage-RqD2-rxq.js.map +0 -1
  95. package/frontend/dist/assets/SettingsPage-CIeF1sDE.js +0 -12
  96. package/frontend/dist/assets/SettingsPage-CIeF1sDE.js.map +0 -1
  97. package/frontend/dist/assets/clipboard-BukcCPLt.js +0 -2
  98. package/frontend/dist/assets/clipboard-BukcCPLt.js.map +0 -1
  99. package/frontend/dist/assets/index-C8aAOWR7.js +0 -3
  100. package/frontend/dist/assets/index-C8aAOWR7.js.map +0 -1
  101. package/frontend/dist/assets/index-D4Vy78bV.css +0 -1
  102. package/frontend/dist/assets/useSettingsData-J_hwKZA6.js +0 -2
  103. package/frontend/dist/assets/useSettingsData-J_hwKZA6.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"jsonSchemaValidator.js","sourceRoot":"","sources":["../../src/utils/jsonSchemaValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAO9F;;;;;;;;;GASG;AACH,MAAM,OAAO,4BAA4B;IAAzC;QACmB,aAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAU3D,CAAC;IARC,YAAY,CAAI,MAAsB;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAI,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,OAAO,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAU,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"jsonSchemaValidator.js","sourceRoot":"","sources":["../../src/utils/jsonSchemaValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAErF;;;;;;;;;GASG;AACH,MAAM,OAAO,4BAA4B;IAAzC;QACmB,aAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAU3D,CAAC;IARC,YAAY,CAAI,MAAsB;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAI,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;YAC1E,OAAO,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAU,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ // Preserve the v1 negotiation order until the separate protocol upgrade.
2
+ export const LEGACY_PROTOCOL_VERSIONS = [
3
+ '2025-11-25',
4
+ '2025-06-18',
5
+ '2025-03-26',
6
+ '2024-11-05',
7
+ '2024-10-07',
8
+ ];
9
+ //# sourceMappingURL=mcpProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpProtocol.js","sourceRoot":"","sources":["../../src/utils/mcpProtocol.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;CACb,CAAC"}
@@ -21,24 +21,31 @@ const originOf = (url) => {
21
21
  };
22
22
  /**
23
23
  * Expected `iss` values for an upstream authorization flow: the explicitly
24
- * configured issuer plus the origin of the authorization endpoint actually used.
24
+ * configured issuer, falling back to the authorization endpoint origin.
25
25
  */
26
26
  export const expectedIssValues = (ctx) => {
27
- const candidates = [ctx.configuredIssuer, originOf(ctx.authorizationUrl)];
28
- return [...new Set(candidates.filter((c) => Boolean(c)))];
27
+ const issuer = ctx.configuredIssuer || originOf(ctx.authorizationUrl);
28
+ return issuer ? [issuer] : [];
29
29
  };
30
30
  /**
31
31
  * Validate the `iss` authorization-response parameter.
32
32
  *
33
- * - Absent `iss` → valid but unchecked (older servers do not send it).
34
- * - Present `iss` with nothing to compare against → unchecked fail-safe pass,
35
- * since we cannot establish what the client expected (no mix-up possible
36
- * when only one AS is involved in a flow keyed by our own state parameter).
37
- * - Present `iss` → must exactly match one of the expected values.
33
+ * Missing `iss` is allowed for servers known not to advertise RFC 9207 support.
34
+ * Older pending flows without a support snapshot retain the strict policy.
35
+ * A supplied issuer must match the complete expected issuer; the endpoint
36
+ * origin is only a fallback when no issuer was discovered or configured.
38
37
  */
39
38
  export const validateAuthorizationIss = (ctx) => {
40
39
  const { iss } = ctx;
41
- if (!iss) {
40
+ if (iss === undefined) {
41
+ const expected = expectedIssValues(ctx);
42
+ if (ctx.issRequired === true || (ctx.issRequired === undefined && expected.length > 0)) {
43
+ return {
44
+ valid: false,
45
+ checked: true,
46
+ reason: 'iss parameter is missing from the authorization response',
47
+ };
48
+ }
42
49
  return { valid: true, checked: false };
43
50
  }
44
51
  const expected = expectedIssValues(ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"oauthIssuer.js","sourceRoot":"","sources":["../../src/utils/oauthIssuer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,MAAM,QAAQ,GAAG,CAAC,GAAuB,EAAsB,EAAE;IAC/D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAoC,EAAY,EAAE;IAClF,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,GAAoC,EACf,EAAE;IACvB,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAEpB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,uEAAuE;KAChF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"oauthIssuer.js","sourceRoot":"","sources":["../../src/utils/oauthIssuer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkBH,MAAM,QAAQ,GAAG,CAAC,GAAuB,EAAsB,EAAE;IAC/D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAoC,EAAY,EAAE;IAClF,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,IAAI,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,GAAoC,EACf,EAAE;IACvB,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAEpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YACvF,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,0DAA0D;aACnE,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,uEAAuE;KAChF,CAAC;AACJ,CAAC,CAAC"}
@@ -49,14 +49,16 @@ const UNLIMITED = Symbol('unlimited');
49
49
  const MINUTES_15 = 15 * 60 * 1000;
50
50
  const MINUTE_1 = 60 * 1000;
51
51
  export const createStandardRateLimiter = (options) => {
52
- const { max, ...rest } = options;
52
+ const { max, skip, ...rest } = options;
53
53
  return rateLimit({
54
54
  ...rest,
55
55
  // Kept positive so the middleware never blocks; `skip` is what disables it.
56
56
  max: max === UNLIMITED ? Number.MAX_SAFE_INTEGER : max,
57
57
  standardHeaders: true,
58
58
  legacyHeaders: false,
59
- skip: () => isTestEnv || max === UNLIMITED,
59
+ // A caller-provided `skip` (e.g. path exemptions) is combined with the
60
+ // built-in test/unlimited skips.
61
+ skip: (request, response) => isTestEnv || max === UNLIMITED || (skip !== undefined && skip(request, response)),
60
62
  // The rest of the API answers with JSON; without this the 429 body is bare
61
63
  // text, so clients that parse the response as JSON lose the error entirely.
62
64
  message: { success: false, message: 'Too many requests, please try again later.' },
@@ -70,6 +72,22 @@ export const authenticatedRouteRateLimiter = createStandardRateLimiter({
70
72
  windowMs: envInt('API_RATE_LIMIT_WINDOW_MS', MINUTES_15),
71
73
  max: envLimit('API_RATE_LIMIT_MAX', 600),
72
74
  });
75
+ // Rate-limit gate mounted ahead of the shared `/api` authorization middleware
76
+ // in src/middlewares/index.ts. Without it, failed-auth requests answer 401
77
+ // before any route-level limiter runs, leaving the auth check itself uncapped
78
+ // and brute-forceable (CodeQL js/missing-rate-limiting). It shares the
79
+ // authenticated-route budget (API_RATE_LIMIT_MAX) and skips the public auth
80
+ // routes that carry their own limiters (login, register, better-auth), so those
81
+ // keep using their dedicated budgets instead of consuming the shared one.
82
+ export const apiAuthGateRateLimiter = createStandardRateLimiter({
83
+ windowMs: envInt('API_RATE_LIMIT_WINDOW_MS', MINUTES_15),
84
+ max: envLimit('API_RATE_LIMIT_MAX', 600),
85
+ skip: async (req) => {
86
+ const { getBetterAuthRuntimeConfig, isApiAuthExemptPath } = await import('../services/betterAuthConfig.js');
87
+ const betterAuthConfig = await getBetterAuthRuntimeConfig();
88
+ return isApiAuthExemptPath(req.path, betterAuthConfig);
89
+ },
90
+ });
73
91
  export const hostedInternalEventRateLimiter = createStandardRateLimiter({
74
92
  windowMs: envInt('HOSTED_EVENT_RATE_LIMIT_WINDOW_MS', MINUTE_1),
75
93
  max: envLimit('HOSTED_EVENT_RATE_LIMIT_MAX', 600),
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../src/utils/rateLimit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../src/utils/rateLimit.ts"],"names":[],"mappings":"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"}
@@ -12,4 +12,12 @@ export const requireAdmin = async (req, res) => {
12
12
  }
13
13
  return true;
14
14
  };
15
+ // Express middleware adapter for requireAdmin. Use it on routes whose handler
16
+ // or earlier middleware would otherwise consume untrusted request data before
17
+ // an authorization check (e.g. multer staging an upload body to disk).
18
+ export const requireAdminMiddleware = async (req, res, next) => {
19
+ if (await requireAdmin(req, res)) {
20
+ next();
21
+ }
22
+ };
15
23
  //# sourceMappingURL=requireAdmin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireAdmin.js","sourceRoot":"","sources":["../../src/utils/requireAdmin.ts"],"names":[],"mappings":"AAEA,gEAAgE;AAChE,8EAA8E;AAC9E,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAoB,EAAE;IAClF,MAAM,IAAI,GAAI,GAAW,CAAC,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,2BAA2B;SACrC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"requireAdmin.js","sourceRoot":"","sources":["../../src/utils/requireAdmin.ts"],"names":[],"mappings":"AAEA,gEAAgE;AAChE,8EAA8E;AAC9E,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAoB,EAAE;IAClF,MAAM,IAAI,GAAI,GAAW,CAAC,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,2BAA2B;SACrC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,8EAA8E;AAC9E,8EAA8E;AAC9E,uEAAuE;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EACzC,GAAY,EACZ,GAAa,EACb,IAAkB,EACH,EAAE;IACjB,IAAI,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,EAAE,CAAC;IACT,CAAC;AACH,CAAC,CAAC"}
@@ -12,7 +12,9 @@ import { logger } from './logger.js';
12
12
  * 3. Settings configuration (systemConfig.smartRouting)
13
13
  * 4. Default values
14
14
  *
15
- * @returns {SmartRoutingConfig} Complete smart routing configuration
15
+ * @returns {SmartRoutingConfig} Complete smart routing configuration, including
16
+ * `envOverriddenFields` — the display-only list of fields whose value came from
17
+ * an environment variable and therefore shadows the dashboard setting.
16
18
  */
17
19
  export async function getSmartRoutingConfig() {
18
20
  // Get system config from DAO
@@ -23,16 +25,38 @@ export async function getSmartRoutingConfig() {
23
25
  await systemConfigDao.update({ smartRouting: smartRouting });
24
26
  }
25
27
  const smartRoutingSettings = smartRouting || {};
28
+ // Collect which fields are currently supplied by an environment variable
29
+ // rather than by the persisted (dashboard) setting, so the settings API can warn
30
+ // that a value typed into the UI is being shadowed (issue #642). The `cfg` helper
31
+ // wraps resolveConfigValue, and each call site names its env vars inline (object
32
+ // shorthand, e.g. `{ OPENAI_API_KEY }`) so there is exactly one place that knows
33
+ // them — no second, drift-prone list to keep in sync.
34
+ const envOverriddenFields = [];
35
+ const cfg = (field, envVars, settingsValue, defaultValue, transformer) => {
36
+ const entries = Object.entries(envVars);
37
+ const { value, source, envVarIndex } = resolveConfigValue(entries.map(([, envValue]) => envValue), settingsValue, defaultValue, transformer);
38
+ const envVar = envVarIndex === undefined ? undefined : entries[envVarIndex][0];
39
+ // `enabled` and `dbUrl` are excluded: the dashboard already reflects
40
+ // env-derived enablement (#1179) and renders a `${DB_URL}` placeholder, so a
41
+ // generic "shadowed by env" warning for them would just be noise.
42
+ if (source === 'env' && envVar && field !== 'enabled' && field !== 'dbUrl') {
43
+ envOverriddenFields.push({ field, envVar });
44
+ }
45
+ return value;
46
+ };
26
47
  return {
27
48
  // Enabled status - prefer the canonical variable but keep the legacy alias
28
- enabled: getConfigValue([process.env.SMART_ROUTING_ENABLED, process.env.ENABLE_SMART_ROUTING], smartRoutingSettings.enabled, false, parseBooleanEnvVar),
49
+ enabled: cfg('enabled', {
50
+ SMART_ROUTING_ENABLED: process.env.SMART_ROUTING_ENABLED,
51
+ ENABLE_SMART_ROUTING: process.env.ENABLE_SMART_ROUTING,
52
+ }, smartRoutingSettings.enabled, false, parseBooleanEnvVar),
29
53
  // Database configuration
30
- dbUrl: getConfigValue([process.env.DB_URL], smartRoutingSettings.dbUrl, '', expandEnvVars),
31
- basePacingDelayMs: getConfigValue([process.env.SMART_ROUTING_BASE_PACING_DELAY_MS], smartRoutingSettings.basePacingDelayMs, 0, (value) => {
54
+ dbUrl: cfg('dbUrl', { DB_URL: process.env.DB_URL }, smartRoutingSettings.dbUrl, '', expandEnvVars),
55
+ basePacingDelayMs: cfg('basePacingDelayMs', { SMART_ROUTING_BASE_PACING_DELAY_MS: process.env.SMART_ROUTING_BASE_PACING_DELAY_MS }, smartRoutingSettings.basePacingDelayMs, 0, (value) => {
32
56
  const parsed = parseInt(String(value), 10);
33
57
  return Number.isNaN(parsed) || parsed < 0 ? 0 : parsed;
34
58
  }),
35
- embeddingProvider: getConfigValue([process.env.SMART_ROUTING_EMBEDDING_PROVIDER], smartRoutingSettings.embeddingProvider, 'openai', (value) => {
59
+ embeddingProvider: cfg('embeddingProvider', { SMART_ROUTING_EMBEDDING_PROVIDER: process.env.SMART_ROUTING_EMBEDDING_PROVIDER }, smartRoutingSettings.embeddingProvider, 'openai', (value) => {
36
60
  const normalized = String(value || '')
37
61
  .trim()
38
62
  .toLowerCase();
@@ -41,7 +65,9 @@ export async function getSmartRoutingConfig() {
41
65
  }
42
66
  return 'openai';
43
67
  }),
44
- embeddingEncodingFormat: getConfigValue([process.env.SMART_ROUTING_EMBEDDING_ENCODING_FORMAT], smartRoutingSettings.embeddingEncodingFormat, 'auto', (value) => {
68
+ embeddingEncodingFormat: cfg('embeddingEncodingFormat', {
69
+ SMART_ROUTING_EMBEDDING_ENCODING_FORMAT: process.env.SMART_ROUTING_EMBEDDING_ENCODING_FORMAT,
70
+ }, smartRoutingSettings.embeddingEncodingFormat, 'auto', (value) => {
45
71
  const normalized = String(value || '')
46
72
  .trim()
47
73
  .toLowerCase();
@@ -50,24 +76,27 @@ export async function getSmartRoutingConfig() {
50
76
  }
51
77
  return 'auto';
52
78
  }),
53
- embeddingDimensions: getConfigValue([process.env.EMBEDDING_DIMENSIONS], smartRoutingSettings.embeddingDimensions, undefined, (value) => {
79
+ embeddingDimensions: cfg('embeddingDimensions', { EMBEDDING_DIMENSIONS: process.env.EMBEDDING_DIMENSIONS }, smartRoutingSettings.embeddingDimensions, undefined, (value) => {
54
80
  const parsed = Number(value);
55
81
  return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : undefined;
56
82
  }),
57
- embeddingDimensionsApiPassthrough: getConfigValue([process.env.EMBEDDING_DIMENSIONS_API_PASSTHROUGH], smartRoutingSettings.embeddingDimensionsApiPassthrough, false, parseBooleanEnvVar),
83
+ embeddingDimensionsApiPassthrough: cfg('embeddingDimensionsApiPassthrough', { EMBEDDING_DIMENSIONS_API_PASSTHROUGH: process.env.EMBEDDING_DIMENSIONS_API_PASSTHROUGH }, smartRoutingSettings.embeddingDimensionsApiPassthrough, false, parseBooleanEnvVar),
58
84
  // OpenAI API configuration
59
- llmProviderBaseUrl: getConfigValue([process.env.OPENAI_API_BASE_URL], smartRoutingSettings.llmProviderBaseUrl, 'https://api.openai.com/v1', expandEnvVars),
60
- llmProviderApiKey: getConfigValue([process.env.OPENAI_API_KEY], smartRoutingSettings.llmProviderApiKey, '', expandEnvVars),
61
- embeddingModel: getConfigValue([process.env.EMBEDDING_MODEL, process.env.OPENAI_API_EMBEDDING_MODEL], smartRoutingSettings.embeddingModel, 'text-embedding-3-small', expandEnvVars),
62
- azureOpenaiEndpoint: getConfigValue([process.env.AZURE_OPENAI_ENDPOINT], smartRoutingSettings.azureOpenaiEndpoint, '', expandEnvVars),
63
- azureOpenaiApiKey: getConfigValue([process.env.AZURE_OPENAI_API_KEY], smartRoutingSettings.azureOpenaiApiKey, '', expandEnvVars),
64
- azureOpenaiApiVersion: getConfigValue([process.env.AZURE_OPENAI_API_VERSION], smartRoutingSettings.azureOpenaiApiVersion, '2024-02-15-preview', expandEnvVars),
65
- azureOpenaiEmbeddingDeployment: getConfigValue([process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT], smartRoutingSettings.azureOpenaiEmbeddingDeployment, '', expandEnvVars),
66
- azureOpenaiEmbeddingModel: getConfigValue([process.env.AZURE_OPENAI_EMBEDDING_MODEL], smartRoutingSettings.azureOpenaiEmbeddingModel, '', expandEnvVars),
85
+ llmProviderBaseUrl: cfg('llmProviderBaseUrl', { OPENAI_API_BASE_URL: process.env.OPENAI_API_BASE_URL }, smartRoutingSettings.llmProviderBaseUrl, 'https://api.openai.com/v1', expandEnvVars),
86
+ llmProviderApiKey: cfg('llmProviderApiKey', { OPENAI_API_KEY: process.env.OPENAI_API_KEY }, smartRoutingSettings.llmProviderApiKey, '', expandEnvVars),
87
+ embeddingModel: cfg('embeddingModel', {
88
+ EMBEDDING_MODEL: process.env.EMBEDDING_MODEL,
89
+ OPENAI_API_EMBEDDING_MODEL: process.env.OPENAI_API_EMBEDDING_MODEL,
90
+ }, smartRoutingSettings.embeddingModel, 'text-embedding-3-small', expandEnvVars),
91
+ azureOpenaiEndpoint: cfg('azureOpenaiEndpoint', { AZURE_OPENAI_ENDPOINT: process.env.AZURE_OPENAI_ENDPOINT }, smartRoutingSettings.azureOpenaiEndpoint, '', expandEnvVars),
92
+ azureOpenaiApiKey: cfg('azureOpenaiApiKey', { AZURE_OPENAI_API_KEY: process.env.AZURE_OPENAI_API_KEY }, smartRoutingSettings.azureOpenaiApiKey, '', expandEnvVars),
93
+ azureOpenaiApiVersion: cfg('azureOpenaiApiVersion', { AZURE_OPENAI_API_VERSION: process.env.AZURE_OPENAI_API_VERSION }, smartRoutingSettings.azureOpenaiApiVersion, '2024-02-15-preview', expandEnvVars),
94
+ azureOpenaiEmbeddingDeployment: cfg('azureOpenaiEmbeddingDeployment', { AZURE_OPENAI_EMBEDDING_DEPLOYMENT: process.env.AZURE_OPENAI_EMBEDDING_DEPLOYMENT }, smartRoutingSettings.azureOpenaiEmbeddingDeployment, '', expandEnvVars),
95
+ azureOpenaiEmbeddingModel: cfg('azureOpenaiEmbeddingModel', { AZURE_OPENAI_EMBEDDING_MODEL: process.env.AZURE_OPENAI_EMBEDDING_MODEL }, smartRoutingSettings.azureOpenaiEmbeddingModel, '', expandEnvVars),
67
96
  // Progressive disclosure - when enabled, search_tools returns minimal info
68
97
  // and describe_tool is used to get full schema
69
- progressiveDisclosure: getConfigValue([process.env.SMART_ROUTING_PROGRESSIVE_DISCLOSURE], smartRoutingSettings.progressiveDisclosure, false, parseBooleanEnvVar),
70
- serverDescriptionMode: getConfigValue([process.env.SMART_ROUTING_SERVER_DESCRIPTION_MODE], smartRoutingSettings.serverDescriptionMode, 'names', (value) => {
98
+ progressiveDisclosure: cfg('progressiveDisclosure', { SMART_ROUTING_PROGRESSIVE_DISCLOSURE: process.env.SMART_ROUTING_PROGRESSIVE_DISCLOSURE }, smartRoutingSettings.progressiveDisclosure, false, parseBooleanEnvVar),
99
+ serverDescriptionMode: cfg('serverDescriptionMode', { SMART_ROUTING_SERVER_DESCRIPTION_MODE: process.env.SMART_ROUTING_SERVER_DESCRIPTION_MODE }, smartRoutingSettings.serverDescriptionMode, 'names', (value) => {
71
100
  const normalized = String(value || '')
72
101
  .trim()
73
102
  .toLowerCase();
@@ -75,27 +104,40 @@ export async function getSmartRoutingConfig() {
75
104
  }),
76
105
  // Maximum tokens for text truncation before generating embeddings.
77
106
  // undefined means "use the per-model default" (see getModelDefaultTokenLimit).
78
- embeddingMaxTokens: getConfigValue([process.env.EMBEDDING_MAX_TOKENS], smartRoutingSettings.embeddingMaxTokens, undefined, (value) => {
107
+ embeddingMaxTokens: cfg('embeddingMaxTokens', { EMBEDDING_MAX_TOKENS: process.env.EMBEDDING_MAX_TOKENS }, smartRoutingSettings.embeddingMaxTokens, undefined, (value) => {
79
108
  const parsed = parseInt(String(value), 10);
80
109
  return Number.isNaN(parsed) || parsed <= 0 ? undefined : parsed;
81
110
  }),
111
+ // Task prefixes for asymmetric embedding models. Kept verbatim (no trim):
112
+ // the trailing space is part of the prefix.
113
+ embeddingQueryPrefix: cfg('embeddingQueryPrefix', { SMART_ROUTING_EMBEDDING_QUERY_PREFIX: process.env.SMART_ROUTING_EMBEDDING_QUERY_PREFIX }, smartRoutingSettings.embeddingQueryPrefix, '', String),
114
+ embeddingDocumentPrefix: cfg('embeddingDocumentPrefix', {
115
+ SMART_ROUTING_EMBEDDING_DOCUMENT_PREFIX: process.env.SMART_ROUTING_EMBEDDING_DOCUMENT_PREFIX,
116
+ }, smartRoutingSettings.embeddingDocumentPrefix, '', String),
117
+ envOverriddenFields,
82
118
  };
83
119
  }
84
120
  /**
85
- * Gets a configuration value with priority order: environment variables > settings > default.
121
+ * Resolves a configuration value with priority order: environment variables >
122
+ * settings > default, and reports which of the three actually won.
123
+ *
124
+ * The source is what lets the dashboard warn about a value the user typed being
125
+ * shadowed by an env var (issue #642) without duplicating the env-var lookup list.
86
126
  *
87
- * @param {(string | undefined)[]} envVars - Array of environment variable names to check in order
127
+ * @param {(string | undefined)[]} envVars - Array of environment variable values to check in order
88
128
  * @param {any} settingsValue - Value from settings configuration
89
129
  * @param {any} defaultValue - Default value to use if no other value is found
90
130
  * @param {Function} transformer - Function to transform the final value to the correct type
91
- * @returns {any} The configuration value with the appropriate transformation applied
131
+ * @returns {{ value: T; source: ConfigValueSource; envVarIndex?: number }} The transformed
132
+ * value, where it came from, and (when source is `env`) the index in `envVars` that won
92
133
  */
93
- function getConfigValue(envVars, settingsValue, defaultValue, transformer) {
134
+ function resolveConfigValue(envVars, settingsValue, defaultValue, transformer) {
94
135
  // Check environment variables in order
95
- for (const envVar of envVars) {
136
+ for (let index = 0; index < envVars.length; index++) {
137
+ const envVar = envVars[index];
96
138
  if (envVar !== undefined && envVar !== null && envVar !== '') {
97
139
  try {
98
- return transformer(envVar);
140
+ return { value: transformer(envVar), source: 'env', envVarIndex: index };
99
141
  }
100
142
  catch (error) {
101
143
  logger.warn(`Failed to transform environment variable "${envVar}":`, error);
@@ -106,14 +148,14 @@ function getConfigValue(envVars, settingsValue, defaultValue, transformer) {
106
148
  // Check settings value
107
149
  if (settingsValue !== undefined && settingsValue !== null) {
108
150
  try {
109
- return transformer(settingsValue);
151
+ return { value: transformer(settingsValue), source: 'settings' };
110
152
  }
111
153
  catch (error) {
112
154
  logger.warn('Failed to transform settings value:', error);
113
155
  }
114
156
  }
115
157
  // Return default value
116
- return defaultValue;
158
+ return { value: defaultValue, source: 'default' };
117
159
  }
118
160
  /**
119
161
  * Parses a string environment variable value to a boolean.
@@ -1 +1 @@
1
- {"version":3,"file":"smartRouting.js","sourceRoot":"","sources":["../../src/utils/smartRouting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smartRouting.js","sourceRoot":"","sources":["../../src/utils/smartRouting.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{r,j as e}from"./framework-vendor-_YL27Pfc.js";import{t as ee,v as te,w as ae,x as se,y as le}from"./index-C8aAOWR7.js";import{P as re}from"./Pagination-CLUvn47x.js";import{u as ie}from"./i18n-vendor-BMaj5qV8.js";import"./icons-vendor-CNEaJWqW.js";const I=["success","error"],ce=a=>I.includes(a),he=()=>{const{t:a}=ie(),[m,V]=r.useState([]),[n,$]=r.useState(null),[l,J]=r.useState(null),[i,U]=r.useState(null),[o,d]=r.useState(1),[j,G]=r.useState(10),[f,A]=r.useState(!0),[F,N]=r.useState(null),[c,H]=r.useState(null),[K,R]=r.useState(!1),[B,D]=r.useState({}),[p,w]=r.useState(""),[v,k]=r.useState(""),[x,S]=r.useState(""),[g,C]=r.useState(""),[y,L]=r.useState(""),[b,P]=r.useState(""),z=r.useCallback(async()=>{A(!0),N(null);try{const t={...B},[s,u,h]=await Promise.all([ee(o,j,t),te(t),ae()]);s!=null&&s.success&&Array.isArray(s.data)&&(V(s.data),s.pagination&&U(s.pagination)),u!=null&&u.success&&u.data&&$(u.data),h!=null&&h.success&&h.data&&J(h.data)}catch(t){console.error("Error fetching activity data:",t),N(a("activity.fetchError"))}finally{A(!1)}},[o,j,B,a]);r.useEffect(()=>{z()},[z]),r.useEffect(()=>{if(!i)return;const t=Math.max(1,i.totalPages||1);o>t&&d(t)},[i,o]);const W=async t=>{try{const s=await le(t.id);s!=null&&s.success&&s.data&&(H(s.data),R(!0))}catch(s){console.error("Error fetching activity details:",s)}},_=async()=>{var t;if(window.confirm(a("activity.confirmCleanup")))try{const s=await se(30);s!=null&&s.success&&(alert(a("activity.cleanupSuccess",{count:((t=s.data)==null?void 0:t.deletedCount)||0})),z())}catch(s){console.error("Error cleaning up activities:",s),alert(a("activity.cleanupError"))}},q=()=>{const t={};p&&(t.server=p),v&&(t.tool=v),x&&ce(x)&&(t.status=x),g&&(t.group=g),y&&(t.username=y),b&&(t.keyName=b),D(t),d(1)},O=()=>{w(""),k(""),S(""),C(""),L(""),P(""),D({}),d(1)},M=t=>t<1e3?`${t}ms`:t<6e4?`${(t/1e3).toFixed(2)}s`:`${(t/6e4).toFixed(2)}m`,E=t=>new Date(t).toLocaleString(),T=t=>{if(!t)return null;try{return JSON.parse(t)}catch{return t}},Q=()=>n?e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3 mb-4",children:[{label:a("activity.totalCalls"),value:n.totalCalls,tone:"default"},{label:a("activity.successCount"),value:n.successCount,tone:"ok"},{label:a("activity.errorCount"),value:n.errorCount,tone:"err"},{label:a("activity.avgDuration"),value:M(n.avgDuration),tone:"default"}].map(t=>e.jsxs("div",{className:"hub-card",style:{padding:"12px 14px"},children:[e.jsx("div",{className:"text-[12px]",style:{color:"var(--hub-ink-3)"},children:t.label}),e.jsx("div",{className:"hub-num",style:{fontSize:22,fontWeight:500,lineHeight:1.1,marginTop:6,letterSpacing:"-0.02em",color:t.tone==="ok"?"oklch(0.4 0.13 145)":t.tone==="err"?"oklch(0.45 0.18 25)":"var(--hub-ink)"},children:t.value})]},t.label))}):null,X=()=>e.jsx("div",{className:"hub-card px-4 py-3 mb-4",children:e.jsxs("div",{className:"flex flex-wrap gap-3 items-end",children:[e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-server",children:a("activity.server")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-server",type:"text",value:p,onChange:t=>w(t.target.value),placeholder:a("activity.searchServer"),className:"hub-input pr-9",list:"server-options"}),p&&e.jsx("button",{onClick:()=>w(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.servers)&&e.jsx("datalist",{id:"server-options",children:l.servers.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-tool",children:a("activity.tool")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-tool",type:"text",value:v,onChange:t=>k(t.target.value),placeholder:a("activity.searchTool"),className:"hub-input pr-9",list:"tool-options"}),v&&e.jsx("button",{onClick:()=>k(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.tools)&&e.jsx("datalist",{id:"tool-options",children:l.tools.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-status",children:a("activity.status")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-status",type:"text",value:x,onChange:t=>S(t.target.value.toLowerCase()),placeholder:a("activity.searchStatus"),className:"hub-input pr-9",list:"activity-status-options"}),x&&e.jsx("button",{onClick:()=>S(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),e.jsx("datalist",{id:"activity-status-options",children:I.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-group",children:a("activity.group")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-group",type:"text",value:g,onChange:t=>C(t.target.value),placeholder:a("activity.searchGroup"),className:"hub-input pr-9",list:"group-options"}),g&&e.jsx("button",{onClick:()=>C(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.groups)&&e.jsx("datalist",{id:"group-options",children:l.groups.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-username",children:a("activity.user")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-username",type:"text",value:y,onChange:t=>L(t.target.value),placeholder:a("activity.searchUsername"),className:"hub-input pr-9",list:"username-options"}),y&&e.jsx("button",{onClick:()=>L(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.usernames)&&e.jsx("datalist",{id:"username-options",children:l.usernames.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-keyname",children:a("activity.keyName")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-keyname",type:"text",value:b,onChange:t=>P(t.target.value),placeholder:a("activity.searchKeyName"),className:"hub-input pr-9",list:"keyname-options"}),b&&e.jsx("button",{onClick:()=>P(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.keyNames)&&e.jsx("datalist",{id:"keyname-options",children:l.keyNames.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-shrink-0 flex items-center gap-2",children:[e.jsxs("button",{onClick:q,className:"hub-btn primary whitespace-nowrap",children:[e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z",clipRule:"evenodd"})}),a("common.search")]}),e.jsx("button",{onClick:O,className:"hub-btn whitespace-nowrap",children:a("common.clear")})]})]})}),Y=()=>m.length===0?e.jsx("div",{className:"hub-card p-10 text-center",style:{color:"var(--hub-ink-3)"},children:a("activity.noData")}):e.jsx("div",{className:"hub-card overflow-hidden",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"min-w-full",children:[e.jsx("thead",{style:{background:"var(--hub-bg-2)"},children:e.jsx("tr",{children:[a("activity.timestamp"),a("activity.server"),a("activity.tool"),a("activity.duration"),a("activity.status"),a("activity.group"),a("activity.user"),a("activity.key"),a("activity.sourceIp"),a("common.actions")].map(t=>e.jsx("th",{className:"hub-mono",style:{padding:"9px 14px",textAlign:"left",fontSize:11,color:"var(--hub-ink-3)",textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:500},children:t},t))})}),e.jsx("tbody",{children:m.map(t=>e.jsxs("tr",{className:"transition-colors hover:bg-[var(--hub-surface-hover)]",style:{borderTop:"1px solid var(--hub-line-2)"},children:[e.jsx("td",{className:"hub-mono whitespace-nowrap",style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-2)"},children:E(t.timestamp)}),e.jsx("td",{style:{padding:"10px 14px"},children:e.jsx("span",{className:"hub-tag",children:t.server})}),e.jsx("td",{style:{padding:"10px 14px"},children:e.jsx("span",{className:"hub-tag accent",children:t.tool})}),e.jsx("td",{className:"hub-mono hub-num whitespace-nowrap",style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-2)"},children:M(t.duration)}),e.jsx("td",{style:{padding:"10px 14px"},className:"whitespace-nowrap",children:e.jsxs("span",{className:`hub-status ${t.status==="success"?"ok":"err"}`,children:[e.jsx("span",{className:"hub-dot"}),t.status==="success"?a("activity.statusSuccess"):a("activity.statusError")]})}),e.jsx("td",{style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-3)"},children:t.group||"—"}),e.jsx("td",{style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-3)"},children:t.username||"—"}),e.jsx("td",{style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-3)"},children:t.keyName||"—"}),e.jsx("td",{className:"hub-mono whitespace-nowrap",style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-3)"},children:t.sourceIp||"—"}),e.jsx("td",{style:{padding:"10px 14px"},children:e.jsx("button",{onClick:()=>W(t),className:"hub-btn ghost sm",style:{color:"var(--hub-accent)"},children:a("common.view")})})]},t.id))})]})})}),Z=()=>{if(!K||!c)return null;const t=T(c.input),s=T(c.output);return e.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"hub-card max-w-4xl w-full mx-4 max-h-[90vh] overflow-hidden",style:{boxShadow:"0 8px 24px rgba(0,0,0,0.12)"},children:[e.jsxs("div",{className:"flex items-center justify-between px-5 py-3",style:{borderBottom:"1px solid var(--hub-line-2)"},children:[e.jsx("h3",{className:"hub-card-title",children:a("activity.details")}),e.jsx("button",{onClick:()=>R(!1),className:"hub-icon-btn sm","aria-label":"close",children:e.jsx("svg",{className:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),e.jsxs("div",{className:"px-6 py-4 overflow-y-auto max-h-[calc(90vh-120px)]",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 mb-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.timestamp")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:E(c.timestamp)})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.duration")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:M(c.duration)})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.server")}),e.jsx("p",{className:"text-gray-900 dark:text-white font-mono",children:c.server})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.tool")}),e.jsx("p",{className:"text-gray-900 dark:text-white font-mono",children:c.tool})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.status")}),e.jsx("span",{className:`px-2 py-1 rounded text-xs font-medium ${c.status==="success"?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"}`,children:c.status==="success"?a("activity.statusSuccess"):a("activity.statusError")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.group")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:c.group||"-"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.user")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:c.username||"-"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.sourceIp")}),e.jsx("p",{className:"text-gray-900 dark:text-white font-mono",children:c.sourceIp||"-"})]}),c.keyName&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.key")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:c.keyName})]})]}),c.errorMessage&&e.jsxs("div",{className:"mb-4",children:[e.jsx("label",{className:"block text-sm font-medium text-red-500 mb-1",children:a("activity.errorMessage")}),e.jsx("div",{className:"bg-red-50 dark:bg-red-900/20 rounded p-3 text-sm text-red-800 dark:text-red-200",children:c.errorMessage})]}),t&&e.jsxs("div",{className:"mb-4",children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400 mb-1",children:a("activity.input")}),e.jsx("pre",{className:"bg-gray-100 dark:bg-gray-700 rounded p-3 text-sm overflow-x-auto max-h-64",children:typeof t=="string"?t:JSON.stringify(t,null,2)})]}),s&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400 mb-1",children:a("activity.output")}),e.jsx("pre",{className:"bg-gray-100 dark:bg-gray-700 rounded p-3 text-sm overflow-x-auto max-h-64",children:typeof s=="string"?s:JSON.stringify(s,null,2)})]})]})]})})};return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-end justify-between gap-4 mb-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"hub-h1",children:a("activity.title")}),e.jsxs("p",{className:"hub-sub",children:[e.jsx("span",{className:"hub-num",children:(i==null?void 0:i.total)??m.length})," entries"]})]}),e.jsxs("button",{onClick:_,className:"hub-btn danger",children:[e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z",clipRule:"evenodd"})}),a("activity.cleanup")]})]}),F&&e.jsxs("div",{className:"hub-card flex items-center justify-between gap-3 mb-4",style:{padding:"10px 14px",borderColor:"oklch(0.85 0.1 25)",background:"oklch(0.97 0.03 25)",color:"oklch(0.4 0.18 25)"},children:[e.jsx("span",{className:"truncate text-[13px]",children:F}),e.jsx("button",{className:"hub-icon-btn sm",onClick:()=>N(null),"aria-label":"close",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3 w-3",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),f&&m.length===0?e.jsx("div",{className:"hub-card p-10 text-center",style:{color:"var(--hub-ink-3)"},children:a("app.loading")}):e.jsxs(e.Fragment,{children:[Q(),X(),Y(),e.jsxs("div",{className:"flex items-center mt-6",children:[e.jsx("div",{className:"flex-[2] text-sm text-gray-500 dark:text-gray-400",children:i&&a("common.showing",{start:(i.page-1)*i.limit+1,end:Math.min(i.page*i.limit,i.total),total:i.total})}),e.jsx("div",{className:"flex-[4] flex justify-center",children:i&&i.totalPages>1&&e.jsx(re,{currentPage:o,totalPages:i.totalPages,onPageChange:d,disabled:f})}),e.jsxs("div",{className:"flex-[2] flex items-center justify-end space-x-2",children:[e.jsxs("label",{htmlFor:"perPage",className:"text-sm text-gray-500 dark:text-gray-400",children:[a("common.itemsPerPage"),":"]}),e.jsxs("select",{id:"perPage",value:j,onChange:t=>{G(Number(t.target.value)),d(1)},disabled:f,className:"border border-gray-300 dark:border-gray-600 rounded p-1 text-sm dark:bg-gray-700 dark:text-white outline-none disabled:opacity-50 disabled:cursor-not-allowed",children:[e.jsx("option",{value:10,children:"10"}),e.jsx("option",{value:20,children:"20"}),e.jsx("option",{value:50,children:"50"}),e.jsx("option",{value:100,children:"100"})]})]})]})]}),Z()]})};export{he as default};
2
- //# sourceMappingURL=ActivityPage-B5DanW8q.js.map
1
+ import{r,j as e}from"./framework-vendor-_YL27Pfc.js";import{t as ee,v as te,w as ae,x as se,y as le}from"./index-qPkrYLbl.js";import{P as re}from"./Pagination-CLUvn47x.js";import{u as ie}from"./i18n-vendor-BMaj5qV8.js";import"./icons-vendor-CNEaJWqW.js";const I=["success","error"],ce=a=>I.includes(a),he=()=>{const{t:a}=ie(),[m,V]=r.useState([]),[n,$]=r.useState(null),[l,J]=r.useState(null),[i,U]=r.useState(null),[o,d]=r.useState(1),[j,G]=r.useState(10),[f,A]=r.useState(!0),[F,N]=r.useState(null),[c,H]=r.useState(null),[K,R]=r.useState(!1),[B,D]=r.useState({}),[p,w]=r.useState(""),[v,k]=r.useState(""),[x,S]=r.useState(""),[g,C]=r.useState(""),[y,L]=r.useState(""),[b,P]=r.useState(""),z=r.useCallback(async()=>{A(!0),N(null);try{const t={...B},[s,u,h]=await Promise.all([ee(o,j,t),te(t),ae()]);s!=null&&s.success&&Array.isArray(s.data)&&(V(s.data),s.pagination&&U(s.pagination)),u!=null&&u.success&&u.data&&$(u.data),h!=null&&h.success&&h.data&&J(h.data)}catch(t){console.error("Error fetching activity data:",t),N(a("activity.fetchError"))}finally{A(!1)}},[o,j,B,a]);r.useEffect(()=>{z()},[z]),r.useEffect(()=>{if(!i)return;const t=Math.max(1,i.totalPages||1);o>t&&d(t)},[i,o]);const W=async t=>{try{const s=await le(t.id);s!=null&&s.success&&s.data&&(H(s.data),R(!0))}catch(s){console.error("Error fetching activity details:",s)}},_=async()=>{var t;if(window.confirm(a("activity.confirmCleanup")))try{const s=await se(30);s!=null&&s.success&&(alert(a("activity.cleanupSuccess",{count:((t=s.data)==null?void 0:t.deletedCount)||0})),z())}catch(s){console.error("Error cleaning up activities:",s),alert(a("activity.cleanupError"))}},q=()=>{const t={};p&&(t.server=p),v&&(t.tool=v),x&&ce(x)&&(t.status=x),g&&(t.group=g),y&&(t.username=y),b&&(t.keyName=b),D(t),d(1)},O=()=>{w(""),k(""),S(""),C(""),L(""),P(""),D({}),d(1)},M=t=>t<1e3?`${t}ms`:t<6e4?`${(t/1e3).toFixed(2)}s`:`${(t/6e4).toFixed(2)}m`,E=t=>new Date(t).toLocaleString(),T=t=>{if(!t)return null;try{return JSON.parse(t)}catch{return t}},Q=()=>n?e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3 mb-4",children:[{label:a("activity.totalCalls"),value:n.totalCalls,tone:"default"},{label:a("activity.successCount"),value:n.successCount,tone:"ok"},{label:a("activity.errorCount"),value:n.errorCount,tone:"err"},{label:a("activity.avgDuration"),value:M(n.avgDuration),tone:"default"}].map(t=>e.jsxs("div",{className:"hub-card",style:{padding:"12px 14px"},children:[e.jsx("div",{className:"text-[12px]",style:{color:"var(--hub-ink-3)"},children:t.label}),e.jsx("div",{className:"hub-num",style:{fontSize:22,fontWeight:500,lineHeight:1.1,marginTop:6,letterSpacing:"-0.02em",color:t.tone==="ok"?"oklch(0.4 0.13 145)":t.tone==="err"?"oklch(0.45 0.18 25)":"var(--hub-ink)"},children:t.value})]},t.label))}):null,X=()=>e.jsx("div",{className:"hub-card px-4 py-3 mb-4",children:e.jsxs("div",{className:"flex flex-wrap gap-3 items-end",children:[e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-server",children:a("activity.server")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-server",type:"text",value:p,onChange:t=>w(t.target.value),placeholder:a("activity.searchServer"),className:"hub-input pr-9",list:"server-options"}),p&&e.jsx("button",{onClick:()=>w(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.servers)&&e.jsx("datalist",{id:"server-options",children:l.servers.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-tool",children:a("activity.tool")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-tool",type:"text",value:v,onChange:t=>k(t.target.value),placeholder:a("activity.searchTool"),className:"hub-input pr-9",list:"tool-options"}),v&&e.jsx("button",{onClick:()=>k(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.tools)&&e.jsx("datalist",{id:"tool-options",children:l.tools.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-status",children:a("activity.status")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-status",type:"text",value:x,onChange:t=>S(t.target.value.toLowerCase()),placeholder:a("activity.searchStatus"),className:"hub-input pr-9",list:"activity-status-options"}),x&&e.jsx("button",{onClick:()=>S(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),e.jsx("datalist",{id:"activity-status-options",children:I.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-group",children:a("activity.group")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-group",type:"text",value:g,onChange:t=>C(t.target.value),placeholder:a("activity.searchGroup"),className:"hub-input pr-9",list:"group-options"}),g&&e.jsx("button",{onClick:()=>C(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.groups)&&e.jsx("datalist",{id:"group-options",children:l.groups.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-username",children:a("activity.user")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-username",type:"text",value:y,onChange:t=>L(t.target.value),placeholder:a("activity.searchUsername"),className:"hub-input pr-9",list:"username-options"}),y&&e.jsx("button",{onClick:()=>L(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.usernames)&&e.jsx("datalist",{id:"username-options",children:l.usernames.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-1 min-w-[140px]",children:[e.jsx("label",{className:"sr-only",htmlFor:"activity-keyname",children:a("activity.keyName")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{id:"activity-keyname",type:"text",value:b,onChange:t=>P(t.target.value),placeholder:a("activity.searchKeyName"),className:"hub-input pr-9",list:"keyname-options"}),b&&e.jsx("button",{onClick:()=>P(""),className:"absolute inset-y-0 right-2 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300","aria-label":a("common.clear"),type:"button",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),(l==null?void 0:l.keyNames)&&e.jsx("datalist",{id:"keyname-options",children:l.keyNames.map(t=>e.jsx("option",{value:t},t))})]}),e.jsxs("div",{className:"flex-shrink-0 flex items-center gap-2",children:[e.jsxs("button",{onClick:q,className:"hub-btn primary whitespace-nowrap",children:[e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z",clipRule:"evenodd"})}),a("common.search")]}),e.jsx("button",{onClick:O,className:"hub-btn whitespace-nowrap",children:a("common.clear")})]})]})}),Y=()=>m.length===0?e.jsx("div",{className:"hub-card p-10 text-center",style:{color:"var(--hub-ink-3)"},children:a("activity.noData")}):e.jsx("div",{className:"hub-card overflow-hidden",children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"min-w-full",children:[e.jsx("thead",{style:{background:"var(--hub-bg-2)"},children:e.jsx("tr",{children:[a("activity.timestamp"),a("activity.server"),a("activity.tool"),a("activity.duration"),a("activity.status"),a("activity.group"),a("activity.user"),a("activity.key"),a("activity.sourceIp"),a("common.actions")].map(t=>e.jsx("th",{className:"hub-mono",style:{padding:"9px 14px",textAlign:"left",fontSize:11,color:"var(--hub-ink-3)",textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:500},children:t},t))})}),e.jsx("tbody",{children:m.map(t=>e.jsxs("tr",{className:"transition-colors hover:bg-[var(--hub-surface-hover)]",style:{borderTop:"1px solid var(--hub-line-2)"},children:[e.jsx("td",{className:"hub-mono whitespace-nowrap",style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-2)"},children:E(t.timestamp)}),e.jsx("td",{style:{padding:"10px 14px"},children:e.jsx("span",{className:"hub-tag",children:t.server})}),e.jsx("td",{style:{padding:"10px 14px"},children:e.jsx("span",{className:"hub-tag accent",children:t.tool})}),e.jsx("td",{className:"hub-mono hub-num whitespace-nowrap",style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-2)"},children:M(t.duration)}),e.jsx("td",{style:{padding:"10px 14px"},className:"whitespace-nowrap",children:e.jsxs("span",{className:`hub-status ${t.status==="success"?"ok":"err"}`,children:[e.jsx("span",{className:"hub-dot"}),t.status==="success"?a("activity.statusSuccess"):a("activity.statusError")]})}),e.jsx("td",{style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-3)"},children:t.group||"—"}),e.jsx("td",{style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-3)"},children:t.username||"—"}),e.jsx("td",{style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-3)"},children:t.keyName||"—"}),e.jsx("td",{className:"hub-mono whitespace-nowrap",style:{padding:"10px 14px",fontSize:12,color:"var(--hub-ink-3)"},children:t.sourceIp||"—"}),e.jsx("td",{style:{padding:"10px 14px"},children:e.jsx("button",{onClick:()=>W(t),className:"hub-btn ghost sm",style:{color:"var(--hub-accent)"},children:a("common.view")})})]},t.id))})]})})}),Z=()=>{if(!K||!c)return null;const t=T(c.input),s=T(c.output);return e.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"hub-card max-w-4xl w-full mx-4 max-h-[90vh] overflow-hidden",style:{boxShadow:"0 8px 24px rgba(0,0,0,0.12)"},children:[e.jsxs("div",{className:"flex items-center justify-between px-5 py-3",style:{borderBottom:"1px solid var(--hub-line-2)"},children:[e.jsx("h3",{className:"hub-card-title",children:a("activity.details")}),e.jsx("button",{onClick:()=>R(!1),className:"hub-icon-btn sm","aria-label":"close",children:e.jsx("svg",{className:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),e.jsxs("div",{className:"px-6 py-4 overflow-y-auto max-h-[calc(90vh-120px)]",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 mb-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.timestamp")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:E(c.timestamp)})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.duration")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:M(c.duration)})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.server")}),e.jsx("p",{className:"text-gray-900 dark:text-white font-mono",children:c.server})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.tool")}),e.jsx("p",{className:"text-gray-900 dark:text-white font-mono",children:c.tool})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.status")}),e.jsx("span",{className:`px-2 py-1 rounded text-xs font-medium ${c.status==="success"?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"}`,children:c.status==="success"?a("activity.statusSuccess"):a("activity.statusError")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.group")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:c.group||"-"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.user")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:c.username||"-"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.sourceIp")}),e.jsx("p",{className:"text-gray-900 dark:text-white font-mono",children:c.sourceIp||"-"})]}),c.keyName&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400",children:a("activity.key")}),e.jsx("p",{className:"text-gray-900 dark:text-white",children:c.keyName})]})]}),c.errorMessage&&e.jsxs("div",{className:"mb-4",children:[e.jsx("label",{className:"block text-sm font-medium text-red-500 mb-1",children:a("activity.errorMessage")}),e.jsx("div",{className:"bg-red-50 dark:bg-red-900/20 rounded p-3 text-sm text-red-800 dark:text-red-200",children:c.errorMessage})]}),t&&e.jsxs("div",{className:"mb-4",children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400 mb-1",children:a("activity.input")}),e.jsx("pre",{className:"bg-gray-100 dark:bg-gray-700 rounded p-3 text-sm overflow-x-auto max-h-64",children:typeof t=="string"?t:JSON.stringify(t,null,2)})]}),s&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-gray-500 dark:text-gray-400 mb-1",children:a("activity.output")}),e.jsx("pre",{className:"bg-gray-100 dark:bg-gray-700 rounded p-3 text-sm overflow-x-auto max-h-64",children:typeof s=="string"?s:JSON.stringify(s,null,2)})]})]})]})})};return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-end justify-between gap-4 mb-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"hub-h1",children:a("activity.title")}),e.jsxs("p",{className:"hub-sub",children:[e.jsx("span",{className:"hub-num",children:(i==null?void 0:i.total)??m.length})," entries"]})]}),e.jsxs("button",{onClick:_,className:"hub-btn danger",children:[e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z",clipRule:"evenodd"})}),a("activity.cleanup")]})]}),F&&e.jsxs("div",{className:"hub-card flex items-center justify-between gap-3 mb-4",style:{padding:"10px 14px",borderColor:"oklch(0.85 0.1 25)",background:"oklch(0.97 0.03 25)",color:"oklch(0.4 0.18 25)"},children:[e.jsx("span",{className:"truncate text-[13px]",children:F}),e.jsx("button",{className:"hub-icon-btn sm",onClick:()=>N(null),"aria-label":"close",children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-3 w-3",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),f&&m.length===0?e.jsx("div",{className:"hub-card p-10 text-center",style:{color:"var(--hub-ink-3)"},children:a("app.loading")}):e.jsxs(e.Fragment,{children:[Q(),X(),Y(),e.jsxs("div",{className:"flex items-center mt-6",children:[e.jsx("div",{className:"flex-[2] text-sm text-gray-500 dark:text-gray-400",children:i&&a("common.showing",{start:(i.page-1)*i.limit+1,end:Math.min(i.page*i.limit,i.total),total:i.total})}),e.jsx("div",{className:"flex-[4] flex justify-center",children:i&&i.totalPages>1&&e.jsx(re,{currentPage:o,totalPages:i.totalPages,onPageChange:d,disabled:f})}),e.jsxs("div",{className:"flex-[2] flex items-center justify-end space-x-2",children:[e.jsxs("label",{htmlFor:"perPage",className:"text-sm text-gray-500 dark:text-gray-400",children:[a("common.itemsPerPage"),":"]}),e.jsxs("select",{id:"perPage",value:j,onChange:t=>{G(Number(t.target.value)),d(1)},disabled:f,className:"border border-gray-300 dark:border-gray-600 rounded p-1 text-sm dark:bg-gray-700 dark:text-white outline-none disabled:opacity-50 disabled:cursor-not-allowed",children:[e.jsx("option",{value:10,children:"10"}),e.jsx("option",{value:20,children:"20"}),e.jsx("option",{value:50,children:"50"}),e.jsx("option",{value:100,children:"100"})]})]})]})]}),Z()]})};export{he as default};
2
+ //# sourceMappingURL=ActivityPage-DTouw-He.js.map