@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.
- package/dist/application/ports/inbound/IBackupScheduleUseCase.d.ts +59 -0
- package/dist/application/ports/inbound/IBackupScheduleUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IBackupScheduleUseCase.js +2 -0
- package/dist/application/ports/inbound/IBackupScheduleUseCase.js.map +1 -0
- package/dist/application/ports/inbound/index.d.ts +1 -0
- package/dist/application/ports/inbound/index.d.ts.map +1 -1
- package/dist/application/ports/index.d.ts +2 -2
- package/dist/application/ports/index.d.ts.map +1 -1
- package/dist/application/ports/outbound/IBackupScheduleRepository.d.ts +28 -0
- package/dist/application/ports/outbound/IBackupScheduleRepository.d.ts.map +1 -0
- package/dist/application/ports/outbound/IBackupScheduleRepository.js +2 -0
- package/dist/application/ports/outbound/IBackupScheduleRepository.js.map +1 -0
- package/dist/application/ports/outbound/index.d.ts +1 -0
- package/dist/application/ports/outbound/index.d.ts.map +1 -1
- package/dist/application/use-cases/BackupScheduleUseCase.d.ts +20 -0
- package/dist/application/use-cases/BackupScheduleUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/BackupScheduleUseCase.js +89 -0
- package/dist/application/use-cases/BackupScheduleUseCase.js.map +1 -0
- package/dist/application/use-cases/index.d.ts +1 -0
- package/dist/application/use-cases/index.d.ts.map +1 -1
- package/dist/application/use-cases/index.js +1 -0
- package/dist/application/use-cases/index.js.map +1 -1
- package/dist/domain/entities/BackupSchedule.d.ts +97 -0
- package/dist/domain/entities/BackupSchedule.d.ts.map +1 -0
- package/dist/domain/entities/BackupSchedule.js +172 -0
- package/dist/domain/entities/BackupSchedule.js.map +1 -0
- package/dist/domain/entities/index.d.ts +1 -0
- package/dist/domain/entities/index.d.ts.map +1 -1
- package/dist/domain/entities/index.js +1 -0
- package/dist/domain/entities/index.js.map +1 -1
- package/dist/domain/index.d.ts +2 -2
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +4 -2
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/value-objects/AuditAction.d.ts +7 -1
- package/dist/domain/value-objects/AuditAction.d.ts.map +1 -1
- package/dist/domain/value-objects/AuditAction.js +7 -0
- package/dist/domain/value-objects/AuditAction.js.map +1 -1
- package/dist/domain/value-objects/BackupRetentionPolicy.d.ts +30 -0
- package/dist/domain/value-objects/BackupRetentionPolicy.d.ts.map +1 -0
- package/dist/domain/value-objects/BackupRetentionPolicy.js +67 -0
- package/dist/domain/value-objects/BackupRetentionPolicy.js.map +1 -0
- package/dist/domain/value-objects/CronExpression.d.ts +33 -0
- package/dist/domain/value-objects/CronExpression.d.ts.map +1 -0
- package/dist/domain/value-objects/CronExpression.js +145 -0
- package/dist/domain/value-objects/CronExpression.js.map +1 -0
- package/dist/domain/value-objects/index.d.ts +2 -0
- package/dist/domain/value-objects/index.d.ts.map +1 -1
- package/dist/domain/value-objects/index.js +3 -0
- package/dist/domain/value-objects/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/adapters/SqliteBackupScheduleRepository.d.ts +43 -0
- package/dist/infrastructure/adapters/SqliteBackupScheduleRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/SqliteBackupScheduleRepository.js +111 -0
- package/dist/infrastructure/adapters/SqliteBackupScheduleRepository.js.map +1 -0
- package/dist/infrastructure/adapters/index.d.ts +1 -0
- package/dist/infrastructure/adapters/index.d.ts.map +1 -1
- package/dist/infrastructure/adapters/index.js +1 -0
- package/dist/infrastructure/adapters/index.js.map +1 -1
- package/package.json +1 -1
package/dist/domain/index.js
CHANGED
|
@@ -5,7 +5,9 @@ ServiceStatus, ServiceStatusEnum, ProcessInfo,
|
|
|
5
5
|
// Audit log value objects
|
|
6
6
|
AuditActionEnum,
|
|
7
7
|
// Operator value objects
|
|
8
|
-
OpLevel,
|
|
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
|
package/dist/domain/index.js.map
CHANGED
|
@@ -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,
|
|
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;
|
|
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,
|
|
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":"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"}
|
|
@@ -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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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,
|
|
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
|