Implement Phase 2 asset storage pipeline

This commit is contained in:
Media
2026-08-16 19:59:10 -05:00
parent eb19675a5c
commit 722c6cf77d
29 changed files with 5059 additions and 16 deletions
+43 -2
View File
@@ -3,6 +3,8 @@ const { Server: SocketServer } = require("socket.io");
const { createApp } = require("./app");
const { openDatabase } = require("./database");
const { runMigrations } = require("./database/migrate");
const { createImageProcessor } = require("./image-processing");
const { createStorageService } = require("./storage");
function listen(httpServer, port, host) {
return new Promise((resolve, reject) => {
@@ -20,7 +22,12 @@ function listen(httpServer, port, host) {
});
}
function createRuntime({ config, logger = console }) {
function createRuntime({
config,
imageProcessor: suppliedImageProcessor,
logger = console,
storage: suppliedStorage,
}) {
const database = openDatabase(config.database);
let migrations;
try {
@@ -34,7 +41,32 @@ function createRuntime({ config, logger = console }) {
ready: false,
stopping: false,
};
const app = createApp({ config, database, lifecycle, migrations });
let storage;
let imageProcessor;
try {
storage = suppliedStorage || createStorageService(config.storage, { logger });
imageProcessor =
suppliedImageProcessor ||
createImageProcessor({ maxInputPixels: config.processing.maxInputPixels });
} catch (error) {
database.close();
throw error;
}
let app;
try {
app = createApp({
config,
database,
imageProcessor,
lifecycle,
migrations,
storage,
});
} catch (error) {
storage.stop();
database.close();
throw error;
}
const httpServer = http.createServer(app);
const io = new SocketServer(httpServer, {
serveClient: false,
@@ -63,9 +95,15 @@ function createRuntime({ config, logger = console }) {
.then((listeningAddress) => {
address = listeningAddress;
lifecycle.ready = true;
Promise.resolve()
.then(() => storage.start())
.catch(() => {
logger.warn?.("Object storage health checks could not be started");
});
return listeningAddress;
})
.catch((error) => {
storage.stop();
database.close();
throw error;
});
@@ -85,6 +123,7 @@ function createRuntime({ config, logger = console }) {
if (settled) return;
settled = true;
clearTimeout(timeout);
storage.stop();
if (database.open) {
database.close();
}
@@ -119,6 +158,8 @@ function createRuntime({ config, logger = console }) {
io,
lifecycle,
migrations,
storage,
imageProcessor,
get address() {
return address;
},