Commit Graph

1433 Commits

Author SHA1 Message Date
neon 60fcbd9410 i18n(client): sync translations from Crowdin (#1632)
Keep sparse translated catalogs synchronized with reviewed Crowdin content.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-03 10:04:18 -06:00
neon cb8d1e3b2b fix(settings): add optional dashboard shelf sync
Keep dashboard layouts browser-local by default and let users opt in to account storage.
Group library selection and shelf sync in one dropdown, preserve legacy client settings,
and block sync changes for demo-restricted accounts.

Fixes #1646
2026-10-02 04:11:47 +00:00
neon 0e16931df3 ci: align repo automation with the new label set
Apply needs-triage to new bug and feature issues from the templates.
Drop the retired npm label from the Dependabot npm updates.
Give Docker, Dockerfile, and compose paths their own docker label
instead of folding them into ci.
2026-10-02 00:55:22 +00:00
neon f8c8ecf99a fix(books): honour the metadata score sort when series are collapsed
The collapsed order by had no metadataScore case, so the sort was dropped
and the list fell back to title order. Order by metadata_score there and
select it in the collapsed jump-bucket query that shares the order by.

Fixes #1638
2026-10-02 00:10:28 +00:00
neon 068a62b7ab fix(reader): fall back to the declared narration length for read-along EPUBs
Use the package media:duration when a SMIL clip cannot be measured.
Storyteller 2.x writes a backwards clip at audio track boundaries, which
nulled the total and blocked the audiobook bridge. Stored nulls are
re-measured via a migration, the detail page and an unchanged-folder scan.

Fixes #1619
2026-10-01 18:09:27 +00:00
neon 4701412ef2 feat(settings): redesign file naming as a two-column workbench
The three-column layout left the editor 270px wide at 1280 and broke resolved paths mid-word.
Draw the pattern one folder per line, preview it against long-name books, and list only what
missing metadata changes. Add resolvePlaceholders to the shared resolver to report fallbacks.
2026-09-30 22:12:02 -06:00
neon 2855dbb8a3 i18n(client): sync translations from Crowdin (#1611)
Keep sparse translated catalogs synchronized with reviewed Crowdin content.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-30 22:11:38 -06:00
neon 324059ef16 security(deps): patch container dependency vulnerabilities
Raise transitive dependency floors so image builds no longer ship versions rejected by the HIGH and CRITICAL Trivy gate.
2026-09-30 22:23:42 +00:00
neon 05a55d6b62 build(deps): upgrade non-TypeScript dependencies
Keep TypeScript at 6.0.3 while moving the remaining server and client packages onto their current supported releases.

Allow the PWA asset generator 2 peer range because vite-plugin-pwa still declares the compatible version 1 range.
2026-09-30 21:37:55 +00:00
neon ef2bcced3b fix(client): constrain request title column width
Keep long request titles from widening the auto-layout table and hiding row actions. Guard the intrinsic-sizing chain with focused component regression tests.

Fixes #1613
2026-09-30 20:04:59 +00:00
neon 85927fb118 fix(reader): keep oversized comic pages within scroll bounds
Use safe flex alignment so pages stay centered when they fit and fall back to the scroll origin when they overflow.

Closes #1610
2026-09-30 19:35:10 +00:00
neon 951f3b702d fix(reader): persist audiobook progress on insecure origins
Generate RFC 4122 UUIDs with getRandomValues when randomUUID is unavailable so plain HTTP deployments can save playback state and bookmarks.

Fixes #1608
2026-09-30 19:31:05 +00:00
SergeiAK d1b3fae7f7 fix(authors): keep non-latin letters when matching enrichment candidates (#1615)
* fix(authors): keep non-latin letters when matching enrichment candidates

Keep letters and digits of any script in normalizeName() instead of
dropping everything outside [a-z0-9], and stop treating two empty token
lists as a token-set match. Names without ASCII letters normalized to an
empty string, so any two of them scored 0.96 and passed the confidence
gate, and enrichment linked authors to unrelated people.

Closes #1459

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(authors): keep combining marks when normalizing author names

Keep \p{M} in normalizeName() alongside letters and digits. Vowel signs
in scripts such as Devanagari are combining marks, not letters, so
dropping them merged distinct names: कमल and कमला both normalized to
कमल and matched with score 1. Latin diacritics are still folded by the
earlier U+0300-U+036F strip, so Latin and Cyrillic matching is unchanged.

Refs #1459

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: neon <18559658+neonsolstice@users.noreply.github.com>
v3.2.0
2026-09-30 12:15:21 -06:00
neon de0954e77f feat(settings): polish the libraries page and add in-place controls
Cut long paths from the start, name layouts and schedules the way the editor
does, and switch to cards when the ledger would scroll sideways. Rows now
toggle automation in place with undo, open recent scan history, show live
scan counts, flag failed or never-scanned libraries, and can seed a new
library from another's settings.
2026-09-30 06:53:37 +00:00
neon 09e4f1b5bd chore(deps): update minor and patch dependencies
Bump every direct dependency to its newest same-major release, moving the
embedpdf patches and packageExtensions to 2.15.1 and deduping the lockfile.
Hold jsdom at 30.0 because 30.1 breaks vitest's URL.createObjectURL shim,
and skip releases still inside pnpm's minimum release age.
2026-09-30 00:57:24 +00:00
neon c0759ea1bf i18n(client): sync translations from Crowdin (#1574)
Keep sparse translated catalogs synchronized with reviewed Crowdin content.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-29 18:22:14 -06:00
neon 369393e4ad docs: document unsupported network storage 2026-09-29 22:15:03 +00:00
neon 6f673e2e59 feat(metadata): merge search and compare into one match sheet
Search and Compare Metadata become one two-pane sheet, shared with the Book Dock. Results are
ranked by match strength beside a field-by-field comparison with Keep/Use per row, word-level
diffs, other sources inline, a cover strip, and picks that survive switching results.
The search runs on open and a single source can be retried. No API change.
2026-09-29 04:53:34 +00:00
neon 1dd389563c style(client): unify modal backdrops with dedicated scrim tokens
Replace tinted modal veils with dedicated scrim tokens so dialogs, sheets, and image lightboxes dim consistently in both light and dark themes. Enforce scrim token usage in style validation to prevent backdrops that wash out in dark mode.
2026-09-29 03:42:01 +00:00
neon e92cc36146 feat(library): rebuild the library editor as a settings sheet
Replace the seven-step wizard with a sheet whose section rail summarizes each
setting. Format priority shows only the formats a library holds, folders are
checked as they are added, and people can be granted access while creating.
2026-09-29 02:11:31 +00:00
neon d66f853cad feat(settings): add read-aloud filename token
Expose media-overlay-aware naming across file creation and delivery paths while preserving existing client contracts. Keep settings router mocks compatible with the application router exports.

Closes #1590
2026-09-29 01:29:25 +00:00
neon acce1e15ac fix(server): survive database connection loss
Handle both idle pool errors and checked-out client errors so a database restart fails only the affected operation. Keep connection-loss logging sanitized and deduplicated while allowing the pool to reconnect.

Fixes #1581
2026-09-29 00:37:44 +00:00
neon 7e3bb1892e fix(annotations): clear KOReader state on device removal
Remove device-scoped annotation delivery state with the rest of its KOReader data so stale acknowledgements cannot block permanent deletion.

Fixes #1576
2026-09-29 00:24:27 +00:00
neon a572badecb fix(client): persist visible Book Dock destination on done
Save the library and folder shown in the metadata sheet before closing it. Avoid duplicate target updates after explicit selection and keep the sheet open when persistence fails.

Fixes #1573
2026-09-29 00:14:15 +00:00
neon 0085ffd11e fix(series): show mixed-media books in every group
Classify series entries from every available format so combined editions appear in each relevant section.

Fixes #1566
2026-09-29 00:00:13 +00:00
neon 826584e5da feat(annotations): add bounded dashboard highlights route
Return a user-scoped highlights shelf while preserving the existing single-highlight endpoint. Align calendar dashboard figures with each reader's timezone and completed attempts.
2026-09-28 23:50:27 +00:00
neon a35e222cb2 feat(types): expose the book file id on audiobook manifest assets
Clients that download an audiobook get its files from the book detail and its playback order from
the manifest, and had to pair the two by position. The two lists are ordered differently, so an
index pairing can attach the wrong file to an asset. Add the book_files id to each manifest asset
so the pairing can be made by id.

The field is additive and the server always sends it. The manifest revision is hashed from file
and chapter data, not from the response, so existing revisions do not change and clients holding
one do not see a 412 from this deploy.

The iOS app consumes this field to pair downloaded files with manifest assets; the web client
does not read it yet, so a grep of the client alone will show it as unused.
2026-09-28 22:38:47 +00:00
neon 236c1785d0 fix(books): stop synthesizing audiobook chapters from unknown durations
A multi-track audiobook without stored chapters gets one synthesized chapter per track, placed at
the running total of track durations. An unknown duration counted as zero, so every later
chapter started at the wrong offset, often all at 0, and the manifest then mapped them all onto
the last asset. The synthesis also walked the tracks in file name order while the manifest plays
them by sort order first, so chapter titles could disagree with the track they pointed at.

Skip the synthesis when any track duration is unknown, as already happens for a single track;
clients fall back to one entry per track. Order the synthesized chapters with the same comparator
the manifest uses, now shared from book-media utils. The detail files list keeps its existing
order. Affected books get a new manifest revision because the revision hashes the chapters.
2026-09-28 22:34:14 +00:00
neon 1be423fb54 test(stats): read continue-listening books from the scroller envelope
The scroller route returns a DashboardScrollerResponse of books and total, but this spec still
parsed the body as a bare array, so it failed before reaching its assertions.
2026-09-28 22:29:44 +00:00
neon 35d5a8c2d6 fix(reader): accept audiobook positions in the last second of a track
The extractor stores durations as whole seconds, so a manifest asset can report a duration up
to half a second shorter than the audio. The playback-state PUT and the audiobook bookmark
create refused any position past that rounded value with a 400, which rejected the tail of every
such track and left clients retrying a write that could never land.

Allow one second of slack at both checks and clamp the stored position to the duration. This
only relaxes validation: every position accepted before is still accepted and stored unchanged.
2026-09-28 22:27:45 +00:00
neon fd480b7f2b db(annotations): let a deleted audio bookmark position be bookmarked again
Audio bookmark deletes are soft, but the unique index on (user, book, position_seconds) still
covered tombstones, so the insert conflicted and the audiobook bookmark route answered 409 for
any position that had ever been bookmarked and deleted. Limit the index to live rows. The CFI
index is left as it is because KOReader bookmark revival relies on tombstones keeping their CFI.

The new predicate only narrows the index, so existing rows cannot violate it.
2026-09-28 22:26:10 +00:00
neon c76d9c01f9 fix(reader): stop web audiobook progress retrying rejected writes
Every non-OK playback-state response marked the write dirty and retried it every five seconds,
so a stale manifest (412) or a position past the rounded track duration (400) looped for the rest
of the session. Each attempt also minted a new operationId, which defeated the server's replay
protection, and capturedAt was stamped at flush time rather than when the position was taken.

Capture the timestamp and one operationId with each position and reuse them across retries.
Retry only network failures, 5xx and 429, and drop other rejected writes. On 409, reload the
server state and keep the local write only if it is newer. On 412, hold the write and have the
player reload the manifest, resending once the revision changes. Clamp positions to the track
duration from the manifest.
2026-09-28 22:23:06 +00:00
neon d8f68a0d38 fix(stats): record web audiobook sessions as listening
The web audiobook player shared the reading session composable, which never sent a
sessionType, so the server stored every listening session as a read session and counted
audiobook time as reading in activity stats. Let callers pass an optional sessionType and
have the audiobook view send listen. Other readers keep omitting the field, so their
payloads are unchanged. Existing rows are not backfilled.
2026-09-28 22:16:52 +00:00
neon 55110d5b44 feat(settings): add per-user Requests visibility toggle
Let users hide request entry points and notifications while existing requests continue running. Keep the setting optional so older clients retain their current behavior.

Ref #1476
2026-09-26 18:46:10 +00:00
neon 8dfb093301 feat(library): support fractional finished thresholds
Allow 0.05% adjustments while preserving existing integer settings and the 98% default. Keep finish detection stable when progress is stored as PostgreSQL real.
2026-09-26 18:22:02 +00:00
neon 244924a3aa fix(library): display reading start threshold accurately
Render the configured threshold in percentage points so library details agree with the editor for fractional values.

Fixes #1563
2026-09-26 18:04:25 +00:00
neon 2d9af5170b i18n(client): sync translations from Crowdin (#1565)
Keep sparse translated catalogs synchronized with reviewed Crowdin content.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-26 11:59:15 -06:00
Irohoho 900514c2b3 fix(koreader): respect KOReader global HTTP proxy settings (#1562)
* fix(koreader): respect KOReader global HTTP proxy settings

Allow KOReader's Network -> Proxy settings (stored in G_reader_settings)
to be respected for both JSON API requests and binary downloads.
Also support explicit proxy in BookOrbitApi options, and route Tailscale
tailnet addresses (100.x.y.z and *.ts.net) through the local userspace
HTTP proxy (127.0.0.1:1056) when running on e-ink devices lacking TUN.

Fixes #753

* fix(koreader): address review feedback on host parsing and HTTPS proxy safety

* fix(koreader): simplify getProxy to respect KOReader proxy settings without vendor fallbacks

* fix: tunnel KOReader HTTPS through configured HTTP proxies

Route HTTPS requests through CONNECT so proxy-only servers stay reachable without exposing BookOrbit credentials to the proxy. Restrict redirects to the original host and allow secure upgrades for API calls and downloads. Bump the plugin version so installed clients discover the fix.

---------

Co-authored-by: Andrej <acikarski14@gmail.com>
Co-authored-by: neon <18559658+neonsolstice@users.noreply.github.com>
2026-09-26 11:15:47 -06:00
neon a0477f0d0b ci: track meaningful pull request inactivity
Use human activity and observed head changes because GitHub can update PR timestamps without contributor activity.

Audit every open PR before applying changes and start existing PRs from a safe baseline.
2026-09-26 15:48:02 +00:00
François-Xavier Payet 04ba2ffbcf fix(metadata): keep a pinned hardcover edition past the edition cap (#1549)
* fix(metadata): keep a pinned hardcover edition past the edition cap

resolveCachedMatch looked the cached edition up in the capped 50-edition list of the work, so on
works with more editions (Harry Potter, Le Petit Prince, Dune) a manually chosen edition past the
cap was never found and pickBestEdition silently re-pointed the book on the very sync that
setEdition triggers. Resolve the cached edition by id, scoped to the book, and only fall back to
the capped list when Hardcover no longer has that edition on the book.

Fixes #1252

* fix(metadata): serialize Hardcover edition changes with sync

Keep a manual edition choice from being overwritten by an older in-flight sync. Queue sync and edition operations per user and book so the manual choice runs after earlier work.

Ref #1252

---------

Co-authored-by: neon <18559658+neonsolstice@users.noreply.github.com>
2026-09-26 09:46:03 -06:00
vishnu d4bc62f8a9 fix(metadata): write finalized metadata back to the imported file (#1499)
* fix(metadata): write finalized metadata back to the imported file

Finalizing a Book Dock file only moved the bytes, so a library with file
writes enabled kept the metadata the file was uploaded with rather than
the metadata the dock settled on. Schedule a write-back for every book a
finalize produces once all of them have their metadata, attributed to
the uploader.

Fixes #1385

* fix(metadata): schedule dock file writes after cleanup

Prevent a failed Book Dock cleanup from leaving a pending file write. Keep the integration assertion synchronized with the debounced writer and restore the missing directory stability mock for end-to-end coverage.

---------

Co-authored-by: neon <18559658+neonsolstice@users.noreply.github.com>
2026-09-26 09:11:48 -06:00
S Heckler bc12143015 fix(auth): recover from expired edge auth proxy sessions (#1557)
* fix(auth): recover from expired edge auth proxy sessions

The service worker answered every page load from the precached app shell, so once an edge auth
proxy's session cookie (e.g. Cloudflare Access, OAuth2 Proxy) expired, the proxy never saw the
navigation and could not redirect to its login page. The app loaded from cache, its API calls were
redirected cross-origin and failed, and it fell back to its own login screen with no way out short
of clearing site data.

Serve navigations network-first and fall back to the precached shell only when offline.
vite-plugin-pwa defaults navigateFallback to index.html, which would register a cache-only route
ahead of this one, so disable it explicitly. Cache only 200 responses so a proxy's redirect is never
stored as the page.

Request API redirects manually so a proxy redirect is detected directly and triggers a full reload,
which the proxy can then send to its login page. Cap these reloads to one per 15 seconds so a reload
answered from cache again surfaces an error instead of looping.

Fixes #642

* fix(auth): harden edge auth proxy recovery against loops and cache growth

Force manual redirects after caller options so no request can opt back into following a proxy
redirect. Skip the reload when session storage is unavailable, since the loop guard cannot work
without it. Drop the navigation network timeout so a slow proxy redirect is never replaced by the
cached page, and cap the app shell cache, which stores one entry per visited URL.

Ref #642

* test(auth): isolate useLoginOptions module state between tests

The composable keeps its cached options, error, and in-flight request at module level, so they
carried over between tests in the file. Reset the module and import it fresh for each test so a
future test cannot pass or fail depending on what ran before it.

Ref #642

* fix(auth): let edge proxy handle sign-in navigations

Keep the offline shell under a distinct precache URL so Workbox cannot serve
root navigations before the proxy sees them. Route public auth requests through
the redirect-aware fetch path so expired edge sessions open reauthentication.

Ref #642

* fix(auth): keep offline shell off root URLs

Prevent Workbox from mapping root query variants to the precached offline shell so expired proxy sessions reach the network.

---------

Co-authored-by: neon <18559658+neonsolstice@users.noreply.github.com>
2026-09-26 08:55:42 -06:00
neon 6381f0221f fix(library): honor browser clock for cron schedules
Use the browser's hour cycle when its language matches the selected interface language, preserving regional time preferences.

Closes #1559
2026-09-26 13:41:33 +00:00
neon 68bf37582f docs: polish README layout, badges, navigation, and section order 2026-09-26 00:19:07 -06:00
neon 8fcf2b28ef docs: add Zenith hosting option to README 2026-09-26 06:04:58 +00:00
neon 995cc24cc5 fix(books): extract chapters from attached audiobooks
Preserve embedded chapters and total duration when audio joins an EPUB-primary book.

Fixes #1532
2026-09-26 05:52:29 +00:00
neon a52d005ff5 fix(reader): recover audiobook playback after media auth failure
Refresh the web access cookie after a media load failure and resume from the last observed position. Limit retries so unrelated media errors surface promptly.

Closes #1536
2026-09-26 05:52:28 +00:00
neon 0b2df6e3d3 fix(books): include subtitles in search
Match subtitle metadata in book searches and index it for large libraries. Add regression coverage for accent matching and library visibility.

+ add open collective

Closes #1552
2026-09-26 04:57:32 +00:00
neon 5a108bbd5e fix(client): paginate Book Dock navigation
Add a reusable pagination control and cover Book Dock navigation with focused tests. Align the client PDF dependency and lockfile for clean CI verification.
2026-09-26 01:17:55 +00:00
dependabot[bot] 0f2a679339 chore(deps): bump the production-dependencies group with 27 updates (#1542)
Bumps the production-dependencies group with 27 updates:

| Package | From | To |
| --- | --- | --- |
| [@embedpdf/engines](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/engines) | `2.15.0` | `2.15.1` |
| [@embedpdf/models](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/models) | `2.15.0` | `2.15.1` |
| [@embedpdf/pdfium](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/pdfium) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-annotation](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-annotation) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-bookmark](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-bookmark) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-document-manager](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-document-manager) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-history](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-history) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-interaction-manager](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-interaction-manager) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-pan](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-pan) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-render](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-render) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-rotate](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-rotate) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-search](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-search) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-selection](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-selection) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-spread](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-spread) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-thumbnail](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-thumbnail) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-tiling](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-tiling) | `2.15.0` | `2.15.1` |
| [@embedpdf/plugin-viewport](https://github.com/embedpdf/embed-pdf-viewer/tree/HEAD/packages/plugin-viewport) | `2.15.0` | `2.15.1` |
| [@formatjs/icu-messageformat-parser](https://github.com/formatjs/formatjs/tree/HEAD/packages/icu-messageformat-parser) | `3.5.18` | `3.5.20` |
| [@lucide/vue](https://github.com/lucide-icons/lucide/tree/HEAD/packages/vue) | `1.46.0` | `1.47.0` |
| [cronstrue](https://github.com/bradymholt/cRonstrue) | `3.26.0` | `3.27.0` |
| [reka-ui](https://github.com/unovue/reka-ui) | `2.10.4` | `2.10.5` |
| [vue](https://github.com/vuejs/core) | `3.5.42` | `3.5.43` |
| [vue-i18n](https://github.com/intlify/vue-i18n/tree/HEAD/packages/vue-i18n) | `11.4.10` | `11.4.12` |
| [@fastify/static](https://github.com/fastify/fastify-static) | `10.1.3` | `10.1.4` |
| [@nestjs/throttler](https://github.com/nestjs/throttler) | `6.5.0` | `6.7.0` |
| [drizzle-orm](https://github.com/drizzle-team/drizzle-orm) | `0.45.2` | `0.45.3` |
| [fastify](https://github.com/fastify/fastify) | `5.12.4` | `5.12.5` |


Updates `@embedpdf/engines` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/engines)

Updates `@embedpdf/models` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/models)

Updates `@embedpdf/pdfium` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/pdfium)

Updates `@embedpdf/plugin-annotation` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-annotation)

Updates `@embedpdf/plugin-bookmark` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-bookmark)

Updates `@embedpdf/plugin-document-manager` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-document-manager)

Updates `@embedpdf/plugin-history` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-history)

Updates `@embedpdf/plugin-interaction-manager` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-interaction-manager)

Updates `@embedpdf/plugin-pan` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-pan)

Updates `@embedpdf/plugin-render` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-render)

Updates `@embedpdf/plugin-rotate` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-rotate)

Updates `@embedpdf/plugin-search` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-search)

Updates `@embedpdf/plugin-selection` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-selection)

Updates `@embedpdf/plugin-spread` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-spread)

Updates `@embedpdf/plugin-thumbnail` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-thumbnail)

Updates `@embedpdf/plugin-tiling` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-tiling)

Updates `@embedpdf/plugin-viewport` from 2.15.0 to 2.15.1
- [Release notes](https://github.com/embedpdf/embed-pdf-viewer/releases)
- [Commits](https://github.com/embedpdf/embed-pdf-viewer/commits/v2.15.1/packages/plugin-viewport)

Updates `@formatjs/icu-messageformat-parser` from 3.5.18 to 3.5.20
- [Release notes](https://github.com/formatjs/formatjs/releases)
- [Changelog](https://github.com/formatjs/formatjs/blob/main/packages/icu-messageformat-parser/CHANGELOG.md)
- [Commits](https://github.com/formatjs/formatjs/commits/@formatjs/icu-messageformat-parser@3.5.20/packages/icu-messageformat-parser)

Updates `@lucide/vue` from 1.46.0 to 1.47.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/1.47.0/packages/vue)

Updates `cronstrue` from 3.26.0 to 3.27.0
- [Release notes](https://github.com/bradymholt/cRonstrue/releases)
- [Changelog](https://github.com/bradymholt/cRonstrue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bradymholt/cRonstrue/compare/v3.26.0...v3.27.0)

Updates `reka-ui` from 2.10.4 to 2.10.5
- [Release notes](https://github.com/unovue/reka-ui/releases)
- [Commits](https://github.com/unovue/reka-ui/compare/v2.10.4...v2.10.5)

Updates `vue` from 3.5.42 to 3.5.43
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.5.42...v3.5.43)

Updates `vue-i18n` from 11.4.10 to 11.4.12
- [Release notes](https://github.com/intlify/vue-i18n/releases)
- [Changelog](https://github.com/intlify/vue-i18n/blob/v11.4.12/CHANGELOG.md)
- [Commits](https://github.com/intlify/vue-i18n/commits/v11.4.12/packages/vue-i18n)

Updates `@fastify/static` from 10.1.3 to 10.1.4
- [Release notes](https://github.com/fastify/fastify-static/releases)
- [Commits](https://github.com/fastify/fastify-static/compare/v10.1.3...v10.1.4)

Updates `@nestjs/throttler` from 6.5.0 to 6.7.0
- [Release notes](https://github.com/nestjs/throttler/releases)
- [Changelog](https://github.com/nestjs/throttler/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nestjs/throttler/compare/v6.5.0...v6.7.0)

Updates `drizzle-orm` from 0.45.2 to 0.45.3
- [Release notes](https://github.com/drizzle-team/drizzle-orm/releases)
- [Commits](https://github.com/drizzle-team/drizzle-orm/compare/0.45.2...0.45.3)

Updates `fastify` from 5.12.4 to 5.12.5
- [Release notes](https://github.com/fastify/fastify/releases)
- [Commits](https://github.com/fastify/fastify/compare/v5.12.4...v5.12.5)

---
updated-dependencies:
- dependency-name: "@embedpdf/engines"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/models"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/pdfium"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-annotation"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-bookmark"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-document-manager"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-history"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-interaction-manager"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-pan"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-render"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-rotate"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-search"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-selection"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-spread"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-thumbnail"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-tiling"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@embedpdf/plugin-viewport"
  dependency-version: 2.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@formatjs/icu-messageformat-parser"
  dependency-version: 3.5.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@lucide/vue"
  dependency-version: 1.47.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: cronstrue
  dependency-version: 3.27.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: reka-ui
  dependency-version: 2.10.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: vue
  dependency-version: 3.5.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: vue-i18n
  dependency-version: 11.4.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@fastify/static"
  dependency-version: 10.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: "@nestjs/throttler"
  dependency-version: 6.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: drizzle-orm
  dependency-version: 0.45.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: fastify
  dependency-version: 5.12.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-25 18:38:43 -06:00