import { Server } from "linebridge" import B2 from "backblaze-b2" import DbManager from "@shared-classes/DbManager" import StorageClient from "@shared-classes/StorageClient" import CacheService from "@shared-classes/CacheService" import SSEManager from "@shared-classes/SSEManager" import SharedMiddlewares from "@shared-middlewares" import LimitsClass from "@shared-classes/Limits" import TaskQueueManager from "@shared-classes/TaskQueueManager" class API extends Server { static refName = "files" static useEngine = "hyper-express" static routesPath = `${__dirname}/routes` static listen_port = process.env.HTTP_LISTEN_PORT ?? 3002 static enableWebsockets = true middlewares = { ...SharedMiddlewares, } contexts = { db: new DbManager(), cache: new CacheService(), storage: StorageClient(), b2Storage: null, SSEManager: new SSEManager(), limits: {}, } queuesManager = new TaskQueueManager( { workersPath: `${__dirname}/queues`, }, this, ) async onInitialize() { global.sse = this.contexts.SSEManager if (process.env.B2_KEY_ID && process.env.B2_APP_KEY) { this.contexts.b2Storage = new B2({ applicationKeyId: process.env.B2_KEY_ID, applicationKey: process.env.B2_APP_KEY, }) global.b2Storage = this.contexts.b2Storage await this.contexts.b2Storage.authorize() } else { console.warn( "B2 storage not configured on environment, skipping...", ) } await this.queuesManager.initialize({ redisOptions: this.engine.ws.redis.options, }) await this.contexts.db.initialize() await this.contexts.storage.initialize() global.storage = this.contexts.storage global.queues = this.queuesManager this.contexts.limits = await LimitsClass.get() } } Boot(API)