初回コミット: AltStore PAL向けADPホスティングSaaS

- Fastify API・Node Worker・PostgreSQL・S3互換ストレージ構成
- ADP ZIPのマルチパートアップロードとManifest検証(パストラバーサル・ZIP爆弾等を拒否)
- manifest.json/signatureは再シリアライズせず元バイト列を保持
- Cloudflare風の運用向け管理ダッシュボード(shadcn/Radix・日本語UI・4ルート)
  概要/Sources/アプリ/リリース + ルートランディングページ
- 汎用OIDC SSO・Workspace単位の認可・demo mode
- 匿名配布: /sources/{slug}/source.json, /artifacts/{releaseId}/manifest.json
- Docker Compose対応
This commit is contained in:
amania-jailbreak
2026-08-05 10:09:58 +09:00
commit 93825ebc64
59 changed files with 16065 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
import { loadConfig } from "../../api/src/config";
import { processUpload } from "../../api/src/processor";
import { createRuntime } from "../../api/src/runtime";
const appConfig = loadConfig();
const runtime = await createRuntime(appConfig);
async function tick() {
const uploads = await runtime.store.listQueuedUploads(2);
for (const upload of uploads) {
try {
await processUpload(upload.id, runtime.store, runtime.storage, appConfig);
console.log(`[worker] processed ${upload.id}`);
} catch (error) {
console.error(`[worker] failed ${upload.id}`, error);
}
}
}
console.log(`AltDock worker listening for queued uploads (${appConfig.STORAGE_MODE} storage).`);
await tick();
const interval = setInterval(() => void tick(), 2500);
const shutdown = async () => {
clearInterval(interval);
await runtime.pool?.end();
process.exit(0);
};
process.once("SIGINT", shutdown);
process.once("SIGTERM", shutdown);
+8
View File
@@ -0,0 +1,8 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"noEmit": true,
"types": ["node"]
},
"include": ["src/**/*.ts"]
}