-
#894
77186daThanks @CorentinTh! - Added a "Open with..." button for documents along with a complete PDF viewer page with standard features such as thumbnails, outline, attachments, and document properties. -
#820
3fa398cThanks @CorentinTh! - Replaceddate-fnsfunctions with in-house implementations to avoid pulling the 30MB lib (mainly due to locale data). -
#852
71872dbThanks @CorentinTh! - Added explicit error when trying to update a tag with a name that already exists -
#827
ca2ef28Thanks @CorentinTh! - In the search queries, tag filters are now case-insensitive, sotag:Importantandtag:importantwill match the same tag (as tags names are case-insensitive). -
#883
63ddecfThanks @CorentinTh! - Synchronized pagination state in the URL on the documents list page. -
#826
494aa5bThanks @CorentinTh! - Trim tag names and descriptions on creation and update to avoid leading/trailing spaces. -
#829
393a155Thanks @CorentinTh! - Added a button to generate a random color in the tag creation/edition modal. -
#810
1d5ada8Thanks @What-is-water93! - Significantly reduced the size of the rootless docker image by preventing file duplications due tochownoperations, gaining ~230MB, more than 30% reduction in size. -
#900
9058f9eThanks @CorentinTh! - Added an option to limit the number of tags that can be created in an organization, defaulting to 200. Configurable via theMAX_TAGS_PER_ORGANIZATIONenvironment variable. -
#884
4c7da4bThanks @CorentinTh! - Excluded Synology specific files for the ingestion folder -
#896
fdd955eThanks @CorentinTh! - Coerce MIME type of intake email attachments when declared asapplication/octet-streamor empty, using magic bytes detection with extension-based fallback. -
#859
afcfcf7Thanks @CorentinTh! - Fixed a race condition that could incorrectly show the "Email verified" page after successful login, even when email verification had not been completed or was not required. -
#870
69633fbThanks @CorentinTh! - Improved the document tag picker UI and UX, allowing tags to be managed from the document list. -
#855
3f4ca07Thanks @CorentinTh! - Added tagging rules creation/update loading states -
#880
4f5b29bThanks @CorentinTh! - Removed misleading "git missing" error log on app startup when git isn't available, like in Docker env. -
#822
b6951eaThanks @CorentinTh! - Tag names uniqueness enforced with case insensitivity per organization. Migration will ensure deduplication by appending prefixes in case of existing collisions. -
#811
1eeb3dfThanks @CorentinTh! - Added small header in organization creation page to quickly access the invitations when first organization is being created -
#903
d13c74fThanks @CorentinTh! - The command palette state no longer resets when opening it, allowing to keep the search query and results when closing and reopening it. -
#851
316a8c2Thanks @CorentinTh! - Added tag creation/update button loading state -
#892
1c1d273Thanks @CorentinTh! - Enforced the length of the intake email webhook secret (INTAKE_EMAILS_WEBHOOK_SECRET) to be between 16 and 128 characters to match the OwlRelay API validation requirements. -
#855
3f4ca07Thanks @CorentinTh! - Prevented multiple tagging-rules creation attempts when clicking the create button quickly. -
#851
316a8c2Thanks @CorentinTh! - Prevented multiple tag creation attempts when clicking the create button quickly. -
#899
d1eae05Thanks @CorentinTh! - Api breaking change: removed the/api/organizations/:organizationId/documents/searchendpoint in favor of the existing/api/organizations/:organizationId/documentswith an optionalsearchQueryquery parameter.
The new/api/organizations/:organizationId/documentsendpoint now behave as the old/searchendpoint, with all documents being returned whensearchQueryis empty. Note that the response fieldtotalCountof the old/searchendpoint has been renamed todocumentsCountin the new endpoint.Before:
GET /api/organizations/:organizationId/documents/search?searchQuery=invoice&pageIndex=1&pageSize=20 Response: { documents: Document[]; totalCount: number; } GET /api/organizations/:organizationId/documents?pageIndex=1&pageSize=20 Response: { documents: Document[]; documentsCount: number; }After:
GET /api/organizations/:organizationId/documents?searchQuery=invoice&pageIndex=1&pageSize=20 Response: { documents: Document[]; documentsCount: number; } -
#893
0c62716Thanks @CorentinTh! - Security fix: prevented unauthorized listing to organization tags and webhooks. An authenticated user could list the tags and webhooks of an organization they are not a member of by sending requests to the corresponding endpoints by knowing the organization ID. Credit to Sergio Cabrera, security researcher, for responsibly disclosing this vulnerability.
Important
Support Papra's development
Papra is looking for sponsors to help fund the development and ensure the sustainability of the project. If you find Papra useful and want to support its development, please consider becoming a sponsor, even a small contribution can make a big difference. Company or organization can get in touch for sponsorship opportunities, like visibility benefits or custom partnerships.