Skip to content

feat: extended metadata downloader#75

Merged
Sudashiii merged 5 commits into
masterfrom
features/finished_metadata
May 19, 2026
Merged

feat: extended metadata downloader#75
Sudashiii merged 5 commits into
masterfrom
features/finished_metadata

Conversation

@Sudashiii
Copy link
Copy Markdown
Owner

No description provided.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR completes the "extended metadata downloader" feature by adding a new ISBNdb metadata provider, an ApplyMetadataCandidateUseCase that maps user-selected fields from a metadata candidate onto a Book, a strict HTML sanitizer for provider descriptions, and shared author normalization helpers that are now reused across all metadata providers. It also tightens cover-image safety (minimum size + magic-byte signature checks) in ManagedBookCoverService and documents the new environment variables.

Changes:

  • New IsbnDbMetadataProvider (factory-gated on ISBNDB_API_KEY) plus shared normalizeAuthor/normalizeAuthorForMatch helpers used by all providers' scoring.
  • New ApplyMetadataCandidateUseCase and sanitizeMetadataDescription to safely apply selected candidate fields + cover to a book.
  • ManagedBookCoverService now enforces a minimum buffer size and validates image magic bytes for both fetched and embedded covers; env docs updated.

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated no comments.

Show a summary per file
File Description
sake/src/lib/utils/author.ts New shared author normalization helpers.
sake/src/lib/server/infrastructure/metadata-providers/isbndbMetadataProvider.ts New ISBNdb provider implementation.
sake/src/lib/server/infrastructure/metadata-providers/metadataProviderFactory.ts Wire ISBNdb into the factory (was Phase 6 stub).
sake/src/lib/server/infrastructure/metadata-providers/{googleBooks,openLibrary,hardcover}MetadataProvider.ts Use shared normalizeAuthorForMatch for author scoring.
sake/src/lib/server/application/services/MetadataDescriptionSanitizer.ts New allowlist-based HTML sanitizer for descriptions.
sake/src/lib/server/application/services/ExternalBookMetadataService.ts Run candidate descriptions through the sanitizer.
sake/src/lib/server/application/use-cases/ApplyMetadataCandidateUseCase.ts New use case to apply candidate fields + cover to a book.
sake/src/lib/server/application/services/ManagedBookCoverService.ts Add min-size + magic-byte checks for cover buffers/fetches.
sake/tests/metadata/*, sake/tests/library/managedBookCoverService.test.ts Unit tests covering all new behavior.
sake/.env.example, sake/.env.docker.selfhosted, README.md Document new metadata env vars.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@Sudashiii Sudashiii linked an issue May 19, 2026 that may be closed by this pull request
10 tasks
@Sudashiii Sudashiii merged commit 48fcf53 into master May 19, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Metadata download option(s)

2 participants