@jalsoedesign/filezilla-cli 1.0.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.
@@ -0,0 +1,427 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { getSiteManager, LogonType, ServerProtocol } from '@jalsoedesign/filezilla-core';
5
+ import { FtpConnectorFactory } from '@jalsoedesign/filezilla-connector-ftp';
6
+ import { SftpConnectorFactory } from '@jalsoedesign/filezilla-connector-sftp';
7
+ import { AuthError, ConnectorError, CredentialProviderError, DirectoryAccessError, HostTrustError, NotFoundError, NotSupportedError, OperationAbortedError, OperationTimeoutError, PermissionError, ResourceLimitError, UnsupportedProtocolError, } from '@jalsoedesign/filezilla-connector-abstract';
8
+ const outcomes = {
9
+ ok: { exitCode: 0, message: 'Connection check completed.' },
10
+ 'invalid-options': { exitCode: 2, message: 'Invalid check options. Run filezilla-js check --help.' },
11
+ 'trust-rejected': { exitCode: 3, message: 'Server identity was not accepted. Verify the configured trust information.' },
12
+ 'authentication-failed': { exitCode: 4, message: 'The server rejected authentication.' },
13
+ 'unsupported-protocol': { exitCode: 5, message: 'The saved protocol or authentication mode is not supported by this check.' },
14
+ 'connection-failed': { exitCode: 6, message: 'The connection could not be established or was interrupted.' },
15
+ 'directory-failed': { exitCode: 7, message: 'The requested directory could not be accessed.' },
16
+ 'credentials-required': { exitCode: 8, message: 'Credentials are unavailable. Supply a saved credential or --password-stdin.' },
17
+ 'invalid-site': { exitCode: 9, message: 'The Site Manager file or exact site selection is invalid or unavailable.' },
18
+ 'cleanup-failed': { exitCode: 10, message: 'The check completed but connection cleanup did not finish successfully.' },
19
+ 'listing-limit': { exitCode: 11, message: 'The optional listing exceeded its configured entry limit.' },
20
+ cancelled: { exitCode: 130, message: 'Connection check cancelled.' },
21
+ timeout: { exitCode: 124, message: 'Connection check exceeded its deadline.' },
22
+ };
23
+ function result(status, stage, connected = false, directoryChecked = false, listing) {
24
+ return Object.freeze({
25
+ schemaVersion: 1,
26
+ ok: status === 'ok',
27
+ status,
28
+ ...outcomes[status],
29
+ stage,
30
+ connected,
31
+ directoryChecked,
32
+ cleanup: 'not-required',
33
+ ...(listing === undefined ? {} : { listing: Object.freeze(listing) }),
34
+ });
35
+ }
36
+ function interruption(signal) {
37
+ return signal.reason instanceof OperationTimeoutError || signal.reason?.name === 'TimeoutError' ?
38
+ new OperationTimeoutError() :
39
+ new OperationAbortedError();
40
+ }
41
+ function abortable(operation, signal) {
42
+ return new Promise((resolve, reject) => {
43
+ const abort = () => reject(interruption(signal));
44
+ signal.addEventListener('abort', abort, { once: true });
45
+ operation.then(resolve, reject).finally(() => signal.removeEventListener('abort', abort));
46
+ if (signal.aborted) {
47
+ abort();
48
+ }
49
+ });
50
+ }
51
+ function safeStage(error, fallback) {
52
+ const stages = [
53
+ 'resolve',
54
+ 'connect',
55
+ 'trust',
56
+ 'authenticate',
57
+ 'directory',
58
+ 'credentials',
59
+ 'ready',
60
+ ];
61
+ return error instanceof ConnectorError && error.stage && stages.includes(error.stage) ? error.stage : fallback;
62
+ }
63
+ function failure(error, stage, connected) {
64
+ const actualStage = safeStage(error, stage);
65
+ if (error instanceof OperationTimeoutError) {
66
+ return result('timeout', actualStage, connected);
67
+ }
68
+ if (error instanceof OperationAbortedError) {
69
+ return result('cancelled', actualStage, connected);
70
+ }
71
+ if (error instanceof HostTrustError) {
72
+ return result('trust-rejected', 'trust', connected);
73
+ }
74
+ if (error instanceof CredentialProviderError) {
75
+ return result('credentials-required', 'credentials', connected);
76
+ }
77
+ if (error instanceof AuthError) {
78
+ return result('authentication-failed', 'authenticate', connected);
79
+ }
80
+ if (error instanceof UnsupportedProtocolError || error instanceof NotSupportedError) {
81
+ return result('unsupported-protocol', actualStage, connected);
82
+ }
83
+ if (error instanceof ResourceLimitError) {
84
+ return result('listing-limit', 'list', connected);
85
+ }
86
+ if (stage === 'directory' ||
87
+ stage === 'list' ||
88
+ error instanceof DirectoryAccessError ||
89
+ error instanceof PermissionError ||
90
+ error instanceof NotFoundError) {
91
+ return result('directory-failed', actualStage, connected);
92
+ }
93
+ return result('connection-failed', actualStage, connected);
94
+ }
95
+ function validateOptions(options) {
96
+ const timeoutMs = options.timeoutMs ?? 30000;
97
+ const maxEntries = options.maxEntries ?? 1000;
98
+ if (!Number.isSafeInteger(timeoutMs) ||
99
+ timeoutMs < 1 ||
100
+ timeoutMs > 2147483647 ||
101
+ !Number.isSafeInteger(maxEntries) ||
102
+ maxEntries < 1 ||
103
+ maxEntries > 100000 ||
104
+ (options.directory !== undefined &&
105
+ (!options.directory ||
106
+ /[\0\r\n]/.test(options.directory)))) {
107
+ throw new TypeError('Invalid connection check options.');
108
+ }
109
+ }
110
+ function validateSiteSelection(server, options) {
111
+ const protocol = server.propertiesRaw.protocol;
112
+ const logonType = server.propertiesRaw.logonType;
113
+ if (![
114
+ ServerProtocol.SFTP,
115
+ ServerProtocol.FTP,
116
+ ServerProtocol.FTPS,
117
+ ServerProtocol.FTPES,
118
+ ServerProtocol.INSECURE_FTP,
119
+ ].includes(protocol)) {
120
+ throw new UnsupportedProtocolError('Unsupported saved protocol.');
121
+ }
122
+ if (![LogonType.anonymous, LogonType.normal, LogonType.ask, LogonType.key].includes(logonType)) {
123
+ throw new NotSupportedError('Unsupported saved authentication mode.');
124
+ }
125
+ if (protocol === ServerProtocol.SFTP && !/^SHA256:[A-Za-z0-9+/]{43}=?$/.test(options.hostKeySha256 ?? '')) {
126
+ throw new HostTrustError();
127
+ }
128
+ if (protocol !== ServerProtocol.SFTP && options.hostKeySha256 !== undefined) {
129
+ throw new TypeError('SSH host-key pinning is only applicable to SFTP.');
130
+ }
131
+ }
132
+ function createConnector(server, options) {
133
+ validateSiteSelection(server, options);
134
+ const protocol = server.propertiesRaw.protocol;
135
+ const logonType = server.propertiesRaw.logonType;
136
+ const password = options.password ?? server.propertiesRaw.password;
137
+ const operationOptions = { autoReconnect: false, maxTransientRetries: 0, timeoutMs: options.timeoutMs ?? 30000 };
138
+ if (logonType !== LogonType.anonymous && logonType !== LogonType.key && password === undefined) {
139
+ throw new CredentialProviderError();
140
+ }
141
+ if (protocol === ServerProtocol.SFTP) {
142
+ const expected = options.hostKeySha256.replace(/=$/, '');
143
+ return SftpConnectorFactory.fromServer(server, {
144
+ ...operationOptions,
145
+ password,
146
+ passphrase: password,
147
+ requireTrustPolicy: true,
148
+ hasTrustPolicy: challenge => challenge.fingerprint === expected,
149
+ acceptTrustPolicy: () => false,
150
+ });
151
+ }
152
+ return FtpConnectorFactory.fromServer(server, {
153
+ ...operationOptions,
154
+ ...(password === undefined ? {} : { credentialProvider: () => ({ type: 'password', password }) }),
155
+ });
156
+ }
157
+ /** Ordinary read-only connector operations with fixed, credential-free result messages. */
158
+ export async function checkConnection(server, options = {}) {
159
+ try {
160
+ validateOptions(options);
161
+ }
162
+ catch {
163
+ return result('invalid-options', 'input');
164
+ }
165
+ const deadline = new AbortController();
166
+ const timer = setTimeout(() => deadline.abort(new OperationTimeoutError()), options.timeoutMs ?? 30000);
167
+ const signal = options.abortSignal ? AbortSignal.any([deadline.signal, options.abortSignal]) : deadline.signal;
168
+ let connector;
169
+ let connected = false;
170
+ let directoryChecked = false;
171
+ let stage = 'input';
172
+ let outcome = result('connection-failed', 'input');
173
+ try {
174
+ if (signal.aborted) {
175
+ throw interruption(signal);
176
+ }
177
+ connector = createConnector(server, options);
178
+ stage = 'connect';
179
+ const operationOptions = {
180
+ timeoutMs: options.timeoutMs ?? 30000,
181
+ abortSignal: signal,
182
+ autoReconnect: false,
183
+ maxTransientRetries: 0,
184
+ };
185
+ await abortable(connector.connect(operationOptions), signal);
186
+ connected = true;
187
+ if (options.directory !== undefined) {
188
+ stage = 'directory';
189
+ const entry = await abortable(connector.stat(options.directory, operationOptions), signal);
190
+ if (entry.type !== 'directory') {
191
+ throw new DirectoryAccessError();
192
+ }
193
+ directoryChecked = true;
194
+ }
195
+ let listing;
196
+ if (options.includeListing) {
197
+ stage = 'list';
198
+ listing = [];
199
+ const iterator = connector.list(options.directory ?? '.', { ...operationOptions, deep: false })[Symbol.asyncIterator]();
200
+ try {
201
+ while (true) {
202
+ const next = await abortable(iterator.next(), signal);
203
+ if (next.done) {
204
+ break;
205
+ }
206
+ if (listing.length >= (options.maxEntries ?? 1000)) {
207
+ throw new ResourceLimitError('The optional listing exceeded its entry limit.');
208
+ }
209
+ listing.push(Object.freeze({
210
+ path: next.value.path,
211
+ type: next.value.type,
212
+ ...(next.value.type === 'file' ? { size: next.value.size } : {}),
213
+ }));
214
+ }
215
+ }
216
+ finally {
217
+ // Do not let a blocked iterator prevent the connection's forced cleanup below.
218
+ void iterator.return?.(undefined).catch(() => undefined);
219
+ }
220
+ }
221
+ outcome = result('ok', 'ready', connected, directoryChecked, listing);
222
+ }
223
+ catch (error) {
224
+ outcome = error instanceof TypeError && stage === 'input' ?
225
+ result('invalid-options', 'input') :
226
+ failure(signal.aborted ? interruption(signal) : error, stage, connected);
227
+ outcome = Object.freeze({ ...outcome, directoryChecked });
228
+ }
229
+ finally {
230
+ clearTimeout(timer);
231
+ if (connector) {
232
+ const cleanupDeadline = new AbortController();
233
+ const cleanupTimer = setTimeout(() => cleanupDeadline.abort(new OperationTimeoutError()), 2000);
234
+ try {
235
+ await abortable(connector.disconnect(), cleanupDeadline.signal);
236
+ outcome = Object.freeze({ ...outcome, cleanup: 'closed' });
237
+ }
238
+ catch {
239
+ if (outcome.ok) {
240
+ outcome = result('cleanup-failed', 'cleanup', connected, directoryChecked);
241
+ }
242
+ outcome = Object.freeze({ ...outcome, cleanup: 'failed' });
243
+ }
244
+ finally {
245
+ clearTimeout(cleanupTimer);
246
+ }
247
+ }
248
+ }
249
+ return outcome;
250
+ }
251
+ function parseCheckArguments(args) {
252
+ const options = {};
253
+ const valued = {
254
+ '--file': 'file',
255
+ '--host-key-sha256': 'hostKeySha256',
256
+ '--directory': 'directory',
257
+ '--timeout-ms': 'timeoutMs',
258
+ '--max-entries': 'maxEntries',
259
+ };
260
+ for (let index = 0; index < args.length; index++) {
261
+ const arg = args[index];
262
+ if (arg === '--json') {
263
+ options.json = true;
264
+ }
265
+ else if (arg === '--help' || arg === '-h') {
266
+ options.help = true;
267
+ }
268
+ else if (arg === '--include-listing') {
269
+ options.includeListing = true;
270
+ }
271
+ else if (arg === '--password-stdin') {
272
+ options.passwordStdin = true;
273
+ }
274
+ else if (Object.prototype.hasOwnProperty.call(valued, arg)) {
275
+ const value = args[++index];
276
+ if (value === undefined || value.startsWith('--')) {
277
+ throw new TypeError('Missing check argument value.');
278
+ }
279
+ options[valued[arg]] = arg === '--timeout-ms' || arg === '--max-entries' ? Number(value) : value;
280
+ }
281
+ else if (arg.startsWith('-') || options.sitePath !== undefined) {
282
+ throw new TypeError('Unknown or repeated check argument.');
283
+ }
284
+ else {
285
+ options.sitePath = arg;
286
+ }
287
+ }
288
+ return options;
289
+ }
290
+ function defaultFile() {
291
+ const directory = process.env.HOME || homedir();
292
+ const candidates = [
293
+ process.env.APPDATA && join(process.env.APPDATA, 'FileZilla', 'sitemanager.xml'),
294
+ join(process.env.XDG_CONFIG_HOME || join(directory, '.config'), 'filezilla', 'sitemanager.xml'),
295
+ join(directory, '.filezilla', 'sitemanager.xml'),
296
+ ];
297
+ return candidates.find((path) => typeof path === 'string' && existsSync(path));
298
+ }
299
+ async function stdinPassword(signal) {
300
+ if (process.stdin.isTTY) {
301
+ throw new CredentialProviderError();
302
+ }
303
+ return new Promise((resolve, reject) => {
304
+ const chunks = [];
305
+ let length = 0;
306
+ const cleanup = () => {
307
+ process.stdin.off('data', data);
308
+ process.stdin.off('end', end);
309
+ process.stdin.off('error', error);
310
+ signal.removeEventListener('abort', abort);
311
+ process.stdin.pause();
312
+ };
313
+ const error = () => {
314
+ cleanup();
315
+ reject(new CredentialProviderError());
316
+ };
317
+ const abort = () => {
318
+ cleanup();
319
+ reject(interruption(signal));
320
+ };
321
+ const data = (chunk) => {
322
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
323
+ length += bytes.length;
324
+ if (length > 65536) {
325
+ error();
326
+ return;
327
+ }
328
+ chunks.push(bytes);
329
+ };
330
+ const end = () => {
331
+ cleanup();
332
+ const password = Buffer.concat(chunks).toString('utf8').replace(/\r?\n$/, '');
333
+ if (/[\r\n\0]/.test(password)) {
334
+ reject(new CredentialProviderError());
335
+ return;
336
+ }
337
+ resolve(password);
338
+ };
339
+ process.stdin.on('data', data);
340
+ process.stdin.once('end', end);
341
+ process.stdin.once('error', error);
342
+ signal.addEventListener('abort', abort, { once: true });
343
+ if (signal.aborted) {
344
+ abort();
345
+ }
346
+ });
347
+ }
348
+ export async function runCheckCommand(args) {
349
+ const json = args.includes('--json');
350
+ let outcome;
351
+ let options;
352
+ try {
353
+ options = parseCheckArguments(args);
354
+ validateOptions(options);
355
+ }
356
+ catch {
357
+ outputCheck(result('invalid-options', 'input'), json);
358
+ return;
359
+ }
360
+ if (options.help) {
361
+ console.log('Usage: filezilla-js check <path> [--file <xml>] [--json] [--host-key-sha256 <pin>]');
362
+ console.log(' --password-stdin Read one password/passphrase from redirected input (never argv)');
363
+ console.log(' --directory <path> Check directory metadata after connecting');
364
+ console.log(' --include-listing Include a shallow directory listing (off by default)');
365
+ console.log(' --max-entries <count> Limit optional listing output (default 1000)');
366
+ console.log(' --timeout-ms <ms> Overall deadline including redirected input (default 30000)');
367
+ return;
368
+ }
369
+ const controller = new AbortController();
370
+ const cancel = () => controller.abort(new OperationAbortedError());
371
+ const timer = setTimeout(() => controller.abort(new OperationTimeoutError()), options.timeoutMs ?? 30000);
372
+ process.once('SIGINT', cancel);
373
+ process.once('SIGTERM', cancel);
374
+ let stage = 'input';
375
+ try {
376
+ const path = options.file ?? defaultFile();
377
+ if (!path || !options.sitePath) {
378
+ outputCheck(result(options.sitePath ? 'invalid-site' : 'invalid-options', 'input'), json);
379
+ return;
380
+ }
381
+ const manager = getSiteManager(path, {
382
+ includePasswords: !options.passwordStdin,
383
+ credentialPath: options.sitePath,
384
+ });
385
+ const server = manager.getServerByPath(options.sitePath);
386
+ if (!server) {
387
+ outputCheck(result('invalid-site', 'input'), json);
388
+ return;
389
+ }
390
+ stage = 'credentials';
391
+ validateSiteSelection(server, options);
392
+ const password = options.passwordStdin ? await stdinPassword(controller.signal) : undefined;
393
+ outcome = await checkConnection(server, { ...options, password, abortSignal: controller.signal });
394
+ }
395
+ catch (error) {
396
+ if (stage === 'input') {
397
+ outcome = result('invalid-site', 'input');
398
+ }
399
+ else if (error instanceof TypeError) {
400
+ outcome = result('invalid-options', 'input');
401
+ }
402
+ else {
403
+ outcome = failure(error, stage, false);
404
+ }
405
+ }
406
+ finally {
407
+ clearTimeout(timer);
408
+ process.off('SIGINT', cancel);
409
+ process.off('SIGTERM', cancel);
410
+ }
411
+ outputCheck(outcome, json);
412
+ }
413
+ function outputCheck(outcome, json) {
414
+ if (json) {
415
+ console.log(JSON.stringify(outcome));
416
+ }
417
+ else {
418
+ console.log(`${outcome.status}: ${outcome.message}`);
419
+ if (outcome.listing) {
420
+ for (const entry of outcome.listing) {
421
+ console.log(`${entry.type}: ${JSON.stringify(entry.path)}`);
422
+ }
423
+ }
424
+ }
425
+ process.exitCode = outcome.exitCode;
426
+ }
427
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { CommandHandler } from '../types.js';
2
+ export declare const getCommand: CommandHandler;
3
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../src/commands/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,cAAc,EAAe,MAAM,aAAa,CAAC;AAEzE,eAAO,MAAM,UAAU,EAAE,cAyExB,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { formatOutput } from '../types.js';
2
+ export const getCommand = async (ctx) => {
3
+ let server;
4
+ let propertyName;
5
+ if (ctx.options.search) {
6
+ const matches = ctx.siteManager.searchServers(ctx.options.search);
7
+ if (matches.length === 0) {
8
+ throw new Error(`Could not find server matching "${ctx.options.search}"`);
9
+ }
10
+ else if (matches.length > 1) {
11
+ throw new Error(`Multiple servers found matching "${ctx.options.search}". Please be more specific or use list --search.`);
12
+ }
13
+ server = matches[0];
14
+ propertyName = ctx.args[0];
15
+ }
16
+ else {
17
+ const serverPath = ctx.args[0];
18
+ if (!serverPath) {
19
+ throw new Error('No server path specified');
20
+ }
21
+ server = ctx.siteManager.getServerByPath(serverPath);
22
+ if (!server) {
23
+ throw new Error(`Could not find server by path "${serverPath}"`);
24
+ }
25
+ propertyName = ctx.args[1];
26
+ }
27
+ if (propertyName) {
28
+ let value;
29
+ if (propertyName === 'remoteDirectory') {
30
+ value = server.getRemoteDirectory();
31
+ }
32
+ else if (propertyName === 'protocolName') {
33
+ value = server.siteProtocolName;
34
+ }
35
+ else {
36
+ value = server.properties[propertyName];
37
+ }
38
+ if (value === undefined) {
39
+ throw new Error(`Property "${propertyName}" not found on server`);
40
+ }
41
+ if (propertyName === 'password' && !ctx.options.showPassword) {
42
+ value = '(hidden)';
43
+ }
44
+ formatOutput(value, ctx.options);
45
+ }
46
+ else {
47
+ const properties = { ...server.properties };
48
+ if (!ctx.options.showPassword) {
49
+ properties.password = '(hidden)';
50
+ }
51
+ if (ctx.options.json || ctx.options.table) {
52
+ const data = { ...properties, protocolName: server.siteProtocolName };
53
+ const tableData = {
54
+ columns: ['Property', 'Value'],
55
+ rows: [
56
+ ...Object.entries(properties),
57
+ ['protocolName', server.siteProtocolName],
58
+ ],
59
+ };
60
+ formatOutput(data, ctx.options, tableData);
61
+ }
62
+ else {
63
+ formatOutput(properties, ctx.options);
64
+ }
65
+ }
66
+ };
67
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/commands/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { CommandHandler } from '../types.js';
2
+ export declare const listCommand: CommandHandler;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,cAAc,EAAe,MAAM,aAAa,CAAC;AAEzE,eAAO,MAAM,WAAW,EAAE,cAoDzB,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { formatOutput } from '../types.js';
2
+ export const listCommand = async (ctx) => {
3
+ let servers = ctx.siteManager.getServers();
4
+ if (ctx.options.search) {
5
+ servers = ctx.siteManager.searchServers(ctx.options.search);
6
+ }
7
+ if (ctx.options.recurse && !ctx.options.json) {
8
+ throw new Error('--recurse option requires --json');
9
+ }
10
+ if (ctx.options.json || ctx.options.table) {
11
+ if (ctx.options.recurse && ctx.options.json) {
12
+ const tree = ctx.siteManager.getServersTree(servers);
13
+ const data = transformTree(tree, ctx.options);
14
+ formatOutput(data, ctx.options);
15
+ return;
16
+ }
17
+ const data = servers.map((server) => {
18
+ if (ctx.options.full) {
19
+ return fullProperties(server, ctx.options);
20
+ }
21
+ return {
22
+ path: server.path,
23
+ host: server.propertiesRaw.host,
24
+ protocol: server.siteProtocolName,
25
+ };
26
+ });
27
+ const tableData = ctx.options.full ? {
28
+ columns: ['Path', 'Property', 'Value'],
29
+ rows: data.flatMap(properties => Object.entries(properties)
30
+ .filter(([key]) => key !== 'path')
31
+ .map(([key, value]) => [properties.path, key, value])),
32
+ } : {
33
+ columns: ['Path', 'Host', 'Protocol'],
34
+ rows: servers.map(server => [server.path, server.propertiesRaw.host, server.siteProtocolName]),
35
+ };
36
+ formatOutput(data, ctx.options, tableData);
37
+ }
38
+ else if (ctx.options.full) {
39
+ for (const server of servers) {
40
+ formatOutput(fullProperties(server, ctx.options), ctx.options);
41
+ console.log('');
42
+ }
43
+ }
44
+ else {
45
+ formatOutput(servers.map((s) => s.path), ctx.options);
46
+ }
47
+ };
48
+ function fullProperties(server, options) {
49
+ const properties = { ...server.properties, protocolName: server.siteProtocolName };
50
+ if (!options.showPassword) {
51
+ properties.password = '(hidden)';
52
+ }
53
+ return properties;
54
+ }
55
+ function transformTree(folder, options) {
56
+ return {
57
+ name: folder.name,
58
+ folders: folder.folders.map(f => transformTree(f, options)),
59
+ servers: folder.servers.map(server => fullProperties(server, options)),
60
+ };
61
+ }
62
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { checkConnection } from './commands/check.js';
2
+ export type { ConnectionCheckOptions, ConnectionCheckResult, ConnectionCheckStage, ConnectionCheckStatus } from './commands/check.js';
3
+ export declare function run(): Promise<void>;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAC,sBAAsB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAoEpI,wBAAsB,GAAG,kBAoDxB"}