mxroute-cli 0.1.1

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 (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +464 -0
  3. package/dist/commands/accounts.d.ts +4 -0
  4. package/dist/commands/accounts.js +262 -0
  5. package/dist/commands/accounts.js.map +1 -0
  6. package/dist/commands/aliases.d.ts +3 -0
  7. package/dist/commands/aliases.js +190 -0
  8. package/dist/commands/aliases.js.map +1 -0
  9. package/dist/commands/auth.d.ts +3 -0
  10. package/dist/commands/auth.js +143 -0
  11. package/dist/commands/auth.js.map +1 -0
  12. package/dist/commands/autoresponder.d.ts +4 -0
  13. package/dist/commands/autoresponder.js +280 -0
  14. package/dist/commands/autoresponder.js.map +1 -0
  15. package/dist/commands/catchall.d.ts +2 -0
  16. package/dist/commands/catchall.js +173 -0
  17. package/dist/commands/catchall.js.map +1 -0
  18. package/dist/commands/config.d.ts +5 -0
  19. package/dist/commands/config.js +161 -0
  20. package/dist/commands/config.js.map +1 -0
  21. package/dist/commands/dns.d.ts +3 -0
  22. package/dist/commands/dns.js +160 -0
  23. package/dist/commands/dns.js.map +1 -0
  24. package/dist/commands/dnsapi.d.ts +4 -0
  25. package/dist/commands/dnsapi.js +397 -0
  26. package/dist/commands/dnsapi.js.map +1 -0
  27. package/dist/commands/domains.d.ts +2 -0
  28. package/dist/commands/domains.js +109 -0
  29. package/dist/commands/domains.js.map +1 -0
  30. package/dist/commands/filters.d.ts +3 -0
  31. package/dist/commands/filters.js +300 -0
  32. package/dist/commands/filters.js.map +1 -0
  33. package/dist/commands/forwarders.d.ts +3 -0
  34. package/dist/commands/forwarders.js +202 -0
  35. package/dist/commands/forwarders.js.map +1 -0
  36. package/dist/commands/info.d.ts +2 -0
  37. package/dist/commands/info.js +163 -0
  38. package/dist/commands/info.js.map +1 -0
  39. package/dist/commands/lists.d.ts +6 -0
  40. package/dist/commands/lists.js +372 -0
  41. package/dist/commands/lists.js.map +1 -0
  42. package/dist/commands/quota.d.ts +2 -0
  43. package/dist/commands/quota.js +184 -0
  44. package/dist/commands/quota.js.map +1 -0
  45. package/dist/commands/send.d.ts +9 -0
  46. package/dist/commands/send.js +107 -0
  47. package/dist/commands/send.js.map +1 -0
  48. package/dist/commands/setup.d.ts +1 -0
  49. package/dist/commands/setup.js +535 -0
  50. package/dist/commands/setup.js.map +1 -0
  51. package/dist/commands/spam.d.ts +4 -0
  52. package/dist/commands/spam.js +215 -0
  53. package/dist/commands/spam.js.map +1 -0
  54. package/dist/commands/status.d.ts +1 -0
  55. package/dist/commands/status.js +79 -0
  56. package/dist/commands/status.js.map +1 -0
  57. package/dist/commands/troubleshoot.d.ts +1 -0
  58. package/dist/commands/troubleshoot.js +324 -0
  59. package/dist/commands/troubleshoot.js.map +1 -0
  60. package/dist/index.d.ts +2 -0
  61. package/dist/index.js +589 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/mcp.d.ts +2 -0
  64. package/dist/mcp.js +599 -0
  65. package/dist/mcp.js.map +1 -0
  66. package/dist/utils/api.d.ts +15 -0
  67. package/dist/utils/api.js +30 -0
  68. package/dist/utils/api.js.map +1 -0
  69. package/dist/utils/config.d.ts +24 -0
  70. package/dist/utils/config.js +150 -0
  71. package/dist/utils/config.js.map +1 -0
  72. package/dist/utils/directadmin.d.ts +49 -0
  73. package/dist/utils/directadmin.js +444 -0
  74. package/dist/utils/directadmin.js.map +1 -0
  75. package/dist/utils/dns.d.ts +14 -0
  76. package/dist/utils/dns.js +284 -0
  77. package/dist/utils/dns.js.map +1 -0
  78. package/dist/utils/theme.d.ts +24 -0
  79. package/dist/utils/theme.js +95 -0
  80. package/dist/utils/theme.js.map +1 -0
  81. package/package.json +92 -0
@@ -0,0 +1,535 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.setupWizard = setupWizard;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const ora_1 = __importDefault(require("ora"));
42
+ const inquirer_1 = __importDefault(require("inquirer"));
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ const child_process_1 = require("child_process");
47
+ const theme_1 = require("../utils/theme");
48
+ const config_1 = require("../utils/config");
49
+ const directadmin_1 = require("../utils/directadmin");
50
+ function detectTools() {
51
+ const home = os.homedir();
52
+ const platform = process.platform;
53
+ const tools = [
54
+ {
55
+ name: 'Claude Code',
56
+ id: 'claude-code',
57
+ mcpConfigPath: path.join(home, '.claude', 'settings.json'),
58
+ mcpConfigKey: 'mcpServers',
59
+ rulesPath: path.join(home, '.claude', 'skills'),
60
+ rulesFormat: 'skill-md',
61
+ detected: fs.existsSync(path.join(home, '.claude')),
62
+ },
63
+ {
64
+ name: 'Claude Desktop',
65
+ id: 'claude-desktop',
66
+ mcpConfigPath: platform === 'darwin'
67
+ ? path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json')
68
+ : platform === 'win32'
69
+ ? path.join(home, 'AppData', 'Roaming', 'Claude', 'claude_desktop_config.json')
70
+ : path.join(home, '.config', 'claude', 'claude_desktop_config.json'),
71
+ mcpConfigKey: 'mcpServers',
72
+ rulesPath: null,
73
+ rulesFormat: null,
74
+ detected: platform === 'darwin'
75
+ ? fs.existsSync(path.join(home, 'Library', 'Application Support', 'Claude'))
76
+ : platform === 'win32'
77
+ ? fs.existsSync(path.join(home, 'AppData', 'Roaming', 'Claude'))
78
+ : false,
79
+ },
80
+ {
81
+ name: 'Cursor',
82
+ id: 'cursor',
83
+ mcpConfigPath: path.join(process.cwd(), '.cursor', 'mcp.json'),
84
+ mcpConfigKey: 'mcpServers',
85
+ rulesPath: path.join(process.cwd(), '.cursor', 'rules'),
86
+ rulesFormat: 'mdc',
87
+ detected: fs.existsSync(path.join(home, '.cursor')) || fs.existsSync(path.join(process.cwd(), '.cursor')),
88
+ },
89
+ {
90
+ name: 'Windsurf',
91
+ id: 'windsurf',
92
+ mcpConfigPath: platform === 'darwin'
93
+ ? path.join(home, '.codeium', 'windsurf', 'mcp_config.json')
94
+ : path.join(home, '.codeium', 'windsurf', 'mcp_config.json'),
95
+ mcpConfigKey: 'mcpServers',
96
+ rulesPath: path.join(process.cwd(), '.windsurfrules'),
97
+ rulesFormat: 'single-md',
98
+ detected: fs.existsSync(path.join(home, '.codeium', 'windsurf')),
99
+ },
100
+ {
101
+ name: 'OpenCode',
102
+ id: 'opencode',
103
+ mcpConfigPath: path.join(process.cwd(), 'opencode.json'),
104
+ mcpConfigKey: 'mcpServers',
105
+ rulesPath: path.join(process.cwd(), 'AGENTS.md'),
106
+ rulesFormat: 'single-md',
107
+ detected: fs.existsSync(path.join(process.cwd(), 'opencode.json')) || commandExists('opencode'),
108
+ },
109
+ {
110
+ name: 'Cline / Roo Code',
111
+ id: 'cline',
112
+ mcpConfigPath: platform === 'darwin'
113
+ ? path.join(home, 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json')
114
+ : path.join(home, '.vscode', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json'),
115
+ mcpConfigKey: 'mcpServers',
116
+ rulesPath: path.join(process.cwd(), '.clinerules'),
117
+ rulesFormat: 'single-md',
118
+ detected: fs.existsSync(path.join(process.cwd(), '.clinerules')) ||
119
+ (platform === 'darwin' &&
120
+ fs.existsSync(path.join(home, 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev'))),
121
+ },
122
+ {
123
+ name: 'Continue.dev',
124
+ id: 'continue',
125
+ mcpConfigPath: path.join(home, '.continue', 'config.json'),
126
+ mcpConfigKey: 'experimental.modelContextProtocolServers',
127
+ rulesPath: path.join(home, '.continue', 'rules'),
128
+ rulesFormat: 'single-md',
129
+ detected: fs.existsSync(path.join(home, '.continue')),
130
+ },
131
+ {
132
+ name: 'Aider',
133
+ id: 'aider',
134
+ mcpConfigPath: '',
135
+ mcpConfigKey: '',
136
+ rulesPath: path.join(process.cwd(), '.aider.conf.yml'),
137
+ rulesFormat: 'yaml-ref',
138
+ detected: commandExists('aider'),
139
+ },
140
+ ];
141
+ return tools;
142
+ }
143
+ function commandExists(cmd) {
144
+ try {
145
+ (0, child_process_1.execSync)(`which ${cmd}`, { encoding: 'utf-8', stdio: 'pipe' });
146
+ return true;
147
+ }
148
+ catch {
149
+ return false;
150
+ }
151
+ }
152
+ // ─── MXroute instructions content ────────────────────────
153
+ function getMxrouteInstructions() {
154
+ return `# MXroute Email Hosting
155
+
156
+ You have access to MXroute email hosting management via the \`mxroute\` CLI and MCP tools.
157
+
158
+ ## Available MCP Tools
159
+ - \`list_domains\`, \`domain_info\` — domain management
160
+ - \`list_email_accounts\`, \`create_email_account\`, \`delete_email_account\`, \`change_email_password\`, \`set_email_quota\` — email accounts
161
+ - \`list_forwarders\`, \`create_forwarder\`, \`delete_forwarder\` — email forwarding
162
+ - \`list_autoresponders\`, \`create_autoresponder\`, \`delete_autoresponder\` — vacation messages
163
+ - \`get_catchall\`, \`set_catchall\` — catch-all / default address
164
+ - \`get_spam_config\`, \`set_spam_config\` — SpamAssassin settings
165
+ - \`dns_health_check\`, \`list_dns_records\`, \`add_dns_record\`, \`delete_dns_record\`, \`get_dkim_key\` — DNS management
166
+ - \`list_email_filters\`, \`create_email_filter\`, \`delete_email_filter\` — email filters
167
+ - \`list_mailing_lists\`, \`create_mailing_list\`, \`delete_mailing_list\`, \`list_mailing_list_members\`, \`add_mailing_list_member\`, \`remove_mailing_list_member\` — mailing lists
168
+ - \`list_domain_aliases\`, \`add_domain_alias\`, \`remove_domain_alias\` — domain pointers
169
+ - \`get_quota\` — account usage stats
170
+ - \`send_email\` — send email via SMTP API
171
+
172
+ ## CLI Commands
173
+ Run \`mxroute --help\` for the full command list. Key commands:
174
+ - \`mxroute domains list\` — list domains
175
+ - \`mxroute accounts list [domain]\` — list email accounts
176
+ - \`mxroute dns check [domain]\` — verify MX, SPF, DKIM, DMARC
177
+ - \`mxroute send\` — send email
178
+ - \`mxroute troubleshoot\` — interactive troubleshooting wizard
179
+
180
+ ## Key Reference
181
+ - SMTP API: https://smtpapi.mxroute.com/ (POST, JSON, 400/hr limit)
182
+ - Management Panel: https://management.mxroute.com
183
+ - Control Panel: https://panel.mxroute.com
184
+ - IMAP: port 993 SSL/TLS, SMTP: port 465 SSL/TLS
185
+ - SPF: \`v=spf1 include:mxroute.com -all\`
186
+ - DKIM selector: \`x._domainkey\`
187
+ - CalDAV/CardDAV: dav.mxroute.com
188
+ - Marketing email is prohibited
189
+ `;
190
+ }
191
+ // ─── Install functions ───────────────────────────────────
192
+ function getMcpBinPath() {
193
+ try {
194
+ const npmGlobalBin = (0, child_process_1.execSync)('npm bin -g', { encoding: 'utf-8', stdio: 'pipe' }).trim();
195
+ return path.join(npmGlobalBin, 'mxroute-mcp');
196
+ }
197
+ catch {
198
+ return 'mxroute-mcp';
199
+ }
200
+ }
201
+ function getMcpServerConfig(mcpBin) {
202
+ return {
203
+ command: mcpBin,
204
+ args: [],
205
+ };
206
+ }
207
+ function installMcp(tool, mcpBin) {
208
+ if (!tool.mcpConfigPath || !tool.mcpConfigKey) {
209
+ console.log(theme_1.theme.muted(` ${tool.name}: MCP not supported via config file`));
210
+ return false;
211
+ }
212
+ try {
213
+ const dir = path.dirname(tool.mcpConfigPath);
214
+ if (!fs.existsSync(dir)) {
215
+ fs.mkdirSync(dir, { recursive: true });
216
+ }
217
+ let config = {};
218
+ if (fs.existsSync(tool.mcpConfigPath)) {
219
+ config = JSON.parse(fs.readFileSync(tool.mcpConfigPath, 'utf-8'));
220
+ }
221
+ // Handle nested keys like "experimental.modelContextProtocolServers"
222
+ const keys = tool.mcpConfigKey.split('.');
223
+ let target = config;
224
+ for (let i = 0; i < keys.length - 1; i++) {
225
+ if (!target[keys[i]])
226
+ target[keys[i]] = {};
227
+ target = target[keys[i]];
228
+ }
229
+ const lastKey = keys[keys.length - 1];
230
+ if (!target[lastKey])
231
+ target[lastKey] = {};
232
+ if (tool.id === 'continue') {
233
+ // Continue.dev uses array format
234
+ if (!Array.isArray(target[lastKey]))
235
+ target[lastKey] = [];
236
+ const existing = target[lastKey].findIndex((s) => s.name === 'mxroute');
237
+ const entry = { name: 'mxroute', command: mcpBin, args: [] };
238
+ if (existing >= 0) {
239
+ target[lastKey][existing] = entry;
240
+ }
241
+ else {
242
+ target[lastKey].push(entry);
243
+ }
244
+ }
245
+ else {
246
+ target[lastKey].mxroute = getMcpServerConfig(mcpBin);
247
+ }
248
+ fs.writeFileSync(tool.mcpConfigPath, JSON.stringify(config, null, 2));
249
+ console.log(theme_1.theme.success(` ${theme_1.theme.statusIcon('pass')} ${tool.name}: MCP server configured`));
250
+ console.log(theme_1.theme.muted(` ${tool.mcpConfigPath}`));
251
+ return true;
252
+ }
253
+ catch (err) {
254
+ console.log(theme_1.theme.error(` ${theme_1.theme.statusIcon('fail')} ${tool.name}: ${err.message}`));
255
+ return false;
256
+ }
257
+ }
258
+ function installRules(tool) {
259
+ if (!tool.rulesPath || !tool.rulesFormat)
260
+ return false;
261
+ const content = getMxrouteInstructions();
262
+ try {
263
+ switch (tool.rulesFormat) {
264
+ case 'skill-md': {
265
+ // Claude Code: multiple skill files in directory
266
+ if (!fs.existsSync(tool.rulesPath)) {
267
+ fs.mkdirSync(tool.rulesPath, { recursive: true });
268
+ }
269
+ const skillFile = path.join(tool.rulesPath, 'mxroute.md');
270
+ fs.writeFileSync(skillFile, `---\nname: mxroute\ndescription: |\n MXroute email hosting management. Use when the user needs help with email accounts, DNS, sending, or troubleshooting.\n---\n\n${content}`);
271
+ console.log(theme_1.theme.success(` ${theme_1.theme.statusIcon('pass')} ${tool.name}: Skill installed`));
272
+ console.log(theme_1.theme.muted(` ${skillFile}`));
273
+ return true;
274
+ }
275
+ case 'mdc': {
276
+ // Cursor: .mdc files in .cursor/rules/
277
+ if (!fs.existsSync(tool.rulesPath)) {
278
+ fs.mkdirSync(tool.rulesPath, { recursive: true });
279
+ }
280
+ const ruleFile = path.join(tool.rulesPath, 'mxroute.mdc');
281
+ const mdcContent = `---\ndescription: MXroute email hosting management\nglobs:\n - "**/*"\nalwaysApply: false\n---\n\n${content}`;
282
+ fs.writeFileSync(ruleFile, mdcContent);
283
+ console.log(theme_1.theme.success(` ${theme_1.theme.statusIcon('pass')} ${tool.name}: Rule installed`));
284
+ console.log(theme_1.theme.muted(` ${ruleFile}`));
285
+ return true;
286
+ }
287
+ case 'single-md': {
288
+ // Windsurf, OpenCode, Cline: single file, append
289
+ const marker = '<!-- mxroute-cli -->';
290
+ const block = `\n${marker}\n${content}${marker}\n`;
291
+ if (fs.existsSync(tool.rulesPath)) {
292
+ let existing = fs.readFileSync(tool.rulesPath, 'utf-8');
293
+ // Replace existing block or append
294
+ const markerRegex = new RegExp(`\n?${escapeRegex(marker)}[\\s\\S]*?${escapeRegex(marker)}\n?`);
295
+ if (markerRegex.test(existing)) {
296
+ existing = existing.replace(markerRegex, block);
297
+ }
298
+ else {
299
+ existing += block;
300
+ }
301
+ fs.writeFileSync(tool.rulesPath, existing);
302
+ }
303
+ else {
304
+ const dir = path.dirname(tool.rulesPath);
305
+ if (!fs.existsSync(dir))
306
+ fs.mkdirSync(dir, { recursive: true });
307
+ fs.writeFileSync(tool.rulesPath, block.trim() + '\n');
308
+ }
309
+ console.log(theme_1.theme.success(` ${theme_1.theme.statusIcon('pass')} ${tool.name}: Instructions installed`));
310
+ console.log(theme_1.theme.muted(` ${tool.rulesPath}`));
311
+ return true;
312
+ }
313
+ case 'yaml-ref': {
314
+ // Aider: just inform, can't auto-configure well
315
+ console.log(theme_1.theme.muted(` ${theme_1.theme.statusIcon('info')} ${tool.name}: Add to .aider.conf.yml:`));
316
+ console.log(theme_1.theme.muted(` read: [".aider-mxroute.md"]`));
317
+ // Write the reference file
318
+ const refFile = path.join(process.cwd(), '.aider-mxroute.md');
319
+ fs.writeFileSync(refFile, content);
320
+ console.log(theme_1.theme.success(` ${theme_1.theme.statusIcon('pass')} Reference file created: ${refFile}`));
321
+ return true;
322
+ }
323
+ }
324
+ }
325
+ catch (err) {
326
+ console.log(theme_1.theme.error(` ${theme_1.theme.statusIcon('fail')} ${tool.name}: ${err.message}`));
327
+ }
328
+ return false;
329
+ }
330
+ function escapeRegex(str) {
331
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
332
+ }
333
+ // ─── Setup Wizard ────────────────────────────────────────
334
+ async function setupWizard() {
335
+ console.log(theme_1.theme.banner());
336
+ console.log(theme_1.theme.heading('Setup Wizard'));
337
+ console.log(theme_1.theme.muted(' Configure MXroute CLI, MCP server, and AI tool integrations.\n'));
338
+ // Detect tools
339
+ const tools = detectTools();
340
+ const detected = tools.filter((t) => t.detected);
341
+ if (detected.length > 0) {
342
+ console.log(theme_1.theme.subheading('Detected AI tools:'));
343
+ for (const t of detected) {
344
+ console.log(theme_1.theme.success(` ${theme_1.theme.statusIcon('pass')} ${t.name}`));
345
+ }
346
+ console.log('');
347
+ }
348
+ // Step 1: What to set up
349
+ const { components } = await inquirer_1.default.prompt([
350
+ {
351
+ type: 'checkbox',
352
+ name: 'components',
353
+ message: 'What would you like to set up?',
354
+ choices: [
355
+ { name: 'CLI Configuration (SMTP credentials for sending email)', value: 'cli', checked: true },
356
+ { name: 'DirectAdmin API Authentication (account management)', value: 'auth', checked: true },
357
+ { name: 'MCP Server (for AI coding tools)', value: 'mcp', checked: true },
358
+ { name: 'AI Tool Instructions / Skills', value: 'rules', checked: true },
359
+ ],
360
+ },
361
+ ]);
362
+ // Step 2: CLI Config
363
+ if (components.includes('cli')) {
364
+ console.log(theme_1.theme.heading('SMTP Configuration'));
365
+ const answers = await inquirer_1.default.prompt([
366
+ {
367
+ type: 'input',
368
+ name: 'server',
369
+ message: theme_1.theme.secondary('MXroute server hostname (e.g., tuesday, fusion):'),
370
+ default: (0, config_1.getConfig)().server || '',
371
+ validate: (input) => (input.trim() ? true : 'Required'),
372
+ filter: (input) => input.replace('.mxrouting.net', '').trim(),
373
+ },
374
+ {
375
+ type: 'input',
376
+ name: 'username',
377
+ message: theme_1.theme.secondary('Email address (SMTP username):'),
378
+ default: (0, config_1.getConfig)().username || '',
379
+ validate: (input) => (input.includes('@') ? true : 'Must be a full email address'),
380
+ },
381
+ {
382
+ type: 'password',
383
+ name: 'password',
384
+ message: theme_1.theme.secondary('Email password:'),
385
+ mask: '•',
386
+ },
387
+ {
388
+ type: 'input',
389
+ name: 'domain',
390
+ message: theme_1.theme.secondary('Primary domain:'),
391
+ default: (answers) => (answers.username || '').split('@')[1] || (0, config_1.getConfig)().domain || '',
392
+ },
393
+ ]);
394
+ (0, config_1.setProfile)('default', {
395
+ server: answers.server,
396
+ username: answers.username,
397
+ password: answers.password,
398
+ domain: answers.domain,
399
+ });
400
+ console.log(theme_1.theme.success(`\n ${theme_1.theme.statusIcon('pass')} SMTP configuration saved\n`));
401
+ }
402
+ // Step 3: DirectAdmin Auth
403
+ if (components.includes('auth')) {
404
+ console.log(theme_1.theme.heading('DirectAdmin API Authentication'));
405
+ console.log(theme_1.theme.muted(' Create a Login Key at Control Panel (panel.mxroute.com) -> Login Keys\n'));
406
+ const config = (0, config_1.getConfig)();
407
+ const answers = await inquirer_1.default.prompt([
408
+ {
409
+ type: 'input',
410
+ name: 'server',
411
+ message: theme_1.theme.secondary('Server hostname:'),
412
+ default: config.server || '',
413
+ filter: (input) => input.replace('.mxrouting.net', '').replace(':2222', '').trim(),
414
+ },
415
+ {
416
+ type: 'input',
417
+ name: 'username',
418
+ message: theme_1.theme.secondary('DirectAdmin username:'),
419
+ default: config.daUsername || '',
420
+ },
421
+ {
422
+ type: 'password',
423
+ name: 'loginKey',
424
+ message: theme_1.theme.secondary('Login Key:'),
425
+ mask: '•',
426
+ },
427
+ ]);
428
+ const spinner = (0, ora_1.default)({ text: 'Testing authentication...', spinner: 'dots12', color: 'cyan' }).start();
429
+ try {
430
+ const result = await (0, directadmin_1.testAuth)({ server: answers.server, username: answers.username, loginKey: answers.loginKey });
431
+ if (result.success) {
432
+ spinner.succeed(chalk_1.default.green('Authentication successful'));
433
+ (0, config_1.setConfig)('server', answers.server);
434
+ (0, config_1.setConfig)('daUsername', answers.username);
435
+ (0, config_1.setConfig)('daLoginKey', answers.loginKey);
436
+ }
437
+ else {
438
+ spinner.fail(chalk_1.default.red(`Authentication failed: ${result.message}`));
439
+ console.log(theme_1.theme.muted(' You can retry later with: mxroute auth login\n'));
440
+ }
441
+ }
442
+ catch (err) {
443
+ spinner.fail(chalk_1.default.red(`Connection failed: ${err.message}`));
444
+ }
445
+ console.log('');
446
+ }
447
+ // Step 4: MCP Server
448
+ if (components.includes('mcp')) {
449
+ console.log(theme_1.theme.heading('MCP Server Installation'));
450
+ const mcpBin = getMcpBinPath();
451
+ // Show detected + let user pick additional
452
+ const mcpChoices = tools
453
+ .filter((t) => t.mcpConfigPath) // only tools that support MCP config
454
+ .map((t) => ({
455
+ name: `${t.name}${t.detected ? chalk_1.default.green(' (detected)') : ''}`,
456
+ value: t.id,
457
+ checked: t.detected,
458
+ }));
459
+ mcpChoices.push({ name: 'Show config only (manual setup)', value: 'manual', checked: false });
460
+ const { mcpTargets } = await inquirer_1.default.prompt([
461
+ {
462
+ type: 'checkbox',
463
+ name: 'mcpTargets',
464
+ message: 'Install MCP server for:',
465
+ choices: mcpChoices,
466
+ },
467
+ ]);
468
+ if (mcpTargets.includes('manual') || mcpTargets.length === 0) {
469
+ console.log('');
470
+ console.log(theme_1.theme.subheading('MCP Server Configuration'));
471
+ console.log(theme_1.theme.keyValue('Binary', mcpBin));
472
+ console.log(theme_1.theme.keyValue('Transport', 'stdio'));
473
+ console.log('');
474
+ console.log(theme_1.theme.subheading('Add to your MCP config:'));
475
+ console.log(theme_1.theme.muted(' {'));
476
+ console.log(theme_1.theme.muted(' "mcpServers": {'));
477
+ console.log(theme_1.theme.muted(' "mxroute": {'));
478
+ console.log(theme_1.theme.muted(` "command": "${mcpBin}"`));
479
+ console.log(theme_1.theme.muted(' }'));
480
+ console.log(theme_1.theme.muted(' }'));
481
+ console.log(theme_1.theme.muted(' }'));
482
+ }
483
+ console.log('');
484
+ for (const targetId of mcpTargets) {
485
+ if (targetId === 'manual')
486
+ continue;
487
+ const tool = tools.find((t) => t.id === targetId);
488
+ if (tool)
489
+ installMcp(tool, mcpBin);
490
+ }
491
+ console.log('');
492
+ }
493
+ // Step 5: Rules / Skills / Instructions
494
+ if (components.includes('rules')) {
495
+ console.log(theme_1.theme.heading('AI Tool Instructions'));
496
+ const rulesTools = tools.filter((t) => t.rulesPath && t.rulesFormat);
497
+ const rulesChoices = rulesTools.map((t) => ({
498
+ name: `${t.name}${t.detected ? chalk_1.default.green(' (detected)') : ''}`,
499
+ value: t.id,
500
+ checked: t.detected,
501
+ }));
502
+ if (rulesChoices.length > 0) {
503
+ const { rulesTargets } = await inquirer_1.default.prompt([
504
+ {
505
+ type: 'checkbox',
506
+ name: 'rulesTargets',
507
+ message: 'Install MXroute instructions for:',
508
+ choices: rulesChoices,
509
+ },
510
+ ]);
511
+ console.log('');
512
+ for (const targetId of rulesTargets) {
513
+ const tool = rulesTools.find((t) => t.id === targetId);
514
+ if (tool)
515
+ installRules(tool);
516
+ }
517
+ }
518
+ else {
519
+ console.log(theme_1.theme.muted(' No supported AI tools detected for instructions.\n'));
520
+ }
521
+ console.log('');
522
+ }
523
+ // Summary
524
+ console.log(theme_1.theme.separator());
525
+ console.log(theme_1.theme.heading('Setup Complete'));
526
+ console.log(theme_1.theme.subheading('Next steps:'));
527
+ console.log(theme_1.theme.muted(' mxroute status View your account dashboard'));
528
+ console.log(theme_1.theme.muted(' mxroute domains list List your domains'));
529
+ console.log(theme_1.theme.muted(' mxroute dns check Verify DNS records'));
530
+ console.log(theme_1.theme.muted(' mxroute --help See all commands'));
531
+ console.log('');
532
+ console.log(theme_1.theme.muted(' Restart any AI tools to pick up the new MCP server and instructions.'));
533
+ console.log('');
534
+ }
535
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function spamStatus(domain?: string): Promise<void>;
2
+ export declare function spamEnable(domain?: string): Promise<void>;
3
+ export declare function spamDisable(domain?: string): Promise<void>;
4
+ export declare function spamConfig(domain?: string): Promise<void>;