@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.
173 lines (172 loc) • 10.5 kB
JavaScript
import { DITokens } from "./container.tokens.js";
import { PrinterService } from "./services/orm/printer.service.js";
import { PrinterMaintenanceLogService } from "./services/orm/printer-maintenance-log.service.js";
import { AppConstants } from "./server.constants.js";
import { SettingsStore } from "./state/settings.store.js";
import { ServerReleaseService } from "./services/core/server-release.service.js";
import { TaskManagerService } from "./services/task-manager.service.js";
import { GithubService } from "./services/core/github.service.js";
import { PrinterWebsocketTask } from "./tasks/printer-websocket.task.js";
import { ROLES } from "./constants/authorization.constants.js";
import { SocketIoGateway } from "./state/socket-io.gateway.js";
import { SocketIoTask } from "./tasks/socketio.task.js";
import { SocketFactory } from "./services/socket.factory.js";
import { configureEventEmitter } from "./handlers/event-emitter.js";
import { SoftwareUpdateTask } from "./tasks/software-update.task.js";
import { LoggerFactory } from "./handlers/logger-factory.js";
import { MulterService } from "./services/core/multer.service.js";
import { FileUploadTrackerCache } from "./state/file-upload-tracker.cache.js";
import { BatchCallService } from "./services/core/batch-call.service.js";
import { FileStorageService } from "./services/file-storage.service.js";
import { FileAnalysisService } from "./services/file-analysis.service.js";
import { YamlService } from "./services/core/yaml.service.js";
import { FloorStore } from "./state/floor.store.js";
import { PrintJobService } from "./services/orm/print-job.service.js";
import { PrintQueueService } from "./services/print-queue.service.js";
import { PrinterCache } from "./state/printer.cache.js";
import { PrinterThumbnailCache } from "./state/printer-thumbnail.cache.js";
import { OctoprintClient } from "./services/octoprint/octoprint.client.js";
import { PrinterSocketStore } from "./state/printer-socket.store.js";
import { OctoprintWebsocketAdapter } from "./services/octoprint/octoprint-websocket.adapter.js";
import { BambuMqttAdapter } from "./services/bambu/bambu-mqtt.adapter.js";
import { TestPrinterSocketStore } from "./state/test-printer-socket.store.js";
import { PrinterEventsCache } from "./state/printer-events.cache.js";
import { PrinterApiFactory } from "./services/printer-api.factory.js";
import { ClientBundleService } from "./services/core/client-bundle.service.js";
import { LogDumpService } from "./services/core/logs-manager.service.js";
import { MonsterPiService } from "./services/core/monsterpi.service.js";
import { ServerHost } from "./server.host.js";
import { BootTask } from "./tasks/boot.task.js";
import { UserService } from "./services/orm/user.service.js";
import { RoleService } from "./services/orm/role.service.js";
import { PermissionService } from "./services/orm/permission.service.js";
import { PrinterWebsocketRestoreTask } from "./tasks/printer-websocket-restore.task.js";
import { ConfigService } from "./services/core/config.service.js";
import { ClientDistDownloadTask } from "./tasks/client-bundle.task.js";
import { CameraStreamService } from "./services/orm/camera-stream.service.js";
import { JwtService } from "./services/authentication/jwt.service.js";
import { AuthService } from "./services/authentication/auth.service.js";
import { RefreshTokenService } from "./services/orm/refresh-token.service.js";
import { ApiKeyService } from "./services/orm/api-key.service.js";
import { SettingsService } from "./services/orm/settings.service.js";
import { FloorService } from "./services/orm/floor.service.js";
import { FloorPositionService } from "./services/orm/floor-position.service.js";
import { ExceptionFilter } from "./middleware/exception.filter.js";
import { TypeormService } from "./services/typeorm/typeorm.service.js";
import { UserRoleService } from "./services/orm/user-role.service.js";
import { PrinterTagService } from "./services/orm/printer-tag.service.js";
import { MoonrakerClient } from "./services/moonraker/moonraker.client.js";
import { MoonrakerWebsocketAdapter } from "./services/moonraker/moonraker-websocket.adapter.js";
import { OctoprintApi } from "./services/octoprint.api.js";
import { MoonrakerApi } from "./services/moonraker.api.js";
import { HttpClientFactory } from "./services/core/http-client.factory.js";
import { CradleService } from "./services/core/cradle.service.js";
import { PrusaLinkApi } from "./services/prusa-link/prusa-link.api.js";
import { PrusaLinkHttpPollingAdapter } from "./services/prusa-link/prusa-link-http-polling.adapter.js";
import { BambuClient } from "./services/bambu/bambu.client.js";
import { BambuFtpAdapter } from "./services/bambu/bambu-ftp.adapter.js";
import { BambuApi } from "./services/bambu.api.js";
import { PrintJobAnalysisTask } from "./tasks/print-job-analysis.task.js";
import { PrintFileDownloaderService } from "./services/print-file-downloader.service.js";
import { Octokit } from "octokit";
import { InjectionMode, asClass, asFunction, asValue, createContainer } from "awilix";
import { ToadScheduler } from "toad-scheduler";
import { throttling } from "@octokit/plugin-throttling";
//#region src/container.ts
function configureContainer() {
const container = createContainer({ injectionMode: InjectionMode.CLASSIC });
const di = DITokens;
container.register({
[]: asValue(ROLES.GUEST),
[]: asValue(ROLES.ADMIN),
[]: asFunction(() => {
return process.env[AppConstants.VERSION_KEY];
}),
[]: asClass(CradleService).inject((container) => ({ container })),
[]: asClass(SocketFactory).transient(),
[]: asClass(TypeormService).singleton(),
[]: asClass(SettingsService),
[]: asClass(FloorService).singleton(),
[]: asClass(FloorPositionService).singleton(),
[]: asClass(CameraStreamService).singleton(),
[]: asClass(PrinterService),
[]: asClass(PrinterMaintenanceLogService),
[]: asClass(PrinterTagService),
[]: asClass(RefreshTokenService).singleton(),
[]: asClass(ApiKeyService).singleton(),
[]: asClass(UserService).singleton(),
[]: asClass(UserRoleService).singleton(),
[]: asClass(RoleService).singleton(),
[]: asClass(PermissionService).singleton(),
[]: asClass(ServerHost).singleton(),
[]: asClass(ExceptionFilter).singleton(),
[]: asClass(SettingsStore).singleton(),
[]: asClass(ConfigService),
[]: asClass(AuthService).singleton(),
[]: asClass(JwtService).singleton(),
[]: asFunction(LoggerFactory).transient(),
[]: asClass(TaskManagerService).singleton(),
[]: asClass(ToadScheduler).singleton(),
[]: asFunction(configureEventEmitter).singleton(),
[]: asClass(ServerReleaseService).singleton(),
[]: asClass(MonsterPiService).singleton(),
[]: asClass(GithubService),
[]: asFunction((configService) => {
return new (Octokit.plugin(throttling))({
auth: configService.get(AppConstants.GITHUB_PAT),
throttle: {
onRateLimit: (_retryAfter, options, _octokit, _retryCount) => {
LoggerFactory()("OctoKitThrottle").warn(`Request quota exhausted for request ${options.method} ${options.url}`);
},
onSecondaryRateLimit: (_retryAfter, options, _octokit) => {
LoggerFactory()("OctoKitThrottle").warn(`SecondaryRateLimit detected for request ${options.method} ${options.url}`);
}
}
});
}),
[]: asClass(ClientBundleService),
[]: asClass(LogDumpService),
[]: asClass(HttpClientFactory),
[]: asClass(SocketIoGateway).singleton(),
[]: asClass(MulterService).singleton(),
[]: asClass(YamlService),
[]: asValue(null),
[]: asClass(PrinterApiFactory).transient(),
[]: asClass(PrusaLinkApi).transient(),
[]: asClass(PrusaLinkHttpPollingAdapter).transient(),
[]: asClass(OctoprintApi).transient(),
[]: asClass(OctoprintClient).singleton(),
[]: asClass(OctoprintWebsocketAdapter).transient(),
[]: asClass(MoonrakerApi).transient(),
[]: asClass(MoonrakerClient).singleton(),
[]: asClass(MoonrakerWebsocketAdapter).transient(),
[]: asClass(BambuApi).transient(),
[]: asClass(BambuClient).transient(),
[]: asClass(BambuFtpAdapter).transient(),
[]: asClass(BambuMqttAdapter).transient(),
[]: asClass(BatchCallService).singleton(),
[]: asClass(FloorStore).singleton(),
[]: asClass(PrinterThumbnailCache).singleton(),
[]: asClass(FileUploadTrackerCache).singleton(),
[]: asClass(PrinterCache).singleton(),
[]: asClass(PrinterEventsCache).singleton(),
[]: asClass(PrinterSocketStore).singleton(),
[]: asClass(TestPrinterSocketStore).singleton(),
[]: asClass(PrintJobService).singleton(),
[]: asClass(PrintQueueService).singleton(),
[]: asClass(FileStorageService).singleton(),
[]: asClass(FileAnalysisService).singleton(),
[]: asClass(PrintFileDownloaderService).singleton(),
[]: asClass(BootTask),
[]: asClass(SoftwareUpdateTask),
[]: asClass(SocketIoTask).singleton(),
[]: asClass(ClientDistDownloadTask).singleton(),
[]: asClass(PrinterWebsocketTask).singleton(),
[]: asClass(PrinterWebsocketRestoreTask).singleton(),
[]: asClass(PrintJobAnalysisTask).singleton()
});
return container;
}
//#endregion
export { configureContainer };
//# sourceMappingURL=container.js.map