ssh-mcp-pro 1.4.3 → 1.6.0

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 (125) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/MIGRATION.md +1 -1
  3. package/README.md +1 -1
  4. package/dist/agent-bin.js +2 -2
  5. package/dist/agent-bin.js.map +1 -1
  6. package/dist/mcp.d.ts +1 -1
  7. package/dist/mcp.js +1 -1
  8. package/dist/remote/action-record-sanitize.d.ts +4 -0
  9. package/dist/remote/action-record-sanitize.d.ts.map +1 -0
  10. package/dist/remote/action-record-sanitize.js +11 -0
  11. package/dist/remote/action-record-sanitize.js.map +1 -0
  12. package/dist/remote/agent-bounded-io.d.ts +30 -0
  13. package/dist/remote/agent-bounded-io.d.ts.map +1 -0
  14. package/dist/remote/agent-bounded-io.js +135 -0
  15. package/dist/remote/agent-bounded-io.js.map +1 -0
  16. package/dist/remote/agent-browser-enrollment.d.ts +16 -0
  17. package/dist/remote/agent-browser-enrollment.d.ts.map +1 -0
  18. package/dist/remote/agent-browser-enrollment.js +190 -0
  19. package/dist/remote/agent-browser-enrollment.js.map +1 -0
  20. package/dist/remote/agent-cli.d.ts +5 -0
  21. package/dist/remote/agent-cli.d.ts.map +1 -1
  22. package/dist/remote/agent-cli.js +91 -14
  23. package/dist/remote/agent-cli.js.map +1 -1
  24. package/dist/remote/agent-content-search.d.ts +20 -0
  25. package/dist/remote/agent-content-search.d.ts.map +1 -0
  26. package/dist/remote/agent-content-search.js +61 -0
  27. package/dist/remote/agent-content-search.js.map +1 -0
  28. package/dist/remote/agent-enrollment.d.ts +12 -0
  29. package/dist/remote/agent-enrollment.d.ts.map +1 -0
  30. package/dist/remote/agent-enrollment.js +87 -0
  31. package/dist/remote/agent-enrollment.js.map +1 -0
  32. package/dist/remote/agent-executor.d.ts +5 -0
  33. package/dist/remote/agent-executor.d.ts.map +1 -1
  34. package/dist/remote/agent-executor.js +96 -107
  35. package/dist/remote/agent-executor.js.map +1 -1
  36. package/dist/remote/agent-file-search.d.ts +22 -0
  37. package/dist/remote/agent-file-search.d.ts.map +1 -0
  38. package/dist/remote/agent-file-search.js +243 -0
  39. package/dist/remote/agent-file-search.js.map +1 -0
  40. package/dist/remote/agent-managed-process.d.ts +43 -0
  41. package/dist/remote/agent-managed-process.d.ts.map +1 -0
  42. package/dist/remote/agent-managed-process.js +291 -0
  43. package/dist/remote/agent-managed-process.js.map +1 -0
  44. package/dist/remote/control-plane.d.ts +3 -2
  45. package/dist/remote/control-plane.d.ts.map +1 -1
  46. package/dist/remote/control-plane.js +24 -80
  47. package/dist/remote/control-plane.js.map +1 -1
  48. package/dist/remote/dashboard-enrollment-commands.d.ts +8 -0
  49. package/dist/remote/dashboard-enrollment-commands.d.ts.map +1 -0
  50. package/dist/remote/dashboard-enrollment-commands.js +23 -0
  51. package/dist/remote/dashboard-enrollment-commands.js.map +1 -0
  52. package/dist/remote/dashboard-enrollment-feedback-script.d.ts +3 -0
  53. package/dist/remote/dashboard-enrollment-feedback-script.d.ts.map +1 -0
  54. package/dist/remote/dashboard-enrollment-feedback-script.js +227 -0
  55. package/dist/remote/dashboard-enrollment-feedback-script.js.map +1 -0
  56. package/dist/remote/mcp-tools.d.ts +1 -0
  57. package/dist/remote/mcp-tools.d.ts.map +1 -1
  58. package/dist/remote/mcp-tools.js +207 -3
  59. package/dist/remote/mcp-tools.js.map +1 -1
  60. package/dist/remote/oauth-handler.d.ts +5 -0
  61. package/dist/remote/oauth-handler.d.ts.map +1 -1
  62. package/dist/remote/oauth-handler.js +110 -65
  63. package/dist/remote/oauth-handler.js.map +1 -1
  64. package/dist/remote/oauth-provider-exchange.d.ts +11 -0
  65. package/dist/remote/oauth-provider-exchange.d.ts.map +1 -0
  66. package/dist/remote/oauth-provider-exchange.js +73 -0
  67. package/dist/remote/oauth-provider-exchange.js.map +1 -0
  68. package/dist/remote/safe-file.d.ts +19 -1
  69. package/dist/remote/safe-file.d.ts.map +1 -1
  70. package/dist/remote/safe-file.js +77 -3
  71. package/dist/remote/safe-file.js.map +1 -1
  72. package/dist/remote/schemas.d.ts +16 -0
  73. package/dist/remote/schemas.d.ts.map +1 -1
  74. package/dist/remote/schemas.js +1 -0
  75. package/dist/remote/schemas.js.map +1 -1
  76. package/dist/remote/store-schema.d.ts +4 -0
  77. package/dist/remote/store-schema.d.ts.map +1 -0
  78. package/dist/remote/store-schema.js +147 -0
  79. package/dist/remote/store-schema.js.map +1 -0
  80. package/dist/remote/store.d.ts +9 -5
  81. package/dist/remote/store.d.ts.map +1 -1
  82. package/dist/remote/store.js +96 -133
  83. package/dist/remote/store.js.map +1 -1
  84. package/dist/remote/types.d.ts +16 -2
  85. package/dist/remote/types.d.ts.map +1 -1
  86. package/dist/remote/types.js +15 -0
  87. package/dist/remote/types.js.map +1 -1
  88. package/dist/remote/web-dashboard-html.d.ts.map +1 -1
  89. package/dist/remote/web-dashboard-html.js +25 -27
  90. package/dist/remote/web-dashboard-html.js.map +1 -1
  91. package/dist/remote/web-dashboard-oauth-users.d.ts.map +1 -1
  92. package/dist/remote/web-dashboard-oauth-users.js +4 -38
  93. package/dist/remote/web-dashboard-oauth-users.js.map +1 -1
  94. package/dist/remote/web-dashboard-styles.d.ts +1 -1
  95. package/dist/remote/web-dashboard-styles.d.ts.map +1 -1
  96. package/dist/remote/web-dashboard-styles.js +2 -0
  97. package/dist/remote/web-dashboard-styles.js.map +1 -1
  98. package/dist/remote/web-dashboard.d.ts +0 -2
  99. package/dist/remote/web-dashboard.d.ts.map +1 -1
  100. package/dist/remote/web-dashboard.js +12 -20
  101. package/dist/remote/web-dashboard.js.map +1 -1
  102. package/dist/session-auth-config.d.ts +8 -0
  103. package/dist/session-auth-config.d.ts.map +1 -0
  104. package/dist/session-auth-config.js +67 -0
  105. package/dist/session-auth-config.js.map +1 -0
  106. package/dist/session.d.ts +0 -12
  107. package/dist/session.d.ts.map +1 -1
  108. package/dist/session.js +3 -64
  109. package/dist/session.js.map +1 -1
  110. package/dist/types.d.ts +1 -1
  111. package/docs/adding-a-device.md +187 -11
  112. package/docs/api-overview.md +67 -0
  113. package/docs/backup-restore-verification.md +45 -0
  114. package/docs/coolify.md +9 -0
  115. package/docs/development/local-setup.md +1 -1
  116. package/docs/reference/compatibility.md +1 -1
  117. package/docs/security/hosted-data-inventory.md +3 -1
  118. package/docs/theme/favicon.svg +12 -0
  119. package/docs/theme/ssh-docs.css +670 -0
  120. package/docs/theme/ssh-docs.js +58 -0
  121. package/docs/tutorials/getting-started.md +1 -1
  122. package/mcp.json +1 -1
  123. package/package.json +12 -12
  124. package/registry/ssh-mcp-pro/mcp.json +1 -1
  125. package/server.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/remote/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY;IACZ,aAAa;IACb,cAAc;IACd,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,WAAW;IACX,aAAa;IACb,YAAY;CACJ,CAAC;AAIX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY;IACZ,aAAa;IACb,cAAc;IACd,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,WAAW;CACH,CAAC;AAIX,MAAM,CAAC,MAAM,oBAAoB,GAA4C;IAC3E,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,aAAa,EAAE,CAAC,aAAa,CAAC;IAC9B,cAAc,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,YAAY,CAAC;IAC7D,aAAa,EAAE,CAAC,aAAa,CAAC;IAC9B,WAAW,EAAE,CAAC,WAAW,CAAC;IAC1B,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;IACpC,eAAe,EAAE,CAAC,eAAe,CAAC;IAClC,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,aAAa,EAAE,CAAC,aAAa,CAAC;IAC9B,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,WAAW,EAAE,CAAC,WAAW,CAAC;CAC3B,CAAC;AAkHF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY;IACZ,aAAa;IACb,yBAAyB;IACzB,2BAA2B;IAC3B,mBAAmB;IACnB,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,WAAW;IACX,mBAAmB;IACnB,qBAAqB;IACrB,cAAc;IACd,kBAAkB;CACV,CAAC;AAIX,MAAM,CAAC,MAAM,mBAAmB,GAA6C;IAC3E,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,uBAAuB,EAAE,cAAc;IACvC,yBAAyB,EAAE,cAAc;IACzC,iBAAiB,EAAE,aAAa;IAChC,SAAS,EAAE,WAAW;IACtB,eAAe,EAAE,gBAAgB;IACjC,SAAS,EAAE,eAAe;IAC1B,WAAW,EAAE,eAAe;IAC5B,cAAc,EAAE,eAAe;IAC/B,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE,aAAa;IACzB,SAAS,EAAE,YAAY;IACvB,iBAAiB,EAAE,WAAW;IAC9B,mBAAmB,EAAE,cAAc;IACnC,YAAY,EAAE,cAAc;IAC5B,gBAAgB,EAAE,YAAY;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,cAAc;IACd,WAAW;IACX,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,sBAAsB;IACtB,wBAAwB;IACxB,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,gBAAgB;IAChB,wBAAwB;IACxB,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,sBAAsB;IACtB,mCAAmC;IACnC,gBAAgB;CACR,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/remote/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY;IACZ,aAAa;IACb,cAAc;IACd,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,WAAW;IACX,aAAa;IACb,YAAY;CACJ,CAAC;AAIX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY;IACZ,aAAa;IACb,cAAc;IACd,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,WAAW;CACH,CAAC;AAIX,MAAM,CAAC,MAAM,oBAAoB,GAA4C;IAC3E,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,aAAa,EAAE,CAAC,aAAa,CAAC;IAC9B,cAAc,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,YAAY,CAAC;IAC7D,aAAa,EAAE,CAAC,aAAa,CAAC;IAC9B,WAAW,EAAE,CAAC,WAAW,CAAC;IAC1B,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;IACpC,eAAe,EAAE,CAAC,eAAe,CAAC;IAClC,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,aAAa,EAAE,CAAC,aAAa,CAAC;IAC9B,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,WAAW,EAAE,CAAC,WAAW,CAAC;CAC3B,CAAC;AAgIF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY;IACZ,aAAa;IACb,yBAAyB;IACzB,2BAA2B;IAC3B,mBAAmB;IACnB,WAAW;IACX,iBAAiB;IACjB,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,cAAc;IACd,WAAW;IACX,eAAe;IACf,cAAc;IACd,eAAe;IACf,cAAc;IACd,mBAAmB;IACnB,qBAAqB;IACrB,cAAc;IACd,kBAAkB;CACV,CAAC;AAIX,MAAM,CAAC,MAAM,mBAAmB,GAA6C;IAC3E,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,uBAAuB,EAAE,cAAc;IACvC,yBAAyB,EAAE,cAAc;IACzC,iBAAiB,EAAE,aAAa;IAChC,SAAS,EAAE,WAAW;IACtB,eAAe,EAAE,gBAAgB;IACjC,SAAS,EAAE,eAAe;IAC1B,WAAW,EAAE,eAAe;IAC5B,cAAc,EAAE,eAAe;IAC/B,WAAW,EAAE,YAAY;IACzB,mBAAmB,EAAE,YAAY;IACjC,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE,aAAa;IACzB,YAAY,EAAE,aAAa;IAC3B,SAAS,EAAE,YAAY;IACvB,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,YAAY;IAC1B,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,YAAY;IAC1B,iBAAiB,EAAE,WAAW;IAC9B,mBAAmB,EAAE,cAAc;IACnC,YAAY,EAAE,cAAc;IAC5B,gBAAgB,EAAE,YAAY;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,cAAc;IACd,WAAW;IACX,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,sBAAsB;IACtB,wBAAwB;IACxB,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,gBAAgB;IAChB,wBAAwB;IACxB,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,sBAAsB;IACtB,mCAAmC;IACnC,gBAAgB;CACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-html.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-html.ts"],"names":[],"mappings":"AACA,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,MAAM,CAgcR"}
1
+ {"version":3,"file":"web-dashboard-html.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-html.ts"],"names":[],"mappings":"AAGA,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,MAAM,CA4bR"}
@@ -1,4 +1,6 @@
1
+ import { buildDashboardBrowserEnrollmentCommand } from "./dashboard-enrollment-commands.js";
1
2
  import { DASHBOARD_STYLES } from "./web-dashboard-styles.js";
3
+ import { DASHBOARD_ENROLLMENT_FEEDBACK_SCRIPT } from "./dashboard-enrollment-feedback-script.js";
2
4
  export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson) {
3
5
  return `<!doctype html>
4
6
  <html lang="en">
@@ -28,11 +30,13 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
28
30
  const INITIAL_USER = JSON.parse(atob("${initialUserBase64}"));
29
31
  const MCP_URL = ${mcpUrlJson};
30
32
  const PUBLIC_URL = ${publicUrlJson};
33
+ const BROWSER_LINUX_COMMAND = ${JSON.stringify(buildDashboardBrowserEnrollmentCommand(JSON.parse(publicUrlJson)))};
31
34
 
32
35
  let currentUser = INITIAL_USER;
33
36
  let activeTab = 'devices';
34
37
  let devicesList = [];
35
38
  let auditList = [];
39
+ ${DASHBOARD_ENROLLMENT_FEEDBACK_SCRIPT}
36
40
 
37
41
  function escapeHtml(value) {
38
42
  return String(value ?? '').replace(/[&<>"']/g, char => ({
@@ -82,6 +86,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
82
86
  <button type="button" data-dashboard-tab="audit" aria-pressed="\${activeTab === 'audit'}" class="tab-item \${activeTab === 'audit' ? 'active' : ''}" onclick="switchTab('audit')">📜 Audit Log</button>
83
87
  </nav>
84
88
 
89
+ \${activeTab === 'devices' ? '<p class="device-scope-note" role="note">Device access is scoped to your <strong>' + escapeHtml(currentUser.provider === 'github' ? 'GitHub' : 'Google') + '</strong> sign-in. Switching sign-in providers shows a different device list.</p>' : ''}
85
90
  <div id="tabContent">
86
91
  \${renderTabContent()}
87
92
  </div>
@@ -92,6 +97,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
92
97
  }
93
98
 
94
99
  function switchTab(tab) {
100
+ stopEnrollmentPolling();
95
101
  activeTab = tab;
96
102
  renderApp();
97
103
  document.querySelector('[data-dashboard-tab="' + tab + '"]')?.focus({ preventScroll: true });
@@ -113,6 +119,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
113
119
  Sign in with GitHub
114
120
  </a>
115
121
  </div>
122
+ <p class="device-scope-note" style="text-align:center; margin-top:12px;">Use the same Google or GitHub sign-in to see your enrolled devices.</p>
116
123
  </div>
117
124
 
118
125
  <div class="grid-2">
@@ -176,7 +183,15 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
176
183
  return \`
177
184
  <div class="card">
178
185
  <h2 style="margin-bottom:12px;">Enroll New Device</h2>
179
- <p style="color:var(--text-muted); font-size:14px; margin-bottom:24px;">Generate an enrollment token and install the outbound agent on your target server.</p>
186
+ <p style="color:var(--text-muted); font-size:14px; margin-bottom:24px;">\${localBrowserLink ? 'Approve the local agent waiting in your terminal. The one-time credential stays inside your browser and device; do not copy it into chat.' : 'Generate a one-time install command and run it on your target device.'}</p>
187
+ <div style="display:\${localBrowserLink ? 'none' : 'block'}; margin-bottom:20px; padding:14px; border:1px solid var(--card-border); border-radius:8px;">
188
+ <h3 style="margin-bottom:8px;">Linux / WSL: Set up with your browser</h3>
189
+ <p style="color:var(--text-muted); font-size:13px; margin-bottom:12px;">Copy this command to the device you want to enroll. Open the URL printed in its terminal in a browser on that same device, sign in and approve. No token copying or sudo required.</p>
190
+ <div class="code-box">
191
+ <button type="button" class="copy-btn" aria-live="polite" aria-label="Copy token-free Linux browser setup" onclick="copySnippet('cmdBrowser')">Copy</button>
192
+ <span id="cmdBrowser">\${escapeHtml(BROWSER_LINUX_COMMAND)}</span>
193
+ </div>
194
+ </div>
180
195
  <div style="display:flex; gap:16px; margin-bottom:24px; flex-wrap:wrap;">
181
196
  <div style="flex:1; min-width:240px;">
182
197
  <label for="enrollAlias" style="display:block; font-size:13px; font-weight:600; margin-bottom:6px;">Device Alias</label>
@@ -191,9 +206,13 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
191
206
  </select>
192
207
  </div>
193
208
  </div>
194
- <button class="btn btn-primary" onclick="generateEnrollment()">Generate Install Command</button>
209
+ <button id="generateEnrollmentButton" type="button" class="btn btn-primary" onclick="generateEnrollment()">\${localBrowserLink ? 'Approve This Device' : 'Generate Install Command'}</button>
210
+ <p id="enrollError" role="alert" hidden style="color:var(--danger, #f85149); margin-top:12px;"></p>
195
211
 
196
212
  <div id="enrollOutput" style="margin-top:24px; display:none;">
213
+ <p id="enrollStatus" role="status" aria-live="polite" style="margin-bottom:12px; color:var(--text-muted);"></p>
214
+ <button id="enrollViewDevice" type="button" class="btn btn-primary" hidden style="display:none; margin-bottom:16px;" onclick="switchTab('devices')">View connected device</button>
215
+ <div id="manualInstallCommands" style="display:\${localBrowserLink ? 'none' : 'block'};">
197
216
  <h3 style="margin-bottom:12px; color:#fff;">One-Liner Installation Commands:</h3>
198
217
 
199
218
  <div style="margin-bottom:16px;">
@@ -213,12 +232,14 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
213
232
  </div>
214
233
 
215
234
  <div>
216
- <div style="font-weight:600; font-size:13px; color:var(--blue); margin-bottom:4px;">📦 Node CLI (Linux/macOS)</div>
235
+ <div style="font-weight:600; font-size:13px; color:var(--blue); margin-bottom:4px;">📦 Manual Node CLI (foreground)</div>
236
+ <p style="font-size:12px; color:var(--text-muted); margin-bottom:6px;">Advanced Linux/macOS fallback: the terminal must stay open. Use an OS service installer for automatic restart.</p>
217
237
  <div class="code-box">
218
238
  <button type="button" class="copy-btn" aria-live="polite" aria-label="Copy Node install command" onclick="copySnippet('cmdNpm')">Copy</button>
219
239
  <span id="cmdNpm"></span>
220
240
  </div>
221
241
  </div>
242
+ </div>
222
243
  </div>
223
244
  </div>
224
245
  \`;
@@ -299,7 +320,7 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
299
320
  <td style="padding:12px 16px; font-family:var(--font-mono); color:var(--text-muted);">\${new Date(e.createdAt).toLocaleTimeString()}</td>
300
321
  <td style="padding:12px 16px; font-weight:600;">\${escapeHtml(e.eventType)}</td>
301
322
  <td style="padding:12px 16px;"><span class="badge \${e.severity === 'info' ? 'badge-blue' : (e.severity === 'warn' ? 'badge-green' : 'badge-gray')}">\${e.severity}</span></td>
302
- <td style="padding:12px 16px; font-family:var(--font-mono); color:var(--text-muted);">\${escapeHtml(e.agentId || e.actionId || '-')}</td>
323
+ <td style="padding:12px 16px; font-family:var(--font-mono); color:var(--text-muted);">\${escapeHtml(e.agentAlias || e.agentId || e.actionId || '-')}</td>
303
324
  </tr>
304
325
  \`).join('')}
305
326
  </tbody>
@@ -341,29 +362,6 @@ export function renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson
341
362
  }
342
363
  }
343
364
 
344
- async function generateEnrollment() {
345
- const alias = document.getElementById('enrollAlias').value.trim() || 'server-' + Math.floor(Math.random() * 1000);
346
- const profile = document.getElementById('enrollProfile').value;
347
- try {
348
- const res = await fetch('/api/dashboard/devices/enroll', {
349
- method: 'POST',
350
- headers: { 'Content-Type': 'application/json', 'X-SSH-MCP-Dashboard': '1' },
351
- body: JSON.stringify({ alias, requested_profile: profile })
352
- });
353
- if (res.ok) {
354
- const data = await res.json();
355
- document.getElementById('cmdLinux').textContent = data.commands.linux;
356
- document.getElementById('cmdWindows').textContent = data.commands.windows;
357
- document.getElementById('cmdNpm').textContent = data.commands.npm;
358
- document.getElementById('enrollOutput').style.display = 'block';
359
- } else {
360
- alert('Failed to generate enrollment token.');
361
- }
362
- } catch (e) {
363
- alert('Error: ' + e.message);
364
- }
365
- }
366
-
367
365
  async function changePolicy(id, profile) {
368
366
  try {
369
367
  const res = await fetch('/api/dashboard/devices/' + encodeURIComponent(id), {
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-html.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,MAAM,UAAU,mBAAmB,CACjC,iBAAyB,EACzB,UAAkB,EAClB,aAAqB;IAErB,OAAO;;;;;;WAME,gBAAgB;;;;;;;;;;;;;;;;;;;4CAmBiB,iBAAiB;sBACvC,UAAU;yBACP,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAma9B,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"web-dashboard-html.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sCAAsC,EAAE,MAAM,oCAAoC,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,oCAAoC,EAAE,MAAM,2CAA2C,CAAC;AACjG,MAAM,UAAU,mBAAmB,CACjC,iBAAyB,EACzB,UAAkB,EAClB,aAAqB;IAErB,OAAO;;;;;;WAME,gBAAgB;;;;;;;;;;;;;;;;;;;4CAmBiB,iBAAiB;sBACvC,UAAU;yBACP,aAAa;oCACF,IAAI,CAAC,SAAS,CAAC,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAW,CAAC,CAAC;;;;;;MAMzH,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwZlC,CAAC;AACT,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-oauth-users.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-oauth-users.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIvE,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,CA2BrB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC,CAiCrB"}
1
+ {"version":3,"file":"web-dashboard-oauth-users.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-oauth-users.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIvE,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC,CAsBrB"}
@@ -1,51 +1,17 @@
1
1
  import { createRemoteJWKSet, jwtVerify } from "jose";
2
2
  import { asString, safeError } from "./http-util.js";
3
+ import { exchangeGitHubIdentity, requestGoogleOAuthToken } from "./oauth-provider-exchange.js";
3
4
  const googleJwks = createRemoteJWKSet(new URL("https://www.googleapis.com/oauth2/v3/certs"));
4
5
  export async function fetchGitHubUserDirect(config, code) {
5
6
  const callbackUrl = `${config.publicBaseUrl}/auth/callback/github`;
6
- const tokenResponse = await fetch("https://github.com/login/oauth/access_token", {
7
- method: "POST",
8
- headers: { Accept: "application/json", "Content-Type": "application/json" },
9
- body: JSON.stringify({
10
- client_id: config.githubClientId,
11
- client_secret: config.githubClientSecret,
12
- code,
13
- redirect_uri: callbackUrl,
14
- }),
15
- });
16
- const tokenPayload = (await tokenResponse.json());
17
- const accessToken = asString(tokenPayload.access_token);
18
- if (!accessToken) {
19
- throw safeError("INVALID_TOKEN", "GitHub OAuth token exchange failed", 502);
20
- }
21
- const userResponse = await fetch("https://api.github.com/user", {
22
- headers: { Authorization: `Bearer ${accessToken}`, Accept: "application/vnd.github+json" },
23
- });
24
- const userPayload = (await userResponse.json());
25
- const githubId = userPayload.id;
26
- const githubLogin = userPayload.login;
27
- if (typeof githubId !== "number" || typeof githubLogin !== "string" || !githubLogin) {
28
- throw safeError("INVALID_TOKEN", "GitHub user response missing valid identity", 502);
29
- }
30
- return { id: String(githubId), login: githubLogin };
7
+ return exchangeGitHubIdentity(config, code, callbackUrl);
31
8
  }
32
9
  export async function fetchGoogleUserDirect(config, code, nonce) {
33
10
  const callbackUrl = config.googleCallbackUrl;
34
- const tokenResponse = await fetch("https://oauth2.googleapis.com/token", {
35
- method: "POST",
36
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
37
- body: new URLSearchParams({
38
- code,
39
- client_id: config.googleClientId ?? "",
40
- client_secret: config.googleClientSecret ?? "",
41
- redirect_uri: callbackUrl,
42
- grant_type: "authorization_code",
43
- }).toString(),
44
- });
45
- const tokenPayload = (await tokenResponse.json());
11
+ const { tokenPayload, responseOk } = await requestGoogleOAuthToken(config, code, callbackUrl);
46
12
  const idToken = asString(tokenPayload.id_token);
47
13
  const clientId = config.googleClientId;
48
- if (!tokenResponse.ok || !idToken || !clientId || !nonce) {
14
+ if (!responseOk || !idToken || !clientId || !nonce) {
49
15
  throw safeError("INVALID_TOKEN", "Google OIDC token exchange failed", 502);
50
16
  }
51
17
  let claims;
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-oauth-users.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-oauth-users.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-dashboard-oauth-users.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-oauth-users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAmB,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAG/F,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;AAE7F,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAoB,EACpB,IAAY;IAEZ,MAAM,WAAW,GAAG,GAAG,MAAM,CAAC,aAAa,uBAAuB,CAAC;IACnE,OAAO,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAoB,EACpB,IAAY,EACZ,KAAa;IAEb,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC7C,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;IACvC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACnD,MAAM,SAAS,CAAC,eAAe,EAAE,mCAAmC,EAAE,GAAG,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,MAAwD,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE;YACpD,MAAM,EAAE,CAAC,6BAA6B,EAAE,qBAAqB,CAAC;YAC9D,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,CAAC,OAAO,CAAC;SACtB,CAAC,CAAC;QACH,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,CAAC,eAAe,EAAE,wCAAwC,EAAE,GAAG,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAkB,EAAE,KAAa;IACzE,IACE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;QAC9B,CAAC,MAAM,CAAC,GAAG;QACX,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;QAChC,CAAC,MAAM,CAAC,KAAK;QACb,MAAM,CAAC,cAAc,KAAK,IAAI;QAC9B,MAAM,CAAC,KAAK,KAAK,KAAK,EACtB,CAAC;QACD,MAAM,SAAS,CAAC,eAAe,EAAE,wCAAwC,EAAE,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1E,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAChE,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const DASHBOARD_STYLES = "\n :root {\n --bg: #0d1117;\n --card-bg: #161b22;\n --card-border: #30363d;\n --text-main: #f0f6fc;\n --text-muted: #8b949e;\n --primary: #238636;\n --primary-hover: #2ea043;\n --blue: #58a6ff;\n --blue-bg: rgba(56, 139, 253, 0.15);\n --red: #f85149;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n background-color: var(--bg);\n color: var(--text-main);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif;\n line-height: 1.5;\n padding-bottom: 60px;\n }\n header {\n background: #161b22;\n border-bottom: 1px solid var(--card-border);\n padding: 16px 24px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n position: sticky;\n top: 0;\n z-index: 100;\n }\n .logo-area { display: flex; align-items: center; gap: 12px; }\n .logo-icon { font-size: 24px; }\n .brand-title { font-size: 18px; font-weight: 700; color: #fff; letter-spacing: -0.5px; }\n .brand-sub { font-size: 12px; color: var(--text-muted); }\n .user-area { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; min-width: 0; }\n .badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n }\n .badge-green { background: #238636; color: #fff; }\n .badge-gray { background: #30363d; color: #c9d1d9; }\n .badge-blue { background: var(--blue-bg); color: var(--blue); border: 1px solid rgba(56,139,253,0.3); }\n .btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n text-decoration: none;\n border: 1px solid transparent;\n transition: all 0.2s ease;\n }\n .btn-primary { background: var(--primary); color: #fff; border-color: rgba(240,246,252,0.1); }\n .btn-primary:hover { background: var(--primary-hover); }\n .btn-outline { background: transparent; color: var(--text-main); border-color: var(--card-border); }\n .btn-outline:hover { background: #21262d; border-color: #8b949e; }\n .btn-danger { background: rgba(248,81,73,0.1); color: var(--red); border-color: rgba(248,81,73,0.4); }\n .btn-danger:hover { background: var(--red); color: #fff; }\n .btn-sm { padding: 4px 10px; font-size: 12px; }\n\n .container { max-width: 1100px; margin: 32px auto; padding: 0 20px; }\n\n /* Hero banner */\n .hero {\n background: linear-gradient(180deg, #161b22 0%, #0d1117 100%);\n border: 1px solid var(--card-border);\n border-radius: 12px;\n padding: 48px 32px;\n text-align: center;\n margin-bottom: 32px;\n }\n .hero h1 { font-size: 32px; font-weight: 800; margin-bottom: 12px; color: #fff; }\n .hero p { font-size: 16px; color: var(--text-muted); max-width: 650px; margin: 0 auto 28px; }\n .auth-buttons { display: flex; justify-content: center; gap: 16px; flex-wrap: wrap; }\n .auth-btn {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 24px;\n border-radius: 8px;\n font-weight: 600;\n font-size: 15px;\n text-decoration: none;\n border: 1px solid transparent;\n transition: transform 0.15s ease;\n }\n .auth-btn:hover { transform: translateY(-2px); }\n .auth-btn-google { background: #ffffff; color: #1f2937; border-color: #d1d5db; }\n .auth-btn-github { background: #24292f; color: #ffffff; border-color: #30363d; }\n\n /* Tab nav */\n .tabs { display: flex; flex-wrap: wrap; gap: 8px; border-bottom: 1px solid var(--card-border); margin-bottom: 24px; }\n .tab-item {\n background: transparent;\n border: 0;\n font-family: inherit;\n text-align: left;\n padding: 12px 20px;\n cursor: pointer;\n font-weight: 600;\n font-size: 14px;\n color: var(--text-muted);\n border-bottom: 2px solid transparent;\n transition: color 0.15s ease;\n }\n .tab-item.active { color: var(--blue); border-bottom-color: var(--blue); }\n .tab-item:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }\n .tab-pane { display: none; }\n .tab-pane.active { display: block; }\n\n /* Device Cards */\n .card {\n background: var(--card-bg);\n border: 1px solid var(--card-border);\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 16px;\n }\n .device-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 16px;\n }\n .device-info { display: flex; align-items: center; flex: 1 1 260px; min-width: 0; gap: 16px; }\n .device-info > div:last-child { min-width: 0; }\n .device-icon {\n font-size: 28px;\n width: 48px;\n height: 48px;\n background: #21262d;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .device-name { font-size: 16px; font-weight: 700; margin-bottom: 4px; display: flex; align-items: center; flex-wrap: wrap; overflow-wrap: anywhere; gap: 8px; }\n .device-meta { font-size: 13px; color: var(--text-muted); font-family: var(--font-mono); overflow-wrap: anywhere; }\n .device-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }\n\n /* Code block */\n .code-box {\n background: #090d13;\n border: 1px solid #30363d;\n border-radius: 6px;\n padding: 14px 18px;\n font-family: var(--font-mono);\n font-size: 13px;\n color: #7ee787;\n overflow-x: auto;\n margin: 12px 0;\n position: relative;\n }\n .code-box > span {\n display: block;\n padding-right: 52px;\n overflow-wrap: anywhere;\n }\n .card a { color: var(--blue); text-underline-offset: 2px; }\n .card a:hover { color: #b0d4ff; }\n .copy-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 4px 8px;\n font-size: 11px;\n background: #21262d;\n color: #c9d1d9;\n border: 1px solid #30363d;\n border-radius: 4px;\n cursor: pointer;\n }\n .copy-btn:hover { background: #30363d; color: #fff; }\n .copy-btn:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }\n\n /* Config guide cards */\n .grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: 20px; }\n @media (max-width: 480px) {\n .container { margin: 20px auto; padding: 0 12px; }\n .hero { padding: 28px 18px; }\n .hero h1 { font-size: 26px; }\n .device-actions { width: 100%; }\n .device-actions select { width: 100%; min-width: 0; }\n }\n\n /* Empty state */\n .empty-box {\n text-align: center;\n padding: 48px 16px;\n color: var(--text-muted);\n }\n";
1
+ export declare const DASHBOARD_STYLES = "\n :root {\n --bg: #0d1117;\n --card-bg: #161b22;\n --card-border: #30363d;\n --text-main: #f0f6fc;\n --text-muted: #8b949e;\n --primary: #238636;\n --primary-hover: #2ea043;\n --blue: #58a6ff;\n --blue-bg: rgba(56, 139, 253, 0.15);\n --red: #f85149;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n background-color: var(--bg);\n color: var(--text-main);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif;\n line-height: 1.5;\n padding-bottom: 60px;\n }\n header {\n background: #161b22;\n border-bottom: 1px solid var(--card-border);\n padding: 16px 24px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n position: sticky;\n top: 0;\n z-index: 100;\n }\n .logo-area { display: flex; align-items: center; gap: 12px; }\n .logo-icon { font-size: 24px; }\n .brand-title { font-size: 18px; font-weight: 700; color: #fff; letter-spacing: -0.5px; }\n .brand-sub { font-size: 12px; color: var(--text-muted); }\n .user-area { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; min-width: 0; }\n .badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n }\n .badge-green { background: #238636; color: #fff; }\n .badge-gray { background: #30363d; color: #c9d1d9; }\n .badge-blue { background: var(--blue-bg); color: var(--blue); border: 1px solid rgba(56,139,253,0.3); }\n .btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n text-decoration: none;\n border: 1px solid transparent;\n transition: all 0.2s ease;\n }\n .btn-primary { background: var(--primary); color: #fff; border-color: rgba(240,246,252,0.1); }\n .btn-primary:hover { background: var(--primary-hover); }\n .btn-outline { background: transparent; color: var(--text-main); border-color: var(--card-border); }\n .btn-outline:hover { background: #21262d; border-color: #8b949e; }\n .btn-danger { background: rgba(248,81,73,0.1); color: var(--red); border-color: rgba(248,81,73,0.4); }\n .btn-danger:hover { background: var(--red); color: #fff; }\n .btn-sm { padding: 4px 10px; font-size: 12px; }\n\n .container { max-width: 1100px; margin: 32px auto; padding: 0 20px; }\n\n /* Hero banner */\n .hero {\n background: linear-gradient(180deg, #161b22 0%, #0d1117 100%);\n border: 1px solid var(--card-border);\n border-radius: 12px;\n padding: 48px 32px;\n text-align: center;\n margin-bottom: 32px;\n }\n .hero h1 { font-size: 32px; font-weight: 800; margin-bottom: 12px; color: #fff; }\n .hero p { font-size: 16px; color: var(--text-muted); max-width: 650px; margin: 0 auto 28px; }\n .auth-buttons { display: flex; justify-content: center; gap: 16px; flex-wrap: wrap; }\n .auth-btn {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 24px;\n border-radius: 8px;\n font-weight: 600;\n font-size: 15px;\n text-decoration: none;\n border: 1px solid transparent;\n transition: transform 0.15s ease;\n }\n .auth-btn:hover { transform: translateY(-2px); }\n .auth-btn-google { background: #ffffff; color: #1f2937; border-color: #d1d5db; }\n .auth-btn-github { background: #24292f; color: #ffffff; border-color: #30363d; }\n\n /* Tab nav */\n .tabs { display: flex; flex-wrap: wrap; gap: 8px; border-bottom: 1px solid var(--card-border); margin-bottom: 24px; }\n .tab-item {\n background: transparent;\n border: 0;\n font-family: inherit;\n text-align: left;\n padding: 12px 20px;\n cursor: pointer;\n font-weight: 600;\n font-size: 14px;\n color: var(--text-muted);\n border-bottom: 2px solid transparent;\n transition: color 0.15s ease;\n }\n .tab-item.active { color: var(--blue); border-bottom-color: var(--blue); }\n .tab-item:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }\n .tab-pane { display: none; }\n .tab-pane.active { display: block; }\n\n /* Device Cards */\n .card {\n background: var(--card-bg);\n border: 1px solid var(--card-border);\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 16px;\n }\n .device-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 16px;\n }\n .device-info { display: flex; align-items: center; flex: 1 1 260px; min-width: 0; gap: 16px; }\n .device-info > div:last-child { min-width: 0; }\n .device-icon {\n font-size: 28px;\n width: 48px;\n height: 48px;\n background: #21262d;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .device-name { font-size: 16px; font-weight: 700; margin-bottom: 4px; display: flex; align-items: center; flex-wrap: wrap; overflow-wrap: anywhere; gap: 8px; }\n .device-meta { font-size: 13px; color: var(--text-muted); font-family: var(--font-mono); overflow-wrap: anywhere; }\n .device-scope-note { font-size: 13px; color: var(--text-muted); margin: 0 0 16px; line-height: 1.5; }\n .device-scope-note strong { color: var(--text); }\n .device-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }\n\n /* Code block */\n .code-box {\n background: #090d13;\n border: 1px solid #30363d;\n border-radius: 6px;\n padding: 14px 18px;\n font-family: var(--font-mono);\n font-size: 13px;\n color: #7ee787;\n overflow-x: auto;\n margin: 12px 0;\n position: relative;\n }\n .code-box > span {\n display: block;\n padding-right: 52px;\n overflow-wrap: anywhere;\n }\n .card a { color: var(--blue); text-underline-offset: 2px; }\n .card a:hover { color: #b0d4ff; }\n .copy-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 4px 8px;\n font-size: 11px;\n background: #21262d;\n color: #c9d1d9;\n border: 1px solid #30363d;\n border-radius: 4px;\n cursor: pointer;\n }\n .copy-btn:hover { background: #30363d; color: #fff; }\n .copy-btn:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }\n\n /* Config guide cards */\n .grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: 20px; }\n @media (max-width: 480px) {\n .container { margin: 20px auto; padding: 0 12px; }\n .hero { padding: 28px 18px; }\n .hero h1 { font-size: 26px; }\n .device-actions { width: 100%; }\n .device-actions select { width: 100%; min-width: 0; }\n }\n\n /* Empty state */\n .empty-box {\n text-align: center;\n padding: 48px 16px;\n color: var(--text-muted);\n }\n";
2
2
  //# sourceMappingURL=web-dashboard-styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-styles.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,uhOA4M5B,CAAC"}
1
+ {"version":3,"file":"web-dashboard-styles.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard-styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,yrOA8M5B,CAAC"}
@@ -149,6 +149,8 @@ export const DASHBOARD_STYLES = `
149
149
  }
150
150
  .device-name { font-size: 16px; font-weight: 700; margin-bottom: 4px; display: flex; align-items: center; flex-wrap: wrap; overflow-wrap: anywhere; gap: 8px; }
151
151
  .device-meta { font-size: 13px; color: var(--text-muted); font-family: var(--font-mono); overflow-wrap: anywhere; }
152
+ .device-scope-note { font-size: 13px; color: var(--text-muted); margin: 0 0 16px; line-height: 1.5; }
153
+ .device-scope-note strong { color: var(--text); }
152
154
  .device-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
153
155
 
154
156
  /* Code block */
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard-styles.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4M/B,CAAC"}
1
+ {"version":3,"file":"web-dashboard-styles.js","sourceRoot":"","sources":["../../src/remote/web-dashboard-styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8M/B,CAAC"}
@@ -46,8 +46,6 @@ export declare class WebDashboardHandler {
46
46
  private handleDirectCallbackGoogle;
47
47
  private handleApiMe;
48
48
  private handleApiDevices;
49
- private quotePosixArg;
50
- private quotePowerShellArg;
51
49
  private handleApiEnrollDevice;
52
50
  /** Resolve devices only through the authenticated tenant's ownership boundary. */
53
51
  private findOwnedDashboardDevice;
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQ/F,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,qBAAqB,CAAC;IACpC,aAAa,EAAE,MAAM,UAAU,CAAC;IAChC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,CAAC;IAC7D,qBAAqB,EAAE,CACrB,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,iBAAiB,EAAE,CACjB,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,OAAO,KACjB,iBAAiB,CAAC;IACvB,WAAW,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,KAAK,iBAAiB,CAAC;IACzF,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;CAChF;AAED,qBAAa,mBAAmB;IAMlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAGhC;gBAEyB,IAAI,EAAE,wBAAwB;IAE3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAE3D,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,qBAAqB;IAY7B,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS;IAsB1E,mFAAmF;IAC7E,iBAAiB,CACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IASnB,OAAO,CAAC,kBAAkB;YAcZ,gBAAgB;YAqChB,wBAAwB;YA2BxB,2BAA2B;IAgCzC,OAAO,CAAC,yBAAyB;IAcjC,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,uBAAuB;IAwC/B,qEAAqE;IACrE,OAAO,CAAC,yBAAyB;IAsBjC,OAAO,CAAC,eAAe;YAgBT,0BAA0B;IAUxC,8EAA8E;IACxE,0BAA0B,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;YAQ/E,0BAA0B;IAWxC,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,kBAAkB;YAIZ,qBAAqB;IAuCnC,kFAAkF;IAClF,OAAO,CAAC,wBAAwB;YAmBlB,2BAA2B;IAYzC,gFAAgF;IAChF,OAAO,CAAC,qBAAqB;YAWf,qBAAqB;IAyBnC,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,kBAAkB;CAmC3B"}
1
+ {"version":3,"file":"web-dashboard.d.ts","sourceRoot":"","sources":["../../src/remote/web-dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAS/F,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,qBAAqB,CAAC;IACpC,aAAa,EAAE,MAAM,UAAU,CAAC;IAChC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,CAAC;IAC7D,qBAAqB,EAAE,CACrB,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,iBAAiB,EAAE,CACjB,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,OAAO,KACjB,iBAAiB,CAAC;IACvB,WAAW,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,KAAK,iBAAiB,CAAC;IACzF,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;CAChF;AAED,qBAAa,mBAAmB;IAMlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAGhC;gBAEyB,IAAI,EAAE,wBAAwB;IAE3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAE3D,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,qBAAqB;IAY7B,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS;IAsB1E,mFAAmF;IAC7E,iBAAiB,CACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IASnB,OAAO,CAAC,kBAAkB;YAcZ,gBAAgB;YAqChB,wBAAwB;YA2BxB,2BAA2B;IAgCzC,OAAO,CAAC,yBAAyB;IAcjC,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,uBAAuB;IAwC/B,qEAAqE;IACrE,OAAO,CAAC,yBAAyB;IAsBjC,OAAO,CAAC,eAAe;YAgBT,0BAA0B;IAUxC,8EAA8E;IACxE,0BAA0B,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;YAQ/E,0BAA0B;IAWxC,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,gBAAgB;YAmBV,qBAAqB;IA4BnC,kFAAkF;IAClF,OAAO,CAAC,wBAAwB;YAmBlB,2BAA2B;IAYzC,gFAAgF;IAChF,OAAO,CAAC,qBAAqB;YAWf,qBAAqB;IAyBnC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,kBAAkB;CAsC3B"}
@@ -7,6 +7,7 @@ import { jsonResponse } from "./util.js";
7
7
  import { renderDashboardHtml } from "./web-dashboard-html.js";
8
8
  import { serveAgentScript } from "./web-dashboard-static.js";
9
9
  import { createDashboardClientConfigs } from "./web-dashboard-client-config.js";
10
+ import { buildDashboardEnrollmentCommands } from "./dashboard-enrollment-commands.js";
10
11
  import { fetchGitHubUserDirect, fetchGoogleUserDirect } from "./web-dashboard-oauth-users.js";
11
12
  export class WebDashboardHandler {
12
13
  deps;
@@ -337,12 +338,6 @@ export class WebDashboardHandler {
337
338
  });
338
339
  jsonResponse(res, 200, { devices: enriched }, addNoStore());
339
340
  }
340
- quotePosixArg(value) {
341
- return "'" + value.replaceAll("'", String.raw `'\''`) + "'";
342
- }
343
- quotePowerShellArg(value) {
344
- return "'" + value.replaceAll("'", "''") + "'";
345
- }
346
341
  async handleApiEnrollDevice(req, res) {
347
342
  const principal = this.getPrincipalFromSession(req);
348
343
  if (!principal) {
@@ -357,20 +352,10 @@ export class WebDashboardHandler {
357
352
  if (typeof token !== "string" || !token) {
358
353
  throw safeError("INVALID_TOKEN", "Enrollment token was not generated", 500);
359
354
  }
360
- const posixInstallerUrl = `${serverUrl}/install-agent.sh`;
361
- const powerShellInstallerUrl = `${serverUrl}/install-agent.ps1`;
362
- // Propagate curl failures instead of reporting success from an empty bash pipeline.
363
- const curlScript = 'curl -fsSL "$1" | bash -s -- --server "$2" --token "$3" --alias "$4"';
364
- const curlCommand = `bash -o pipefail -c ${this.quotePosixArg(curlScript)} _ ${this.quotePosixArg(posixInstallerUrl)} ${this.quotePosixArg(serverUrl)} ${this.quotePosixArg(token)} ${this.quotePosixArg(alias)}`;
365
- const powershellCommand = `& ([scriptblock]::Create((Invoke-RestMethod -Uri ${this.quotePowerShellArg(powerShellInstallerUrl)}))) -Server ${this.quotePowerShellArg(serverUrl)} -Token ${this.quotePowerShellArg(token)} -Alias ${this.quotePowerShellArg(alias)}`;
366
- const npmCommand = `npx --yes --package ssh-mcp-pro@latest ssh-mcp-pro-agent enroll --server ${this.quotePosixArg(serverUrl)} --token ${this.quotePosixArg(token)} --alias ${this.quotePosixArg(alias)} && npx --yes --package ssh-mcp-pro@latest ssh-mcp-pro-agent run`;
355
+ const commands = buildDashboardEnrollmentCommands(serverUrl, token, alias);
367
356
  jsonResponse(res, 201, {
368
357
  ...tokenResult,
369
- commands: {
370
- linux: curlCommand,
371
- windows: powershellCommand,
372
- npm: npmCommand,
373
- },
358
+ commands,
374
359
  }, addNoStore());
375
360
  }
376
361
  /** Resolve devices only through the authenticated tenant's ownership boundary. */
@@ -433,7 +418,11 @@ export class WebDashboardHandler {
433
418
  jsonResponse(res, 401, { error: "Authentication required" }, addNoStore());
434
419
  return;
435
420
  }
436
- const events = this.deps.store.listAudit(principal.userId, undefined, 50);
421
+ const aliases = new Map(this.deps.store.listAgents(principal.userId).map((agent) => [agent.id, agent.alias]));
422
+ const events = this.deps.store.listAudit(principal.userId, undefined, 50).map((event) => ({
423
+ ...event,
424
+ agentAlias: event.agentId ? aliases.get(event.agentId) : undefined,
425
+ }));
437
426
  jsonResponse(res, 200, { events }, addNoStore());
438
427
  }
439
428
  handleApiClientConfigs(res) {
@@ -458,7 +447,10 @@ export class WebDashboardHandler {
458
447
  res.writeHead(200, {
459
448
  "Content-Type": "text/html; charset=utf-8",
460
449
  "Cache-Control": "no-store",
461
- "Content-Security-Policy": "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'",
450
+ // The signed-in dashboard sends a one-time enrollment token only to
451
+ // its local 127.0.0.1 listener on an ephemeral port. Restrict this
452
+ // exception to loopback IPv4 (not arbitrary LAN/HTTP origins).
453
+ "Content-Security-Policy": "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' http://127.0.0.1:*; frame-ancestors 'none'; base-uri 'self'",
462
454
  "X-Content-Type-Options": "nosniff",
463
455
  });
464
456
  res.end(renderDashboardHtml(initialUserBase64, mcpUrlJson, publicUrlJson));
@@ -1 +1 @@
1
- {"version":3,"file":"web-dashboard.js","sourceRoot":"","sources":["../../src/remote/web-dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-dashboard.js","sourceRoot":"","sources":["../../src/remote/web-dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type SSHAuthConfig } from "./session-auth.js";
2
+ import type { ConnectionParams } from "./types.js";
3
+ /** Build SSH authentication options while preserving existing strategy priority. */
4
+ /**
5
+ * Builds authentication configuration based on the auth strategy
6
+ */
7
+ export declare function buildSessionAuthConfig(params: ConnectionParams): Promise<SSHAuthConfig>;
8
+ //# sourceMappingURL=session-auth-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-auth-config.d.ts","sourceRoot":"","sources":["../src/session-auth-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,oFAAoF;AACpF;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmB7F"}
@@ -0,0 +1,67 @@
1
+ import { buildAgentAuth, discoverPrivateKeys, loadPrivateKeyFromPath, } from "./session-auth.js";
2
+ import { createAuthError } from "./errors.js";
3
+ import { logger } from "./logging.js";
4
+ /** Build SSH authentication options while preserving existing strategy priority. */
5
+ /**
6
+ * Builds authentication configuration based on the auth strategy
7
+ */
8
+ export async function buildSessionAuthConfig(params) {
9
+ const authStrategy = params.auth ?? "auto";
10
+ logger.debug("Building auth config", { strategy: authStrategy });
11
+ switch (authStrategy) {
12
+ case "password":
13
+ if (!params.password) {
14
+ throw createAuthError("Password required for password authentication");
15
+ }
16
+ return { password: params.password };
17
+ case "key":
18
+ return await buildKeyAuth(params);
19
+ case "agent":
20
+ return buildAgentAuth();
21
+ case "auto":
22
+ default:
23
+ return await buildAutoAuth(params);
24
+ }
25
+ }
26
+ /**
27
+ * Builds key-based authentication
28
+ */
29
+ async function buildKeyAuth(params) {
30
+ if (params.privateKey) {
31
+ logger.debug("Using inline private key");
32
+ return {
33
+ privateKey: params.privateKey,
34
+ ...(params.passphrase !== undefined ? { passphrase: params.passphrase } : {}),
35
+ };
36
+ }
37
+ if (params.privateKeyPath) {
38
+ logger.debug("Using private key from path", {
39
+ path: params.privateKeyPath,
40
+ });
41
+ return await loadPrivateKeyFromPath(params.privateKeyPath, params.passphrase);
42
+ }
43
+ return await discoverPrivateKeys(params.passphrase, logger);
44
+ }
45
+ /**
46
+ * Builds automatic authentication (tries password, then key, then agent)
47
+ */
48
+ async function buildAutoAuth(params) {
49
+ if (params.password) {
50
+ logger.debug("Auto auth: trying password");
51
+ return { password: params.password };
52
+ }
53
+ try {
54
+ logger.debug("Auto auth: trying key authentication");
55
+ return await buildKeyAuth(params);
56
+ }
57
+ catch {
58
+ logger.debug("Auto auth: key authentication failed, trying agent");
59
+ }
60
+ try {
61
+ return buildAgentAuth();
62
+ }
63
+ catch {
64
+ throw createAuthError("No suitable authentication method found", "Provide a password, private key, or ensure SSH agent is running");
65
+ }
66
+ }
67
+ //# sourceMappingURL=session-auth-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-auth-config.js","sourceRoot":"","sources":["../src/session-auth-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,sBAAsB,GAEvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,oFAAoF;AACpF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAwB;IACnE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;IAE3C,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAEjE,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,UAAU;YACb,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,eAAe,CAAC,+CAA+C,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvC,KAAK,KAAK;YACR,OAAO,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,OAAO;YACV,OAAO,cAAc,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,MAAwB;IAClD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC1C,IAAI,EAAE,MAAM,CAAC,cAAc;SAC5B,CAAC,CAAC;QACH,OAAO,MAAM,sBAAsB,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,MAAM,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,MAAwB;IACnD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACrD,OAAO,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC;QACH,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,eAAe,CACnB,yCAAyC,EACzC,iEAAiE,CAClE,CAAC;IACJ,CAAC;AACH,CAAC"}
package/dist/session.d.ts CHANGED
@@ -62,18 +62,6 @@ export declare class SessionManager {
62
62
  * Gets an active session by ID
63
63
  */
64
64
  getSession(sessionId: string): SSHSession | undefined;
65
- /**
66
- * Builds authentication configuration based on the auth strategy
67
- */
68
- private buildAuthConfig;
69
- /**
70
- * Builds key-based authentication
71
- */
72
- private buildKeyAuth;
73
- /**
74
- * Builds automatic authentication (tries password, then key, then agent)
75
- */
76
- private buildAutoAuth;
77
65
  private notifySessionClose;
78
66
  private resolveHostKeyPolicy;
79
67
  private verifyAcceptNewHostKey;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAYxC,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,MAAM,EAGP,MAAM,YAAY,CAAC;AAUpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA2CD,MAAM,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/E;;GAEG;AACH,qBAAa,cAAc;IA0BvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAMzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IA/B1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAC1D,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAElE;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IAErD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;gBAG5D,WAAW,SAAK,EAChB,YAAY,SAAU,EACtB,iBAAiB,SAAS,EACT,QAAQ,GAAE,YAAY,CAAC,UAAU,CAKjD,EACgB,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,YAAA;IAW/D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,cAAc,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAO1D;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAenD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IA2InE,OAAO,CAAC,4BAA4B;IAwBpC;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCvD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;YAkBvC,kBAAkB;IAgChC,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,kBAAkB;IA2C1B;;OAEG;YACW,qBAAqB;IA0BnC,0EAA0E;YAC5D,kBAAkB;IAahC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;;OAGG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKvC;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAarC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,iBAAiB,IAAI,WAAW,EAAE;IAkBlC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvC;;OAEG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgCxE;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAezD;;OAEG;IACG,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;CAsBlF"}