@futo-org/backups-orchestrator-api 0.1.71

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 (233) hide show
  1. package/LICENSE +41 -0
  2. package/dist/backends/backend.d.ts +23 -0
  3. package/dist/backends/backend.js +31 -0
  4. package/dist/backends/backend.js.map +1 -0
  5. package/dist/backends/local.backend.d.ts +24 -0
  6. package/dist/backends/local.backend.js +92 -0
  7. package/dist/backends/local.backend.js.map +1 -0
  8. package/dist/backends/s3.backend.d.ts +24 -0
  9. package/dist/backends/s3.backend.js +47 -0
  10. package/dist/backends/s3.backend.js.map +1 -0
  11. package/dist/backends/yucca.backend.d.ts +27 -0
  12. package/dist/backends/yucca.backend.js +63 -0
  13. package/dist/backends/yucca.backend.js.map +1 -0
  14. package/dist/const.d.ts +2 -0
  15. package/dist/const.js +6 -0
  16. package/dist/const.js.map +1 -0
  17. package/dist/controllers/auth.controller.d.ts +7 -0
  18. package/dist/controllers/auth.controller.js +38 -0
  19. package/dist/controllers/auth.controller.js.map +1 -0
  20. package/dist/controllers/backend.controller.d.ts +8 -0
  21. package/dist/controllers/backend.controller.js +52 -0
  22. package/dist/controllers/backend.controller.js.map +1 -0
  23. package/dist/controllers/development.controller.d.ts +6 -0
  24. package/dist/controllers/development.controller.js +35 -0
  25. package/dist/controllers/development.controller.js.map +1 -0
  26. package/dist/controllers/filesystem.controller.d.ts +7 -0
  27. package/dist/controllers/filesystem.controller.js +43 -0
  28. package/dist/controllers/filesystem.controller.js.map +1 -0
  29. package/dist/controllers/integrations.controller.d.ts +8 -0
  30. package/dist/controllers/integrations.controller.js +51 -0
  31. package/dist/controllers/integrations.controller.js.map +1 -0
  32. package/dist/controllers/onboarding.controller.d.ts +11 -0
  33. package/dist/controllers/onboarding.controller.js +80 -0
  34. package/dist/controllers/onboarding.controller.js.map +1 -0
  35. package/dist/controllers/repository.controller.d.ts +22 -0
  36. package/dist/controllers/repository.controller.js +227 -0
  37. package/dist/controllers/repository.controller.js.map +1 -0
  38. package/dist/controllers/runHistory.controller.d.ts +9 -0
  39. package/dist/controllers/runHistory.controller.js +55 -0
  40. package/dist/controllers/runHistory.controller.js.map +1 -0
  41. package/dist/controllers/runningTasks.controller.d.ts +8 -0
  42. package/dist/controllers/runningTasks.controller.js +52 -0
  43. package/dist/controllers/runningTasks.controller.js.map +1 -0
  44. package/dist/controllers/schedule.controller.d.ts +10 -0
  45. package/dist/controllers/schedule.controller.js +76 -0
  46. package/dist/controllers/schedule.controller.js.map +1 -0
  47. package/dist/dto/auth.dto.d.ts +4 -0
  48. package/dist/dto/auth.dto.js +27 -0
  49. package/dist/dto/auth.dto.js.map +1 -0
  50. package/dist/dto/backend.dto.d.ts +16 -0
  51. package/dist/dto/backend.dto.js +64 -0
  52. package/dist/dto/backend.dto.js.map +1 -0
  53. package/dist/dto/filesystem.dto.d.ts +12 -0
  54. package/dist/dto/filesystem.dto.js +56 -0
  55. package/dist/dto/filesystem.dto.js.map +1 -0
  56. package/dist/dto/integrations.dto.d.ts +35 -0
  57. package/dist/dto/integrations.dto.js +163 -0
  58. package/dist/dto/integrations.dto.js.map +1 -0
  59. package/dist/dto/onboarding.dto.d.ts +13 -0
  60. package/dist/dto/onboarding.dto.js +60 -0
  61. package/dist/dto/onboarding.dto.js.map +1 -0
  62. package/dist/dto/repository.dto.d.ts +113 -0
  63. package/dist/dto/repository.dto.js +421 -0
  64. package/dist/dto/repository.dto.js.map +1 -0
  65. package/dist/dto/runningTasks.dto.d.ts +14 -0
  66. package/dist/dto/runningTasks.dto.js +59 -0
  67. package/dist/dto/runningTasks.dto.js.map +1 -0
  68. package/dist/dto/schedule.dto.d.ts +29 -0
  69. package/dist/dto/schedule.dto.js +149 -0
  70. package/dist/dto/schedule.dto.js.map +1 -0
  71. package/dist/enum.d.ts +32 -0
  72. package/dist/enum.js +42 -0
  73. package/dist/enum.js.map +1 -0
  74. package/dist/events/events.gateway.d.ts +73 -0
  75. package/dist/events/events.gateway.js +79 -0
  76. package/dist/events/events.gateway.js.map +1 -0
  77. package/dist/index.d.ts +4 -0
  78. package/dist/index.js +24 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/moduleConfig.d.ts +20 -0
  81. package/dist/moduleConfig.js +5 -0
  82. package/dist/moduleConfig.js.map +1 -0
  83. package/dist/orchestrationApi.module.d.ts +5 -0
  84. package/dist/orchestrationApi.module.js +134 -0
  85. package/dist/orchestrationApi.module.js.map +1 -0
  86. package/dist/repositories/backend.repository.d.ts +19 -0
  87. package/dist/repositories/backend.repository.js +60 -0
  88. package/dist/repositories/backend.repository.js.map +1 -0
  89. package/dist/repositories/config.repository.d.ts +18 -0
  90. package/dist/repositories/config.repository.js +93 -0
  91. package/dist/repositories/config.repository.js.map +1 -0
  92. package/dist/repositories/database.repository.d.ts +11 -0
  93. package/dist/repositories/database.repository.js +85 -0
  94. package/dist/repositories/database.repository.js.map +1 -0
  95. package/dist/repositories/moduleConfig.repository.d.ts +12 -0
  96. package/dist/repositories/moduleConfig.repository.js +48 -0
  97. package/dist/repositories/moduleConfig.repository.js.map +1 -0
  98. package/dist/repositories/repository.repository.d.ts +18 -0
  99. package/dist/repositories/repository.repository.js +81 -0
  100. package/dist/repositories/repository.repository.js.map +1 -0
  101. package/dist/repositories/repositoryIntegrationImmich.repository.d.ts +14 -0
  102. package/dist/repositories/repositoryIntegrationImmich.repository.js +57 -0
  103. package/dist/repositories/repositoryIntegrationImmich.repository.js.map +1 -0
  104. package/dist/repositories/repositoryLocalMetrics.repository.d.ts +23 -0
  105. package/dist/repositories/repositoryLocalMetrics.repository.js +55 -0
  106. package/dist/repositories/repositoryLocalMetrics.repository.js.map +1 -0
  107. package/dist/repositories/repositoryPath.repository.d.ts +17 -0
  108. package/dist/repositories/repositoryPath.repository.js +48 -0
  109. package/dist/repositories/repositoryPath.repository.js.map +1 -0
  110. package/dist/repositories/restic.repository.d.ts +207 -0
  111. package/dist/repositories/restic.repository.js +96 -0
  112. package/dist/repositories/restic.repository.js.map +1 -0
  113. package/dist/repositories/runHistory.repository.d.ts +44 -0
  114. package/dist/repositories/runHistory.repository.js +191 -0
  115. package/dist/repositories/runHistory.repository.js.map +1 -0
  116. package/dist/repositories/runningTasks.repository.d.ts +14 -0
  117. package/dist/repositories/runningTasks.repository.js +77 -0
  118. package/dist/repositories/runningTasks.repository.js.map +1 -0
  119. package/dist/repositories/schedule.repository.d.ts +47 -0
  120. package/dist/repositories/schedule.repository.js +99 -0
  121. package/dist/repositories/schedule.repository.js.map +1 -0
  122. package/dist/repositories/storage.repository.d.ts +9 -0
  123. package/dist/repositories/storage.repository.js +39 -0
  124. package/dist/repositories/storage.repository.js.map +1 -0
  125. package/dist/schema/index.d.ts +20 -0
  126. package/dist/schema/index.js +3 -0
  127. package/dist/schema/index.js.map +1 -0
  128. package/dist/schema/migrations/20260218105210-InitialMigration.d.ts +3 -0
  129. package/dist/schema/migrations/20260218105210-InitialMigration.js +15 -0
  130. package/dist/schema/migrations/20260218105210-InitialMigration.js.map +1 -0
  131. package/dist/schema/migrations/20260218122600-AddRepositories.d.ts +3 -0
  132. package/dist/schema/migrations/20260218122600-AddRepositories.js +21 -0
  133. package/dist/schema/migrations/20260218122600-AddRepositories.js.map +1 -0
  134. package/dist/schema/migrations/20260224112323-RepositoryPathTable.d.ts +3 -0
  135. package/dist/schema/migrations/20260224112323-RepositoryPathTable.js +16 -0
  136. package/dist/schema/migrations/20260224112323-RepositoryPathTable.js.map +1 -0
  137. package/dist/schema/migrations/20260224123344-RunHistoryTable.d.ts +3 -0
  138. package/dist/schema/migrations/20260224123344-RunHistoryTable.js +20 -0
  139. package/dist/schema/migrations/20260224123344-RunHistoryTable.js.map +1 -0
  140. package/dist/schema/migrations/20260224125102-RepositoryMetricsTable.d.ts +3 -0
  141. package/dist/schema/migrations/20260224125102-RepositoryMetricsTable.js +16 -0
  142. package/dist/schema/migrations/20260224125102-RepositoryMetricsTable.js.map +1 -0
  143. package/dist/schema/migrations/20260304162353-ScheduleTable.d.ts +3 -0
  144. package/dist/schema/migrations/20260304162353-ScheduleTable.js +27 -0
  145. package/dist/schema/migrations/20260304162353-ScheduleTable.js.map +1 -0
  146. package/dist/schema/migrations/20260313222211-AddMetricsColumns.d.ts +3 -0
  147. package/dist/schema/migrations/20260313222211-AddMetricsColumns.js +13 -0
  148. package/dist/schema/migrations/20260313222211-AddMetricsColumns.js.map +1 -0
  149. package/dist/schema/migrations/20260330120000-RepositoryIntegrationImmichTable.d.ts +3 -0
  150. package/dist/schema/migrations/20260330120000-RepositoryIntegrationImmichTable.js +15 -0
  151. package/dist/schema/migrations/20260330120000-RepositoryIntegrationImmichTable.js.map +1 -0
  152. package/dist/schema/migrations/20260330130000-AddScheduleIdToImmichIntegration.d.ts +3 -0
  153. package/dist/schema/migrations/20260330130000-AddScheduleIdToImmichIntegration.js +14 -0
  154. package/dist/schema/migrations/20260330130000-AddScheduleIdToImmichIntegration.js.map +1 -0
  155. package/dist/schema/migrations/20260507120000-AddRunHistoryType.d.ts +3 -0
  156. package/dist/schema/migrations/20260507120000-AddRunHistoryType.js +18 -0
  157. package/dist/schema/migrations/20260507120000-AddRunHistoryType.js.map +1 -0
  158. package/dist/schema/migrations/20260512120000-AddRepositoryRetentionPolicy.d.ts +3 -0
  159. package/dist/schema/migrations/20260512120000-AddRepositoryRetentionPolicy.js +11 -0
  160. package/dist/schema/migrations/20260512120000-AddRepositoryRetentionPolicy.js.map +1 -0
  161. package/dist/schema/migrations/20260512120000-AddRepositoryRetentionPreset.d.ts +3 -0
  162. package/dist/schema/migrations/20260512120000-AddRepositoryRetentionPreset.js +18 -0
  163. package/dist/schema/migrations/20260512120000-AddRepositoryRetentionPreset.js.map +1 -0
  164. package/dist/schema/migrations/20260512130000-AllowForgetRunHistoryType.d.ts +3 -0
  165. package/dist/schema/migrations/20260512130000-AllowForgetRunHistoryType.js +47 -0
  166. package/dist/schema/migrations/20260512130000-AllowForgetRunHistoryType.js.map +1 -0
  167. package/dist/schema/tables/backend.table.d.ts +20 -0
  168. package/dist/schema/tables/backend.table.js +9 -0
  169. package/dist/schema/tables/backend.table.js.map +1 -0
  170. package/dist/schema/tables/config.table.d.ts +4 -0
  171. package/dist/schema/tables/config.table.js +9 -0
  172. package/dist/schema/tables/config.table.js.map +1 -0
  173. package/dist/schema/tables/repository.table.d.ts +5 -0
  174. package/dist/schema/tables/repository.table.js +10 -0
  175. package/dist/schema/tables/repository.table.js.map +1 -0
  176. package/dist/schema/tables/repositoryIntegrationImmich.table.d.ts +10 -0
  177. package/dist/schema/tables/repositoryIntegrationImmich.table.js +10 -0
  178. package/dist/schema/tables/repositoryIntegrationImmich.table.js.map +1 -0
  179. package/dist/schema/tables/repositoryLocalMetrics.table.d.ts +7 -0
  180. package/dist/schema/tables/repositoryLocalMetrics.table.js +12 -0
  181. package/dist/schema/tables/repositoryLocalMetrics.table.js.map +1 -0
  182. package/dist/schema/tables/repositoryPath.table.d.ts +4 -0
  183. package/dist/schema/tables/repositoryPath.table.js +9 -0
  184. package/dist/schema/tables/repositoryPath.table.js.map +1 -0
  185. package/dist/schema/tables/repositorySchedule.table.d.ts +4 -0
  186. package/dist/schema/tables/repositorySchedule.table.js +9 -0
  187. package/dist/schema/tables/repositorySchedule.table.js.map +1 -0
  188. package/dist/schema/tables/runHistory.table.d.ts +11 -0
  189. package/dist/schema/tables/runHistory.table.js +14 -0
  190. package/dist/schema/tables/runHistory.table.js.map +1 -0
  191. package/dist/schema/tables/schedule.table.d.ts +9 -0
  192. package/dist/schema/tables/schedule.table.js +14 -0
  193. package/dist/schema/tables/schedule.table.js.map +1 -0
  194. package/dist/services/auth.service.d.ts +16 -0
  195. package/dist/services/auth.service.js +85 -0
  196. package/dist/services/auth.service.js.map +1 -0
  197. package/dist/services/backend.service.d.ts +12 -0
  198. package/dist/services/backend.service.js +68 -0
  199. package/dist/services/backend.service.js.map +1 -0
  200. package/dist/services/bootstrap.service.d.ts +13 -0
  201. package/dist/services/bootstrap.service.js +44 -0
  202. package/dist/services/bootstrap.service.js.map +1 -0
  203. package/dist/services/database.service.d.ts +11 -0
  204. package/dist/services/database.service.js +39 -0
  205. package/dist/services/database.service.js.map +1 -0
  206. package/dist/services/development.service.d.ts +11 -0
  207. package/dist/services/development.service.js +59 -0
  208. package/dist/services/development.service.js.map +1 -0
  209. package/dist/services/filesystem.service.d.ts +7 -0
  210. package/dist/services/filesystem.service.js +43 -0
  211. package/dist/services/filesystem.service.js.map +1 -0
  212. package/dist/services/integrations.service.d.ts +22 -0
  213. package/dist/services/integrations.service.js +158 -0
  214. package/dist/services/integrations.service.js.map +1 -0
  215. package/dist/services/onboarding.service.d.ts +17 -0
  216. package/dist/services/onboarding.service.js +65 -0
  217. package/dist/services/onboarding.service.js.map +1 -0
  218. package/dist/services/repository.service.d.ts +65 -0
  219. package/dist/services/repository.service.js +623 -0
  220. package/dist/services/repository.service.js.map +1 -0
  221. package/dist/services/runHistory.service.d.ts +7 -0
  222. package/dist/services/runHistory.service.js +29 -0
  223. package/dist/services/runHistory.service.js.map +1 -0
  224. package/dist/services/runningTasks.service.d.ts +8 -0
  225. package/dist/services/runningTasks.service.js +34 -0
  226. package/dist/services/runningTasks.service.js.map +1 -0
  227. package/dist/services/schedule.service.d.ts +27 -0
  228. package/dist/services/schedule.service.js +197 -0
  229. package/dist/services/schedule.service.js.map +1 -0
  230. package/dist/utils/restic.d.ts +17 -0
  231. package/dist/utils/restic.js +26 -0
  232. package/dist/utils/restic.js.map +1 -0
  233. package/package.json +79 -0
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ScheduleListResponseDto = exports.ScheduleUpdateResponseDto = exports.ScheduleUpdateRequestDto = exports.ScheduleCreateResponseDto = exports.ScheduleCreateRequestDto = exports.ScheduleDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ const cron_1 = require("cron");
16
+ let CronValidator = class CronValidator {
17
+ validate(expression) {
18
+ try {
19
+ new cron_1.CronJob(expression, () => { });
20
+ return true;
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }
26
+ };
27
+ CronValidator = __decorate([
28
+ (0, class_validator_1.ValidatorConstraint)({ name: 'cronValidator' })
29
+ ], CronValidator);
30
+ const IsCronExpression = () => (0, class_validator_1.Validate)(CronValidator, { message: 'Invalid cron expression' });
31
+ class ScheduleDto {
32
+ id;
33
+ name;
34
+ paused;
35
+ cron;
36
+ repositories;
37
+ lastRun;
38
+ lastFinished;
39
+ }
40
+ exports.ScheduleDto = ScheduleDto;
41
+ __decorate([
42
+ (0, swagger_1.ApiProperty)({ type: String }),
43
+ __metadata("design:type", String)
44
+ ], ScheduleDto.prototype, "id", void 0);
45
+ __decorate([
46
+ (0, swagger_1.ApiProperty)({ type: String }),
47
+ __metadata("design:type", String)
48
+ ], ScheduleDto.prototype, "name", void 0);
49
+ __decorate([
50
+ (0, swagger_1.ApiProperty)({ type: Boolean }),
51
+ __metadata("design:type", Boolean)
52
+ ], ScheduleDto.prototype, "paused", void 0);
53
+ __decorate([
54
+ (0, swagger_1.ApiProperty)({ type: String }),
55
+ __metadata("design:type", String)
56
+ ], ScheduleDto.prototype, "cron", void 0);
57
+ __decorate([
58
+ (0, swagger_1.ApiProperty)({ type: [String] }),
59
+ __metadata("design:type", Array)
60
+ ], ScheduleDto.prototype, "repositories", void 0);
61
+ __decorate([
62
+ (0, swagger_1.ApiProperty)({ type: String, required: false }),
63
+ __metadata("design:type", String)
64
+ ], ScheduleDto.prototype, "lastRun", void 0);
65
+ __decorate([
66
+ (0, swagger_1.ApiProperty)({ type: String, required: false }),
67
+ __metadata("design:type", String)
68
+ ], ScheduleDto.prototype, "lastFinished", void 0);
69
+ class ScheduleCreateRequestDto {
70
+ name;
71
+ cron;
72
+ repositories;
73
+ }
74
+ exports.ScheduleCreateRequestDto = ScheduleCreateRequestDto;
75
+ __decorate([
76
+ (0, swagger_1.ApiProperty)({ type: String }),
77
+ (0, class_validator_1.IsString)(),
78
+ __metadata("design:type", String)
79
+ ], ScheduleCreateRequestDto.prototype, "name", void 0);
80
+ __decorate([
81
+ (0, swagger_1.ApiProperty)({ type: String }),
82
+ (0, class_validator_1.IsString)(),
83
+ IsCronExpression(),
84
+ __metadata("design:type", String)
85
+ ], ScheduleCreateRequestDto.prototype, "cron", void 0);
86
+ __decorate([
87
+ (0, swagger_1.ApiProperty)({ type: [String] }),
88
+ (0, class_validator_1.IsArray)(),
89
+ (0, class_validator_1.IsString)({ each: true }),
90
+ __metadata("design:type", Array)
91
+ ], ScheduleCreateRequestDto.prototype, "repositories", void 0);
92
+ class ScheduleCreateResponseDto {
93
+ schedule;
94
+ }
95
+ exports.ScheduleCreateResponseDto = ScheduleCreateResponseDto;
96
+ __decorate([
97
+ (0, swagger_1.ApiProperty)({ type: ScheduleDto }),
98
+ __metadata("design:type", ScheduleDto)
99
+ ], ScheduleCreateResponseDto.prototype, "schedule", void 0);
100
+ class ScheduleUpdateRequestDto {
101
+ name;
102
+ paused;
103
+ cron;
104
+ repositories;
105
+ }
106
+ exports.ScheduleUpdateRequestDto = ScheduleUpdateRequestDto;
107
+ __decorate([
108
+ (0, swagger_1.ApiProperty)({ type: String, required: false }),
109
+ (0, class_validator_1.IsOptional)(),
110
+ (0, class_validator_1.IsString)(),
111
+ __metadata("design:type", String)
112
+ ], ScheduleUpdateRequestDto.prototype, "name", void 0);
113
+ __decorate([
114
+ (0, swagger_1.ApiProperty)({ type: Boolean, required: false }),
115
+ (0, class_validator_1.IsOptional)(),
116
+ (0, class_validator_1.IsBoolean)(),
117
+ __metadata("design:type", Boolean)
118
+ ], ScheduleUpdateRequestDto.prototype, "paused", void 0);
119
+ __decorate([
120
+ (0, swagger_1.ApiProperty)({ type: String, required: false }),
121
+ (0, class_validator_1.IsOptional)(),
122
+ (0, class_validator_1.IsString)(),
123
+ IsCronExpression(),
124
+ __metadata("design:type", String)
125
+ ], ScheduleUpdateRequestDto.prototype, "cron", void 0);
126
+ __decorate([
127
+ (0, swagger_1.ApiProperty)({ type: [String], required: false }),
128
+ (0, class_validator_1.IsOptional)(),
129
+ (0, class_validator_1.IsArray)(),
130
+ (0, class_validator_1.IsString)({ each: true }),
131
+ __metadata("design:type", Array)
132
+ ], ScheduleUpdateRequestDto.prototype, "repositories", void 0);
133
+ class ScheduleUpdateResponseDto {
134
+ schedule;
135
+ }
136
+ exports.ScheduleUpdateResponseDto = ScheduleUpdateResponseDto;
137
+ __decorate([
138
+ (0, swagger_1.ApiProperty)({ type: ScheduleDto }),
139
+ __metadata("design:type", ScheduleDto)
140
+ ], ScheduleUpdateResponseDto.prototype, "schedule", void 0);
141
+ class ScheduleListResponseDto {
142
+ schedules;
143
+ }
144
+ exports.ScheduleListResponseDto = ScheduleListResponseDto;
145
+ __decorate([
146
+ (0, swagger_1.ApiProperty)({ type: [ScheduleDto] }),
147
+ __metadata("design:type", Array)
148
+ ], ScheduleListResponseDto.prototype, "schedules", void 0);
149
+ //# sourceMappingURL=schedule.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.dto.js","sourceRoot":"","sources":["../../src/dto/schedule.dto.ts"],"names":[],"mappings":"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"}
package/dist/enum.d.ts ADDED
@@ -0,0 +1,32 @@
1
+ export declare enum CookieName {
2
+ NextUrl = "sdk-next",
3
+ OidcState = "sdk-oidc-state",
4
+ OidcCodeVerifier = "sdk-oidc-code-verifier",
5
+ YuccaAccessToken = "yucca-access-token",
6
+ YuccaOidcState = "yucca-oidc-state",
7
+ YuccaOidcCodeVerifier = "yucca-oidc-code-verifier"
8
+ }
9
+ export declare enum ConfigurationKey {
10
+ EncryptionKey = "encryption-key",
11
+ OnboardedKey = "onboarded-key",
12
+ SkippedOnboardingExtraConfig = "skipped-onboarding-extra-config"
13
+ }
14
+ export declare enum BackendType {
15
+ Yucca = "yucca",
16
+ Local = "local",
17
+ S3 = "s3"
18
+ }
19
+ export declare enum TaskStatus {
20
+ Incomplete = "incomplete",
21
+ Complete = "complete",
22
+ Failed = "failed"
23
+ }
24
+ export declare enum TaskType {
25
+ Schedule = "schedule",
26
+ Restore = "restore",
27
+ Backup = "backup",
28
+ Forget = "forget"
29
+ }
30
+ export declare enum InternalEvent {
31
+ ModuleConfigUpdated = "yucca.moduleConfig.updated"
32
+ }
package/dist/enum.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InternalEvent = exports.TaskType = exports.TaskStatus = exports.BackendType = exports.ConfigurationKey = exports.CookieName = void 0;
4
+ var CookieName;
5
+ (function (CookieName) {
6
+ CookieName["NextUrl"] = "sdk-next";
7
+ CookieName["OidcState"] = "sdk-oidc-state";
8
+ CookieName["OidcCodeVerifier"] = "sdk-oidc-code-verifier";
9
+ CookieName["YuccaAccessToken"] = "yucca-access-token";
10
+ CookieName["YuccaOidcState"] = "yucca-oidc-state";
11
+ CookieName["YuccaOidcCodeVerifier"] = "yucca-oidc-code-verifier";
12
+ })(CookieName || (exports.CookieName = CookieName = {}));
13
+ var ConfigurationKey;
14
+ (function (ConfigurationKey) {
15
+ ConfigurationKey["EncryptionKey"] = "encryption-key";
16
+ ConfigurationKey["OnboardedKey"] = "onboarded-key";
17
+ ConfigurationKey["SkippedOnboardingExtraConfig"] = "skipped-onboarding-extra-config";
18
+ })(ConfigurationKey || (exports.ConfigurationKey = ConfigurationKey = {}));
19
+ var BackendType;
20
+ (function (BackendType) {
21
+ BackendType["Yucca"] = "yucca";
22
+ BackendType["Local"] = "local";
23
+ BackendType["S3"] = "s3";
24
+ })(BackendType || (exports.BackendType = BackendType = {}));
25
+ var TaskStatus;
26
+ (function (TaskStatus) {
27
+ TaskStatus["Incomplete"] = "incomplete";
28
+ TaskStatus["Complete"] = "complete";
29
+ TaskStatus["Failed"] = "failed";
30
+ })(TaskStatus || (exports.TaskStatus = TaskStatus = {}));
31
+ var TaskType;
32
+ (function (TaskType) {
33
+ TaskType["Schedule"] = "schedule";
34
+ TaskType["Restore"] = "restore";
35
+ TaskType["Backup"] = "backup";
36
+ TaskType["Forget"] = "forget";
37
+ })(TaskType || (exports.TaskType = TaskType = {}));
38
+ var InternalEvent;
39
+ (function (InternalEvent) {
40
+ InternalEvent["ModuleConfigUpdated"] = "yucca.moduleConfig.updated";
41
+ })(InternalEvent || (exports.InternalEvent = InternalEvent = {}));
42
+ //# sourceMappingURL=enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.js","sourceRoot":"","sources":["../src/enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAOX;AAPD,WAAY,UAAU;IACpB,kCAAoB,CAAA;IACpB,0CAA4B,CAAA;IAC5B,yDAA2C,CAAA;IAC3C,qDAAuC,CAAA;IACvC,iDAAmC,CAAA;IACnC,gEAAkD,CAAA;AACpD,CAAC,EAPW,UAAU,0BAAV,UAAU,QAOrB;AAED,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,oDAAgC,CAAA;IAChC,kDAA8B,CAAA;IAC9B,oFAAgE,CAAA;AAClE,CAAC,EAJW,gBAAgB,gCAAhB,gBAAgB,QAI3B;AAED,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,8BAAe,CAAA;IACf,wBAAS,CAAA;AACX,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAED,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,uCAAyB,CAAA;IACzB,mCAAqB,CAAA;IACrB,+BAAiB,CAAA;AACnB,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB;AAED,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,iCAAqB,CAAA;IACrB,+BAAmB,CAAA;IACnB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;AACnB,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAED,IAAY,aAEX;AAFD,WAAY,aAAa;IACvB,mEAAkD,CAAA;AACpD,CAAC,EAFW,aAAa,6BAAb,aAAa,QAExB"}
@@ -0,0 +1,73 @@
1
+ import { OnGatewayConnection } from '@nestjs/websockets';
2
+ import { Server, Socket } from 'socket.io';
3
+ import { BackendDto } from '../dto/backend.dto';
4
+ import { IntegrationsResponseDto } from '../dto/integrations.dto';
5
+ import { LocalRepositoryDto, RunDto } from '../dto/repository.dto';
6
+ import { RunningTaskDto } from '../dto/runningTasks.dto';
7
+ import { ScheduleDto } from '../dto/schedule.dto';
8
+ import { ModuleConfigRepository } from '../repositories/moduleConfig.repository';
9
+ export type GatewayEvent = {
10
+ type: 'BackendCreate';
11
+ backend: BackendDto;
12
+ } | {
13
+ type: 'RepositoryCreate';
14
+ repository: LocalRepositoryDto;
15
+ } | {
16
+ type: 'RepositoryUpdate';
17
+ repositoryId: string;
18
+ repository: Partial<LocalRepositoryDto>;
19
+ } | {
20
+ type: 'RepositoryDelete';
21
+ repositoryId: string;
22
+ } | {
23
+ type: 'IntegrationUpdate';
24
+ integrations: IntegrationsResponseDto;
25
+ } | {
26
+ type: 'ScheduleCreate';
27
+ schedule: ScheduleDto;
28
+ } | {
29
+ type: 'ScheduleUpdate';
30
+ scheduleId: string;
31
+ schedule: Partial<ScheduleDto>;
32
+ } | {
33
+ type: 'ScheduleDelete';
34
+ scheduleId: string;
35
+ } | {
36
+ type: 'TaskStart';
37
+ task: RunningTaskDto;
38
+ } | {
39
+ type: 'TaskUpdate';
40
+ parentId: string;
41
+ task: Partial<RunningTaskDto>;
42
+ } | {
43
+ type: 'TaskEnd';
44
+ parentId: string;
45
+ } | {
46
+ type: 'RunCreate';
47
+ run: RunDto;
48
+ } | {
49
+ type: 'RunUpdate';
50
+ runId: string;
51
+ repositoryId: string;
52
+ run: Partial<RunDto>;
53
+ } | {
54
+ type: 'DeviceFlowFailure';
55
+ };
56
+ export declare class EventsGateway implements OnGatewayConnection {
57
+ private readonly moduleConfig;
58
+ private authFn?;
59
+ private emitter;
60
+ constructor(moduleConfig: ModuleConfigRepository);
61
+ server?: Server;
62
+ publish(event: GatewayEvent): void;
63
+ emit(event: GatewayEvent): void;
64
+ on(listener: (event: GatewayEvent) => void): void;
65
+ off(listener: (event: GatewayEvent) => void): void;
66
+ handleConnection(client: Socket): Promise<void>;
67
+ setAuthFn(fn: (client: Socket) => Promise<{
68
+ user: {
69
+ isAdmin: boolean;
70
+ };
71
+ }>): void;
72
+ private authenticate;
73
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EventsGateway = void 0;
13
+ const websockets_1 = require("@nestjs/websockets");
14
+ const node_events_1 = require("node:events");
15
+ const socket_io_1 = require("socket.io");
16
+ const moduleConfig_repository_1 = require("../repositories/moduleConfig.repository");
17
+ let EventsGateway = class EventsGateway {
18
+ moduleConfig;
19
+ authFn;
20
+ emitter = new node_events_1.EventEmitter();
21
+ constructor(moduleConfig) {
22
+ this.moduleConfig = moduleConfig;
23
+ }
24
+ server;
25
+ publish(event) {
26
+ this.server?.emit(JSON.stringify(event));
27
+ this.emitter.emit('event', event);
28
+ }
29
+ emit(event) {
30
+ this.server?.emit(JSON.stringify(event));
31
+ }
32
+ on(listener) {
33
+ this.emitter.on('event', listener);
34
+ }
35
+ off(listener) {
36
+ this.emitter.off('event', listener);
37
+ }
38
+ async handleConnection(client) {
39
+ try {
40
+ const { user } = await this.authenticate(client);
41
+ if (!user.isAdmin) {
42
+ throw new Error("User isn't admin.");
43
+ }
44
+ }
45
+ catch {
46
+ client.disconnect();
47
+ }
48
+ }
49
+ setAuthFn(fn) {
50
+ this.authFn = fn;
51
+ }
52
+ async authenticate(client) {
53
+ if (!this.authFn) {
54
+ if (this.moduleConfig.get().requireWsAuth) {
55
+ throw new Error('Auth function not set');
56
+ }
57
+ return {
58
+ user: {
59
+ isAdmin: true,
60
+ },
61
+ };
62
+ }
63
+ return this.authFn(client);
64
+ }
65
+ };
66
+ exports.EventsGateway = EventsGateway;
67
+ __decorate([
68
+ (0, websockets_1.WebSocketServer)(),
69
+ __metadata("design:type", socket_io_1.Server)
70
+ ], EventsGateway.prototype, "server", void 0);
71
+ exports.EventsGateway = EventsGateway = __decorate([
72
+ (0, websockets_1.WebSocketGateway)({
73
+ cors: false,
74
+ path: '/api/yucca/socket.io',
75
+ transports: ['websocket'],
76
+ }),
77
+ __metadata("design:paramtypes", [moduleConfig_repository_1.ModuleConfigRepository])
78
+ ], EventsGateway);
79
+ //# sourceMappingURL=events.gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.gateway.js","sourceRoot":"","sources":["../../src/events/events.gateway.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAA4F;AAC5F,6CAA2C;AAC3C,yCAA2C;AAM3C,qFAAiF;AAuE1E,IAAM,aAAa,GAAnB,MAAM,aAAa;IAIK;IAHrB,MAAM,CAAU;IAChB,OAAO,GAAG,IAAI,0BAAY,EAAE,CAAC;IAErC,YAA6B,YAAoC;QAApC,iBAAY,GAAZ,YAAY,CAAwB;IAAG,CAAC;IAGrE,MAAM,CAAU;IAEhB,OAAO,CAAC,KAAmB;QACzB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,KAAmB;QACtB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,EAAE,CAAC,QAAuC;QACxC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,QAAuC;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc;QACnC,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,EAA+D;QACvE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAc;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO;gBACL,IAAI,EAAE;oBACJ,OAAO,EAAE,IAAI;iBACd;aACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF,CAAA;AAxDY,sCAAa;AAOxB;IADC,IAAA,4BAAe,GAAE;8BACT,kBAAM;6CAAC;wBAPL,aAAa;IALzB,IAAA,6BAAgB,EAAC;QAChB,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,CAAC,WAAW,CAAC;KAC1B,CAAC;qCAK2C,gDAAsB;GAJtD,aAAa,CAwDzB"}
@@ -0,0 +1,4 @@
1
+ export * from './const';
2
+ export { EventsGateway } from './events/events.gateway';
3
+ export * from './orchestrationApi.module';
4
+ export { ModuleConfigRepository } from './repositories/moduleConfig.repository';
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ModuleConfigRepository = exports.EventsGateway = void 0;
18
+ __exportStar(require("./const"), exports);
19
+ var events_gateway_1 = require("./events/events.gateway");
20
+ Object.defineProperty(exports, "EventsGateway", { enumerable: true, get: function () { return events_gateway_1.EventsGateway; } });
21
+ __exportStar(require("./orchestrationApi.module"), exports);
22
+ var moduleConfig_repository_1 = require("./repositories/moduleConfig.repository");
23
+ Object.defineProperty(exports, "ModuleConfigRepository", { enumerable: true, get: function () { return moduleConfig_repository_1.ModuleConfigRepository; } });
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,0DAAwD;AAA/C,+GAAA,aAAa,OAAA;AACtB,4DAA0C;AAC1C,kFAAgF;AAAvE,iIAAA,sBAAsB,OAAA"}
@@ -0,0 +1,20 @@
1
+ export declare const ModuleConfigProvider: unique symbol;
2
+ export type ImmichIntegration = {
3
+ dataPath: string;
4
+ dataFolders: string[];
5
+ libraries: {
6
+ id: string;
7
+ name: string;
8
+ importPaths: string[];
9
+ exclusionPatterns: string[];
10
+ }[];
11
+ };
12
+ export type ModuleConfig = {
13
+ statePath: string;
14
+ yuccaProductionApi: string;
15
+ externalBaseUrl?: string;
16
+ requireWsAuth?: boolean;
17
+ requireLock?: boolean;
18
+ developmentMode?: boolean;
19
+ immichIntegration?: ImmichIntegration;
20
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModuleConfigProvider = void 0;
4
+ exports.ModuleConfigProvider = Symbol('ModuleConfig');
5
+ //# sourceMappingURL=moduleConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleConfig.js","sourceRoot":"","sources":["../src/moduleConfig.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { type ModuleConfig } from './moduleConfig';
3
+ export declare class OrchestrationApiModule {
4
+ static forRoot(config: Partial<ModuleConfig> & Pick<ModuleConfig, 'yuccaProductionApi'>): DynamicModule;
5
+ }
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ var OrchestrationApiModule_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.OrchestrationApiModule = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const event_emitter_1 = require("@nestjs/event-emitter");
16
+ const schedule_1 = require("@nestjs/schedule");
17
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
18
+ const kysely_1 = require("kysely");
19
+ const nestjs_kysely_1 = require("nestjs-kysely");
20
+ const node_fs_1 = require("node:fs");
21
+ const node_os_1 = require("node:os");
22
+ const node_path_1 = require("node:path");
23
+ const auth_controller_1 = require("./controllers/auth.controller");
24
+ const backend_controller_1 = require("./controllers/backend.controller");
25
+ const development_controller_1 = require("./controllers/development.controller");
26
+ const filesystem_controller_1 = require("./controllers/filesystem.controller");
27
+ const integrations_controller_1 = require("./controllers/integrations.controller");
28
+ const onboarding_controller_1 = require("./controllers/onboarding.controller");
29
+ const repository_controller_1 = require("./controllers/repository.controller");
30
+ const runHistory_controller_1 = require("./controllers/runHistory.controller");
31
+ const runningTasks_controller_1 = require("./controllers/runningTasks.controller");
32
+ const schedule_controller_1 = require("./controllers/schedule.controller");
33
+ const events_gateway_1 = require("./events/events.gateway");
34
+ const moduleConfig_1 = require("./moduleConfig");
35
+ const backend_repository_1 = require("./repositories/backend.repository");
36
+ const config_repository_1 = require("./repositories/config.repository");
37
+ const database_repository_1 = require("./repositories/database.repository");
38
+ const moduleConfig_repository_1 = require("./repositories/moduleConfig.repository");
39
+ const repository_repository_1 = require("./repositories/repository.repository");
40
+ const repositoryIntegrationImmich_repository_1 = require("./repositories/repositoryIntegrationImmich.repository");
41
+ const repositoryLocalMetrics_repository_1 = require("./repositories/repositoryLocalMetrics.repository");
42
+ const repositoryPath_repository_1 = require("./repositories/repositoryPath.repository");
43
+ const restic_repository_1 = require("./repositories/restic.repository");
44
+ const runHistory_repository_1 = require("./repositories/runHistory.repository");
45
+ const runningTasks_repository_1 = require("./repositories/runningTasks.repository");
46
+ const schedule_repository_1 = require("./repositories/schedule.repository");
47
+ const storage_repository_1 = require("./repositories/storage.repository");
48
+ const auth_service_1 = require("./services/auth.service");
49
+ const backend_service_1 = require("./services/backend.service");
50
+ const bootstrap_service_1 = require("./services/bootstrap.service");
51
+ const development_service_1 = require("./services/development.service");
52
+ const filesystem_service_1 = require("./services/filesystem.service");
53
+ const integrations_service_1 = require("./services/integrations.service");
54
+ const onboarding_service_1 = require("./services/onboarding.service");
55
+ const repository_service_1 = require("./services/repository.service");
56
+ const runHistory_service_1 = require("./services/runHistory.service");
57
+ const runningTasks_service_1 = require("./services/runningTasks.service");
58
+ const schedule_service_1 = require("./services/schedule.service");
59
+ const controllers = [
60
+ auth_controller_1.AuthController,
61
+ backend_controller_1.BackendController,
62
+ development_controller_1.DevelopmentController,
63
+ filesystem_controller_1.FilesystemController,
64
+ integrations_controller_1.IntegrationsController,
65
+ onboarding_controller_1.OnboardingController,
66
+ repository_controller_1.RepositoryController,
67
+ runHistory_controller_1.RunHistoryController,
68
+ runningTasks_controller_1.RunningTasksController,
69
+ schedule_controller_1.ScheduleController,
70
+ ];
71
+ const repositories = [
72
+ backend_repository_1.BackendRepository,
73
+ config_repository_1.ConfigRepository,
74
+ database_repository_1.DatabaseRepository,
75
+ moduleConfig_repository_1.ModuleConfigRepository,
76
+ repository_repository_1.RepositoryRepository,
77
+ repositoryIntegrationImmich_repository_1.RepositoryIntegrationImmichRepository,
78
+ repositoryLocalMetrics_repository_1.RepositoryLocalMetricsRepository,
79
+ repositoryPath_repository_1.RepositoryPathRepository,
80
+ restic_repository_1.ResticRepository,
81
+ runHistory_repository_1.RunHistoryRepository,
82
+ runningTasks_repository_1.RunningTasksRepository,
83
+ schedule_repository_1.ScheduleRepository,
84
+ storage_repository_1.StorageRepository,
85
+ ];
86
+ const services = [
87
+ auth_service_1.AuthService,
88
+ backend_service_1.BackendService,
89
+ bootstrap_service_1.BootstrapService,
90
+ development_service_1.DevelopmentService,
91
+ filesystem_service_1.FilesystemService,
92
+ integrations_service_1.IntegrationsService,
93
+ onboarding_service_1.OnboardingService,
94
+ repository_service_1.RepositoryService,
95
+ runHistory_service_1.RunHistoryService,
96
+ runningTasks_service_1.RunningTasksService,
97
+ schedule_service_1.ScheduleService,
98
+ ];
99
+ let OrchestrationApiModule = OrchestrationApiModule_1 = class OrchestrationApiModule {
100
+ static forRoot(config) {
101
+ config.statePath ??= (0, node_path_1.resolve)((0, node_os_1.homedir)(), '.yucca');
102
+ if (!config.yuccaProductionApi) {
103
+ throw new Error('config.yuccaProductionApi is missing');
104
+ }
105
+ return {
106
+ module: OrchestrationApiModule_1,
107
+ imports: [
108
+ nestjs_kysely_1.KyselyModule.forRootAsync({
109
+ namespace: 'orchestrator',
110
+ useFactory: () => {
111
+ if (!(0, node_fs_1.existsSync)(config.statePath)) {
112
+ (0, node_fs_1.mkdirSync)(config.statePath, { recursive: true });
113
+ }
114
+ const database = new better_sqlite3_1.default((0, node_path_1.resolve)(config.statePath, 'state.sqlite3'));
115
+ database.pragma('journal_mode = WAL');
116
+ return {
117
+ dialect: new kysely_1.SqliteDialect({ database }),
118
+ };
119
+ },
120
+ }),
121
+ event_emitter_1.EventEmitterModule.forRoot(),
122
+ schedule_1.ScheduleModule.forRoot(),
123
+ ],
124
+ controllers,
125
+ providers: [{ provide: moduleConfig_1.ModuleConfigProvider, useValue: config }, events_gateway_1.EventsGateway, ...repositories, ...services],
126
+ exports: [events_gateway_1.EventsGateway, moduleConfig_repository_1.ModuleConfigRepository],
127
+ };
128
+ }
129
+ };
130
+ exports.OrchestrationApiModule = OrchestrationApiModule;
131
+ exports.OrchestrationApiModule = OrchestrationApiModule = OrchestrationApiModule_1 = __decorate([
132
+ (0, common_1.Module)({})
133
+ ], OrchestrationApiModule);
134
+ //# sourceMappingURL=orchestrationApi.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrationApi.module.js","sourceRoot":"","sources":["../src/orchestrationApi.module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Kysely } from 'kysely';
2
+ import { DB } from '../schema';
3
+ import { BackendConfiguration } from '../schema/tables/backend.table';
4
+ export declare class BackendRepository {
5
+ private db;
6
+ constructor(db: Kysely<DB>);
7
+ updateBackend(id: string, configuration: BackendConfiguration): Promise<{
8
+ id: string;
9
+ configuration: string;
10
+ }>;
11
+ getBackends(): Promise<{
12
+ id: string;
13
+ configuration: BackendConfiguration;
14
+ }[]>;
15
+ getBackend(id: string): Promise<{
16
+ id: string;
17
+ configuration: BackendConfiguration;
18
+ }>;
19
+ }