@minecraft-docker/mcctl 2.15.3 → 2.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +15 -12
  3. package/dist/commands/config-snapshot/create.d.ts +11 -0
  4. package/dist/commands/config-snapshot/create.d.ts.map +1 -0
  5. package/dist/commands/config-snapshot/create.js +39 -0
  6. package/dist/commands/config-snapshot/create.js.map +1 -0
  7. package/dist/commands/config-snapshot/delete.d.ts +10 -0
  8. package/dist/commands/config-snapshot/delete.d.ts.map +1 -0
  9. package/dist/commands/config-snapshot/delete.js +43 -0
  10. package/dist/commands/config-snapshot/delete.js.map +1 -0
  11. package/dist/commands/config-snapshot/diff.d.ts +14 -0
  12. package/dist/commands/config-snapshot/diff.d.ts.map +1 -0
  13. package/dist/commands/config-snapshot/diff.js +157 -0
  14. package/dist/commands/config-snapshot/diff.js.map +1 -0
  15. package/dist/commands/config-snapshot/index.d.ts +8 -0
  16. package/dist/commands/config-snapshot/index.d.ts.map +1 -0
  17. package/dist/commands/config-snapshot/index.js +9 -0
  18. package/dist/commands/config-snapshot/index.js.map +1 -0
  19. package/dist/commands/config-snapshot/list.d.ts +12 -0
  20. package/dist/commands/config-snapshot/list.d.ts.map +1 -0
  21. package/dist/commands/config-snapshot/list.js +55 -0
  22. package/dist/commands/config-snapshot/list.js.map +1 -0
  23. package/dist/commands/config-snapshot/restore.d.ts +11 -0
  24. package/dist/commands/config-snapshot/restore.d.ts.map +1 -0
  25. package/dist/commands/config-snapshot/restore.js +55 -0
  26. package/dist/commands/config-snapshot/restore.js.map +1 -0
  27. package/dist/commands/config-snapshot/schedule/add.d.ts +13 -0
  28. package/dist/commands/config-snapshot/schedule/add.d.ts.map +1 -0
  29. package/dist/commands/config-snapshot/schedule/add.js +46 -0
  30. package/dist/commands/config-snapshot/schedule/add.js.map +1 -0
  31. package/dist/commands/config-snapshot/schedule/index.d.ts +5 -0
  32. package/dist/commands/config-snapshot/schedule/index.d.ts.map +1 -0
  33. package/dist/commands/config-snapshot/schedule/index.js +5 -0
  34. package/dist/commands/config-snapshot/schedule/index.js.map +1 -0
  35. package/dist/commands/config-snapshot/schedule/list.d.ts +10 -0
  36. package/dist/commands/config-snapshot/schedule/list.d.ts.map +1 -0
  37. package/dist/commands/config-snapshot/schedule/list.js +57 -0
  38. package/dist/commands/config-snapshot/schedule/list.js.map +1 -0
  39. package/dist/commands/config-snapshot/schedule/remove.d.ts +10 -0
  40. package/dist/commands/config-snapshot/schedule/remove.d.ts.map +1 -0
  41. package/dist/commands/config-snapshot/schedule/remove.js +38 -0
  42. package/dist/commands/config-snapshot/schedule/remove.js.map +1 -0
  43. package/dist/commands/config-snapshot/schedule/toggle.d.ts +10 -0
  44. package/dist/commands/config-snapshot/schedule/toggle.d.ts.map +1 -0
  45. package/dist/commands/config-snapshot/schedule/toggle.js +34 -0
  46. package/dist/commands/config-snapshot/schedule/toggle.js.map +1 -0
  47. package/dist/commands/config-snapshot/show.d.ts +11 -0
  48. package/dist/commands/config-snapshot/show.d.ts.map +1 -0
  49. package/dist/commands/config-snapshot/show.js +53 -0
  50. package/dist/commands/config-snapshot/show.js.map +1 -0
  51. package/dist/commands/index.d.ts +1 -0
  52. package/dist/commands/index.d.ts.map +1 -1
  53. package/dist/commands/index.js +2 -0
  54. package/dist/commands/index.js.map +1 -1
  55. package/dist/index.js +145 -2
  56. package/dist/index.js.map +1 -1
  57. package/dist/infrastructure/di/container.d.ts +7 -1
  58. package/dist/infrastructure/di/container.d.ts.map +1 -1
  59. package/dist/infrastructure/di/container.js +30 -2
  60. package/dist/infrastructure/di/container.js.map +1 -1
  61. package/package.json +3 -3
@@ -0,0 +1,46 @@
1
+ import { log, colors } from '@minecraft-docker/shared';
2
+ import { getContainer } from '../../../infrastructure/di/container.js';
3
+ /**
4
+ * Add a new config snapshot schedule
5
+ */
6
+ export async function configSnapshotScheduleAddCommand(options) {
7
+ const container = getContainer(options.root);
8
+ const useCase = container.configSnapshotScheduleUseCase;
9
+ // Validate required fields
10
+ if (!options.serverName) {
11
+ log.error('--server is required. Usage: mcctl config-snapshot schedule add --server <name> --cron "..." --name "..."');
12
+ return 1;
13
+ }
14
+ if (!options.cron) {
15
+ log.error('--cron is required. Example: --cron "0 3 * * *"');
16
+ return 1;
17
+ }
18
+ if (!options.name) {
19
+ log.error('--name is required. Example: --name "Daily Snapshot"');
20
+ return 1;
21
+ }
22
+ const retentionCount = options.retention ?? 10;
23
+ try {
24
+ const schedule = await useCase.create(options.serverName, options.name, options.cron, retentionCount);
25
+ if (options.json) {
26
+ console.log(JSON.stringify(schedule.toJSON(), null, 2));
27
+ return 0;
28
+ }
29
+ console.log('');
30
+ console.log(colors.green('Config snapshot schedule created!'));
31
+ console.log(` Name: ${colors.bold(schedule.name)}`);
32
+ console.log(` Server: ${colors.bold(schedule.serverName.value)}`);
33
+ console.log(` Cron: ${colors.cyan(schedule.cronExpression.expression)}`);
34
+ console.log(` Schedule: ${schedule.cronExpression.toHumanReadable()}`);
35
+ console.log(` Retention: max ${colors.yellow(String(schedule.retentionCount))} snapshots`);
36
+ console.log(` ID: ${colors.dim(schedule.id)}`);
37
+ console.log('');
38
+ return 0;
39
+ }
40
+ catch (error) {
41
+ const message = error instanceof Error ? error.message : String(error);
42
+ log.error(`Failed to create schedule: ${message}`);
43
+ return 1;
44
+ }
45
+ }
46
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/config-snapshot/schedule/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAWvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,OAAyC;IAEzC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,6BAA6B,CAAC;IAExD,2BAA2B;IAC3B,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,GAAG,CAAC,KAAK,CACP,2GAA2G,CAC5G,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CACP,iDAAiD,CAClD,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CACP,sDAAsD,CACvD,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CACnC,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,IAAI,EACZ,cAAc,CACf,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CACT,gBAAgB,QAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,EAAE,CAC5D,CAAC;QACF,OAAO,CAAC,GAAG,CACT,oBAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,YAAY,CAC/E,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,GAAG,CAAC,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { configSnapshotScheduleListCommand, type ConfigSnapshotScheduleListOptions, } from './list.js';
2
+ export { configSnapshotScheduleAddCommand, type ConfigSnapshotScheduleAddOptions, } from './add.js';
3
+ export { configSnapshotScheduleRemoveCommand, type ConfigSnapshotScheduleRemoveOptions, } from './remove.js';
4
+ export { configSnapshotScheduleToggleCommand, type ConfigSnapshotScheduleToggleOptions, } from './toggle.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/config-snapshot/schedule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,KAAK,iCAAiC,GACvC,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gCAAgC,EAChC,KAAK,gCAAgC,GACtC,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mCAAmC,EACnC,KAAK,mCAAmC,GACzC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mCAAmC,EACnC,KAAK,mCAAmC,GACzC,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { configSnapshotScheduleListCommand, } from './list.js';
2
+ export { configSnapshotScheduleAddCommand, } from './add.js';
3
+ export { configSnapshotScheduleRemoveCommand, } from './remove.js';
4
+ export { configSnapshotScheduleToggleCommand, } from './toggle.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/config-snapshot/schedule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,GAElC,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gCAAgC,GAEjC,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mCAAmC,GAEpC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mCAAmC,GAEpC,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface ConfigSnapshotScheduleListOptions {
2
+ root?: string;
3
+ serverName?: string;
4
+ json?: boolean;
5
+ }
6
+ /**
7
+ * List config snapshot schedules
8
+ */
9
+ export declare function configSnapshotScheduleListCommand(options: ConfigSnapshotScheduleListOptions): Promise<number>;
10
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/config-snapshot/schedule/list.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iCAAiC;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,MAAM,CAAC,CA2EjB"}
@@ -0,0 +1,57 @@
1
+ import { log, colors } from '@minecraft-docker/shared';
2
+ import { getContainer } from '../../../infrastructure/di/container.js';
3
+ /**
4
+ * List config snapshot schedules
5
+ */
6
+ export async function configSnapshotScheduleListCommand(options) {
7
+ const container = getContainer(options.root);
8
+ const useCase = container.configSnapshotScheduleUseCase;
9
+ try {
10
+ const schedules = options.serverName
11
+ ? await useCase.findByServer(options.serverName)
12
+ : await useCase.findAll();
13
+ if (options.json) {
14
+ console.log(JSON.stringify(schedules.map((s) => s.toJSON()), null, 2));
15
+ return 0;
16
+ }
17
+ if (schedules.length === 0) {
18
+ console.log('');
19
+ if (options.serverName) {
20
+ console.log(colors.dim(`No schedules configured for server "${options.serverName}".`));
21
+ }
22
+ else {
23
+ console.log(colors.dim('No schedules configured.'));
24
+ }
25
+ console.log(colors.dim(' Use: mcctl config-snapshot schedule add --server <name> --cron "0 3 * * *" --name "Daily"'));
26
+ console.log('');
27
+ return 0;
28
+ }
29
+ console.log('');
30
+ console.log(colors.bold(`Config Snapshot Schedules (${schedules.length}):`));
31
+ console.log('');
32
+ for (const schedule of schedules) {
33
+ const status = schedule.enabled
34
+ ? colors.green('enabled')
35
+ : colors.dim('disabled');
36
+ const name = colors.bold(schedule.name);
37
+ const cron = colors.cyan(schedule.cronExpression.expression);
38
+ const humanReadable = colors.dim(`(${schedule.cronExpression.toHumanReadable()})`);
39
+ console.log(` ${name} ${cron} ${humanReadable} [${status}]`);
40
+ console.log(` ID: ${colors.dim(schedule.id)}`);
41
+ console.log(` Server: ${colors.bold(schedule.serverName.value)}`);
42
+ console.log(` Retention: max ${colors.yellow(String(schedule.retentionCount))} snapshots`);
43
+ if (schedule.lastRunAt) {
44
+ const statusColor = schedule.lastRunStatus === 'success' ? colors.green : colors.red;
45
+ console.log(` Last run: ${statusColor(schedule.lastRunStatus ?? 'unknown')} at ${schedule.lastRunAt.toLocaleString()}`);
46
+ }
47
+ console.log('');
48
+ }
49
+ return 0;
50
+ }
51
+ catch (error) {
52
+ const message = error instanceof Error ? error.message : String(error);
53
+ log.error(`Failed to list schedules: ${message}`);
54
+ return 1;
55
+ }
56
+ }
57
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/config-snapshot/schedule/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ConfigSnapshotScheduleRemoveOptions {
2
+ root?: string;
3
+ id: string;
4
+ force?: boolean;
5
+ }
6
+ /**
7
+ * Remove a config snapshot schedule
8
+ */
9
+ export declare function configSnapshotScheduleRemoveCommand(options: ConfigSnapshotScheduleRemoveOptions): Promise<number>;
10
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../../src/commands/config-snapshot/schedule/remove.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mCAAmC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,mCAAmC,GAC3C,OAAO,CAAC,MAAM,CAAC,CAyCjB"}
@@ -0,0 +1,38 @@
1
+ import * as p from '@clack/prompts';
2
+ import { log, colors } from '@minecraft-docker/shared';
3
+ import { getContainer } from '../../../infrastructure/di/container.js';
4
+ /**
5
+ * Remove a config snapshot schedule
6
+ */
7
+ export async function configSnapshotScheduleRemoveCommand(options) {
8
+ if (!options.id) {
9
+ log.error('Schedule ID is required. Usage: mcctl config-snapshot schedule remove <id>');
10
+ return 1;
11
+ }
12
+ const container = getContainer(options.root);
13
+ const useCase = container.configSnapshotScheduleUseCase;
14
+ try {
15
+ // Confirmation prompt (unless --force)
16
+ if (!options.force) {
17
+ const confirmed = await p.confirm({
18
+ message: `Remove schedule ${colors.cyan(options.id.substring(0, 8))}...?`,
19
+ initialValue: false,
20
+ });
21
+ if (p.isCancel(confirmed) || !confirmed) {
22
+ console.log(colors.dim('\nRemoval cancelled.\n'));
23
+ return 0;
24
+ }
25
+ }
26
+ await useCase.delete(options.id);
27
+ console.log('');
28
+ console.log(colors.green(`Schedule removed: ${colors.dim(options.id.substring(0, 8))}...`));
29
+ console.log('');
30
+ return 0;
31
+ }
32
+ catch (error) {
33
+ const message = error instanceof Error ? error.message : String(error);
34
+ log.error(`Failed to remove schedule: ${message}`);
35
+ return 1;
36
+ }
37
+ }
38
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../../src/commands/config-snapshot/schedule/remove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAQvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,OAA4C;IAE5C,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CACP,4EAA4E,CAC7E,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,6BAA6B,CAAC;IAExD,IAAI,CAAC;QACH,uCAAuC;QACvC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;gBAChC,OAAO,EAAE,mBAAmB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;gBACzE,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QAED,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,KAAK,CACV,qBAAqB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CACjE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,GAAG,CAAC,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface ConfigSnapshotScheduleToggleOptions {
2
+ root?: string;
3
+ id: string;
4
+ action: 'enable' | 'disable';
5
+ }
6
+ /**
7
+ * Enable or disable a config snapshot schedule
8
+ */
9
+ export declare function configSnapshotScheduleToggleCommand(options: ConfigSnapshotScheduleToggleOptions): Promise<number>;
10
+ //# sourceMappingURL=toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../../../src/commands/config-snapshot/schedule/toggle.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mCAAmC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,mCAAmC,GAC3C,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
@@ -0,0 +1,34 @@
1
+ import { log, colors } from '@minecraft-docker/shared';
2
+ import { getContainer } from '../../../infrastructure/di/container.js';
3
+ /**
4
+ * Enable or disable a config snapshot schedule
5
+ */
6
+ export async function configSnapshotScheduleToggleCommand(options) {
7
+ if (!options.id) {
8
+ log.error(`Schedule ID is required. Usage: mcctl config-snapshot schedule ${options.action} <id>`);
9
+ return 1;
10
+ }
11
+ const container = getContainer(options.root);
12
+ const useCase = container.configSnapshotScheduleUseCase;
13
+ try {
14
+ if (options.action === 'enable') {
15
+ await useCase.enable(options.id);
16
+ console.log('');
17
+ console.log(colors.green(`Schedule enabled: ${colors.dim(options.id.substring(0, 8))}...`));
18
+ console.log('');
19
+ }
20
+ else {
21
+ await useCase.disable(options.id);
22
+ console.log('');
23
+ console.log(colors.yellow(`Schedule disabled: ${colors.dim(options.id.substring(0, 8))}...`));
24
+ console.log('');
25
+ }
26
+ return 0;
27
+ }
28
+ catch (error) {
29
+ const message = error instanceof Error ? error.message : String(error);
30
+ log.error(`Failed to ${options.action} schedule: ${message}`);
31
+ return 1;
32
+ }
33
+ }
34
+ //# sourceMappingURL=toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.js","sourceRoot":"","sources":["../../../../src/commands/config-snapshot/schedule/toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAQvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,OAA4C;IAE5C,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CACP,kEAAkE,OAAO,CAAC,MAAM,OAAO,CACxF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,6BAA6B,CAAC;IAExD,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAEjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,KAAK,CACV,qBAAqB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CACjE,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAElC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,MAAM,CACX,sBAAsB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAClE,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,GAAG,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,MAAM,cAAc,OAAO,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface ConfigSnapshotShowOptions {
2
+ root?: string;
3
+ id: string;
4
+ files?: boolean;
5
+ json?: boolean;
6
+ }
7
+ /**
8
+ * Show details of a specific config snapshot
9
+ */
10
+ export declare function configSnapshotShowCommand(options: ConfigSnapshotShowOptions): Promise<number>;
11
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/config-snapshot/show.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CA+DjB"}
@@ -0,0 +1,53 @@
1
+ import { log, colors } from '@minecraft-docker/shared';
2
+ import { getContainer } from '../../infrastructure/di/container.js';
3
+ /**
4
+ * Show details of a specific config snapshot
5
+ */
6
+ export async function configSnapshotShowCommand(options) {
7
+ if (!options.id) {
8
+ log.error('Snapshot ID is required. Usage: mcctl config-snapshot show <id>');
9
+ return 1;
10
+ }
11
+ const container = getContainer(options.root);
12
+ const useCase = container.configSnapshotUseCase;
13
+ try {
14
+ const snapshot = await useCase.findById(options.id);
15
+ if (!snapshot) {
16
+ log.error(`Snapshot not found: ${options.id}`);
17
+ return 1;
18
+ }
19
+ if (options.json) {
20
+ console.log(JSON.stringify(snapshot.toJSON(), null, 2));
21
+ return 0;
22
+ }
23
+ console.log('');
24
+ console.log(colors.bold('Config Snapshot Details'));
25
+ console.log('');
26
+ console.log(` ID: ${colors.cyan(snapshot.id)}`);
27
+ console.log(` Server: ${colors.bold(snapshot.serverName.value)}`);
28
+ console.log(` Created: ${colors.dim(snapshot.createdAt.toLocaleString())}`);
29
+ console.log(` Files: ${colors.yellow(String(snapshot.files.length))} files`);
30
+ if (snapshot.description) {
31
+ console.log(` Description: ${colors.dim(snapshot.description)}`);
32
+ }
33
+ if (snapshot.scheduleId) {
34
+ console.log(` Schedule ID: ${colors.dim(snapshot.scheduleId)}`);
35
+ }
36
+ if (options.files && snapshot.files.length > 0) {
37
+ console.log('');
38
+ console.log(colors.bold(' Files:'));
39
+ for (const file of snapshot.files) {
40
+ const sizeKb = (file.size / 1024).toFixed(1);
41
+ console.log(` ${colors.cyan(file.path.padEnd(40))} ${colors.dim(`${sizeKb} KB`)} ${colors.dim(file.hash.substring(0, 8))}`);
42
+ }
43
+ }
44
+ console.log('');
45
+ return 0;
46
+ }
47
+ catch (error) {
48
+ const message = error instanceof Error ? error.message : String(error);
49
+ log.error(`Failed to show snapshot: ${message}`);
50
+ return 1;
51
+ }
52
+ }
53
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/config-snapshot/show.ts"],"names":[],"mappings":"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"}
@@ -24,4 +24,5 @@ export { upgradeCommand, type UpgradeCommandOptions } from './upgrade.js';
24
24
  export { backupScheduleCommand, type BackupScheduleCommandOptions, } from './backup-schedule.js';
25
25
  export { consoleInitCommand, consoleServiceCommand, consoleUserCommand, consoleApiCommand, consoleRemoveCommand, deleteAdminImages, type ConsoleInitOptions, type ConsoleServiceOptions, type ConsoleUserCommandOptions, type ConsoleApiCommandOptions, type ConsoleRemoveOptions, } from './console/index.js';
26
26
  export { adminInitCommand, adminServiceCommand, adminUserCommand, adminApiCommand, type AdminInitOptions, type AdminServiceOptions, type AdminUserCommandOptions, type AdminApiCommandOptions, } from './console/index.js';
27
+ export { configSnapshotListCommand, type ConfigSnapshotListOptions, configSnapshotCreateCommand, type ConfigSnapshotCreateOptions, configSnapshotShowCommand, type ConfigSnapshotShowOptions, configSnapshotDeleteCommand, type ConfigSnapshotDeleteOptions, configSnapshotDiffCommand, type ConfigSnapshotDiffOptions, configSnapshotRestoreCommand, type ConfigSnapshotRestoreOptions, configSnapshotScheduleListCommand, type ConfigSnapshotScheduleListOptions, configSnapshotScheduleAddCommand, type ConfigSnapshotScheduleAddOptions, configSnapshotScheduleRemoveCommand, type ConfigSnapshotScheduleRemoveOptions, configSnapshotScheduleToggleCommand, type ConfigSnapshotScheduleToggleOptions, } from './config-snapshot/index.js';
27
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,KAAK,4BAA4B,GAClC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,6 @@ export { backupScheduleCommand, } from './backup-schedule.js';
26
26
  export { consoleInitCommand, consoleServiceCommand, consoleUserCommand, consoleApiCommand, consoleRemoveCommand, deleteAdminImages, } from './console/index.js';
27
27
  // Backward compatibility aliases (deprecated - use console* instead)
28
28
  export { adminInitCommand, adminServiceCommand, adminUserCommand, adminApiCommand, } from './console/index.js';
29
+ // Config snapshot commands
30
+ export { configSnapshotListCommand, configSnapshotCreateCommand, configSnapshotShowCommand, configSnapshotDeleteCommand, configSnapshotDiffCommand, configSnapshotRestoreCommand, configSnapshotScheduleListCommand, configSnapshotScheduleAddCommand, configSnapshotScheduleRemoveCommand, configSnapshotScheduleToggleCommand, } from './config-snapshot/index.js';
29
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,SAAS,EAAyB,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAA4B,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAA6B,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAgC,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAmC,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAE9B,+BAA+B;AAC/B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAMlB,MAAM,oBAAoB,CAAC;AAE5B,qEAAqE;AACrE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAKhB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,SAAS,EAAyB,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAA4B,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAA6B,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAgC,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAmC,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAE9B,+BAA+B;AAC/B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAMlB,MAAM,oBAAoB,CAAC;AAE5B,qEAAqE;AACrE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAKhB,MAAM,oBAAoB,CAAC;AAE5B,2BAA2B;AAC3B,OAAO,EACL,yBAAyB,EAEzB,2BAA2B,EAE3B,yBAAyB,EAEzB,2BAA2B,EAE3B,yBAAyB,EAEzB,4BAA4B,EAE5B,iCAAiC,EAEjC,gCAAgC,EAEhC,mCAAmC,EAEnC,mCAAmC,GAEpC,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { Paths, log, colors, AuditActionEnum } from '@minecraft-docker/shared';
3
- import { initCommand, statusCommand, createCommand, deleteCommand, worldCommand, backupCommand, execCommand, rconCommand, configCommand, opCommand, serverBackupCommand, serverRestoreCommand, whitelistCommand, banCommand, kickCommand, playerOnlineCommand, playerCommand, migrateCommand, modCommand, updateCommand, consoleInitCommand, consoleServiceCommand, consoleUserCommand, consoleApiCommand, consoleRemoveCommand, auditCommand, playitCommand, upgradeCommand, backupScheduleCommand, } from './commands/index.js';
3
+ import { initCommand, statusCommand, createCommand, deleteCommand, worldCommand, backupCommand, execCommand, rconCommand, configCommand, opCommand, serverBackupCommand, serverRestoreCommand, whitelistCommand, banCommand, kickCommand, playerOnlineCommand, playerCommand, migrateCommand, modCommand, updateCommand, consoleInitCommand, consoleServiceCommand, consoleUserCommand, consoleApiCommand, consoleRemoveCommand, auditCommand, playitCommand, upgradeCommand, backupScheduleCommand, configSnapshotListCommand, configSnapshotCreateCommand, configSnapshotShowCommand, configSnapshotDeleteCommand, configSnapshotDiffCommand, configSnapshotRestoreCommand, configSnapshotScheduleListCommand, configSnapshotScheduleAddCommand, configSnapshotScheduleRemoveCommand, configSnapshotScheduleToggleCommand, } from './commands/index.js';
4
4
  import { ShellExecutor } from './lib/shell.js';
5
5
  import { checkForUpdates } from './lib/update-checker.js';
6
6
  import { readFileSync } from 'fs';
@@ -203,6 +203,38 @@ ${colors.cyan('Backup Scheduling:')}
203
203
  ${colors.bold('backup schedule enable')} <id> Enable a schedule
204
204
  ${colors.bold('backup schedule disable')} <id> Disable a schedule
205
205
 
206
+ ${colors.cyan('Config Snapshot Management:')}
207
+ ${colors.bold('config-snapshot list')} [server] List snapshots (all or per-server)
208
+ --limit <n> Max results (default 20)
209
+ --json JSON output
210
+ ${colors.bold('config-snapshot create')} <server> Create a snapshot
211
+ --description "..." Optional description
212
+ --json JSON output
213
+ ${colors.bold('config-snapshot show')} <id> Show snapshot details
214
+ --files Include file list
215
+ --json JSON output
216
+ ${colors.bold('config-snapshot diff')} <id1> <id2> Diff two snapshots
217
+ --files-only Show only changed file names
218
+ --json JSON output
219
+ ${colors.bold('config-snapshot restore')} <id> Restore from snapshot
220
+ --force Skip confirmation
221
+ ${colors.bold('config-snapshot delete')} <id> Delete a snapshot
222
+ --force Skip confirmation
223
+
224
+ ${colors.cyan('Config Snapshot Schedules:')}
225
+ ${colors.bold('config-snapshot schedule list')} List schedules
226
+ --server <name> Filter by server
227
+ --json JSON output
228
+ ${colors.bold('config-snapshot schedule add')} [opts] Add a schedule
229
+ --server <name> Server name (required)
230
+ --cron "..." Cron expression (required)
231
+ --name "..." Schedule name (required)
232
+ --retention <n> Max snapshots to keep (default 10)
233
+ ${colors.bold('config-snapshot schedule remove')} <id> Remove a schedule
234
+ --force Skip confirmation
235
+ ${colors.bold('config-snapshot schedule enable')} <id> Enable a schedule
236
+ ${colors.bold('config-snapshot schedule disable')} <id> Disable a schedule
237
+
206
238
  ${colors.cyan('Migration:')}
207
239
  ${colors.bold('migrate worlds')} Migrate worlds to shared directory
208
240
  ${colors.bold('migrate status')} Check migration status
@@ -379,7 +411,7 @@ function parseArgs(args) {
379
411
  if (!result.command) {
380
412
  result.command = arg;
381
413
  }
382
- else if (!result.subCommand && ['world', 'player', 'backup', 'op', 'whitelist', 'ban', 'router', 'migrate', 'mod', 'console', 'admin', 'playit'].includes(result.command)) {
414
+ else if (!result.subCommand && ['world', 'player', 'backup', 'op', 'whitelist', 'ban', 'router', 'migrate', 'mod', 'console', 'admin', 'playit', 'config-snapshot'].includes(result.command)) {
383
415
  result.subCommand = arg;
384
416
  }
385
417
  else {
@@ -916,6 +948,117 @@ async function main() {
916
948
  });
917
949
  break;
918
950
  }
951
+ case 'config-snapshot': {
952
+ // config-snapshot command: config-snapshot <list|create|show|diff|restore|delete|schedule>
953
+ const csAction = subCommand;
954
+ if (csAction === 'schedule') {
955
+ // config-snapshot schedule <list|add|remove|enable|disable>
956
+ const scheduleAction = positional[0];
957
+ switch (scheduleAction) {
958
+ case 'list':
959
+ exitCode = await configSnapshotScheduleListCommand({
960
+ root: rootDir,
961
+ serverName: flags['server'],
962
+ json: flags['json'] === true,
963
+ });
964
+ break;
965
+ case 'add':
966
+ exitCode = await configSnapshotScheduleAddCommand({
967
+ root: rootDir,
968
+ serverName: flags['server'],
969
+ cron: flags['cron'],
970
+ name: flags['name'],
971
+ retention: flags['retention']
972
+ ? parseInt(flags['retention'], 10)
973
+ : undefined,
974
+ json: flags['json'] === true,
975
+ });
976
+ break;
977
+ case 'remove':
978
+ exitCode = await configSnapshotScheduleRemoveCommand({
979
+ root: rootDir,
980
+ id: positional[1] ?? '',
981
+ force: flags['force'] === true,
982
+ });
983
+ break;
984
+ case 'enable':
985
+ exitCode = await configSnapshotScheduleToggleCommand({
986
+ root: rootDir,
987
+ id: positional[1] ?? '',
988
+ action: 'enable',
989
+ });
990
+ break;
991
+ case 'disable':
992
+ exitCode = await configSnapshotScheduleToggleCommand({
993
+ root: rootDir,
994
+ id: positional[1] ?? '',
995
+ action: 'disable',
996
+ });
997
+ break;
998
+ default:
999
+ log.error('Usage: mcctl config-snapshot schedule <list|add|remove|enable|disable>');
1000
+ exitCode = 1;
1001
+ }
1002
+ break;
1003
+ }
1004
+ // Snapshot commands
1005
+ switch (csAction) {
1006
+ case 'list':
1007
+ exitCode = await configSnapshotListCommand({
1008
+ root: rootDir,
1009
+ serverName: positional[0],
1010
+ limit: flags['limit']
1011
+ ? parseInt(flags['limit'], 10)
1012
+ : undefined,
1013
+ json: flags['json'] === true,
1014
+ });
1015
+ break;
1016
+ case 'create':
1017
+ exitCode = await configSnapshotCreateCommand({
1018
+ root: rootDir,
1019
+ serverName: positional[0],
1020
+ description: flags['description'],
1021
+ json: flags['json'] === true,
1022
+ });
1023
+ break;
1024
+ case 'show':
1025
+ exitCode = await configSnapshotShowCommand({
1026
+ root: rootDir,
1027
+ id: positional[0] ?? '',
1028
+ files: flags['files'] === true,
1029
+ json: flags['json'] === true,
1030
+ });
1031
+ break;
1032
+ case 'diff':
1033
+ exitCode = await configSnapshotDiffCommand({
1034
+ root: rootDir,
1035
+ id1: positional[0] ?? '',
1036
+ id2: positional[1] ?? '',
1037
+ filesOnly: flags['files-only'] === true,
1038
+ json: flags['json'] === true,
1039
+ });
1040
+ break;
1041
+ case 'restore':
1042
+ exitCode = await configSnapshotRestoreCommand({
1043
+ root: rootDir,
1044
+ id: positional[0] ?? '',
1045
+ force: flags['force'] === true,
1046
+ noSafety: flags['no-safety'] === true,
1047
+ });
1048
+ break;
1049
+ case 'delete':
1050
+ exitCode = await configSnapshotDeleteCommand({
1051
+ root: rootDir,
1052
+ id: positional[0] ?? '',
1053
+ force: flags['force'] === true,
1054
+ });
1055
+ break;
1056
+ default:
1057
+ log.error('Usage: mcctl config-snapshot <list|create|show|diff|restore|delete|schedule>');
1058
+ exitCode = 1;
1059
+ }
1060
+ break;
1061
+ }
919
1062
  default:
920
1063
  log.error(`Unknown command: ${command}`);
921
1064
  printUsage();