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,109 @@
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.domainsList = domainsList;
7
+ exports.domainsInfo = domainsInfo;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const cli_table3_1 = __importDefault(require("cli-table3"));
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 domainsList() {
23
+ const creds = getCreds();
24
+ console.log(theme_1.theme.heading('Domains'));
25
+ const spinner = (0, ora_1.default)({ text: 'Fetching domains...', spinner: 'dots12', color: 'cyan' }).start();
26
+ try {
27
+ const domains = await (0, directadmin_1.listDomains)(creds);
28
+ spinner.stop();
29
+ if (domains.length === 0) {
30
+ console.log(theme_1.theme.muted(' No domains found.\n'));
31
+ return;
32
+ }
33
+ const table = new cli_table3_1.default({
34
+ head: [chalk_1.default.hex('#6C63FF')('#'), chalk_1.default.hex('#6C63FF')('Domain'), chalk_1.default.hex('#6C63FF')('Aliases')],
35
+ style: { head: [], border: ['gray'] },
36
+ chars: {
37
+ top: '─',
38
+ 'top-mid': '┬',
39
+ 'top-left': ' ┌',
40
+ 'top-right': '┐',
41
+ bottom: '─',
42
+ 'bottom-mid': '┴',
43
+ 'bottom-left': ' └',
44
+ 'bottom-right': '┘',
45
+ left: ' │',
46
+ 'left-mid': ' ├',
47
+ mid: '─',
48
+ 'mid-mid': '┼',
49
+ right: '│',
50
+ 'right-mid': '┤',
51
+ middle: '│',
52
+ },
53
+ });
54
+ for (let i = 0; i < domains.length; i++) {
55
+ const domain = domains[i];
56
+ let aliases = '';
57
+ try {
58
+ const pointers = await (0, directadmin_1.listDomainPointers)(creds, domain);
59
+ const aliasList = Object.keys(pointers).filter((k) => k !== 'error' && k !== 'text');
60
+ aliases = aliasList.length > 0 ? aliasList.join(', ') : chalk_1.default.gray('none');
61
+ }
62
+ catch {
63
+ aliases = chalk_1.default.gray('—');
64
+ }
65
+ table.push([chalk_1.default.gray(`${i + 1}`), chalk_1.default.white.bold(domain), aliases]);
66
+ }
67
+ console.log(table.toString());
68
+ console.log(theme_1.theme.muted(`\n ${domains.length} domain${domains.length !== 1 ? 's' : ''} found\n`));
69
+ }
70
+ catch (err) {
71
+ spinner.fail(chalk_1.default.red('Failed to fetch domains'));
72
+ console.log(theme_1.theme.error(` ${err.message}\n`));
73
+ }
74
+ }
75
+ async function domainsInfo(domain) {
76
+ const creds = getCreds();
77
+ const config = (0, config_1.getConfig)();
78
+ const targetDomain = domain || config.domain;
79
+ if (!targetDomain) {
80
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} Specify a domain: ${theme_1.theme.bold('mxroute domains info example.com')}\n`));
81
+ process.exit(1);
82
+ }
83
+ console.log(theme_1.theme.heading(`Domain: ${targetDomain}`));
84
+ const spinner = (0, ora_1.default)({ text: `Fetching info for ${targetDomain}...`, spinner: 'dots12', color: 'cyan' }).start();
85
+ try {
86
+ const [pointers] = await Promise.all([(0, directadmin_1.listDomainPointers)(creds, targetDomain).catch(() => ({}))]);
87
+ spinner.stop();
88
+ const aliasList = Object.keys(pointers).filter((k) => k !== 'error' && k !== 'text');
89
+ console.log(theme_1.theme.keyValue('Domain', targetDomain));
90
+ console.log(theme_1.theme.keyValue('Server', `${creds.server}.mxrouting.net`));
91
+ if (aliasList.length > 0) {
92
+ console.log(theme_1.theme.keyValue('Aliases', aliasList.join(', ')));
93
+ }
94
+ else {
95
+ console.log(theme_1.theme.keyValue('Aliases', chalk_1.default.gray('none')));
96
+ }
97
+ console.log('');
98
+ console.log(theme_1.theme.subheading('Quick Actions'));
99
+ console.log(theme_1.theme.muted(` mxroute accounts list ${targetDomain} List email accounts`));
100
+ console.log(theme_1.theme.muted(` mxroute forwarders list ${targetDomain} List forwarders`));
101
+ console.log(theme_1.theme.muted(` mxroute dns check ${targetDomain} Check DNS records`));
102
+ console.log('');
103
+ }
104
+ catch (err) {
105
+ spinner.fail(chalk_1.default.red('Failed to fetch domain info'));
106
+ console.log(theme_1.theme.error(` ${err.message}\n`));
107
+ }
108
+ }
109
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/commands/domains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function filtersList(domain?: string): Promise<void>;
2
+ export declare function filtersCreate(domain?: string): Promise<void>;
3
+ export declare function filtersDelete(domain?: string): Promise<void>;
@@ -0,0 +1,300 @@
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.filtersList = filtersList;
7
+ exports.filtersCreate = filtersCreate;
8
+ exports.filtersDelete = filtersDelete;
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const ora_1 = __importDefault(require("ora"));
11
+ const inquirer_1 = __importDefault(require("inquirer"));
12
+ const cli_table3_1 = __importDefault(require("cli-table3"));
13
+ const theme_1 = require("../utils/theme");
14
+ const config_1 = require("../utils/config");
15
+ const directadmin_1 = require("../utils/directadmin");
16
+ function getCreds() {
17
+ const config = (0, config_1.getConfig)();
18
+ if (!config.daUsername || !config.daLoginKey) {
19
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} Not authenticated. Run ${theme_1.theme.bold('mxroute auth login')} first.\n`));
20
+ process.exit(1);
21
+ }
22
+ return { server: config.server, username: config.daUsername, loginKey: config.daLoginKey };
23
+ }
24
+ async function pickDomain(creds, domain) {
25
+ if (domain)
26
+ return domain;
27
+ const config = (0, config_1.getConfig)();
28
+ if (config.domain)
29
+ return config.domain;
30
+ const spinner = (0, ora_1.default)({ text: 'Fetching domains...', spinner: 'dots12', color: 'cyan' }).start();
31
+ const domains = await (0, directadmin_1.listDomains)(creds);
32
+ spinner.stop();
33
+ if (domains.length === 0) {
34
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} No domains found.\n`));
35
+ process.exit(1);
36
+ }
37
+ if (domains.length === 1)
38
+ return domains[0];
39
+ const { selected } = await inquirer_1.default.prompt([
40
+ {
41
+ type: 'list',
42
+ name: 'selected',
43
+ message: 'Select domain:',
44
+ choices: domains,
45
+ },
46
+ ]);
47
+ return selected;
48
+ }
49
+ async function filtersList(domain) {
50
+ const creds = getCreds();
51
+ const targetDomain = await pickDomain(creds, domain);
52
+ console.log(theme_1.theme.heading(`Email Filters: ${targetDomain}`));
53
+ const acctSpinner = (0, ora_1.default)({ text: 'Fetching accounts...', spinner: 'dots12', color: 'cyan' }).start();
54
+ try {
55
+ const accounts = await (0, directadmin_1.listEmailAccounts)(creds, targetDomain);
56
+ acctSpinner.stop();
57
+ if (accounts.length === 0) {
58
+ console.log(theme_1.theme.muted(' No email accounts found.\n'));
59
+ return;
60
+ }
61
+ const { user } = await inquirer_1.default.prompt([
62
+ {
63
+ type: 'list',
64
+ name: 'user',
65
+ message: 'Select email account:',
66
+ choices: accounts.map((a) => ({ name: `${a}@${targetDomain}`, value: a })),
67
+ },
68
+ ]);
69
+ const filterSpinner = (0, ora_1.default)({ text: 'Fetching filters...', spinner: 'dots12', color: 'cyan' }).start();
70
+ const filters = await (0, directadmin_1.listEmailFilters)(creds, targetDomain, user);
71
+ filterSpinner.stop();
72
+ if (filters.length === 0) {
73
+ console.log(theme_1.theme.muted(` No filters found for ${user}@${targetDomain}.\n`));
74
+ return;
75
+ }
76
+ const table = new cli_table3_1.default({
77
+ head: [chalk_1.default.hex('#6C63FF')('#'), chalk_1.default.hex('#6C63FF')('Name'), chalk_1.default.hex('#6C63FF')('Details')],
78
+ style: { head: [], border: ['gray'] },
79
+ chars: {
80
+ top: '─',
81
+ 'top-mid': '┬',
82
+ 'top-left': ' ┌',
83
+ 'top-right': '┐',
84
+ bottom: '─',
85
+ 'bottom-mid': '┴',
86
+ 'bottom-left': ' └',
87
+ 'bottom-right': '┘',
88
+ left: ' │',
89
+ 'left-mid': ' ├',
90
+ mid: '─',
91
+ 'mid-mid': '┼',
92
+ right: '│',
93
+ 'right-mid': '┤',
94
+ middle: '│',
95
+ },
96
+ });
97
+ for (let i = 0; i < filters.length; i++) {
98
+ const f = filters[i];
99
+ const name = typeof f === 'string' ? f : f.name || `Filter ${i + 1}`;
100
+ const details = typeof f === 'string' ? '' : f.value || JSON.stringify(f);
101
+ table.push([
102
+ chalk_1.default.gray(`${i + 1}`),
103
+ chalk_1.default.white(name),
104
+ chalk_1.default.cyan(typeof details === 'string' ? details : JSON.stringify(details)),
105
+ ]);
106
+ }
107
+ console.log(table.toString());
108
+ console.log(theme_1.theme.muted(`\n ${filters.length} filter${filters.length !== 1 ? 's' : ''} for ${user}@${targetDomain}\n`));
109
+ }
110
+ catch (err) {
111
+ acctSpinner.stop();
112
+ console.log(theme_1.theme.error(` ${err.message}\n`));
113
+ }
114
+ }
115
+ async function filtersCreate(domain) {
116
+ const creds = getCreds();
117
+ const targetDomain = await pickDomain(creds, domain);
118
+ console.log(theme_1.theme.heading(`Create Email Filter on ${targetDomain}`));
119
+ const acctSpinner = (0, ora_1.default)({ text: 'Fetching accounts...', spinner: 'dots12', color: 'cyan' }).start();
120
+ try {
121
+ const accounts = await (0, directadmin_1.listEmailAccounts)(creds, targetDomain);
122
+ acctSpinner.stop();
123
+ if (accounts.length === 0) {
124
+ console.log(theme_1.theme.muted(' No email accounts found.\n'));
125
+ return;
126
+ }
127
+ const answers = await inquirer_1.default.prompt([
128
+ {
129
+ type: 'list',
130
+ name: 'user',
131
+ message: 'Select email account:',
132
+ choices: accounts.map((a) => ({ name: `${a}@${targetDomain}`, value: a })),
133
+ },
134
+ {
135
+ type: 'input',
136
+ name: 'filterName',
137
+ message: theme_1.theme.secondary('Filter name:'),
138
+ validate: (input) => (input.trim() ? true : 'Filter name is required'),
139
+ },
140
+ {
141
+ type: 'list',
142
+ name: 'field',
143
+ message: 'Match field:',
144
+ choices: [
145
+ { name: 'From', value: 'from' },
146
+ { name: 'To', value: 'to' },
147
+ { name: 'Subject', value: 'subject' },
148
+ { name: 'Body', value: 'body' },
149
+ ],
150
+ },
151
+ {
152
+ type: 'list',
153
+ name: 'matchType',
154
+ message: 'Match type:',
155
+ choices: [
156
+ { name: 'Contains', value: 'contains' },
157
+ { name: 'Equals', value: 'equals' },
158
+ { name: 'Starts with', value: 'startswith' },
159
+ { name: 'Ends with', value: 'endswith' },
160
+ ],
161
+ },
162
+ {
163
+ type: 'input',
164
+ name: 'matchValue',
165
+ message: theme_1.theme.secondary('Value to match:'),
166
+ validate: (input) => (input.trim() ? true : 'Match value is required'),
167
+ },
168
+ {
169
+ type: 'list',
170
+ name: 'action',
171
+ message: 'Action:',
172
+ choices: [
173
+ { name: 'Discard', value: 'discard' },
174
+ { name: 'Forward to address', value: 'forward' },
175
+ { name: 'Move to folder', value: 'move' },
176
+ ],
177
+ },
178
+ {
179
+ type: 'input',
180
+ name: 'destination',
181
+ message: (answers) => answers.action === 'forward'
182
+ ? theme_1.theme.secondary('Forward to (email address):')
183
+ : theme_1.theme.secondary('Move to folder:'),
184
+ when: (answers) => answers.action === 'forward' || answers.action === 'move',
185
+ validate: (input, answers) => {
186
+ if (!input.trim())
187
+ return answers.action === 'forward' ? 'Email address is required' : 'Folder name is required';
188
+ if (answers.action === 'forward' && !input.includes('@'))
189
+ return 'Enter a valid email address';
190
+ return true;
191
+ },
192
+ },
193
+ ]);
194
+ const summary = `${answers.field} ${answers.matchType} "${answers.matchValue}" -> ${answers.action}${answers.destination ? ` (${answers.destination})` : ''}`;
195
+ const { confirm } = await inquirer_1.default.prompt([
196
+ {
197
+ type: 'confirm',
198
+ name: 'confirm',
199
+ message: `Create filter "${answers.filterName}" for ${answers.user}@${targetDomain}?\n Rule: ${summary}`,
200
+ default: true,
201
+ },
202
+ ]);
203
+ if (!confirm) {
204
+ console.log(theme_1.theme.muted('\n Cancelled.\n'));
205
+ return;
206
+ }
207
+ const filterData = {
208
+ name: answers.filterName,
209
+ field: answers.field,
210
+ match: answers.matchType,
211
+ val: answers.matchValue,
212
+ action: answers.action,
213
+ };
214
+ if (answers.destination) {
215
+ filterData.dest = answers.destination;
216
+ }
217
+ const spinner = (0, ora_1.default)({ text: 'Creating filter...', spinner: 'dots12', color: 'cyan' }).start();
218
+ const result = await (0, directadmin_1.createEmailFilter)(creds, targetDomain, answers.user, filterData);
219
+ if (result.error && result.error !== '0') {
220
+ spinner.fail(chalk_1.default.red('Failed to create filter'));
221
+ console.log(theme_1.theme.error(` ${result.text || JSON.stringify(result)}\n`));
222
+ }
223
+ else {
224
+ spinner.succeed(chalk_1.default.green(`Filter "${answers.filterName}" created for ${answers.user}@${targetDomain}`));
225
+ console.log('');
226
+ }
227
+ }
228
+ catch (err) {
229
+ acctSpinner.stop();
230
+ console.log(theme_1.theme.error(` ${err.message}\n`));
231
+ }
232
+ }
233
+ async function filtersDelete(domain) {
234
+ const creds = getCreds();
235
+ const targetDomain = await pickDomain(creds, domain);
236
+ console.log(theme_1.theme.heading(`Delete Email Filter on ${targetDomain}`));
237
+ const acctSpinner = (0, ora_1.default)({ text: 'Fetching accounts...', spinner: 'dots12', color: 'cyan' }).start();
238
+ try {
239
+ const accounts = await (0, directadmin_1.listEmailAccounts)(creds, targetDomain);
240
+ acctSpinner.stop();
241
+ if (accounts.length === 0) {
242
+ console.log(theme_1.theme.muted(' No email accounts found.\n'));
243
+ return;
244
+ }
245
+ const { user } = await inquirer_1.default.prompt([
246
+ {
247
+ type: 'list',
248
+ name: 'user',
249
+ message: 'Select email account:',
250
+ choices: accounts.map((a) => ({ name: `${a}@${targetDomain}`, value: a })),
251
+ },
252
+ ]);
253
+ const filterSpinner = (0, ora_1.default)({ text: 'Fetching filters...', spinner: 'dots12', color: 'cyan' }).start();
254
+ const filters = await (0, directadmin_1.listEmailFilters)(creds, targetDomain, user);
255
+ filterSpinner.stop();
256
+ if (filters.length === 0) {
257
+ console.log(theme_1.theme.muted(` No filters to delete for ${user}@${targetDomain}.\n`));
258
+ return;
259
+ }
260
+ const filterChoices = filters.map((f, i) => {
261
+ const name = typeof f === 'string' ? f : f.name || `Filter ${i + 1}`;
262
+ return { name, value: name };
263
+ });
264
+ const { filterName } = await inquirer_1.default.prompt([
265
+ {
266
+ type: 'list',
267
+ name: 'filterName',
268
+ message: 'Select filter to delete:',
269
+ choices: filterChoices,
270
+ },
271
+ ]);
272
+ const { confirm } = await inquirer_1.default.prompt([
273
+ {
274
+ type: 'confirm',
275
+ name: 'confirm',
276
+ message: chalk_1.default.red(`Delete filter "${filterName}" from ${user}@${targetDomain}?`),
277
+ default: false,
278
+ },
279
+ ]);
280
+ if (!confirm) {
281
+ console.log(theme_1.theme.muted('\n Cancelled.\n'));
282
+ return;
283
+ }
284
+ const delSpinner = (0, ora_1.default)({ text: 'Deleting filter...', spinner: 'dots12', color: 'red' }).start();
285
+ const result = await (0, directadmin_1.deleteEmailFilter)(creds, targetDomain, user, filterName);
286
+ if (result.error && result.error !== '0') {
287
+ delSpinner.fail(chalk_1.default.red('Failed to delete filter'));
288
+ console.log(theme_1.theme.error(` ${result.text || JSON.stringify(result)}\n`));
289
+ }
290
+ else {
291
+ delSpinner.succeed(chalk_1.default.green(`Deleted filter "${filterName}" from ${user}@${targetDomain}`));
292
+ console.log('');
293
+ }
294
+ }
295
+ catch (err) {
296
+ acctSpinner.stop();
297
+ console.log(theme_1.theme.error(` ${err.message}\n`));
298
+ }
299
+ }
300
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/commands/filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function forwardersList(domain?: string): Promise<void>;
2
+ export declare function forwardersCreate(domain?: string): Promise<void>;
3
+ export declare function forwardersDelete(domain?: string): Promise<void>;
@@ -0,0 +1,202 @@
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.forwardersList = forwardersList;
7
+ exports.forwardersCreate = forwardersCreate;
8
+ exports.forwardersDelete = forwardersDelete;
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const ora_1 = __importDefault(require("ora"));
11
+ const inquirer_1 = __importDefault(require("inquirer"));
12
+ const cli_table3_1 = __importDefault(require("cli-table3"));
13
+ const theme_1 = require("../utils/theme");
14
+ const config_1 = require("../utils/config");
15
+ const directadmin_1 = require("../utils/directadmin");
16
+ function getCreds() {
17
+ const config = (0, config_1.getConfig)();
18
+ if (!config.daUsername || !config.daLoginKey) {
19
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} Not authenticated. Run ${theme_1.theme.bold('mxroute auth login')} first.\n`));
20
+ process.exit(1);
21
+ }
22
+ return { server: config.server, username: config.daUsername, loginKey: config.daLoginKey };
23
+ }
24
+ async function pickDomain(creds, domain) {
25
+ if (domain)
26
+ return domain;
27
+ const config = (0, config_1.getConfig)();
28
+ if (config.domain)
29
+ return config.domain;
30
+ const spinner = (0, ora_1.default)({ text: 'Fetching domains...', spinner: 'dots12', color: 'cyan' }).start();
31
+ const domains = await (0, directadmin_1.listDomains)(creds);
32
+ spinner.stop();
33
+ if (domains.length === 0) {
34
+ console.log(theme_1.theme.error(`\n ${theme_1.theme.statusIcon('fail')} No domains found.\n`));
35
+ process.exit(1);
36
+ }
37
+ if (domains.length === 1)
38
+ return domains[0];
39
+ const { selected } = await inquirer_1.default.prompt([
40
+ {
41
+ type: 'list',
42
+ name: 'selected',
43
+ message: 'Select domain:',
44
+ choices: domains,
45
+ },
46
+ ]);
47
+ return selected;
48
+ }
49
+ async function forwardersList(domain) {
50
+ const creds = getCreds();
51
+ const targetDomain = await pickDomain(creds, domain);
52
+ console.log(theme_1.theme.heading(`Forwarders: ${targetDomain}`));
53
+ const spinner = (0, ora_1.default)({ text: 'Fetching forwarders...', spinner: 'dots12', color: 'cyan' }).start();
54
+ try {
55
+ const forwarders = await (0, directadmin_1.listForwarders)(creds, targetDomain);
56
+ spinner.stop();
57
+ if (forwarders.length === 0) {
58
+ console.log(theme_1.theme.muted(' No forwarders found.\n'));
59
+ return;
60
+ }
61
+ const table = new cli_table3_1.default({
62
+ head: [chalk_1.default.hex('#6C63FF')('#'), chalk_1.default.hex('#6C63FF')('From'), chalk_1.default.hex('#6C63FF')('To')],
63
+ style: { head: [], border: ['gray'] },
64
+ chars: {
65
+ top: '─',
66
+ 'top-mid': '┬',
67
+ 'top-left': ' ┌',
68
+ 'top-right': '┐',
69
+ bottom: '─',
70
+ 'bottom-mid': '┴',
71
+ 'bottom-left': ' └',
72
+ 'bottom-right': '┘',
73
+ left: ' │',
74
+ 'left-mid': ' ├',
75
+ mid: '─',
76
+ 'mid-mid': '┼',
77
+ right: '│',
78
+ 'right-mid': '┤',
79
+ middle: '│',
80
+ },
81
+ });
82
+ for (let i = 0; i < forwarders.length; i++) {
83
+ const fwd = forwarders[i];
84
+ let dest = '';
85
+ try {
86
+ dest = await (0, directadmin_1.getForwarderDestination)(creds, targetDomain, fwd);
87
+ }
88
+ catch {
89
+ dest = chalk_1.default.gray('—');
90
+ }
91
+ table.push([chalk_1.default.gray(`${i + 1}`), chalk_1.default.white(`${fwd}@${targetDomain}`), chalk_1.default.cyan(dest)]);
92
+ }
93
+ console.log(table.toString());
94
+ console.log(theme_1.theme.muted(`\n ${forwarders.length} forwarder${forwarders.length !== 1 ? 's' : ''}\n`));
95
+ }
96
+ catch (err) {
97
+ spinner.fail(chalk_1.default.red('Failed to fetch forwarders'));
98
+ console.log(theme_1.theme.error(` ${err.message}\n`));
99
+ }
100
+ }
101
+ async function forwardersCreate(domain) {
102
+ const creds = getCreds();
103
+ const targetDomain = await pickDomain(creds, domain);
104
+ console.log(theme_1.theme.heading(`Create Forwarder on ${targetDomain}`));
105
+ const answers = await inquirer_1.default.prompt([
106
+ {
107
+ type: 'input',
108
+ name: 'user',
109
+ message: theme_1.theme.secondary(`Username (before @${targetDomain}):`),
110
+ validate: (input) => {
111
+ if (!input.trim())
112
+ return 'Username is required';
113
+ if (input.includes('@'))
114
+ return 'Enter just the username part';
115
+ return true;
116
+ },
117
+ },
118
+ {
119
+ type: 'input',
120
+ name: 'destination',
121
+ message: theme_1.theme.secondary('Forward to (email address):'),
122
+ validate: (input) => (input.includes('@') ? true : 'Enter a valid email address'),
123
+ },
124
+ ]);
125
+ const { confirm } = await inquirer_1.default.prompt([
126
+ {
127
+ type: 'confirm',
128
+ name: 'confirm',
129
+ message: `Forward ${answers.user}@${targetDomain} to ${answers.destination}?`,
130
+ default: true,
131
+ },
132
+ ]);
133
+ if (!confirm) {
134
+ console.log(theme_1.theme.muted('\n Cancelled.\n'));
135
+ return;
136
+ }
137
+ const spinner = (0, ora_1.default)({ text: 'Creating forwarder...', spinner: 'dots12', color: 'cyan' }).start();
138
+ try {
139
+ const result = await (0, directadmin_1.createForwarder)(creds, targetDomain, answers.user, answers.destination);
140
+ if (result.error && result.error !== '0') {
141
+ spinner.fail(chalk_1.default.red('Failed to create forwarder'));
142
+ console.log(theme_1.theme.error(` ${result.text || JSON.stringify(result)}\n`));
143
+ }
144
+ else {
145
+ spinner.succeed(chalk_1.default.green(`Forwarder created: ${answers.user}@${targetDomain} → ${answers.destination}`));
146
+ console.log('');
147
+ }
148
+ }
149
+ catch (err) {
150
+ spinner.fail(chalk_1.default.red('Failed to create forwarder'));
151
+ console.log(theme_1.theme.error(` ${err.message}\n`));
152
+ }
153
+ }
154
+ async function forwardersDelete(domain) {
155
+ const creds = getCreds();
156
+ const targetDomain = await pickDomain(creds, domain);
157
+ console.log(theme_1.theme.heading(`Delete Forwarder on ${targetDomain}`));
158
+ const spinner = (0, ora_1.default)({ text: 'Fetching forwarders...', spinner: 'dots12', color: 'cyan' }).start();
159
+ try {
160
+ const forwarders = await (0, directadmin_1.listForwarders)(creds, targetDomain);
161
+ spinner.stop();
162
+ if (forwarders.length === 0) {
163
+ console.log(theme_1.theme.muted(' No forwarders to delete.\n'));
164
+ return;
165
+ }
166
+ const { user } = await inquirer_1.default.prompt([
167
+ {
168
+ type: 'list',
169
+ name: 'user',
170
+ message: 'Select forwarder to delete:',
171
+ choices: forwarders.map((f) => ({ name: `${f}@${targetDomain}`, value: f })),
172
+ },
173
+ ]);
174
+ const { confirm } = await inquirer_1.default.prompt([
175
+ {
176
+ type: 'confirm',
177
+ name: 'confirm',
178
+ message: `Delete forwarder ${user}@${targetDomain}?`,
179
+ default: false,
180
+ },
181
+ ]);
182
+ if (!confirm) {
183
+ console.log(theme_1.theme.muted('\n Cancelled.\n'));
184
+ return;
185
+ }
186
+ const delSpinner = (0, ora_1.default)({ text: 'Deleting forwarder...', spinner: 'dots12', color: 'red' }).start();
187
+ const result = await (0, directadmin_1.deleteForwarder)(creds, targetDomain, user);
188
+ if (result.error && result.error !== '0') {
189
+ delSpinner.fail(chalk_1.default.red('Failed to delete forwarder'));
190
+ console.log(theme_1.theme.error(` ${result.text || JSON.stringify(result)}\n`));
191
+ }
192
+ else {
193
+ delSpinner.succeed(chalk_1.default.green(`Deleted forwarder ${user}@${targetDomain}`));
194
+ console.log('');
195
+ }
196
+ }
197
+ catch (err) {
198
+ spinner.stop();
199
+ console.log(theme_1.theme.error(` ${err.message}\n`));
200
+ }
201
+ }
202
+ //# sourceMappingURL=forwarders.js.map