@lemoncat7/dsh-ssh 1.11.7 → 1.14.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 (97) hide show
  1. package/ARCHITECTURE.md +4 -0
  2. package/README.md +3 -0
  3. package/docs/releases/1.12.0.md +15 -0
  4. package/docs/releases/1.13.0.md +15 -0
  5. package/docs/releases/1.14.0.md +10 -0
  6. package/docs/third-party/react-bits.md +29 -0
  7. package/docs/usage.md +28 -1
  8. package/lib/api.d.ts.map +1 -1
  9. package/lib/api.js +22 -0
  10. package/lib/api.js.map +1 -1
  11. package/lib/client-api.d.ts +3 -0
  12. package/lib/client-api.d.ts.map +1 -1
  13. package/lib/client-api.js.map +1 -1
  14. package/lib/client.d.ts.map +1 -1
  15. package/lib/client.js +291 -185
  16. package/lib/client.js.map +4 -4
  17. package/lib/config-backup-panel.d.ts +2 -0
  18. package/lib/config-backup-panel.d.ts.map +1 -0
  19. package/lib/config-backup-panel.js +74 -0
  20. package/lib/config-backup-panel.js.map +1 -0
  21. package/lib/config-backup.d.ts +6 -0
  22. package/lib/config-backup.d.ts.map +1 -0
  23. package/lib/config-backup.js +142 -0
  24. package/lib/config-backup.js.map +1 -0
  25. package/lib/config.d.ts +2 -0
  26. package/lib/config.d.ts.map +1 -1
  27. package/lib/config.js +4 -0
  28. package/lib/config.js.map +1 -1
  29. package/lib/connection-policy.d.ts +6 -0
  30. package/lib/connection-policy.d.ts.map +1 -0
  31. package/lib/connection-policy.js +10 -0
  32. package/lib/connection-policy.js.map +1 -0
  33. package/lib/connector.d.ts +9 -1
  34. package/lib/connector.d.ts.map +1 -1
  35. package/lib/connector.js +39 -7
  36. package/lib/connector.js.map +1 -1
  37. package/lib/credentials.d.ts +2 -0
  38. package/lib/credentials.d.ts.map +1 -1
  39. package/lib/credentials.js +5 -0
  40. package/lib/credentials.js.map +1 -1
  41. package/lib/domain.d.ts +4 -0
  42. package/lib/domain.d.ts.map +1 -1
  43. package/lib/domain.js +3 -0
  44. package/lib/domain.js.map +1 -1
  45. package/lib/file-transfer-tools.d.ts +2 -1
  46. package/lib/file-transfer-tools.d.ts.map +1 -1
  47. package/lib/file-transfer-tools.js +8 -6
  48. package/lib/file-transfer-tools.js.map +1 -1
  49. package/lib/gist-sync.d.ts +3 -1
  50. package/lib/gist-sync.d.ts.map +1 -1
  51. package/lib/gist-sync.js +10 -3
  52. package/lib/gist-sync.js.map +1 -1
  53. package/lib/index.d.ts.map +1 -1
  54. package/lib/index.js +3 -0
  55. package/lib/index.js.map +1 -1
  56. package/lib/locales/messages.d.ts +448 -0
  57. package/lib/locales/messages.d.ts.map +1 -1
  58. package/lib/locales/messages.js +112 -0
  59. package/lib/locales/messages.js.map +1 -1
  60. package/lib/profile-editor.d.ts.map +1 -1
  61. package/lib/profile-editor.js +9 -2
  62. package/lib/profile-editor.js.map +1 -1
  63. package/lib/settings-pane.d.ts +2 -0
  64. package/lib/settings-pane.d.ts.map +1 -0
  65. package/lib/settings-pane.js +54 -0
  66. package/lib/settings-pane.js.map +1 -0
  67. package/lib/ssh-channel.d.ts +4 -0
  68. package/lib/ssh-channel.d.ts.map +1 -0
  69. package/lib/ssh-channel.js +37 -0
  70. package/lib/ssh-channel.js.map +1 -0
  71. package/lib/sync-panel.d.ts +4 -0
  72. package/lib/sync-panel.d.ts.map +1 -0
  73. package/lib/sync-panel.js +252 -0
  74. package/lib/sync-panel.js.map +1 -0
  75. package/lib/sync-stepper.d.ts +16 -0
  76. package/lib/sync-stepper.d.ts.map +1 -0
  77. package/lib/sync-stepper.js +42 -0
  78. package/lib/sync-stepper.js.map +1 -0
  79. package/lib/temporary-access.d.ts +2 -1
  80. package/lib/temporary-access.d.ts.map +1 -1
  81. package/lib/temporary-access.js +3 -3
  82. package/lib/temporary-access.js.map +1 -1
  83. package/lib/terminal-connection-pool.d.ts +16 -0
  84. package/lib/terminal-connection-pool.d.ts.map +1 -0
  85. package/lib/terminal-connection-pool.js +111 -0
  86. package/lib/terminal-connection-pool.js.map +1 -0
  87. package/lib/terminal.d.ts.map +1 -1
  88. package/lib/terminal.js +11 -10
  89. package/lib/terminal.js.map +1 -1
  90. package/lib/tool-entry.d.ts +11 -0
  91. package/lib/tool-entry.d.ts.map +1 -0
  92. package/lib/tool-entry.js +64 -0
  93. package/lib/tool-entry.js.map +1 -0
  94. package/lib/tools.d.ts.map +1 -1
  95. package/lib/tools.js +10 -12
  96. package/lib/tools.js.map +1 -1
  97. package/package.json +4 -2
@@ -0,0 +1,2 @@
1
+ export declare function ConfigBackupPanel(): JSX.Element;
2
+ //# sourceMappingURL=config-backup-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-backup-panel.d.ts","sourceRoot":"","sources":["../src/config-backup-panel.tsx"],"names":[],"mappings":"AAQA,wBAAgB,iBAAiB,IAAI,GAAG,CAAC,OAAO,CAY/C"}
@@ -0,0 +1,74 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { api } from './client-api.js';
4
+ import { Dialog, Field, PasswordInput, errorMessage } from './ui-components.js';
5
+ import { t } from './i18n.js';
6
+ import { useSshLocale } from './use-ssh-locale.js';
7
+ import { refreshWorkspace } from './use-workspace-refresh.js';
8
+ const countKeys = ['profiles', 'ftpProfiles', 'remoteProjects', 'credentialEntries', 'proxyEntries', 'commands', 'groupProxies'];
9
+ export function ConfigBackupPanel() {
10
+ useSshLocale();
11
+ const [mode, setMode] = useState();
12
+ const [notice, setNotice] = useState('');
13
+ return _jsxs("section", { className: "dsh-ssh-settings-section dsh-ssh-backup-section", "aria-labelledby": "ssh-backup-title", children: [_jsx("div", { className: "dsh-ssh-settings-section-heading", children: _jsxs("span", { children: [_jsx("strong", { id: "ssh-backup-title", children: t('backup.title') }), _jsx("small", { children: t('backup.description') })] }) }), _jsxs("div", { className: "dsh-ssh-backup-content", children: [_jsx("p", { children: t('backup.scope') }), _jsxs("div", { className: "dsh-ssh-backup-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: () => { setNotice(''); setMode('import'); }, children: t('backup.import') }), _jsx("button", { type: "button", className: "dsh-ssh-secondary-button", onClick: () => { setNotice(''); setMode('export'); }, children: t('backup.export') })] }), _jsx("small", { children: t('backup.excluded') }), notice && _jsx("p", { className: "dsh-ssh-inline-success", role: "status", children: notice })] }), mode && _jsx(BackupDialog, { mode: mode, onClose: () => setMode(undefined), onDone: () => { setMode(undefined); setNotice(mode === 'export' ? t('backup.exported') : t('backup.imported')); if (mode === 'import')
14
+ refreshWorkspace(); } })] });
15
+ }
16
+ function BackupDialog({ mode, onClose, onDone }) {
17
+ const [passphrase, setPassphrase] = useState('');
18
+ const [confirmation, setConfirmation] = useState('');
19
+ const [file, setFile] = useState();
20
+ const [preview, setPreview] = useState();
21
+ const [busy, setBusy] = useState(false);
22
+ const [error, setError] = useState('');
23
+ const exporting = mode === 'export';
24
+ const labels = { profiles: t('backup.profiles'), ftpProfiles: t('backup.ftpProfiles'), remoteProjects: t('backup.remoteProjects'), credentialEntries: t('backup.credentialEntries'), proxyEntries: t('backup.proxyEntries'), commands: t('backup.commands'), groupProxies: t('backup.groupProxies') };
25
+ const submit = async (event) => {
26
+ event.preventDefault();
27
+ if (busy)
28
+ return;
29
+ setError('');
30
+ setBusy(true);
31
+ try {
32
+ if (exporting) {
33
+ if (passphrase !== confirmation)
34
+ throw new Error(t('backup.mismatch'));
35
+ const { content } = await api('/config-backup/export', { method: 'POST', body: JSON.stringify({ passphrase }) });
36
+ const url = URL.createObjectURL(new Blob([content], { type: 'application/json' }));
37
+ const link = document.createElement('a');
38
+ link.href = url;
39
+ link.download = `dsh-ssh-backup-${new Date().toISOString().slice(0, 10)}.json`;
40
+ document.body.append(link);
41
+ link.click();
42
+ link.remove();
43
+ setTimeout(() => URL.revokeObjectURL(url), 60_000);
44
+ onDone();
45
+ }
46
+ else if (preview) {
47
+ await api('/config-backup/import', { method: 'POST', body: JSON.stringify({ content: preview.content, passphrase }) });
48
+ onDone();
49
+ }
50
+ else {
51
+ if (!file)
52
+ throw new Error(t('backup.chooseFile'));
53
+ if (file.size > 1_048_576)
54
+ throw new Error(t('backup.fileLimit'));
55
+ const content = await file.text();
56
+ const counts = await api('/config-backup/preview', { method: 'POST', body: JSON.stringify({ content, passphrase }) });
57
+ setPreview({ content, counts });
58
+ }
59
+ }
60
+ catch (reason) {
61
+ setError(errorMessage(reason));
62
+ }
63
+ finally {
64
+ setBusy(false);
65
+ }
66
+ };
67
+ return _jsx(Dialog, { title: exporting ? t('backup.export') : t('backup.import'), subtitle: exporting ? t('backup.passwordHint') : t('backup.importHint'), onClose: onClose, dismissible: !busy, children: _jsxs("form", { className: "dsh-ssh-form dsh-ssh-backup-form", onSubmit: event => { void submit(event); }, children: [!preview && _jsxs("fieldset", { disabled: busy, className: "dsh-ssh-backup-fields", children: [!exporting && _jsx(Field, { label: t('backup.file'), hint: t('backup.fileHint'), children: _jsx("input", { type: "file", accept: ".json,application/json", required: true, onChange: event => { setFile(event.target.files?.[0]); setError(''); } }) }), _jsx(Field, { label: t('backup.password'), hint: t('backup.passwordLength'), children: _jsx(PasswordInput, { required: true, minLength: 8, maxLength: 256, autoComplete: exporting ? 'new-password' : 'current-password', value: passphrase, onChange: event => setPassphrase(event.target.value) }) }), exporting && _jsx(Field, { label: t('backup.confirmPassword'), children: _jsx(PasswordInput, { required: true, minLength: 8, maxLength: 256, autoComplete: "new-password", value: confirmation, onChange: event => setConfirmation(event.target.value) }) })] }), preview && _jsxs("div", { children: [_jsx("h3", { children: t('backup.preview') }), _jsx("dl", { className: "dsh-ssh-backup-counts", children: countKeys.map(key => _jsxs("div", { children: [_jsx("dt", { children: labels[key] }), _jsx("dd", { children: preview.counts[key] ?? 0 })] }, key)) }), _jsx("p", { className: "dsh-ssh-backup-hint", children: t('backup.copyHint') })] }), error && _jsx("p", { className: "dsh-ssh-inline-error", role: "alert", children: error }), _jsxs("div", { className: "dsh-ssh-dialog-actions", children: [_jsx("button", { type: "button", className: "dsh-ssh-secondary-button", disabled: busy, onClick: () => { if (preview) {
68
+ setPreview(undefined);
69
+ setError('');
70
+ }
71
+ else
72
+ onClose(); }, children: preview ? t('backup.back') : t('client.cancel') }), _jsx("button", { type: "submit", className: "dsh-ssh-primary-button", disabled: busy, children: busy ? t('backup.processing') : exporting ? t('backup.download') : preview ? t('backup.confirmImport') : t('backup.read') })] })] }) });
73
+ }
74
+ //# sourceMappingURL=config-backup-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-backup-panel.js","sourceRoot":"","sources":["../src/config-backup-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { SshStore } from './store.js';
2
+ import type { SshCredentialVault } from './credentials.js';
3
+ export declare function exportConfiguration(store: SshStore, vault: SshCredentialVault, passphrase: unknown): Promise<string>;
4
+ export declare function previewConfiguration(content: unknown, passphrase: unknown): Promise<Record<string, number>>;
5
+ export declare function importConfiguration(store: SshStore, vault: SshCredentialVault, content: unknown, passphrase: unknown): Promise<void>;
6
+ //# sourceMappingURL=config-backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-backup.d.ts","sourceRoot":"","sources":["../src/config-backup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAkB1D,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAU1H;AAqBD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAIjH;AACD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D1I"}
@@ -0,0 +1,142 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes, randomUUID, scrypt } from 'node:crypto';
2
+ import { promisify } from 'node:util';
3
+ import { createEncryptedPortableSnapshot, decryptPortableSecrets, parsePortableSnapshot } from './gist-sync.js';
4
+ import { groupProxyId } from './group-proxy.js';
5
+ const derive = promisify(scrypt);
6
+ const FORMAT = 'dsh-ssh-backup';
7
+ const invalid = (message) => Object.assign(new Error(message), { status: 400 });
8
+ const LIMIT = 1_048_576;
9
+ const collections = ['profiles', 'ftpProfiles', 'remoteProjects', 'credentialEntries', 'proxyEntries', 'commands', 'groupProxies'];
10
+ const emptyTombstones = () => ({ profiles: {}, ftpProfiles: {}, remoteProjects: {}, credentialEntries: {}, proxyEntries: {}, commands: {}, groupProxies: {} });
11
+ function password(value) {
12
+ if (typeof value !== 'string' || value.length < 8 || value.length > 256)
13
+ throw invalid('备份密码需要 8–256 个字符');
14
+ return value;
15
+ }
16
+ function bounded(value) {
17
+ if (typeof value !== 'string' || Buffer.byteLength(value) > LIMIT)
18
+ throw invalid('备份文件不能超过 1 MB');
19
+ return value;
20
+ }
21
+ export async function exportConfiguration(store, vault, passphrase) {
22
+ const pass = password(passphrase), revision = store.workspaceRevision();
23
+ const snapshot = await createEncryptedPortableSnapshot(store.snapshot(), randomUUID(), emptyTombstones(), vault, pass);
24
+ if (revision !== store.workspaceRevision())
25
+ throw new Error('配置刚刚发生变化,请重新导出');
26
+ // Authenticate and encrypt the entire file, including addresses and configuration metadata.
27
+ const salt = randomBytes(16), iv = randomBytes(12);
28
+ const cipher = createCipheriv('aes-256-gcm', await derive(pass, salt, 32), iv);
29
+ const plaintext = bounded(JSON.stringify(snapshot));
30
+ const ciphertext = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
31
+ return bounded(JSON.stringify({ format: FORMAT, version: 1, salt: salt.toString('base64'), iv: iv.toString('base64'), tag: cipher.getAuthTag().toString('base64'), ciphertext: ciphertext.toString('base64') }));
32
+ }
33
+ async function decode(content, passphrase) {
34
+ const pass = password(passphrase);
35
+ let file;
36
+ try {
37
+ file = JSON.parse(bounded(content));
38
+ }
39
+ catch {
40
+ throw invalid('备份文件格式不正确,或文件超过 1 MB');
41
+ }
42
+ if (!file || file.format !== FORMAT || file.version !== 1)
43
+ throw invalid('不是受支持的 SSH 配置备份文件');
44
+ const bytes = (key, length) => {
45
+ if (typeof file[key] !== 'string')
46
+ throw invalid('备份文件格式不正确');
47
+ const value = Buffer.from(file[key], 'base64');
48
+ if (!value.length || value.toString('base64') !== file[key] || length !== undefined && value.length !== length)
49
+ throw invalid('备份文件格式不正确');
50
+ return value;
51
+ };
52
+ const salt = bytes('salt', 16), iv = bytes('iv', 12), tag = bytes('tag', 16), ciphertext = bytes('ciphertext');
53
+ let plaintext;
54
+ try {
55
+ const decipher = createDecipheriv('aes-256-gcm', await derive(pass, salt, 32), iv);
56
+ decipher.setAuthTag(tag);
57
+ plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8');
58
+ }
59
+ catch {
60
+ throw invalid('密码不正确,或备份文件已损坏');
61
+ }
62
+ return parsePortableSnapshot(plaintext);
63
+ }
64
+ export async function previewConfiguration(content, passphrase) {
65
+ const snapshot = await decode(content, passphrase);
66
+ await decryptPortableSecrets(snapshot, password(passphrase));
67
+ return Object.fromEntries(collections.map(name => [name, snapshot.collections[name]?.length ?? 0]));
68
+ }
69
+ export async function importConfiguration(store, vault, content, passphrase) {
70
+ const snapshot = await decode(content, passphrase);
71
+ const secrets = await decryptPortableSecrets(snapshot, password(passphrase));
72
+ const items = snapshot.collections;
73
+ // A fresh namespace preserves existing data and keeps every imported reference within its copy.
74
+ const maps = Object.fromEntries(collections.map(name => [name, new Map((items[name] ?? []).map(item => [item.id, `import-${randomUUID()}`]))]));
75
+ const ref = (name, id) => {
76
+ const result = maps[name].get(id);
77
+ if (!result)
78
+ throw invalid('备份中存在无效引用');
79
+ return result;
80
+ };
81
+ const groupNames = new Map();
82
+ const group = (name) => {
83
+ if (!groupNames.has(name))
84
+ groupNames.set(name, `${name.slice(0, 38)} (import ${randomBytes(8).toString('hex')})`);
85
+ return groupNames.get(name);
86
+ };
87
+ for (const profile of [...items.profiles, ...items.ftpProfiles]) {
88
+ if (profile.credentialId)
89
+ profile.credentialId = ref('credentialEntries', profile.credentialId);
90
+ if (profile.proxy.type === 'saved')
91
+ profile.proxy.proxyId = ref('proxyEntries', profile.proxy.proxyId);
92
+ if (profile.proxy.type === 'jump')
93
+ profile.proxy.profileIds = profile.proxy.profileIds.map(id => ref('profiles', id));
94
+ if (profile.group)
95
+ profile.group = group(profile.group);
96
+ }
97
+ for (const project of items.remoteProjects)
98
+ project.profileId = ref('profiles', project.profileId);
99
+ for (const entry of items.groupProxies ?? []) {
100
+ entry.name = group(entry.name);
101
+ maps.groupProxies.set(entry.id, groupProxyId(entry.name));
102
+ if (entry.proxyId)
103
+ entry.proxyId = ref('proxyEntries', entry.proxyId);
104
+ }
105
+ const scopes = {
106
+ 'ssh-profile': { name: 'profiles', write: vault.replace.bind(vault), remove: vault.delete.bind(vault) },
107
+ 'ftp-profile': { name: 'ftpProfiles', write: vault.replaceFtp.bind(vault), remove: vault.deleteFtp.bind(vault) },
108
+ 'vault-entry': { name: 'credentialEntries', write: vault.replaceEntry.bind(vault), remove: vault.deleteEntry.bind(vault) },
109
+ 'proxy-entry': { name: 'proxyEntries', write: vault.replaceProxyEntry.bind(vault), remove: vault.deleteProxyEntry.bind(vault) },
110
+ };
111
+ const cleanup = [];
112
+ try {
113
+ for (const record of snapshot.secrets) {
114
+ const scope = scopes[record.scope], id = ref(scope.name, record.id);
115
+ cleanup.push(() => scope.remove(id));
116
+ await scope.write(id, secrets[`${record.scope}:${record.id}`]);
117
+ }
118
+ const now = Date.now();
119
+ for (const name of collections)
120
+ for (const item of items[name] ?? []) {
121
+ item.id = ref(name, item.id);
122
+ item.createdAt = now;
123
+ item.updatedAt = now;
124
+ }
125
+ // Validate the remapped graph before publishing it to readers or automatic sync.
126
+ parsePortableSnapshot(JSON.stringify({ ...snapshot, secrets: [] }));
127
+ await store.update(state => {
128
+ state.profiles.push(...items.profiles);
129
+ state.ftpProfiles.push(...items.ftpProfiles);
130
+ state.remoteProjects.push(...items.remoteProjects);
131
+ state.credentialEntries.push(...items.credentialEntries);
132
+ state.proxyEntries.push(...items.proxyEntries);
133
+ state.commands = [...(state.commands ?? []), ...(items.commands ?? [])];
134
+ state.groupProxies = [...(state.groupProxies ?? []), ...(items.groupProxies ?? [])];
135
+ });
136
+ }
137
+ catch (error) {
138
+ await Promise.allSettled(cleanup.map(remove => remove()));
139
+ throw error;
140
+ }
141
+ }
142
+ //# sourceMappingURL=config-backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-backup.js","sourceRoot":"","sources":["../src/config-backup.ts"],"names":[],"mappings":"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"}
package/lib/config.d.ts CHANGED
@@ -4,6 +4,8 @@ export interface Config {
4
4
  exposeWeb: boolean;
5
5
  apiPrefix: string;
6
6
  defaultCommandTimeoutMs: number;
7
+ defaultConnectTimeoutMs?: number;
8
+ reuseTerminalConnections?: boolean;
7
9
  maxOutputChars: number;
8
10
  allowPublicBind: boolean;
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,OAAO,CAAA;CACzB;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAOhC,CAAA;AAEF,MAAM,WAAW,cAAe,SAAQ,MAAM;CAAG;AAEjD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAW5D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,OAAO,CAAA;CACzB;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAShC,CAAA;AAEF,MAAM,WAAW,cAAe,SAAQ,MAAM;CAAG;AAEjD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAa5D"}
package/lib/config.js CHANGED
@@ -4,6 +4,8 @@ export const Config = Schema.object({
4
4
  exposeWeb: Schema.boolean().default(true),
5
5
  apiPrefix: Schema.string().default('/ssh-local/v1'),
6
6
  defaultCommandTimeoutMs: Schema.number().min(1000).max(300_000).default(30_000),
7
+ defaultConnectTimeoutMs: Schema.number().min(1000).max(120_000).default(15_000),
8
+ reuseTerminalConnections: Schema.boolean().default(false),
7
9
  maxOutputChars: Schema.number().min(1000).max(1_000_000).default(32_000),
8
10
  allowPublicBind: Schema.boolean().default(false),
9
11
  });
@@ -16,6 +18,8 @@ export function resolveConfig(config) {
16
18
  exposeWeb: config.exposeWeb ?? true,
17
19
  apiPrefix,
18
20
  defaultCommandTimeoutMs: config.defaultCommandTimeoutMs ?? 30_000,
21
+ defaultConnectTimeoutMs: config.defaultConnectTimeoutMs ?? 15_000,
22
+ reuseTerminalConnections: config.reuseTerminalConnections ?? false,
19
23
  maxOutputChars: config.maxOutputChars ?? 32_000,
20
24
  allowPublicBind: config.allowPublicBind ?? false,
21
25
  };
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAW7C,MAAM,CAAC,MAAM,MAAM,GAAmB,MAAM,CAAC,MAAM,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;IACnD,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/E,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACxE,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACjD,CAAC,CAAA;AAIF,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC,CAAA;IACtE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC5E,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;QACnC,SAAS;QACT,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,IAAI,MAAM;QACjE,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM;QAC/C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK;KACjD,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAA;IACnE,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/E,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACtG,OAAO,UAAU,CAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAa7C,MAAM,CAAC,MAAM,MAAM,GAAmB,MAAM,CAAC,MAAM,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;IACnD,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/E,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/E,wBAAwB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACxE,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACjD,CAAC,CAAA;AAIF,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC,CAAA;IACtE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC5E,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;QACnC,SAAS;QACT,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,IAAI,MAAM;QACjE,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,IAAI,MAAM;QACjE,wBAAwB,EAAE,MAAM,CAAC,wBAAwB,IAAI,KAAK;QAClE,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM;QAC/C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK;KACjD,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAA;IACnE,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/E,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACtG,OAAO,UAAU,CAAA;AACnB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SshProfile, SshSettings } from './domain.js';
2
+ export declare const DEFAULT_CONNECT_TIMEOUT_MS = 15000;
3
+ /** Legacy custom values survive; the old implicit 15s default follows settings. */
4
+ export declare function usesDefaultConnectTimeout(profile: Pick<SshProfile, 'connectTimeoutMs' | 'useDefaultConnectTimeout'>): boolean;
5
+ export declare function connectionProfile(profile: SshProfile, settings: SshSettings): SshProfile;
6
+ //# sourceMappingURL=connection-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-policy.d.ts","sourceRoot":"","sources":["../src/connection-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE1D,eAAO,MAAM,0BAA0B,QAAS,CAAA;AAEhD,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,GAAG,0BAA0B,CAAC,GAAG,OAAO,CAE7H;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,GAAG,UAAU,CAGxF"}
@@ -0,0 +1,10 @@
1
+ export const DEFAULT_CONNECT_TIMEOUT_MS = 15_000;
2
+ /** Legacy custom values survive; the old implicit 15s default follows settings. */
3
+ export function usesDefaultConnectTimeout(profile) {
4
+ return profile.useDefaultConnectTimeout ?? profile.connectTimeoutMs === DEFAULT_CONNECT_TIMEOUT_MS;
5
+ }
6
+ export function connectionProfile(profile, settings) {
7
+ return { ...profile, connectTimeoutMs: usesDefaultConnectTimeout(profile)
8
+ ? settings.defaultConnectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS : profile.connectTimeoutMs };
9
+ }
10
+ //# sourceMappingURL=connection-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-policy.js","sourceRoot":"","sources":["../src/connection-policy.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAA;AAEhD,mFAAmF;AACnF,MAAM,UAAU,yBAAyB,CAAC,OAA0E;IAClH,OAAO,OAAO,CAAC,wBAAwB,IAAI,OAAO,CAAC,gBAAgB,KAAK,0BAA0B,CAAA;AACpG,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAmB,EAAE,QAAqB;IAC1E,OAAO,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,CAAC,OAAO,CAAC;YACvE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,IAAI,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAA;AACjG,CAAC"}
@@ -19,7 +19,13 @@ export declare class HostKeyRequiredError extends Error {
19
19
  export declare class SshConnector {
20
20
  private readonly store;
21
21
  private readonly credentials;
22
+ private readonly pool;
23
+ private poolIdentity;
24
+ private readonly unsubscribe;
22
25
  constructor(store: SshStore, credentials: SshCredentialVault);
26
+ private refreshPool;
27
+ connectTerminal(profileId: string, owner: string, signal?: AbortSignal): Promise<ManagedSshConnection>;
28
+ close(): void;
23
29
  connect(profileId: string, signal?: AbortSignal): Promise<ManagedSshConnection>;
24
30
  connectDraft(profile: SshProfile, secrets: SshCredentialPayload, signal?: AbortSignal): Promise<ManagedSshConnection>;
25
31
  private connectRecursive;
@@ -32,8 +38,10 @@ export declare class ManagedSshConnection {
32
38
  readonly client: SshClient;
33
39
  readonly profile: SshProfile;
34
40
  private readonly parent?;
41
+ private readonly release?;
35
42
  private closed;
36
- constructor(client: SshClient, profile: SshProfile, parent?: ManagedSshConnection | undefined);
43
+ constructor(client: SshClient, profile: SshProfile, parent?: ManagedSshConnection | undefined, release?: (() => void) | undefined);
44
+ lease(release: () => void): ManagedSshConnection;
37
45
  close(): void;
38
46
  }
39
47
  //# sourceMappingURL=connector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,MAAM,IAAI,SAAS,EAA0C,MAAM,MAAM,CAAA;AAG7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGrC,qBAAa,oBAAqB,SAAQ,KAAK;IAEjC,QAAQ,CAAC,SAAS,EAAE,MAAM;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IAD1I,QAAQ,CAAC,IAAI,uBAAsB;gBACd,SAAS,EAAE,MAAM,EAAW,WAAW,EAAE,MAAM,EAAW,mBAAmB,CAAC,EAAE,MAAM,YAAA,EAAW,WAAW,CAAC,EAAE,MAAM,YAAA;IAI1I,IAAI,OAAO;;;;;MAAwJ;CACpK;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAY,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAA7C,KAAK,EAAE,QAAQ,EAAmB,WAAW,EAAE,kBAAkB;IAExF,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAI/E,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAK7G,gBAAgB;YAUhB,eAAe;YA6Bf,YAAY;YAeZ,gBAAgB;YAgChB,eAAe;CAS9B;AAED,qBAAa,oBAAoB;IAEnB,QAAQ,CAAC,MAAM,EAAE,SAAS;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU;IAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAD9F,OAAO,CAAC,MAAM,CAAQ;gBACD,MAAM,EAAE,SAAS,EAAW,OAAO,EAAE,UAAU,EAAmB,MAAM,CAAC,EAAE,oBAAoB,YAAA;IACpH,KAAK,IAAI,IAAI;CAMd"}
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,MAAM,IAAI,SAAS,EAA0C,MAAM,MAAM,CAAA;AAG7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAMrC,qBAAa,oBAAqB,SAAQ,KAAK;IAEjC,QAAQ,CAAC,SAAS,EAAE,MAAM;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM;IAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IAD1I,QAAQ,CAAC,IAAI,uBAAsB;gBACd,SAAS,EAAE,MAAM,EAAW,WAAW,EAAE,MAAM,EAAW,mBAAmB,CAAC,EAAE,MAAM,YAAA,EAAW,WAAW,CAAC,EAAE,MAAM,YAAA;IAI1I,IAAI,OAAO;;;;;MAAwJ;CACpK;AAED,qBAAa,YAAY;IAIX,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAY,OAAO,CAAC,QAAQ,CAAC,WAAW;IAH1E,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;IACpD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAY;gBACX,KAAK,EAAE,QAAQ,EAAmB,WAAW,EAAE,kBAAkB;IAI9F,OAAO,CAAC,WAAW;IAKb,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAM5G,KAAK,IAAI,IAAI;IAEP,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAI/E,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAM7G,gBAAgB;YAUhB,eAAe;YA6Bf,YAAY;YAeZ,gBAAgB;YAgChB,eAAe;CAU9B;AAED,qBAAa,oBAAoB;IAEnB,QAAQ,CAAC,MAAM,EAAE,SAAS;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU;IAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAAwB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAD/I,OAAO,CAAC,MAAM,CAAQ;gBACD,MAAM,EAAE,SAAS,EAAW,OAAO,EAAE,UAAU,EAAmB,MAAM,CAAC,EAAE,oBAAoB,YAAA,EAAmB,OAAO,CAAC,GAAE,MAAM,IAAI,aAAA;IAC3J,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,oBAAoB;IAChD,KAAK,IAAI,IAAI;CAOd"}
package/lib/connector.js CHANGED
@@ -1,6 +1,9 @@
1
1
  import ssh2 from 'ssh2';
2
2
  import { connectHttpProxy, connectSocks5Proxy } from './proxy.js';
3
3
  import { effectiveHostProxy } from './group-proxy.js';
4
+ import { connectionProfile } from './connection-policy.js';
5
+ import { TerminalConnectionPool } from './terminal-connection-pool.js';
6
+ import { openSshChannel } from './ssh-channel.js';
4
7
  export class HostKeyRequiredError extends Error {
5
8
  profileId;
6
9
  fingerprint;
@@ -20,14 +23,33 @@ export class HostKeyRequiredError extends Error {
20
23
  export class SshConnector {
21
24
  store;
22
25
  credentials;
26
+ pool = new TerminalConnectionPool();
27
+ poolIdentity = '';
28
+ unsubscribe;
23
29
  constructor(store, credentials) {
24
30
  this.store = store;
25
31
  this.credentials = credentials;
32
+ this.unsubscribe = store.subscribe?.(() => this.refreshPool()) ?? (() => { });
26
33
  }
34
+ refreshPool() {
35
+ const identity = JSON.stringify([this.store.profiles(), this.store.credentialEntries(), this.store.proxyEntries(), this.store.groupProxies(), this.store.settings().defaultConnectTimeoutMs, this.store.settings().reuseTerminalConnections, this.credentials.revision()]);
36
+ if (identity !== this.poolIdentity) {
37
+ this.pool.drain();
38
+ this.poolIdentity = identity;
39
+ }
40
+ }
41
+ async connectTerminal(profileId, owner, signal) {
42
+ this.refreshPool();
43
+ if (this.store.settings().reuseTerminalConnections !== true)
44
+ return this.connect(profileId, signal);
45
+ return this.pool.acquire(JSON.stringify([owner, profileId]), sharedSignal => this.connect(profileId, sharedSignal), signal);
46
+ }
47
+ close() { this.unsubscribe(); this.pool.close(); }
27
48
  async connect(profileId, signal) {
28
49
  return this.connectRecursive(profileId, new Set(), signal);
29
50
  }
30
51
  async connectDraft(profile, secrets, signal) {
52
+ profile = connectionProfile(profile, this.store.settings());
31
53
  const identity = profile.credentialId === undefined ? { profile, secrets } : await this.resolveIdentity(profile);
32
54
  return this.connectResolved(identity.profile, identity.secrets, new Set([profile.id]), signal);
33
55
  }
@@ -62,7 +84,7 @@ export class SshConnector {
62
84
  }
63
85
  else if (profile.proxy.type === 'jump') {
64
86
  parent = await this.connectJumpChain(profile.proxy.profileIds, chain, signal);
65
- socket = await forwardOut(parent.client, profile.host, profile.port);
87
+ socket = await forwardOut(parent.client, profile.host, profile.port, profile.connectTimeoutMs, signal);
66
88
  }
67
89
  const client = await connectClient(profile, secrets, socket, signal);
68
90
  return new ManagedSshConnection(client, profile, parent);
@@ -102,7 +124,7 @@ export class SshConnector {
102
124
  if (storedProfile === undefined)
103
125
  throw Object.assign(new Error(`SSH profile ${profileId} was not found`), { status: 404 });
104
126
  const { profile, secrets } = await this.resolveIdentity(storedProfile);
105
- const socket = await forwardOut(parent.client, profile.host, profile.port);
127
+ const socket = await forwardOut(parent.client, profile.host, profile.port, profile.connectTimeoutMs, signal);
106
128
  try {
107
129
  const client = await connectClient(profile, secrets, socket, signal);
108
130
  parent = new ManagedSshConnection(client, profile, parent);
@@ -124,6 +146,7 @@ export class SshConnector {
124
146
  }
125
147
  }
126
148
  async resolveIdentity(profile) {
149
+ profile = connectionProfile(profile, this.store.settings());
127
150
  if (profile.credentialId === undefined)
128
151
  return { profile, secrets: await this.credentials.read(profile.id) };
129
152
  const entry = this.store.credentialEntry(profile.credentialId);
@@ -139,16 +162,23 @@ export class ManagedSshConnection {
139
162
  client;
140
163
  profile;
141
164
  parent;
165
+ release;
142
166
  closed = false;
143
- constructor(client, profile, parent) {
167
+ constructor(client, profile, parent, release) {
144
168
  this.client = client;
145
169
  this.profile = profile;
146
170
  this.parent = parent;
171
+ this.release = release;
147
172
  }
173
+ lease(release) { return new ManagedSshConnection(this.client, this.profile, undefined, release); }
148
174
  close() {
149
175
  if (this.closed)
150
176
  return;
151
177
  this.closed = true;
178
+ if (this.release) {
179
+ this.release();
180
+ return;
181
+ }
152
182
  this.client.end();
153
183
  this.parent?.close();
154
184
  }
@@ -202,6 +232,10 @@ async function connectClient(profile, secrets, socket, signal) {
202
232
  cleanup();
203
233
  if (observedFingerprint !== undefined && observedFingerprint !== profile.hostFingerprint)
204
234
  reject(new HostKeyRequiredError(profile.id, observedFingerprint, profile.hostFingerprint, profile.name));
235
+ else if (error.level === 'client-timeout')
236
+ reject(Object.assign(new Error(observedFingerprint
237
+ ? `SSH host fingerprint verified, but authentication did not finish within ${profile.connectTimeoutMs / 1000}s. Increase the SSH connection timeout in settings or this host; check server DNS/PAM authentication delays.`
238
+ : `SSH handshake did not finish within ${profile.connectTimeoutMs / 1000}s. Check the host/proxy route or increase the SSH connection timeout.`), { code: 'SSH_CONNECT_TIMEOUT', phase: observedFingerprint ? 'authentication' : 'handshake' }));
205
239
  else
206
240
  reject(error);
207
241
  client.destroy();
@@ -233,10 +267,8 @@ async function connectClient(profile, secrets, socket, signal) {
233
267
  }
234
268
  });
235
269
  }
236
- function forwardOut(client, host, port) {
237
- return new Promise((resolve, reject) => {
238
- client.forwardOut('127.0.0.1', 0, host, port, (error, channel) => error ? reject(error) : resolve(channel));
239
- });
270
+ function forwardOut(client, host, port, timeoutMs, signal) {
271
+ return openSshChannel(client, timeoutMs, done => client.forwardOut('127.0.0.1', 0, host, port, done), signal);
240
272
  }
241
273
  function timingSafeEqualText(left, right) {
242
274
  if (left.length !== right.length)
@@ -1 +1 @@
1
- {"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,IAA0E,MAAM,MAAM,CAAA;AAE7F,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAIjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAExB;IAA4B;IAA8B;IAAuC;IAD7G,IAAI,GAAG,mBAAmB,CAAA;IACnC,YAAqB,SAAiB,EAAW,WAAmB,EAAW,mBAA4B,EAAW,WAAoB;QACxI,KAAK,CAAC,YAAY,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,QAAQ,WAAW,IAAI,SAAS,+EAA+E,WAAW,EAAE,CAAC,CAAA;QADrL,cAAS,GAAT,SAAS,CAAQ;QAAW,gBAAW,GAAX,WAAW,CAAQ;QAAW,wBAAmB,GAAnB,mBAAmB,CAAS;QAAW,gBAAW,GAAX,WAAW,CAAS;QAExI,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAA,CAAC,CAAC;CACpK;AAED,MAAM,OAAO,YAAY;IACM;IAAkC;IAA/D,YAA6B,KAAe,EAAmB,WAA+B;QAAjE,UAAK,GAAL,KAAK,CAAU;QAAmB,gBAAW,GAAX,WAAW,CAAoB;IAAG,CAAC;IAElG,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,MAAoB;QACnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;IAC5D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAmB,EAAE,OAA6B,EAAE,MAAoB;QACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAChH,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAChG,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,SAAiB,EAAE,KAAkB,EAAE,MAAoB;QACxF,MAAM,EAAE,cAAc,EAAE,CAAA;QACxB,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAA;QAC1F,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACnD,IAAI,aAAa,KAAK,SAAS;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,SAAS,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC1H,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;QACtE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAClE,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,OAAmB,EAAE,OAA6B,EAAE,KAAkB,EAAE,MAAoB;QACxH,MAAM,EAAE,cAAc,EAAE,CAAA;QACxB,IAAI,MAA0B,CAAA;QAC9B,IAAI,MAAwC,CAAA;QAC5C,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC/D,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzC,MAAM,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;oBAChH,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE;oBACjG,GAAG,aAAa,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE;iBACpF,EAAE,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;YACtC,CAAC;iBAAM,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClD,MAAM,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;oBAClH,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE;oBACjG,GAAG,aAAa,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE;iBACpF,EAAE,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;YACtC,CAAC;iBAAM,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzC,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;gBAC7E,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;YACtE,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;YACpE,OAAO,IAAI,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,OAAO,EAAE,CAAA;YACjB,MAAM,EAAE,KAAK,EAAE,CAAA;YACf,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAmB,EAAE,OAA6B;QAI3E,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,CAAA;QACzI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC1H,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACpE,OAAO;YACL,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE;YAC5I,GAAG,CAAC,YAAY,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,aAAa,EAAE,CAAC;SAC9F,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,UAAoB,EAAE,KAAkB,EAAE,MAAoB;QAC3F,IAAI,MAAwC,CAAA;QAC5C,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;QAC5B,IAAI,CAAC;YACH,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,EAAE,cAAc,EAAE,CAAA;gBACxB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAA;gBAC5F,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;gBAClE,CAAC;qBAAM,CAAC;oBACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;oBACnD,IAAI,aAAa,KAAK,SAAS;wBAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,SAAS,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;oBAC1H,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;oBACtE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;oBAC1E,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;wBACpE,MAAM,GAAG,IAAI,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;oBAC5D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,OAAO,EAAE,CAAA;wBAChB,MAAM,KAAK,CAAA;oBACb,CAAC;gBACH,CAAC;gBACD,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC3C,CAAC;YACD,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;YAC1E,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,KAAK,EAAE,CAAA;YACf,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,OAAmB;QAC/C,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAA;QAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QAC9D,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,YAAY,gBAAgB,CAAC,CAAA;QACtG,OAAO;YACL,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;YAC3E,OAAO,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;SACpD,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,oBAAoB;IAEV;IAA4B;IAAsC;IAD/E,MAAM,GAAG,KAAK,CAAA;IACtB,YAAqB,MAAiB,EAAW,OAAmB,EAAmB,MAA6B;QAA/F,WAAM,GAAN,MAAM,CAAW;QAAW,YAAO,GAAP,OAAO,CAAY;QAAmB,WAAM,GAAN,MAAM,CAAuB;IAAG,CAAC;IACxH,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;QACjB,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAA;IACtB,CAAC;CACF;AAED,KAAK,UAAU,aAAa,CAC1B,OAAmB,EACnB,OAAwD,EACxD,MAA0B,EAC1B,MAAoB;IAEpB,MAAM,MAAM,GAAkB;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,gBAAgB;QACtC,iBAAiB,EAAE,OAAO,CAAC,mBAAmB;QAC9C,iBAAiB,EAAE,CAAC;QACpB,QAAQ,EAAE,QAAQ;QAClB,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;KAChD,CAAA;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAA;QACvH,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IACpC,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAA;QAC5H,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;QACtC,IAAI,OAAO,CAAC,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;IAChE,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;QACvC,IAAI,CAAC,KAAK;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAA;QAChI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;IACtB,CAAC;IACD,IAAI,mBAAuC,CAAA;IAC3C,MAAM,CAAC,YAAY,GAAG,CAAC,WAAmB,EAAE,EAAE;QAC5C,mBAAmB,GAAG,UAAU,WAAW,EAAE,CAAA;QAC7C,OAAO,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,mBAAmB,CAAC,OAAO,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAA;IACnH,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAA;IAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAA;QACjI,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAC3C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC5B,CAAC,CAAA;QACD,MAAM,YAAY,GAAG,CAAC,KAAY,EAAQ,EAAE;YAC1C,IAAI,OAAO;gBAAE,OAAM;YACnB,OAAO,GAAG,IAAI,CAAA;YACd,OAAO,EAAE,CAAA;YACT,IAAI,mBAAmB,KAAK,SAAS,IAAI,mBAAmB,KAAK,OAAO,CAAC,eAAe;gBAAE,MAAM,CAAC,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;;gBAC7L,MAAM,CAAC,KAAK,CAAC,CAAA;YAClB,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC,CAAA;QACD,MAAM,KAAK,GAAG,GAAS,EAAE,GAAG,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC,CAAA;QAC7F,MAAM,MAAM,GAAG,CAAC,KAAY,EAAQ,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,YAAY,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAA;YAC3E,OAAO,EAAE,CAAA;YACT,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC7B,CAAC,CAAA;QACD,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC3B,qEAAqE;QACrE,4EAA4E;QAC5E,yFAAyF;QACzF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC5B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;YAAC,OAAM;QAAC,CAAC;QACxC,IAAI,CAAC;YAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,YAAY,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAAC,CAAC;IAC1H,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAiB,EAAE,IAAY,EAAE,IAAY;IAC/D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IAC7G,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,KAAa;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAC9C,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;QAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACjH,OAAO,QAAQ,KAAK,CAAC,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import { type CredentialProvider } from '@deepseek-ai/dsh-credentials';
2
2
  import { type SshCredentialPayload } from './domain.js';
3
3
  export declare class SshCredentialVault {
4
4
  private readonly provider;
5
+ private generation;
6
+ revision(): number;
5
7
  constructor(provider: CredentialProvider);
6
8
  describe(profileId: string): Promise<{
7
9
  configured: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,kBAAkB,EAAoB,MAAM,8BAA8B,CAAA;AACvG,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAOvE,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,kBAAkB;IAEnD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAIlG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAItD,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAIrG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIzD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAIrG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIzD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAI1G,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAI9D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5E,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9E,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIxC,cAAc;YAMd,UAAU;YAOV,WAAW;YASX,aAAa;YAIb,YAAY;CAG3B"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,kBAAkB,EAAoB,MAAM,8BAA8B,CAAA;AACvG,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAOvE,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,UAAU,CAAI;IACtB,QAAQ,IAAI,MAAM;gBACW,QAAQ,EAAE,kBAAkB;IAEnD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAIlG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAItD,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAIrG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIzD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAIrG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIzD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAI1G,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAI9D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5E,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9E,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIxC,cAAc;YAMd,UAAU;YAOV,WAAW;YAUX,aAAa;YAKb,YAAY;CAI3B"}
@@ -6,6 +6,8 @@ const VAULT_SCOPE = 'dsh-ssh-vault';
6
6
  const PROXY_SCOPE = 'dsh-ssh-proxy';
7
7
  export class SshCredentialVault {
8
8
  provider;
9
+ generation = 0;
10
+ revision() { return this.generation; }
9
11
  constructor(provider) {
10
12
  this.provider = provider;
11
13
  }
@@ -90,12 +92,15 @@ export class SshCredentialVault {
90
92
  const previous = current === undefined ? {} : parsePayload(current.payload);
91
93
  return { kind: 'grant', payload: compactSecrets({ ...previous, ...patch }) };
92
94
  });
95
+ this.generation++;
93
96
  }
94
97
  async replaceScoped(scope, id, value) {
95
98
  await this.provider.modifyRecord(credentialKey(scope, id), async () => ({ kind: 'grant', payload: compactSecrets(value) }));
99
+ this.generation++;
96
100
  }
97
101
  async deleteScoped(scope, id) {
98
102
  await this.provider.deleteRecord(credentialKey(scope, id));
103
+ this.generation++;
99
104
  }
100
105
  }
101
106
  function parsePayload(value) {