- docker-compose stack: podpuddle + MediaMTX (RTMP/WHIP/HLS) + blossom-server - NIP-98 nostr-only login with session cookies, replay guard, clock-skew window - podcasts/episodes CRUD; episodes register browser-uploaded blossom blobs - RSS 2.0 + itunes + podcast namespace feeds with lnaddress value blocks (podcast:guid UUIDv5 verified against the spec vector) - streams API with hashed stream keys; MediaMTX http-auth webhook (query/password/bearer forms); API poller flips live/ended status - NIP-53 kind 30311 live events published with the server's nostr identity - recordings: ffmpeg remux + server-key blossom upload → podcast episode - 35 vitest tests green Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
32 lines
735 B
JSON
32 lines
735 B
JSON
{
|
|
"name": "podpuddle-server",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "tsx watch src/index.ts",
|
|
"build": "tsc -p tsconfig.json",
|
|
"start": "node dist/index.js",
|
|
"test": "vitest run",
|
|
"typecheck": "tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@fastify/cookie": "^11.0.2",
|
|
"@fastify/static": "^8.1.1",
|
|
"better-sqlite3": "^12.2.0",
|
|
"fastify": "^5.4.0",
|
|
"fastify-plugin": "^5.1.0",
|
|
"nostr-tools": "^2.15.0",
|
|
"ws": "^8.18.0",
|
|
"zod": "^3.25.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/better-sqlite3": "^7.6.13",
|
|
"@types/node": "^22.15.0",
|
|
"@types/ws": "^8.18.0",
|
|
"tsx": "^4.20.0",
|
|
"typescript": "^5.9.0",
|
|
"vitest": "^3.2.0"
|
|
}
|
|
}
|