@minecraft-docker/shared 2.14.0 → 2.15.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 (63) hide show
  1. package/dist/application/ports/inbound/IBackupScheduleUseCase.d.ts +59 -0
  2. package/dist/application/ports/inbound/IBackupScheduleUseCase.d.ts.map +1 -0
  3. package/dist/application/ports/inbound/IBackupScheduleUseCase.js +2 -0
  4. package/dist/application/ports/inbound/IBackupScheduleUseCase.js.map +1 -0
  5. package/dist/application/ports/inbound/index.d.ts +1 -0
  6. package/dist/application/ports/inbound/index.d.ts.map +1 -1
  7. package/dist/application/ports/index.d.ts +2 -2
  8. package/dist/application/ports/index.d.ts.map +1 -1
  9. package/dist/application/ports/outbound/IBackupScheduleRepository.d.ts +28 -0
  10. package/dist/application/ports/outbound/IBackupScheduleRepository.d.ts.map +1 -0
  11. package/dist/application/ports/outbound/IBackupScheduleRepository.js +2 -0
  12. package/dist/application/ports/outbound/IBackupScheduleRepository.js.map +1 -0
  13. package/dist/application/ports/outbound/index.d.ts +1 -0
  14. package/dist/application/ports/outbound/index.d.ts.map +1 -1
  15. package/dist/application/use-cases/BackupScheduleUseCase.d.ts +20 -0
  16. package/dist/application/use-cases/BackupScheduleUseCase.d.ts.map +1 -0
  17. package/dist/application/use-cases/BackupScheduleUseCase.js +89 -0
  18. package/dist/application/use-cases/BackupScheduleUseCase.js.map +1 -0
  19. package/dist/application/use-cases/index.d.ts +1 -0
  20. package/dist/application/use-cases/index.d.ts.map +1 -1
  21. package/dist/application/use-cases/index.js +1 -0
  22. package/dist/application/use-cases/index.js.map +1 -1
  23. package/dist/domain/entities/BackupSchedule.d.ts +97 -0
  24. package/dist/domain/entities/BackupSchedule.d.ts.map +1 -0
  25. package/dist/domain/entities/BackupSchedule.js +172 -0
  26. package/dist/domain/entities/BackupSchedule.js.map +1 -0
  27. package/dist/domain/entities/index.d.ts +1 -0
  28. package/dist/domain/entities/index.d.ts.map +1 -1
  29. package/dist/domain/entities/index.js +1 -0
  30. package/dist/domain/entities/index.js.map +1 -1
  31. package/dist/domain/index.d.ts +2 -2
  32. package/dist/domain/index.d.ts.map +1 -1
  33. package/dist/domain/index.js +4 -2
  34. package/dist/domain/index.js.map +1 -1
  35. package/dist/domain/value-objects/AuditAction.d.ts +7 -1
  36. package/dist/domain/value-objects/AuditAction.d.ts.map +1 -1
  37. package/dist/domain/value-objects/AuditAction.js +7 -0
  38. package/dist/domain/value-objects/AuditAction.js.map +1 -1
  39. package/dist/domain/value-objects/BackupRetentionPolicy.d.ts +30 -0
  40. package/dist/domain/value-objects/BackupRetentionPolicy.d.ts.map +1 -0
  41. package/dist/domain/value-objects/BackupRetentionPolicy.js +67 -0
  42. package/dist/domain/value-objects/BackupRetentionPolicy.js.map +1 -0
  43. package/dist/domain/value-objects/CronExpression.d.ts +33 -0
  44. package/dist/domain/value-objects/CronExpression.d.ts.map +1 -0
  45. package/dist/domain/value-objects/CronExpression.js +145 -0
  46. package/dist/domain/value-objects/CronExpression.js.map +1 -0
  47. package/dist/domain/value-objects/index.d.ts +2 -0
  48. package/dist/domain/value-objects/index.d.ts.map +1 -1
  49. package/dist/domain/value-objects/index.js +3 -0
  50. package/dist/domain/value-objects/index.js.map +1 -1
  51. package/dist/index.d.ts +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +3 -1
  54. package/dist/index.js.map +1 -1
  55. package/dist/infrastructure/adapters/SqliteBackupScheduleRepository.d.ts +43 -0
  56. package/dist/infrastructure/adapters/SqliteBackupScheduleRepository.d.ts.map +1 -0
  57. package/dist/infrastructure/adapters/SqliteBackupScheduleRepository.js +111 -0
  58. package/dist/infrastructure/adapters/SqliteBackupScheduleRepository.js.map +1 -0
  59. package/dist/infrastructure/adapters/index.d.ts +1 -0
  60. package/dist/infrastructure/adapters/index.d.ts.map +1 -1
  61. package/dist/infrastructure/adapters/index.js +1 -0
  62. package/dist/infrastructure/adapters/index.js.map +1 -1
  63. package/package.json +1 -1
@@ -5,7 +5,9 @@ ServiceStatus, ServiceStatusEnum, ProcessInfo,
5
5
  // Audit log value objects
6
6
  AuditActionEnum,
7
7
  // Operator value objects
8
- OpLevel, } from './value-objects/index.js';
8
+ OpLevel,
9
+ // Backup schedule value objects
10
+ CronExpression, BackupRetentionPolicy, } from './value-objects/index.js';
9
11
  // Entities
10
- export { Server, ServerStatus, World, WorldLockStatus, User, AuditLog, Operator, } from './entities/index.js';
12
+ export { Server, ServerStatus, World, WorldLockStatus, User, AuditLog, Operator, BackupSchedule, } from './entities/index.js';
11
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EAEd,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EAEd,cAAc,EAGd,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,QAAQ;AACR,mCAAmC;AACnC,aAAa,EACb,iBAAiB,EACjB,WAAW;AAGX,0BAA0B;AAC1B,eAAe;AACf,yBAAyB;AACzB,OAAO,GACR,MAAM,0BAA0B,CAAC;AAElC,WAAW;AACX,OAAO,EACL,MAAM,EACN,YAAY,EAEZ,KAAK,EACL,eAAe,EAEf,IAAI,EAEJ,QAAQ,EAGR,QAAQ,GAGT,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EAEd,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EAEd,cAAc,EAGd,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,QAAQ;AACR,mCAAmC;AACnC,aAAa,EACb,iBAAiB,EACjB,WAAW;AAGX,0BAA0B;AAC1B,eAAe;AACf,yBAAyB;AACzB,OAAO;AACP,gCAAgC;AAChC,cAAc,EACd,qBAAqB,GAEtB,MAAM,0BAA0B,CAAC;AAElC,WAAW;AACX,OAAO,EACL,MAAM,EACN,YAAY,EAEZ,KAAK,EACL,eAAe,EAEf,IAAI,EAEJ,QAAQ,EAGR,QAAQ,EAGR,cAAc,GAGf,MAAM,qBAAqB,CAAC"}
@@ -34,6 +34,12 @@ export declare enum AuditActionEnum {
34
34
  FILE_MKDIR = "file.mkdir",
35
35
  FILE_RENAME = "file.rename",
36
36
  FILE_UPLOAD = "file.upload",
37
- FILE_DOWNLOAD = "file.download"
37
+ FILE_DOWNLOAD = "file.download",
38
+ BACKUP_SCHEDULE_CREATE = "backup.schedule.create",
39
+ BACKUP_SCHEDULE_UPDATE = "backup.schedule.update",
40
+ BACKUP_SCHEDULE_DELETE = "backup.schedule.delete",
41
+ BACKUP_SCHEDULE_ENABLE = "backup.schedule.enable",
42
+ BACKUP_SCHEDULE_DISABLE = "backup.schedule.disable",
43
+ BACKUP_SCHEDULE_RUN = "backup.schedule.run"
38
44
  }
39
45
  //# sourceMappingURL=AuditAction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuditAction.d.ts","sourceRoot":"","sources":["../../../src/domain/value-objects/AuditAction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,eAAe;IAEzB,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IAGjC,oBAAoB,kBAAkB;IACtC,sBAAsB,oBAAoB;IAG1C,oBAAoB,yBAAyB;IAC7C,uBAAuB,4BAA4B;IACnD,uBAAuB,4BAA4B;IACnD,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,sBAAsB,oBAAoB;IAC1C,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAG3B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAG/B,WAAW,gBAAgB;IAG3B,OAAO,YAAY;IACnB,UAAU,eAAe;IAGzB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAG3B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;CAChC"}
1
+ {"version":3,"file":"AuditAction.d.ts","sourceRoot":"","sources":["../../../src/domain/value-objects/AuditAction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,eAAe;IAEzB,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IAGjC,oBAAoB,kBAAkB;IACtC,sBAAsB,oBAAoB;IAG1C,oBAAoB,yBAAyB;IAC7C,uBAAuB,4BAA4B;IACnD,uBAAuB,4BAA4B;IACnD,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,sBAAsB,oBAAoB;IAC1C,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAG3B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAG/B,WAAW,gBAAgB;IAG3B,OAAO,YAAY;IACnB,UAAU,eAAe;IAGzB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAG3B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAG/B,sBAAsB,2BAA2B;IACjD,sBAAsB,2BAA2B;IACjD,sBAAsB,2BAA2B;IACjD,sBAAsB,2BAA2B;IACjD,uBAAuB,4BAA4B;IACnD,mBAAmB,wBAAwB;CAC5C"}
@@ -44,5 +44,12 @@ export var AuditActionEnum;
44
44
  AuditActionEnum["FILE_RENAME"] = "file.rename";
45
45
  AuditActionEnum["FILE_UPLOAD"] = "file.upload";
46
46
  AuditActionEnum["FILE_DOWNLOAD"] = "file.download";
47
+ // Backup schedule management
48
+ AuditActionEnum["BACKUP_SCHEDULE_CREATE"] = "backup.schedule.create";
49
+ AuditActionEnum["BACKUP_SCHEDULE_UPDATE"] = "backup.schedule.update";
50
+ AuditActionEnum["BACKUP_SCHEDULE_DELETE"] = "backup.schedule.delete";
51
+ AuditActionEnum["BACKUP_SCHEDULE_ENABLE"] = "backup.schedule.enable";
52
+ AuditActionEnum["BACKUP_SCHEDULE_DISABLE"] = "backup.schedule.disable";
53
+ AuditActionEnum["BACKUP_SCHEDULE_RUN"] = "backup.schedule.run";
47
54
  })(AuditActionEnum || (AuditActionEnum = {}));
48
55
  //# sourceMappingURL=AuditAction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuditAction.js","sourceRoot":"","sources":["../../../src/domain/value-objects/AuditAction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAN,IAAY,eAgDX;AAhDD,WAAY,eAAe;IACzB,mBAAmB;IACnB,kDAA+B,CAAA;IAC/B,kDAA+B,CAAA;IAC/B,gDAA6B,CAAA;IAC7B,8CAA2B,CAAA;IAC3B,oDAAiC,CAAA;IAEjC,uBAAuB;IACvB,yDAAsC,CAAA;IACtC,6DAA0C,CAAA;IAE1C,oBAAoB;IACpB,gEAA6C,CAAA;IAC7C,sEAAmD,CAAA;IACnD,sEAAmD,CAAA;IACnD,4CAAyB,CAAA;IACzB,gDAA6B,CAAA;IAC7B,0CAAuB,CAAA;IACvB,6DAA0C,CAAA;IAC1C,8CAA2B,CAAA;IAC3B,8CAA2B,CAAA;IAE3B,mBAAmB;IACnB,gDAA6B,CAAA;IAC7B,gDAA6B,CAAA;IAC7B,gDAA6B,CAAA;IAC7B,kDAA+B,CAAA;IAE/B,SAAS;IACT,8CAA2B,CAAA;IAE3B,iBAAiB;IACjB,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IAEzB,kBAAkB;IAClB,gDAA6B,CAAA;IAC7B,8CAA2B,CAAA;IAE3B,kBAAkB;IAClB,0CAAuB,CAAA;IACvB,4CAAyB,CAAA;IACzB,8CAA2B,CAAA;IAC3B,4CAAyB,CAAA;IACzB,8CAA2B,CAAA;IAC3B,8CAA2B,CAAA;IAC3B,kDAA+B,CAAA;AACjC,CAAC,EAhDW,eAAe,KAAf,eAAe,QAgD1B"}
1
+ {"version":3,"file":"AuditAction.js","sourceRoot":"","sources":["../../../src/domain/value-objects/AuditAction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAN,IAAY,eAwDX;AAxDD,WAAY,eAAe;IACzB,mBAAmB;IACnB,kDAA+B,CAAA;IAC/B,kDAA+B,CAAA;IAC/B,gDAA6B,CAAA;IAC7B,8CAA2B,CAAA;IAC3B,oDAAiC,CAAA;IAEjC,uBAAuB;IACvB,yDAAsC,CAAA;IACtC,6DAA0C,CAAA;IAE1C,oBAAoB;IACpB,gEAA6C,CAAA;IAC7C,sEAAmD,CAAA;IACnD,sEAAmD,CAAA;IACnD,4CAAyB,CAAA;IACzB,gDAA6B,CAAA;IAC7B,0CAAuB,CAAA;IACvB,6DAA0C,CAAA;IAC1C,8CAA2B,CAAA;IAC3B,8CAA2B,CAAA;IAE3B,mBAAmB;IACnB,gDAA6B,CAAA;IAC7B,gDAA6B,CAAA;IAC7B,gDAA6B,CAAA;IAC7B,kDAA+B,CAAA;IAE/B,SAAS;IACT,8CAA2B,CAAA;IAE3B,iBAAiB;IACjB,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IAEzB,kBAAkB;IAClB,gDAA6B,CAAA;IAC7B,8CAA2B,CAAA;IAE3B,kBAAkB;IAClB,0CAAuB,CAAA;IACvB,4CAAyB,CAAA;IACzB,8CAA2B,CAAA;IAC3B,4CAAyB,CAAA;IACzB,8CAA2B,CAAA;IAC3B,8CAA2B,CAAA;IAC3B,kDAA+B,CAAA;IAE/B,6BAA6B;IAC7B,oEAAiD,CAAA;IACjD,oEAAiD,CAAA;IACjD,oEAAiD,CAAA;IACjD,oEAAiD,CAAA;IACjD,sEAAmD,CAAA;IACnD,8DAA2C,CAAA;AAC7C,CAAC,EAxDW,eAAe,KAAf,eAAe,QAwD1B"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * BackupRetentionPolicy Value Object
3
+ * Defines how many backups to keep and for how long
4
+ */
5
+ export interface BackupRetentionPolicyData {
6
+ maxCount?: number;
7
+ maxAgeDays?: number;
8
+ }
9
+ export declare class BackupRetentionPolicy {
10
+ private readonly _maxCount;
11
+ private readonly _maxAgeDays;
12
+ private constructor();
13
+ get maxCount(): number | undefined;
14
+ get maxAgeDays(): number | undefined;
15
+ /**
16
+ * Create a BackupRetentionPolicy with validation
17
+ */
18
+ static create(data: BackupRetentionPolicyData): BackupRetentionPolicy;
19
+ /**
20
+ * Create default retention policy: 10 backups, 30 days
21
+ */
22
+ static default(): BackupRetentionPolicy;
23
+ /**
24
+ * Determine if pruning is needed based on current backup state
25
+ */
26
+ shouldPrune(backupCount: number, oldestBackupDate: Date): boolean;
27
+ toJSON(): BackupRetentionPolicyData;
28
+ equals(other: BackupRetentionPolicy): boolean;
29
+ }
30
+ //# sourceMappingURL=BackupRetentionPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackupRetentionPolicy.d.ts","sourceRoot":"","sources":["../../../src/domain/value-objects/BackupRetentionPolicy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,OAAO;IAKP,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,yBAAyB,GAAG,qBAAqB;IAcrE;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,qBAAqB;IAIvC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,GAAG,OAAO;IAcjE,MAAM,IAAI,yBAAyB;IAOnC,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO;CAM9C"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * BackupRetentionPolicy Value Object
3
+ * Defines how many backups to keep and for how long
4
+ */
5
+ export class BackupRetentionPolicy {
6
+ _maxCount;
7
+ _maxAgeDays;
8
+ constructor(data) {
9
+ this._maxCount = data.maxCount;
10
+ this._maxAgeDays = data.maxAgeDays;
11
+ }
12
+ get maxCount() {
13
+ return this._maxCount;
14
+ }
15
+ get maxAgeDays() {
16
+ return this._maxAgeDays;
17
+ }
18
+ /**
19
+ * Create a BackupRetentionPolicy with validation
20
+ */
21
+ static create(data) {
22
+ if (data.maxCount !== undefined) {
23
+ if (!Number.isInteger(data.maxCount) || data.maxCount < 1) {
24
+ throw new Error('maxCount must be a positive integer (>= 1)');
25
+ }
26
+ }
27
+ if (data.maxAgeDays !== undefined) {
28
+ if (!Number.isInteger(data.maxAgeDays) || data.maxAgeDays < 1) {
29
+ throw new Error('maxAgeDays must be a positive integer (>= 1)');
30
+ }
31
+ }
32
+ return new BackupRetentionPolicy(data);
33
+ }
34
+ /**
35
+ * Create default retention policy: 10 backups, 30 days
36
+ */
37
+ static default() {
38
+ return new BackupRetentionPolicy({ maxCount: 10, maxAgeDays: 30 });
39
+ }
40
+ /**
41
+ * Determine if pruning is needed based on current backup state
42
+ */
43
+ shouldPrune(backupCount, oldestBackupDate) {
44
+ if (this._maxCount !== undefined && backupCount > this._maxCount) {
45
+ return true;
46
+ }
47
+ if (this._maxAgeDays !== undefined) {
48
+ const cutoff = new Date();
49
+ cutoff.setDate(cutoff.getDate() - this._maxAgeDays);
50
+ if (oldestBackupDate < cutoff) {
51
+ return true;
52
+ }
53
+ }
54
+ return false;
55
+ }
56
+ toJSON() {
57
+ return {
58
+ maxCount: this._maxCount,
59
+ maxAgeDays: this._maxAgeDays,
60
+ };
61
+ }
62
+ equals(other) {
63
+ return (this._maxCount === other._maxCount &&
64
+ this._maxAgeDays === other._maxAgeDays);
65
+ }
66
+ }
67
+ //# sourceMappingURL=BackupRetentionPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackupRetentionPolicy.js","sourceRoot":"","sources":["../../../src/domain/value-objects/BackupRetentionPolicy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,OAAO,qBAAqB;IACf,SAAS,CAAqB;IAC9B,WAAW,CAAqB;IAEjD,YAAoB,IAA+B;QACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;IACrC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,IAA+B;QAC3C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBAC9D,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QACD,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO;QACZ,OAAO,IAAI,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,WAAmB,EAAE,gBAAsB;QACrD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,gBAAgB,GAAG,MAAM,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM;QACJ,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAA4B;QACjC,OAAO,CACL,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;YAClC,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CACvC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * CronExpression Value Object
3
+ * Represents a validated cron expression for backup scheduling
4
+ */
5
+ export declare class CronExpression {
6
+ private readonly _expression;
7
+ private constructor();
8
+ get expression(): string;
9
+ /**
10
+ * Create a CronExpression from a raw cron string
11
+ * Validates the expression before creating
12
+ */
13
+ static create(expression: string): CronExpression;
14
+ /**
15
+ * Create a CronExpression from a named preset
16
+ */
17
+ static fromPreset(preset: string): CronExpression;
18
+ /**
19
+ * Get available preset names
20
+ */
21
+ static getPresets(): Record<string, string>;
22
+ /**
23
+ * Convert cron expression to a human-readable description
24
+ */
25
+ toHumanReadable(): string;
26
+ toString(): string;
27
+ equals(other: CronExpression): boolean;
28
+ /**
29
+ * Validate a single cron field
30
+ */
31
+ private static validateField;
32
+ }
33
+ //# sourceMappingURL=CronExpression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CronExpression.d.ts","sourceRoot":"","sources":["../../../src/domain/value-objects/CronExpression.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO;IAIP,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc;IAsBjD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAWjD;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI3C;;OAEG;IACH,eAAe,IAAI,MAAM;IAqBzB,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO;IAItC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;CA8D7B"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * CronExpression Value Object
3
+ * Represents a validated cron expression for backup scheduling
4
+ */
5
+ const PRESETS = {
6
+ hourly: '0 * * * *',
7
+ daily: '0 3 * * *',
8
+ 'every-6h': '0 */6 * * *',
9
+ 'every-12h': '0 */12 * * *',
10
+ weekly: '0 3 * * 0',
11
+ };
12
+ const FIELD_RANGES = [
13
+ { name: 'minute', min: 0, max: 59 },
14
+ { name: 'hour', min: 0, max: 23 },
15
+ { name: 'day of month', min: 1, max: 31 },
16
+ { name: 'month', min: 1, max: 12 },
17
+ { name: 'day of week', min: 0, max: 7 },
18
+ ];
19
+ export class CronExpression {
20
+ _expression;
21
+ constructor(expression) {
22
+ this._expression = expression;
23
+ }
24
+ get expression() {
25
+ return this._expression;
26
+ }
27
+ /**
28
+ * Create a CronExpression from a raw cron string
29
+ * Validates the expression before creating
30
+ */
31
+ static create(expression) {
32
+ const trimmed = expression.trim();
33
+ if (!trimmed) {
34
+ throw new Error('Cron expression cannot be empty');
35
+ }
36
+ const fields = trimmed.split(/\s+/);
37
+ if (fields.length !== 5) {
38
+ throw new Error(`Invalid cron expression: expected 5 fields (minute hour day-of-month month day-of-week), got ${fields.length}`);
39
+ }
40
+ for (let i = 0; i < fields.length; i++) {
41
+ const field = fields[i];
42
+ const range = FIELD_RANGES[i];
43
+ CronExpression.validateField(field, range.name, range.min, range.max);
44
+ }
45
+ return new CronExpression(trimmed);
46
+ }
47
+ /**
48
+ * Create a CronExpression from a named preset
49
+ */
50
+ static fromPreset(preset) {
51
+ const expression = PRESETS[preset];
52
+ if (!expression) {
53
+ const available = Object.keys(PRESETS).join(', ');
54
+ throw new Error(`Unknown cron preset: "${preset}". Available presets: ${available}`);
55
+ }
56
+ return new CronExpression(expression);
57
+ }
58
+ /**
59
+ * Get available preset names
60
+ */
61
+ static getPresets() {
62
+ return { ...PRESETS };
63
+ }
64
+ /**
65
+ * Convert cron expression to a human-readable description
66
+ */
67
+ toHumanReadable() {
68
+ // Check if it matches a preset
69
+ for (const [name, expr] of Object.entries(PRESETS)) {
70
+ if (this._expression === expr) {
71
+ switch (name) {
72
+ case 'hourly':
73
+ return 'Every hour';
74
+ case 'daily':
75
+ return 'Daily at 3:00 AM';
76
+ case 'every-6h':
77
+ return 'Every 6 hours';
78
+ case 'every-12h':
79
+ return 'Every 12 hours';
80
+ case 'weekly':
81
+ return 'Weekly on Sunday at 3:00 AM';
82
+ }
83
+ }
84
+ }
85
+ return `Cron: ${this._expression}`;
86
+ }
87
+ toString() {
88
+ return this._expression;
89
+ }
90
+ equals(other) {
91
+ return this._expression === other._expression;
92
+ }
93
+ /**
94
+ * Validate a single cron field
95
+ */
96
+ static validateField(field, name, min, max) {
97
+ // Wildcard
98
+ if (field === '*')
99
+ return;
100
+ // Step values: */n or n-m/s
101
+ if (field.includes('/')) {
102
+ const [range, step] = field.split('/');
103
+ if (!step || isNaN(Number(step)) || Number(step) < 1) {
104
+ throw new Error(`Invalid step value in ${name} field: "${field}"`);
105
+ }
106
+ if (range !== '*') {
107
+ CronExpression.validateField(range, name, min, max);
108
+ }
109
+ return;
110
+ }
111
+ // Range: n-m
112
+ if (field.includes('-')) {
113
+ const [start, end] = field.split('-');
114
+ const startNum = Number(start);
115
+ const endNum = Number(end);
116
+ if (isNaN(startNum) || isNaN(endNum)) {
117
+ throw new Error(`Invalid range in ${name} field: "${field}"`);
118
+ }
119
+ if (startNum < min || startNum > max || endNum < min || endNum > max) {
120
+ throw new Error(`Value out of range in ${name} field: "${field}" (allowed: ${min}-${max})`);
121
+ }
122
+ if (startNum > endNum) {
123
+ throw new Error(`Invalid range in ${name} field: start (${startNum}) > end (${endNum})`);
124
+ }
125
+ return;
126
+ }
127
+ // List: n,m,o
128
+ if (field.includes(',')) {
129
+ const values = field.split(',');
130
+ for (const val of values) {
131
+ CronExpression.validateField(val, name, min, max);
132
+ }
133
+ return;
134
+ }
135
+ // Simple number
136
+ const num = Number(field);
137
+ if (isNaN(num)) {
138
+ throw new Error(`Invalid value in ${name} field: "${field}"`);
139
+ }
140
+ if (num < min || num > max) {
141
+ throw new Error(`Value out of range in ${name} field: ${num} (allowed: ${min}-${max})`);
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=CronExpression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CronExpression.js","sourceRoot":"","sources":["../../../src/domain/value-objects/CronExpression.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,OAAO,GAA2B;IACtC,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,cAAc;IAC3B,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,YAAY,GAAsD;IACtE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACnC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACjC,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACzC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IAClC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;CACxC,CAAC;AAEF,MAAM,OAAO,cAAc;IACR,WAAW,CAAS;IAErC,YAAoB,UAAkB;QACpC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,UAAkB;QAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,gGAAgG,MAAM,CAAC,MAAM,EAAE,CAChH,CAAC;QACJ,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;YAC/B,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAc;QAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,IAAI,KAAK,CACb,yBAAyB,MAAM,yBAAyB,SAAS,EAAE,CACpE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU;QACf,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,+BAA+B;QAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBAC9B,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,QAAQ;wBACX,OAAO,YAAY,CAAC;oBACtB,KAAK,OAAO;wBACV,OAAO,kBAAkB,CAAC;oBAC5B,KAAK,UAAU;wBACb,OAAO,eAAe,CAAC;oBACzB,KAAK,WAAW;wBACd,OAAO,gBAAgB,CAAC;oBAC1B,KAAK,QAAQ;wBACX,OAAO,6BAA6B,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,KAAqB;QAC1B,OAAO,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,aAAa,CAC1B,KAAa,EACb,IAAY,EACZ,GAAW,EACX,GAAW;QAEX,WAAW;QACX,IAAI,KAAK,KAAK,GAAG;YAAE,OAAO;QAE1B,4BAA4B;QAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,YAAY,KAAK,GAAG,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBAClB,cAAc,CAAC,aAAa,CAAC,KAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC;YACD,OAAO;QACT,CAAC;QAED,aAAa;QACb,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,YAAY,KAAK,GAAG,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,QAAQ,GAAG,GAAG,IAAI,QAAQ,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;gBACrE,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,YAAY,KAAK,eAAe,GAAG,IAAI,GAAG,GAAG,CAC3E,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,oBAAoB,IAAI,kBAAkB,QAAQ,YAAY,MAAM,GAAG,CACxE,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QAED,cAAc;QACd,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gBACzB,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;YACD,OAAO;QACT,CAAC;QAED,gBAAgB;QAChB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,YAAY,KAAK,GAAG,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,WAAW,GAAG,cAAc,GAAG,IAAI,GAAG,GAAG,CACvE,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -11,4 +11,6 @@ export { ServiceStatus, ServiceStatusEnum } from './ServiceStatus.js';
11
11
  export { ProcessInfo, type ProcessInfoData, type ProcessMetrics } from './ProcessInfo.js';
12
12
  export { AuditActionEnum } from './AuditAction.js';
13
13
  export { OpLevel } from './OpLevel.js';
14
+ export { CronExpression } from './CronExpression.js';
15
+ export { BackupRetentionPolicy, type BackupRetentionPolicyData, } from './BackupRetentionPolicy.js';
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/value-objects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG7F,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG1F,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/value-objects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG7F,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG1F,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,qBAAqB,EACrB,KAAK,yBAAyB,GAC/B,MAAM,4BAA4B,CAAC"}
@@ -15,4 +15,7 @@ export { ProcessInfo } from './ProcessInfo.js';
15
15
  export { AuditActionEnum } from './AuditAction.js';
16
16
  // Operator value objects
17
17
  export { OpLevel } from './OpLevel.js';
18
+ // Backup schedule value objects
19
+ export { CronExpression } from './CronExpression.js';
20
+ export { BackupRetentionPolicy, } from './BackupRetentionPolicy.js';
18
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/value-objects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAuB,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAyB,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,cAAc,EAA0C,MAAM,qBAAqB,CAAC;AAE7F,6BAA6B;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,mCAAmC;AACnC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAA6C,MAAM,kBAAkB,CAAC;AAE1F,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,yBAAyB;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/value-objects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAuB,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAyB,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,cAAc,EAA0C,MAAM,qBAAqB,CAAC;AAE7F,6BAA6B;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,mCAAmC;AACnC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAA6C,MAAM,kBAAkB,CAAC;AAE1F,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,yBAAyB;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,gCAAgC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { type ContainerStatus, type HealthStatus, type ServerInfo, type RouterInfo, type AvahiInfo, type PlatformStatus, type McctlConfig, type ServerType as LegacyServerType, type ServerConfig as LegacyServerConfig, type EnvConfig, type LockStatus, type WorldLock as LegacyWorldLock, type BackupInfo, type BackupStatus, type PlayerInfo, type CommandResult, type ContainerStats, type PlayerListResult, type DetailedServerInfo, type RouterDetailInfo, type RouteInfo, type PlayitAgentStatus, type PlayitServerInfo, } from './types/index.js';
2
2
  export { Paths, Config, colors, log, getPackageRoot } from './utils/index.js';
3
3
  export { checkDocker, checkDockerCompose, getContainerStatus, getContainerHealth, containerExists, getContainerHostname, getMcContainers, getRunningMcContainers, getServerInfo, getRouterInfo, getAvahiStatus, getPlatformStatus, startContainer, stopContainer, getContainerLogs, execScript, execScriptInteractive, getContainerStats, getContainerUptime, getOnlinePlayers, getDetailedServerInfo, getDetailedServerInfoWithPlayers, getRouterDetailInfo, formatBytes, getConfiguredServers, getServerInfoFromConfig, getAllServers, getServersDir, readServerConfigEnv, serverExists, getDetailedServerInfoFromConfig, getServerDetailedInfo, getDockerVersion, getDockerComposeVersion, getPlayitAgentStatus, startPlayitAgent, stopPlayitAgent, getServerPlayitDomain, setServerPlayitDomain, } from './docker/index.js';
4
- export { ServerName, ServerType, ServerTypeEnum, type ServerTypeInfo, McVersion, Memory, WorldOptions, WorldSetupType, type WorldOptionsData, UserId, Username, Role, RoleEnum, ServiceStatus, ServiceStatusEnum, ProcessInfo, type ProcessInfoData, type ProcessMetrics, Server, ServerStatus, type ServerConfig, World, WorldLockStatus, type WorldLock, User, type UserData, AuditLog, type AuditLogData, type AuditLogRow, AuditActionEnum, Operator, type OperatorData, type MinecraftOpsJson, OpLevel, } from './domain/index.js';
4
+ export { ServerName, ServerType, ServerTypeEnum, type ServerTypeInfo, McVersion, Memory, WorldOptions, WorldSetupType, type WorldOptionsData, UserId, Username, Role, RoleEnum, ServiceStatus, ServiceStatusEnum, ProcessInfo, type ProcessInfoData, type ProcessMetrics, Server, ServerStatus, type ServerConfig, World, WorldLockStatus, type WorldLock, User, type UserData, AuditLog, type AuditLogData, type AuditLogRow, AuditActionEnum, Operator, type OperatorData, type MinecraftOpsJson, OpLevel, CronExpression, BackupRetentionPolicy, type BackupRetentionPolicyData, BackupSchedule, type BackupScheduleData, type BackupScheduleRow, } from './domain/index.js';
5
5
  export type { ModSideSupport, ModProjectType, ModVersionType, ModDependencyType, ModSearchIndex, ModSearchOptions, ModVersionOptions, ModProject, ModVersion, ModFile, ModFileHashes, ModDependency, ModSearchResult, } from './domain/mod/index.js';
6
6
  export { ModSourceFactory } from './infrastructure/factories/index.js';
7
7
  export * from './application/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,IAAI,gBAAgB,EACnC,KAAK,YAAY,IAAI,kBAAkB,EACvC,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,IAAI,eAAe,EACjC,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,aAAa,EAElB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG9E,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,qBAAqB,EAErB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,gCAAgC,EAChC,mBAAmB,EACnB,WAAW,EAEX,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EAEvB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAEL,UAAU,EACV,UAAU,EACV,cAAc,EACd,KAAK,cAAc,EACnB,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EACd,KAAK,gBAAgB,EACrB,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,QAAQ,EAER,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,MAAM,EACN,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,EACL,eAAe,EACf,KAAK,SAAS,EACd,IAAI,EACJ,KAAK,QAAQ,EAEb,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,eAAe,EAEf,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,OAAO,GACR,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,OAAO,EACP,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGvE,cAAc,wBAAwB,CAAC;AAGvC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,UAAU,IAAI,gBAAgB,EACnC,KAAK,YAAY,IAAI,kBAAkB,EACvC,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,IAAI,eAAe,EACjC,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,aAAa,EAElB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG9E,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,qBAAqB,EAErB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,gCAAgC,EAChC,mBAAmB,EACnB,WAAW,EAEX,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EAEvB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAEL,UAAU,EACV,UAAU,EACV,cAAc,EACd,KAAK,cAAc,EACnB,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EACd,KAAK,gBAAgB,EACrB,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,QAAQ,EAER,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,MAAM,EACN,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,EACL,eAAe,EACf,KAAK,SAAS,EACd,IAAI,EACJ,KAAK,QAAQ,EAEb,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,eAAe,EAEf,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,OAAO,EAEP,cAAc,EACd,qBAAqB,EACrB,KAAK,yBAAyB,EAC9B,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,OAAO,EACP,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGvE,cAAc,wBAAwB,CAAC;AAGvC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -19,7 +19,9 @@ Server, ServerStatus, World, WorldLockStatus, User,
19
19
  // Audit log
20
20
  AuditLog, AuditActionEnum,
21
21
  // Operator
22
- Operator, OpLevel, } from './domain/index.js';
22
+ Operator, OpLevel,
23
+ // Backup schedule
24
+ CronExpression, BackupRetentionPolicy, BackupSchedule, } from './domain/index.js';
23
25
  // Re-export ModSourceFactory
24
26
  export { ModSourceFactory } from './infrastructure/factories/index.js';
25
27
  // Re-export application layer (ports and use-cases)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6BA,sBAAsB;AACtB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE9E,6BAA6B;AAC7B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,qBAAqB;AACrB,yBAAyB;AACzB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,gCAAgC,EAChC,mBAAmB,EACnB,WAAW;AACX,qCAAqC;AACrC,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB;AACvB,2BAA2B;AAC3B,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,sDAAsD;AACtD,OAAO;AACL,gBAAgB;AAChB,UAAU,EACV,UAAU,EACV,cAAc,EAEd,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EAEd,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,QAAQ;AACR,mCAAmC;AACnC,aAAa,EACb,iBAAiB,EACjB,WAAW;AAGX,WAAW;AACX,MAAM,EACN,YAAY,EAEZ,KAAK,EACL,eAAe,EAEf,IAAI;AAEJ,YAAY;AACZ,QAAQ,EAGR,eAAe;AACf,WAAW;AACX,QAAQ,EAGR,OAAO,GACR,MAAM,mBAAmB,CAAC;AAmB3B,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAEvE,oDAAoD;AACpD,cAAc,wBAAwB,CAAC;AAEvC,4CAA4C;AAC5C,cAAc,2BAA2B,CAAC;AAE1C,iCAAiC;AACjC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6BA,sBAAsB;AACtB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE9E,6BAA6B;AAC7B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,qBAAqB;AACrB,yBAAyB;AACzB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,gCAAgC,EAChC,mBAAmB,EACnB,WAAW;AACX,qCAAqC;AACrC,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB;AACvB,2BAA2B;AAC3B,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,sDAAsD;AACtD,OAAO;AACL,gBAAgB;AAChB,UAAU,EACV,UAAU,EACV,cAAc,EAEd,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EAEd,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,QAAQ;AACR,mCAAmC;AACnC,aAAa,EACb,iBAAiB,EACjB,WAAW;AAGX,WAAW;AACX,MAAM,EACN,YAAY,EAEZ,KAAK,EACL,eAAe,EAEf,IAAI;AAEJ,YAAY;AACZ,QAAQ,EAGR,eAAe;AACf,WAAW;AACX,QAAQ,EAGR,OAAO;AACP,kBAAkB;AAClB,cAAc,EACd,qBAAqB,EAErB,cAAc,GAGf,MAAM,mBAAmB,CAAC;AAmB3B,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAEvE,oDAAoD;AACpD,cAAc,wBAAwB,CAAC;AAEvC,4CAA4C;AAC5C,cAAc,2BAA2B,CAAC;AAE1C,iCAAiC;AACjC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { IBackupScheduleRepository } from '../../application/ports/outbound/IBackupScheduleRepository.js';
2
+ import { BackupSchedule } from '../../domain/entities/BackupSchedule.js';
3
+ /**
4
+ * SqliteBackupScheduleRepository
5
+ * Implements IBackupScheduleRepository using SQLite database storage
6
+ */
7
+ export declare class SqliteBackupScheduleRepository implements IBackupScheduleRepository {
8
+ private readonly db;
9
+ /**
10
+ * Create a new SqliteBackupScheduleRepository
11
+ * @param dbPath - Path to the SQLite database file
12
+ */
13
+ constructor(dbPath: string);
14
+ /**
15
+ * Run database migrations
16
+ */
17
+ private migrate;
18
+ /**
19
+ * Save (insert or update) a backup schedule
20
+ */
21
+ save(schedule: BackupSchedule): Promise<void>;
22
+ /**
23
+ * Find all backup schedules
24
+ */
25
+ findAll(): Promise<BackupSchedule[]>;
26
+ /**
27
+ * Find a backup schedule by ID
28
+ */
29
+ findById(id: string): Promise<BackupSchedule | null>;
30
+ /**
31
+ * Find all enabled backup schedules
32
+ */
33
+ findEnabled(): Promise<BackupSchedule[]>;
34
+ /**
35
+ * Delete a backup schedule by ID
36
+ */
37
+ delete(id: string): Promise<void>;
38
+ /**
39
+ * Close the database connection
40
+ */
41
+ close(): void;
42
+ }
43
+ //# sourceMappingURL=SqliteBackupScheduleRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteBackupScheduleRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/SqliteBackupScheduleRepository.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+DAA+D,CAAC;AAC/G,OAAO,EACL,cAAc,EAEf,MAAM,yCAAyC,CAAC;AAEjD;;;GAGG;AACH,qBAAa,8BACX,YAAW,yBAAyB;IAEpC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IAEvC;;;OAGG;gBACS,MAAM,EAAE,MAAM;IAiB1B;;OAEG;IACH,OAAO,CAAC,OAAO;IAqBf;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCnD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQ1C;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAQ1D;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAQ9C;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,111 @@
1
+ import Database from 'better-sqlite3';
2
+ import { mkdirSync, existsSync } from 'node:fs';
3
+ import { dirname } from 'node:path';
4
+ import { BackupSchedule, } from '../../domain/entities/BackupSchedule.js';
5
+ /**
6
+ * SqliteBackupScheduleRepository
7
+ * Implements IBackupScheduleRepository using SQLite database storage
8
+ */
9
+ export class SqliteBackupScheduleRepository {
10
+ db;
11
+ /**
12
+ * Create a new SqliteBackupScheduleRepository
13
+ * @param dbPath - Path to the SQLite database file
14
+ */
15
+ constructor(dbPath) {
16
+ // Ensure directory exists
17
+ const dir = dirname(dbPath);
18
+ if (!existsSync(dir)) {
19
+ mkdirSync(dir, { recursive: true });
20
+ }
21
+ // Open database connection
22
+ this.db = new Database(dbPath);
23
+ // Enable WAL mode for better concurrency
24
+ this.db.pragma('journal_mode = WAL');
25
+ // Run migrations
26
+ this.migrate();
27
+ }
28
+ /**
29
+ * Run database migrations
30
+ */
31
+ migrate() {
32
+ this.db.exec(`
33
+ CREATE TABLE IF NOT EXISTS backup_schedules (
34
+ id TEXT PRIMARY KEY,
35
+ name TEXT NOT NULL,
36
+ cron_expression TEXT NOT NULL,
37
+ retention_max_count INTEGER,
38
+ retention_max_age_days INTEGER,
39
+ enabled INTEGER NOT NULL DEFAULT 1,
40
+ last_run_at TEXT,
41
+ last_run_status TEXT CHECK(last_run_status IS NULL OR last_run_status IN ('success', 'failure')),
42
+ last_run_message TEXT,
43
+ created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
44
+ updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
45
+ );
46
+
47
+ CREATE INDEX IF NOT EXISTS idx_backup_schedules_enabled ON backup_schedules(enabled);
48
+ CREATE INDEX IF NOT EXISTS idx_backup_schedules_created_at ON backup_schedules(created_at);
49
+ `);
50
+ }
51
+ /**
52
+ * Save (insert or update) a backup schedule
53
+ */
54
+ async save(schedule) {
55
+ const stmt = this.db.prepare(`
56
+ INSERT INTO backup_schedules (
57
+ id, name, cron_expression, retention_max_count, retention_max_age_days,
58
+ enabled, last_run_at, last_run_status, last_run_message, created_at, updated_at
59
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
60
+ ON CONFLICT(id) DO UPDATE SET
61
+ name = excluded.name,
62
+ cron_expression = excluded.cron_expression,
63
+ retention_max_count = excluded.retention_max_count,
64
+ retention_max_age_days = excluded.retention_max_age_days,
65
+ enabled = excluded.enabled,
66
+ last_run_at = excluded.last_run_at,
67
+ last_run_status = excluded.last_run_status,
68
+ last_run_message = excluded.last_run_message,
69
+ updated_at = excluded.updated_at
70
+ `);
71
+ stmt.run(schedule.id, schedule.name, schedule.cronExpression.expression, schedule.retentionPolicy.maxCount ?? null, schedule.retentionPolicy.maxAgeDays ?? null, schedule.enabled ? 1 : 0, schedule.lastRunAt?.toISOString() ?? null, schedule.lastRunStatus, schedule.lastRunMessage, schedule.createdAt.toISOString(), schedule.updatedAt.toISOString());
72
+ }
73
+ /**
74
+ * Find all backup schedules
75
+ */
76
+ async findAll() {
77
+ const stmt = this.db.prepare('SELECT * FROM backup_schedules ORDER BY created_at DESC');
78
+ const rows = stmt.all();
79
+ return rows.map((row) => BackupSchedule.fromRaw(row));
80
+ }
81
+ /**
82
+ * Find a backup schedule by ID
83
+ */
84
+ async findById(id) {
85
+ const stmt = this.db.prepare('SELECT * FROM backup_schedules WHERE id = ?');
86
+ const row = stmt.get(id);
87
+ return row ? BackupSchedule.fromRaw(row) : null;
88
+ }
89
+ /**
90
+ * Find all enabled backup schedules
91
+ */
92
+ async findEnabled() {
93
+ const stmt = this.db.prepare('SELECT * FROM backup_schedules WHERE enabled = 1 ORDER BY created_at ASC');
94
+ const rows = stmt.all();
95
+ return rows.map((row) => BackupSchedule.fromRaw(row));
96
+ }
97
+ /**
98
+ * Delete a backup schedule by ID
99
+ */
100
+ async delete(id) {
101
+ const stmt = this.db.prepare('DELETE FROM backup_schedules WHERE id = ?');
102
+ stmt.run(id);
103
+ }
104
+ /**
105
+ * Close the database connection
106
+ */
107
+ close() {
108
+ this.db.close();
109
+ }
110
+ }
111
+ //# sourceMappingURL=SqliteBackupScheduleRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqliteBackupScheduleRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/SqliteBackupScheduleRepository.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,5 @@ export { YamlUserRepository } from './YamlUserRepository.js';
10
10
  export { SqliteUserRepository } from './SqliteUserRepository.js';
11
11
  export { SqliteAuditLogRepository } from './SqliteAuditLogRepository.js';
12
12
  export { ApiPromptAdapter, ApiModeError, type ApiPromptOptions, type WorldSetupType, type MessageType, type CollectedMessage, } from './ApiPromptAdapter.js';
13
+ export { SqliteBackupScheduleRepository } from './SqliteBackupScheduleRepository.js';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC"}
@@ -10,4 +10,5 @@ export { YamlUserRepository } from './YamlUserRepository.js';
10
10
  export { SqliteUserRepository } from './SqliteUserRepository.js';
11
11
  export { SqliteAuditLogRepository } from './SqliteAuditLogRepository.js';
12
12
  export { ApiPromptAdapter, ApiModeError, } from './ApiPromptAdapter.js';
13
+ export { SqliteBackupScheduleRepository } from './SqliteBackupScheduleRepository.js';
13
14
  //# sourceMappingURL=index.js.map