5 Commits
Author SHA1 Message Date
Giancarmine SalucciandClaude Opus 4.8 630c6f36c5 chore: fix lint — upgrade prettier plugins, format, resolve eslint errors
Build and publish docker image / Build and push image to Gitea's registry (push) Successful in 41s
`npm run lint` was broken and noisy:

- prettier-plugin-svelte 3.5.2 / prettier-plugin-tailwindcss 0.6.14 crashed
  on prettier 3.8 with "getVisitorKeys is not a function". Bumped to ^4.1.1
  and ^0.8.0 (compatible with the new embed API).
- Added .prettierignore (build output, .svelte-kit, generated drizzle
  migration meta, lockfile/data) and ran prettier --write across the repo.
- Typed layout `children` as Snippet (was `any`).
- Added keys to the EXTRACTORS {#each} blocks in settings.
- Disabled svelte/no-navigation-without-resolve: the app serves from the
  domain root (no base path) and links to external URLs + raw API endpoints,
  where resolve() is unnecessary or wrong.

No runtime behaviour change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 14:54:52 +02:00
Giancarmine SalucciandClaude Opus 4.8 89b9b2605d chore: bump @mozempk/ig-auth to ^0.1.2 (read-only store: best-effort www-claim)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 18:19:26 +02:00
Giancarmine SalucciandClaude Opus 4.8 99959b230e feat: adopt @mozempk/ig-auth — faithful Chrome identity + shared session, migrate to ideapad
Build and publish docker image / Build and push image to Gitea's registry (push) Failing after 39s
Replace the bot-flagged Instagram path with the shared @mozempk/ig-auth library:
- instagram/threads now source cookies + the captured Chrome web fingerprint from
  a shared encrypted session store (owned by the ig-keeper), replayed via yt-dlp
  --user-agent and the web identity in threads.ts (was: truncated android UA +
  android app-id)
- remove the fixed 12h current_user heartbeat; IG health is now passive
  (download success/failure) + the keeper
- migrate off OVH: image at mozempk/generic-video-dl, ideapad compose on the proxy
  network with the shared ig-session volume, host vidl.sal.giize.com
- Dockerfile resolves the scoped package via a BuildKit secret (no token in layers)
- drop scripts/generate-cookies.ts (superseded by the library's capture)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 17:07:57 +02:00
mozempkandClaude Sonnet 4.6 767da84772 Add Threads downloader via Instagram private API
yt-dlp has no Threads extractor. Implemented custom downloader in
threads.ts that converts Threads post shortcodes to Instagram media_ids,
queries i.instagram.com/api/v1/media/{id}/info/, and downloads the
highest-quality video version with progress reporting.

- queue.ts routes extractor=threads to downloadThreads()
- cookies-*.txt added to .gitignore
- generate-cookies.ts: fix domainFlag column, add flag-file proceed mechanism
- Add playwright + tsx as dev deps for cookie generation script

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 17:15:15 +02:00
mozempkandClaude Sonnet 4.6 c78f63d43a Initial implementation: self-hosted yt-dlp PWA
SvelteKit 5 + adapter-node PWA with:
- JWT auth (HS256, OIDC-ready interface) with auto-seeded admin
- Web Share Target (POST /share) for fire-and-forget URL sharing
- yt-dlp queue with p-limit concurrency (MAX_CONCURRENT=2)
- SSE progress streaming from yt-dlp --newline output
- Web Push notifications (VAPID) on complete/fail
- Per-extractor cookies store (AES-256-GCM encrypted at rest)
- 14-day retention cleanup with orphan sweep
- Local Playwright cookie generator script (scripts/generate-cookies.ts)
- Docker single-container (Alpine + ffmpeg + yt-dlp via pip)
- NPM proxy-network deployment (npm_network external)
- Drizzle ORM + better-sqlite3 (WAL mode)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 01:58:51 +02:00