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,280 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.autoresponderList = autoresponderList;
7
+ exports.autoresponderCreate = autoresponderCreate;
8
+ exports.autoresponderEdit = autoresponderEdit;
9
+ exports.autoresponderDelete = autoresponderDelete;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const ora_1 = __importDefault(require("ora"));
12
+ const inquirer_1 = __importDefault(require("inquirer"));
13
+ const cli_table3_1 = __importDefault(require("cli-table3"));
14
+ const theme_1 = require("../utils/theme");
15
+ const config_1 = require("../utils/config");
16
+ const directadmin_1 = require("../utils/directadmin");
17
+ function getCreds() {
18
+ const config = (0, config_1.getConfig)();
19
+ if (!config.daUsername || !config.daLoginKey) {
20
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} Not authenticated. Run ${theme_1.theme.bold('mxroute auth login')} first.\n`));
21
+ process.exit(1);
22
+ }
23
+ return { server: config.server, username: config.daUsername, loginKey: config.daLoginKey };
24
+ }
25
+ async function pickDomain(creds, domain) {
26
+ if (domain)
27
+ return domain;
28
+ const config = (0, config_1.getConfig)();
29
+ if (config.domain)
30
+ return config.domain;
31
+ const spinner = (0, ora_1.default)({ text: 'Fetching domains...', spinner: 'dots12', color: 'cyan' }).start();
32
+ const domains = await (0, directadmin_1.listDomains)(creds);
33
+ spinner.stop();
34
+ if (domains.length === 0) {
35
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} No domains found.\n`));
36
+ process.exit(1);
37
+ }
38
+ if (domains.length === 1)
39
+ return domains[0];
40
+ const { selected } = await inquirer_1.default.prompt([
41
+ {
42
+ type: 'list',
43
+ name: 'selected',
44
+ message: 'Select domain:',
45
+ choices: domains,
46
+ },
47
+ ]);
48
+ return selected;
49
+ }
50
+ async function autoresponderList(domain) {
51
+ const creds = getCreds();
52
+ const targetDomain = await pickDomain(creds, domain);
53
+ console.log(theme_1.theme.heading(`Autoresponders: ${targetDomain}`));
54
+ const spinner = (0, ora_1.default)({ text: 'Fetching autoresponders...', spinner: 'dots12', color: 'cyan' }).start();
55
+ try {
56
+ const autoresponders = await (0, directadmin_1.listAutoresponders)(creds, targetDomain);
57
+ spinner.stop();
58
+ if (autoresponders.length === 0) {
59
+ console.log(theme_1.theme.muted(' No autoresponders found.\n'));
60
+ return;
61
+ }
62
+ const table = new cli_table3_1.default({
63
+ head: [chalk_1.default.hex('#6C63FF')('#'), chalk_1.default.hex('#6C63FF')('Account'), chalk_1.default.hex('#6C63FF')('CC')],
64
+ style: { head: [], border: ['gray'] },
65
+ chars: {
66
+ top: '─',
67
+ 'top-mid': '┬',
68
+ 'top-left': ' ┌',
69
+ 'top-right': '┐',
70
+ bottom: '─',
71
+ 'bottom-mid': '┴',
72
+ 'bottom-left': ' └',
73
+ 'bottom-right': '┘',
74
+ left: ' │',
75
+ 'left-mid': ' ├',
76
+ mid: '─',
77
+ 'mid-mid': '┼',
78
+ right: '│',
79
+ 'right-mid': '┤',
80
+ middle: '│',
81
+ },
82
+ });
83
+ for (let i = 0; i < autoresponders.length; i++) {
84
+ const user = autoresponders[i];
85
+ let cc = '';
86
+ try {
87
+ const details = await (0, directadmin_1.getAutoresponder)(creds, targetDomain, user);
88
+ cc = details.cc || '';
89
+ }
90
+ catch {
91
+ cc = chalk_1.default.gray('—');
92
+ }
93
+ table.push([
94
+ chalk_1.default.gray(`${i + 1}`),
95
+ chalk_1.default.white(`${user}@${targetDomain}`),
96
+ cc ? chalk_1.default.cyan(cc) : chalk_1.default.gray('—'),
97
+ ]);
98
+ }
99
+ console.log(table.toString());
100
+ console.log(theme_1.theme.muted(`\n ${autoresponders.length} autoresponder${autoresponders.length !== 1 ? 's' : ''}\n`));
101
+ }
102
+ catch (err) {
103
+ spinner.fail(chalk_1.default.red('Failed to fetch autoresponders'));
104
+ console.log(theme_1.theme.error(` ${err.message}\n`));
105
+ }
106
+ }
107
+ async function autoresponderCreate(domain) {
108
+ const creds = getCreds();
109
+ const targetDomain = await pickDomain(creds, domain);
110
+ console.log(theme_1.theme.heading(`Create Autoresponder on ${targetDomain}`));
111
+ const acctSpinner = (0, ora_1.default)({ text: 'Fetching email accounts...', spinner: 'dots12', color: 'cyan' }).start();
112
+ try {
113
+ const accounts = await (0, directadmin_1.listEmailAccounts)(creds, targetDomain);
114
+ acctSpinner.stop();
115
+ if (accounts.length === 0) {
116
+ console.log(theme_1.theme.muted(' No email accounts found. Create an account first.\n'));
117
+ return;
118
+ }
119
+ const { user } = await inquirer_1.default.prompt([
120
+ {
121
+ type: 'list',
122
+ name: 'user',
123
+ message: 'Select account:',
124
+ choices: accounts.map((a) => ({ name: `${a}@${targetDomain}`, value: a })),
125
+ },
126
+ ]);
127
+ const answers = await inquirer_1.default.prompt([
128
+ {
129
+ type: 'editor',
130
+ name: 'message',
131
+ message: theme_1.theme.secondary('Autoresponder message:'),
132
+ validate: (input) => (input.trim() ? true : 'Message is required'),
133
+ },
134
+ {
135
+ type: 'input',
136
+ name: 'cc',
137
+ message: theme_1.theme.secondary('CC email address (optional):'),
138
+ validate: (input) => {
139
+ if (!input.trim())
140
+ return true;
141
+ return input.includes('@') ? true : 'Enter a valid email address';
142
+ },
143
+ },
144
+ ]);
145
+ const { confirm } = await inquirer_1.default.prompt([
146
+ {
147
+ type: 'confirm',
148
+ name: 'confirm',
149
+ message: `Create autoresponder for ${user}@${targetDomain}?`,
150
+ default: true,
151
+ },
152
+ ]);
153
+ if (!confirm) {
154
+ console.log(theme_1.theme.muted('\n Cancelled.\n'));
155
+ return;
156
+ }
157
+ const spinner = (0, ora_1.default)({ text: 'Creating autoresponder...', spinner: 'dots12', color: 'cyan' }).start();
158
+ const result = await (0, directadmin_1.createAutoresponder)(creds, targetDomain, user, answers.message, answers.cc || undefined);
159
+ if (result.error && result.error !== '0') {
160
+ spinner.fail(chalk_1.default.red('Failed to create autoresponder'));
161
+ console.log(theme_1.theme.error(` ${result.text || JSON.stringify(result)}\n`));
162
+ }
163
+ else {
164
+ spinner.succeed(chalk_1.default.green(`Autoresponder created for ${user}@${targetDomain}`));
165
+ console.log('');
166
+ }
167
+ }
168
+ catch (err) {
169
+ acctSpinner.stop();
170
+ console.log(theme_1.theme.error(` ${err.message}\n`));
171
+ }
172
+ }
173
+ async function autoresponderEdit(domain) {
174
+ const creds = getCreds();
175
+ const targetDomain = await pickDomain(creds, domain);
176
+ console.log(theme_1.theme.heading(`Edit Autoresponder on ${targetDomain}`));
177
+ const spinner = (0, ora_1.default)({ text: 'Fetching autoresponders...', spinner: 'dots12', color: 'cyan' }).start();
178
+ try {
179
+ const autoresponders = await (0, directadmin_1.listAutoresponders)(creds, targetDomain);
180
+ spinner.stop();
181
+ if (autoresponders.length === 0) {
182
+ console.log(theme_1.theme.muted(' No autoresponders to edit.\n'));
183
+ return;
184
+ }
185
+ const { user } = await inquirer_1.default.prompt([
186
+ {
187
+ type: 'list',
188
+ name: 'user',
189
+ message: 'Select autoresponder to edit:',
190
+ choices: autoresponders.map((a) => ({ name: `${a}@${targetDomain}`, value: a })),
191
+ },
192
+ ]);
193
+ const detailSpinner = (0, ora_1.default)({ text: 'Fetching autoresponder details...', spinner: 'dots12', color: 'cyan' }).start();
194
+ const details = await (0, directadmin_1.getAutoresponder)(creds, targetDomain, user);
195
+ detailSpinner.stop();
196
+ const answers = await inquirer_1.default.prompt([
197
+ {
198
+ type: 'editor',
199
+ name: 'message',
200
+ message: theme_1.theme.secondary('Autoresponder message:'),
201
+ default: details.message || details.text || '',
202
+ validate: (input) => (input.trim() ? true : 'Message is required'),
203
+ },
204
+ {
205
+ type: 'input',
206
+ name: 'cc',
207
+ message: theme_1.theme.secondary('CC email address (optional):'),
208
+ default: details.cc || '',
209
+ validate: (input) => {
210
+ if (!input.trim())
211
+ return true;
212
+ return input.includes('@') ? true : 'Enter a valid email address';
213
+ },
214
+ },
215
+ ]);
216
+ const editSpinner = (0, ora_1.default)({ text: 'Updating autoresponder...', spinner: 'dots12', color: 'cyan' }).start();
217
+ const result = await (0, directadmin_1.modifyAutoresponder)(creds, targetDomain, user, answers.message, answers.cc || undefined);
218
+ if (result.error && result.error !== '0') {
219
+ editSpinner.fail(chalk_1.default.red('Failed to update autoresponder'));
220
+ console.log(theme_1.theme.error(` ${result.text || JSON.stringify(result)}\n`));
221
+ }
222
+ else {
223
+ editSpinner.succeed(chalk_1.default.green(`Autoresponder updated for ${user}@${targetDomain}`));
224
+ console.log('');
225
+ }
226
+ }
227
+ catch (err) {
228
+ spinner.stop();
229
+ console.log(theme_1.theme.error(` ${err.message}\n`));
230
+ }
231
+ }
232
+ async function autoresponderDelete(domain) {
233
+ const creds = getCreds();
234
+ const targetDomain = await pickDomain(creds, domain);
235
+ console.log(theme_1.theme.heading(`Delete Autoresponder on ${targetDomain}`));
236
+ const spinner = (0, ora_1.default)({ text: 'Fetching autoresponders...', spinner: 'dots12', color: 'cyan' }).start();
237
+ try {
238
+ const autoresponders = await (0, directadmin_1.listAutoresponders)(creds, targetDomain);
239
+ spinner.stop();
240
+ if (autoresponders.length === 0) {
241
+ console.log(theme_1.theme.muted(' No autoresponders to delete.\n'));
242
+ return;
243
+ }
244
+ const { user } = await inquirer_1.default.prompt([
245
+ {
246
+ type: 'list',
247
+ name: 'user',
248
+ message: 'Select autoresponder to delete:',
249
+ choices: autoresponders.map((a) => ({ name: `${a}@${targetDomain}`, value: a })),
250
+ },
251
+ ]);
252
+ const { confirm } = await inquirer_1.default.prompt([
253
+ {
254
+ type: 'confirm',
255
+ name: 'confirm',
256
+ message: chalk_1.default.red(`Delete autoresponder for ${user}@${targetDomain}?`),
257
+ default: false,
258
+ },
259
+ ]);
260
+ if (!confirm) {
261
+ console.log(theme_1.theme.muted('\n Cancelled.\n'));
262
+ return;
263
+ }
264
+ const delSpinner = (0, ora_1.default)({ text: 'Deleting autoresponder...', spinner: 'dots12', color: 'red' }).start();
265
+ const result = await (0, directadmin_1.deleteAutoresponder)(creds, targetDomain, user);
266
+ if (result.error && result.error !== '0') {
267
+ delSpinner.fail(chalk_1.default.red('Failed to delete autoresponder'));
268
+ console.log(theme_1.theme.error(` ${result.text || JSON.stringify(result)}\n`));
269
+ }
270
+ else {
271
+ delSpinner.succeed(chalk_1.default.green(`Deleted autoresponder for ${user}@${targetDomain}`));
272
+ console.log('');
273
+ }
274
+ }
275
+ catch (err) {
276
+ spinner.stop();
277
+ console.log(theme_1.theme.error(` ${err.message}\n`));
278
+ }
279
+ }
280
+ //# sourceMappingURL=autoresponder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoresponder.js","sourceRoot":"","sources":["../../src/commands/autoresponder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function catchallGet(domain?: string): Promise<void>;
2
+ export declare function catchallSet(domain?: string): Promise<void>;
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.catchallGet = catchallGet;
7
+ exports.catchallSet = catchallSet;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const theme_1 = require("../utils/theme");
12
+ const config_1 = require("../utils/config");
13
+ const directadmin_1 = require("../utils/directadmin");
14
+ function getCreds() {
15
+ const config = (0, config_1.getConfig)();
16
+ if (!config.daUsername || !config.daLoginKey) {
17
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} Not authenticated. Run ${theme_1.theme.bold('mxroute auth login')} first.\n`));
18
+ process.exit(1);
19
+ }
20
+ return { server: config.server, username: config.daUsername, loginKey: config.daLoginKey };
21
+ }
22
+ async function pickDomain(creds, domain) {
23
+ if (domain)
24
+ return domain;
25
+ const config = (0, config_1.getConfig)();
26
+ if (config.domain)
27
+ return config.domain;
28
+ const spinner = (0, ora_1.default)({ text: 'Fetching domains...', spinner: 'dots12', color: 'cyan' }).start();
29
+ const domains = await (0, directadmin_1.listDomains)(creds);
30
+ spinner.stop();
31
+ if (domains.length === 0) {
32
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} No domains found.\n`));
33
+ process.exit(1);
34
+ }
35
+ if (domains.length === 1)
36
+ return domains[0];
37
+ const { selected } = await inquirer_1.default.prompt([
38
+ {
39
+ type: 'list',
40
+ name: 'selected',
41
+ message: 'Select domain:',
42
+ choices: domains,
43
+ },
44
+ ]);
45
+ return selected;
46
+ }
47
+ async function catchallGet(domain) {
48
+ const creds = getCreds();
49
+ const targetDomain = await pickDomain(creds, domain);
50
+ console.log(theme_1.theme.heading(`Catch-All: ${targetDomain}`));
51
+ const spinner = (0, ora_1.default)({ text: 'Fetching catch-all setting...', spinner: 'dots12', color: 'cyan' }).start();
52
+ try {
53
+ const value = await (0, directadmin_1.getCatchAll)(creds, targetDomain);
54
+ spinner.stop();
55
+ if (!value || value === ':blackhole:') {
56
+ console.log(theme_1.theme.box([
57
+ theme_1.theme.keyValue('Domain', targetDomain, 0),
58
+ theme_1.theme.keyValue('Catch-All', 'Disabled (messages are discarded)', 0),
59
+ ].join('\n'), 'Catch-All Setting'));
60
+ }
61
+ else if (value === ':fail:') {
62
+ console.log(theme_1.theme.box([
63
+ theme_1.theme.keyValue('Domain', targetDomain, 0),
64
+ theme_1.theme.keyValue('Catch-All', 'Reject (sender receives bounce)', 0),
65
+ ].join('\n'), 'Catch-All Setting'));
66
+ }
67
+ else {
68
+ console.log(theme_1.theme.box([theme_1.theme.keyValue('Domain', targetDomain, 0), theme_1.theme.keyValue('Catch-All', `Forward to ${value}`, 0)].join('\n'), 'Catch-All Setting'));
69
+ }
70
+ console.log('');
71
+ }
72
+ catch (err) {
73
+ spinner.fail(chalk_1.default.red('Failed to fetch catch-all setting'));
74
+ console.log(theme_1.theme.error(` ${err.message}\n`));
75
+ }
76
+ }
77
+ async function catchallSet(domain) {
78
+ const creds = getCreds();
79
+ const targetDomain = await pickDomain(creds, domain);
80
+ console.log(theme_1.theme.heading(`Set Catch-All for ${targetDomain}`));
81
+ const { action } = await inquirer_1.default.prompt([
82
+ {
83
+ type: 'list',
84
+ name: 'action',
85
+ message: 'What should happen to emails sent to non-existent addresses?',
86
+ choices: [
87
+ { name: 'Forward to an existing account', value: 'existing' },
88
+ { name: 'Forward to a custom email address', value: 'custom' },
89
+ { name: 'Reject (bounce back to sender)', value: 'reject' },
90
+ { name: 'Disable (silently discard)', value: 'disable' },
91
+ ],
92
+ },
93
+ ]);
94
+ let catchAllValue;
95
+ if (action === 'existing') {
96
+ const spinner = (0, ora_1.default)({ text: 'Fetching accounts...', spinner: 'dots12', color: 'cyan' }).start();
97
+ try {
98
+ const accounts = await (0, directadmin_1.listEmailAccounts)(creds, targetDomain);
99
+ spinner.stop();
100
+ if (accounts.length === 0) {
101
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} No email accounts found on ${targetDomain}.\n`));
102
+ return;
103
+ }
104
+ const { account } = await inquirer_1.default.prompt([
105
+ {
106
+ type: 'list',
107
+ name: 'account',
108
+ message: 'Forward catch-all to:',
109
+ choices: accounts.map((a) => ({ name: `${a}@${targetDomain}`, value: `${a}@${targetDomain}` })),
110
+ },
111
+ ]);
112
+ catchAllValue = account;
113
+ }
114
+ catch (err) {
115
+ spinner.stop();
116
+ console.log(theme_1.theme.error(` ${err.message}\n`));
117
+ return;
118
+ }
119
+ }
120
+ else if (action === 'custom') {
121
+ const { email } = await inquirer_1.default.prompt([
122
+ {
123
+ type: 'input',
124
+ name: 'email',
125
+ message: theme_1.theme.secondary('Forward to email address:'),
126
+ validate: (input) => (input.includes('@') ? true : 'Enter a valid email address'),
127
+ },
128
+ ]);
129
+ catchAllValue = email;
130
+ }
131
+ else if (action === 'reject') {
132
+ catchAllValue = ':fail:';
133
+ }
134
+ else {
135
+ catchAllValue = ':blackhole:';
136
+ }
137
+ const displayValue = catchAllValue === ':fail:'
138
+ ? 'Reject (bounce back to sender)'
139
+ : catchAllValue === ':blackhole:'
140
+ ? 'Disable (silently discard)'
141
+ : `Forward to ${catchAllValue}`;
142
+ const { confirm } = await inquirer_1.default.prompt([
143
+ {
144
+ type: 'confirm',
145
+ name: 'confirm',
146
+ message: `Set catch-all for ${targetDomain} to: ${displayValue}?`,
147
+ default: true,
148
+ },
149
+ ]);
150
+ if (!confirm) {
151
+ console.log(theme_1.theme.muted('\n Cancelled.\n'));
152
+ return;
153
+ }
154
+ const spinner = (0, ora_1.default)({ text: 'Updating catch-all...', spinner: 'dots12', color: 'cyan' }).start();
155
+ try {
156
+ const result = await (0, directadmin_1.setCatchAll)(creds, targetDomain, catchAllValue);
157
+ if (result.error && result.error !== '0') {
158
+ spinner.fail(chalk_1.default.red('Failed to update catch-all'));
159
+ console.log(theme_1.theme.error(` ${result.text || JSON.stringify(result)}\n`));
160
+ }
161
+ else {
162
+ spinner.succeed(chalk_1.default.green(`Catch-all updated for ${targetDomain}`));
163
+ console.log('');
164
+ console.log(theme_1.theme.box([theme_1.theme.keyValue('Domain', targetDomain, 0), theme_1.theme.keyValue('Catch-All', displayValue, 0)].join('\n'), 'Catch-All Updated'));
165
+ console.log('');
166
+ }
167
+ }
168
+ catch (err) {
169
+ spinner.fail(chalk_1.default.red('Failed to update catch-all'));
170
+ console.log(theme_1.theme.error(` ${err.message}\n`));
171
+ }
172
+ }
173
+ //# sourceMappingURL=catchall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catchall.js","sourceRoot":"","sources":["../../src/commands/catchall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function configSetup(): Promise<void>;
2
+ export declare function configShow(): Promise<void>;
3
+ export declare function configProfiles(): Promise<void>;
4
+ export declare function configSwitch(name?: string): Promise<void>;
5
+ export declare function configDelete(name?: string): Promise<void>;
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configSetup = configSetup;
7
+ exports.configShow = configShow;
8
+ exports.configProfiles = configProfiles;
9
+ exports.configSwitch = configSwitch;
10
+ exports.configDelete = configDelete;
11
+ const inquirer_1 = __importDefault(require("inquirer"));
12
+ const theme_1 = require("../utils/theme");
13
+ const config_1 = require("../utils/config");
14
+ async function configSetup() {
15
+ console.log(theme_1.theme.heading('Configure MXroute CLI'));
16
+ const config = (0, config_1.getConfig)();
17
+ const answers = await inquirer_1.default.prompt([
18
+ {
19
+ type: 'input',
20
+ name: 'profileName',
21
+ message: theme_1.theme.secondary('Profile name:'),
22
+ default: config.activeProfile || 'default',
23
+ },
24
+ {
25
+ type: 'input',
26
+ name: 'server',
27
+ message: theme_1.theme.secondary('MXroute server hostname:'),
28
+ default: config.server || '',
29
+ validate: (input) => {
30
+ if (!input.trim())
31
+ return 'Server hostname is required (e.g., tuesday)';
32
+ return true;
33
+ },
34
+ filter: (input) => input.replace('.mxrouting.net', '').trim(),
35
+ },
36
+ {
37
+ type: 'input',
38
+ name: 'username',
39
+ message: theme_1.theme.secondary('Email address (SMTP username):'),
40
+ default: config.username || '',
41
+ validate: (input) => {
42
+ if (!input.includes('@'))
43
+ return 'Must be a full email address';
44
+ return true;
45
+ },
46
+ },
47
+ {
48
+ type: 'password',
49
+ name: 'password',
50
+ message: theme_1.theme.secondary('Password:'),
51
+ mask: '•',
52
+ },
53
+ {
54
+ type: 'input',
55
+ name: 'domain',
56
+ message: theme_1.theme.secondary('Primary domain:'),
57
+ default: (answers) => {
58
+ const username = answers.username || config.username || '';
59
+ return username.split('@')[1] || config.domain || '';
60
+ },
61
+ },
62
+ ]);
63
+ (0, config_1.setProfile)(answers.profileName, {
64
+ server: answers.server,
65
+ username: answers.username,
66
+ password: answers.password,
67
+ domain: answers.domain,
68
+ });
69
+ console.log('');
70
+ console.log(theme_1.theme.box([
71
+ theme_1.theme.keyValue('Profile', answers.profileName, 0),
72
+ theme_1.theme.keyValue('Server', `${answers.server}.mxrouting.net`, 0),
73
+ theme_1.theme.keyValue('Username', answers.username, 0),
74
+ theme_1.theme.keyValue('Domain', answers.domain, 0),
75
+ theme_1.theme.keyValue('Password', '••••••••', 0),
76
+ ].join('\n'), 'Configuration Saved'));
77
+ console.log('');
78
+ console.log(theme_1.theme.success(` ${theme_1.theme.statusIcon('pass')} Configuration saved to ${theme_1.theme.muted((0, config_1.getConfigPath)())}`));
79
+ console.log('');
80
+ }
81
+ async function configShow() {
82
+ const config = (0, config_1.getConfig)();
83
+ console.log(theme_1.theme.heading('Current Configuration'));
84
+ if (!config.server) {
85
+ console.log(theme_1.theme.warning(` ${theme_1.theme.statusIcon('warn')} No configuration found. Run ${theme_1.theme.bold('mxroute config setup')} first.`));
86
+ return;
87
+ }
88
+ console.log(theme_1.theme.box([
89
+ theme_1.theme.keyValue('Profile', config.activeProfile, 0),
90
+ theme_1.theme.keyValue('Server', config.server ? `${config.server}.mxrouting.net` : theme_1.theme.muted('not set'), 0),
91
+ theme_1.theme.keyValue('Username', config.username || theme_1.theme.muted('not set'), 0),
92
+ theme_1.theme.keyValue('Domain', config.domain || theme_1.theme.muted('not set'), 0),
93
+ theme_1.theme.keyValue('Password', config.password ? '••••••••' : theme_1.theme.muted('not set'), 0),
94
+ theme_1.theme.keyValue('Config file', (0, config_1.getConfigPath)(), 0),
95
+ ].join('\n'), 'Active Profile'));
96
+ console.log('');
97
+ }
98
+ async function configProfiles() {
99
+ const profiles = (0, config_1.getProfiles)();
100
+ const active = (0, config_1.getConfig)().activeProfile;
101
+ console.log(theme_1.theme.heading('Profiles'));
102
+ if (Object.keys(profiles).length === 0) {
103
+ console.log(theme_1.theme.warning(` ${theme_1.theme.statusIcon('warn')} No profiles configured. Run ${theme_1.theme.bold('mxroute config setup')}`));
104
+ return;
105
+ }
106
+ for (const [name, profile] of Object.entries(profiles)) {
107
+ const isActive = name === active;
108
+ const marker = isActive ? theme_1.theme.success(' ● active') : '';
109
+ console.log(theme_1.theme.box([
110
+ theme_1.theme.keyValue('Server', `${profile.server}.mxrouting.net`, 0),
111
+ theme_1.theme.keyValue('Username', profile.username, 0),
112
+ theme_1.theme.keyValue('Domain', profile.domain, 0),
113
+ ].join('\n'), `${name}${marker}`));
114
+ console.log('');
115
+ }
116
+ }
117
+ async function configSwitch(name) {
118
+ const profiles = (0, config_1.getProfiles)();
119
+ if (Object.keys(profiles).length === 0) {
120
+ console.log(theme_1.theme.error(` ${theme_1.theme.statusIcon('fail')} No profiles to switch to.`));
121
+ return;
122
+ }
123
+ if (!name) {
124
+ const answer = await inquirer_1.default.prompt([
125
+ {
126
+ type: 'list',
127
+ name: 'profile',
128
+ message: 'Select profile:',
129
+ choices: Object.keys(profiles),
130
+ },
131
+ ]);
132
+ name = answer.profile;
133
+ }
134
+ if ((0, config_1.switchProfile)(name)) {
135
+ console.log(theme_1.theme.success(`\n ${theme_1.theme.statusIcon('pass')} Switched to profile: ${theme_1.theme.bold(name)}\n`));
136
+ }
137
+ else {
138
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} Profile "${name}" not found.\n`));
139
+ }
140
+ }
141
+ async function configDelete(name) {
142
+ const profiles = (0, config_1.getProfiles)();
143
+ if (!name) {
144
+ const answer = await inquirer_1.default.prompt([
145
+ {
146
+ type: 'list',
147
+ name: 'profile',
148
+ message: 'Select profile to delete:',
149
+ choices: Object.keys(profiles),
150
+ },
151
+ ]);
152
+ name = answer.profile;
153
+ }
154
+ if ((0, config_1.deleteProfile)(name)) {
155
+ console.log(theme_1.theme.success(`\n ${theme_1.theme.statusIcon('pass')} Deleted profile: ${name}\n`));
156
+ }
157
+ else {
158
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} Profile "${name}" not found.\n`));
159
+ }
160
+ }
161
+ //# sourceMappingURL=config.js.map