ephraimduncan
f3f5903760
chore: merge main, resolve biome formatting conflicts
...
Merge origin/main into feat/document-file-conversion. Conflicts were
format-only (Tailwind class ordering, single-line vs multi-line) plus
two semantic merges:
- files.helpers.ts: combine main's pending-PDF download path with the
branch's original-source-file (DOCX/PNG/JPEG) download path
- download-pdf.ts: combine main's versionToFilenameSuffix helper with
the branch's server-provided Content-Disposition filename support
2026-05-12 11:28:47 +00:00
David Nguyen
8671f269e8
fix: lint project ( #2693 )
2026-05-08 16:04:22 +10:00
Lucas Smith
19c2f7b4a1
docs: add signing reminders guide ( #2716 )
2026-04-27 10:51:14 +10:00
ephraimduncan
f9cb8d84ed
Merge branch 'main' into feat/document-file-conversion
...
Resolved conflicts:
- create-document-data.ts: merged initialData + originalData/originalMimeType
- files.helpers.ts: kept both imports
- envelope-drop-zone-wrapper.tsx: adopted buildDropzoneRejectionDescription
- create-envelope-items.ts: adopted UNSAFE_createEnvelopeItems
- create-envelope.ts: integrated convertToPdfIfNeeded into createEnvelopeRouteCaller
Extended putPdfFileServerSide to accept { initialData, originalData,
originalMimeType } options; updated seal-document.handler call site.
2026-04-20 10:11:35 +00:00
Ephraim Duncan
4935f387bf
feat: signing reminders ( #1749 )
2026-04-14 21:01:53 +10:00
Lucas Smith
ad559f72dd
feat: add BullMQ background job provider with Bull Board dashboard ( #2657 )
...
Add a new BullMQ/Redis-backed job provider as an alternative to the
existing Inngest and Local providers. Includes Bull Board UI for job
monitoring at /api/jobs/board (admin-only in production, open in dev).
2026-04-01 13:07:47 +11:00
Lucas Smith
2346de83a6
fix: replace z.string().email() with RFC 5322 compliant zEmail() ( #2656 )
2026-03-26 16:31:21 +11:00
Lucas Smith
814f6e62de
fix: replace z.string().email() with RFC 5322 compliant ZEmail/zEmail ( #2655 )
2026-03-26 13:31:26 +11:00
David Nguyen
0b605d61c6
feat: add envelope pdf replacement ( #2602 )
2026-03-18 22:53:28 +11:00
Lucas Smith
6b1b1d0417
fix: improve webhook execution ( #2608 )
...
Webhook URLs were being fetched without validating whether they
resolved to private/loopback addresses, exposing the server to SSRF.
Current SSRF is best effort and fail open, you should never host
services that
you cant risk exposure of.
This extracts webhook execution into a shared module that validates
URLs against private IP ranges (including DNS resolution), enforces
timeouts, and disables redirect following. The resend route now
queues through the job system instead of calling fetch inline.
2026-03-13 15:02:09 +11:00
Lucas Smith
9f680c7a61
perf: set global prisma transaction timeouts and reduce transaction scope ( #2607 )
...
Configure default transaction options (5s maxWait, 10s timeout) on the
PrismaClient instead of per-transaction overrides. Move side effects
like email sending, webhook triggers, and job dispatches out of
$transaction blocks to avoid holding database connections open during
network I/O.
Also extracts the direct template email into a background job and fixes
a bug where prisma was used instead of tx inside a transaction.
2026-03-13 14:51:53 +11:00
David Nguyen
e67e19358a
fix: add hipaa flag ( #2603 )
2026-03-13 12:06:10 +11:00
David Nguyen
6faa01d384
feat: add pdf image renderer ( #2554 )
...
## Description
Replace the PDF renderer with an custom image renderer.
This allows us to remove the "react-pdf" dependency and allows us to use
a virtual list to improve performance.
2026-03-06 12:39:03 +11:00
Lucas Smith
ef0a5b54ba
fix: verify before re-registering in email sync ( #2568 )
2026-03-05 15:12:20 +11:00
Lucas Smith
7f5f2b22ed
feat: add seal-document sweep job and admin unsealed documents page ( #2563 )
2026-03-05 13:56:40 +11:00
Lucas Smith
c112392da9
feat: add admin email domain management and sync job ( #2538 )
2026-02-25 15:14:18 +11:00
Lucas Smith
653ab3678a
feat: better ratelimiting ( #2520 )
...
Replace hono-rate-limiter with a Prisma/PostgreSQL bucketed counter
approach that works correctly across multiple instances without sticky
sessions.
- Add RateLimit model with composite PK (key, action, bucket) and atomic
upsert
- Create rate limit factory with window parsing, bucket computation, and
fail-open
- Define auth-tier and API-tier rate limit instances
- Add Hono middleware, rateLimitResponse helper, and tRPC
assertRateLimit helper
- Wire rate limit headers through AppError constructor (was declared but
never assigned)
- Apply rate limits to auth routes (email-password, passkey), tRPC
routes
(2FA email, link org account), API routes, and file upload endpoints
- Add cleanup cron job for expired rate limit rows (batched delete every
15 min)
- Remove hono-rate-limiter dependency
2026-02-20 12:23:02 +11:00
Lucas Smith
006b1d0a57
feat: per-recipient envelope expiration ( #2519 )
2026-02-20 11:36:20 +11:00
Ephraim Duncan
d66c330d46
fix: match cert and audit log page dimensions to source document ( #2473 )
2026-02-12 18:25:11 +11:00
David Nguyen
0d65693d55
fix: highlight rejected certificate text ( #2478 )
...
## Description
- Update the rejected certificate so that is it more clear on who
rejected the document.
- Updated the audit log generation so that the completed audit log is
included
### Before
<img width="681" height="597" alt="image"
src="https://github.com/user-attachments/assets/3dab41c1-c86f-4555-8d50-3d9245be65d5 "
/>
### After
Note that the order of the recipient is different in this case
<img width="818" height="769" alt="image"
src="https://github.com/user-attachments/assets/71f0ac12-5859-47b4-8980-2420ef949d18 "
/>
---------
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com >
Co-authored-by: Lucas Smith <me@lucasjamessmith.me >
2026-02-12 16:06:43 +11:00
Lucas Smith
1669216a91
fix: flatten pdf-lib form fields before sealing document ( #2441 )
...
- Fixes checkbox fields not displaying correctly in sealed documents by
calling `flatten()` on the pdf-lib form before saving
2026-02-03 14:24:23 +11:00
Lucas Smith
9035240b4d
refactor: replace pdf-sign with libpdf/core for PDF operations ( #2403 )
...
Migrate from @documenso/pdf-sign and @cantoo/pdf-lib to @libpdf/core
for all PDF manipulation and signing operations. This includes:
- New signing transports for Google Cloud KMS and local certificates
- Consolidated PDF operations using libpdf API
- Added TSA (timestamp authority) helper for digital signatures
- Removed deprecated flatten and insert utilities
- Updated tests to use new PDF library
2026-01-21 15:16:23 +11:00
David Nguyen
c2ea5e5859
fix: migrate certificate generation ( #2251 )
...
Generate certificates and audit logs using Konva instead of browserless.
This should:
- Reduce the changes of generations failing
- Improve sealing speed
2026-01-06 14:26:19 +11:00
Chenyang Gao
2ca5d6cfaa
fix: local job retry loop for webhook calls ( #2295 )
2025-12-15 13:04:35 +11:00
Ryan Wagoner
04814ca14e
fix: on error job should resubmit with isRetry ( #2072 )
2025-12-15 13:03:04 +11:00
Lucas Smith
4d3d1b8d14
fix: make ai features more discoverable ( #2305 )
...
Previously you had to have explicit knowledge of the
feature and enable it in order to use AI assisted field
detection.
This surfaces it by having a secondary dialog prompting
for enablement.
Also includes a fix for CC recipients not getting marked
as signed in weird edge cases.
2025-12-09 15:30:48 +11:00
David Nguyen
b51f562224
feat: add empty emails for envelopes ( #2267 )
2025-12-06 13:38:10 +11:00
David Nguyen
e364b08b6a
fix: optimize webhook routing ( #2236 )
2025-11-25 11:43:23 +11:00
Lucas Smith
ae31860b16
fix: USE_INTERNAL_URL_BROWSERLESS breaks builds ( #2233 )
2025-11-23 23:49:08 +11:00
Lucas Smith
d2176627ca
chore: dependency updates ( #2229 )
2025-11-22 20:28:20 +11:00
David Nguyen
11d9bde8f8
fix: improve sealing speed ( #2210 )
2025-11-19 14:15:12 +11:00
Lucas Smith
d65866156d
fix: remove parallel steps ( #2152 )
2025-11-08 13:57:26 +11:00
Lucas Smith
37a2634aca
feat: support optimizeParallelism for inngest jobs ( #2151 )
2025-11-08 12:53:13 +11:00
Lucas Smith
db5524f8ce
fix: resolve issue with sealing task on inngest ( #2146 )
...
Currently on inngest the sealing task fails during decoration stating
that it can not find the step "xxx"
My running theory is that this was due to it being a
Promise.all(map(...)) even though that isn't explicitly disallowed.
This change turns it into a for loop collecting promises to be awaited
after the fact.
Local inngest testing looks promising.
2025-11-08 00:48:13 +11:00
Lucas Smith
48626b9169
fix: support utf8 filenames download ( #2145 )
2025-11-07 23:41:31 +11:00
David Nguyen
5cdd7f8623
fix: envelope styling ( #2102 )
2025-10-27 16:11:10 +11:00
David Nguyen
03eb6af69a
feat: polish envelopes ( #2090 )
...
## Description
The rest of the owl
2025-10-24 16:22:06 +11:00
David Nguyen
7f09ba72f4
feat: add envelopes ( #2025 )
...
This PR is handles the changes required to support envelopes. The new
envelope editor/signing page will be hidden during release.
The core changes here is to migrate the documents and templates model to
a centralized envelopes model.
Even though Documents and Templates are removed, from the user
perspective they will still exist as we remap envelopes to documents and
templates.
2025-10-14 21:56:36 +11:00
David Nguyen
44f5da95b3
chore: refactor routes ( #1992 )
2025-08-25 21:00:35 +10:00
David Nguyen
d7e5a9eec7
fix: refactor document router ( #1990 )
2025-08-25 08:23:12 +10:00
Catalin Pit
d1eb14ac16
feat: include audit trail log in the completed doc ( #1916 )
...
This change allows users to include the audit trail log in the completed
documents; similar to the signing certificate.
https://github.com/user-attachments/assets/d9ae236a-2584-4ad6-b7bc-27b3eb8c74d3
It also solves the issue with the text cutoff.
2025-08-07 11:44:59 +10:00
David Nguyen
c48486472a
fix: add missing email reply validation ( #1934 )
...
## Description
General fixes to the email domain features
Changes made:
- Add "email" validation for "Reply-To email" fields
- Fix issue where you can't remove the "Reply-To" email after it's set
- Fix issue where setting the "Sender email" back to Documenso would
still send using the org/team pref
2025-08-02 00:40:41 +10:00
David Nguyen
3409aae411
feat: add email domains ( #1895 )
...
Implemented Email Domains which allows Platform/Enterprise customers to
send emails to recipients using their custom emails.
2025-07-24 16:05:00 +10:00
David Nguyen
e6dc237ad2
feat: add organisations ( #1820 )
2025-06-10 11:49:52 +10:00
Lucas Smith
d1eddb02c4
fix: add missing awaits for font normalization
2025-06-07 02:24:59 +10:00
Lucas Smith
12ada567f5
feat: embed authoring part two ( #1768 )
2025-05-01 23:32:56 +10:00
Ephraim Duncan
bdb0b0ea88
feat: certificate qrcode ( #1755 )
...
Adds document access tokens and QR code functionality to enable secure
document sharing via URLs. It includes a new document access page that
allows viewing and downloading documents through tokenized links.
2025-04-28 11:30:09 +10:00
Ephraim Duncan
6540291055
feat: migrate webhook execution to background jobs ( #1694 )
2025-04-24 06:00:53 +00:00
David Nguyen
193325717d
fix: rework fields ( #1697 )
...
Rework:
- Field styling to improve visibility
- Field insertions, better alignment, centering and overflows
## Changes
General changes:
- Set default text alignment to left if no meta found
- Reduce borders and rings around fields to allow smaller fields
- Removed lots of redundant duplicated code surrounding field rendering
- Make fields more consistent across viewing, editing and signing
- Add more transparency to fields to allow users to see under fields
- No more optional/required/etc colors when signing, required fields
will be highlighted as orange when form is "validating"
Highlighted internal changes:
- Utilize native PDF fields to insert text, instead of drawing text
- Change font auto scaling to only apply to when the height overflows
AND no custom font is set
⚠️ Multiline changes:
Multi line is enabled for a field under these conditions
1. Field content exceeds field width
2. Field includes a new line
3. Field type is TEXT
## [BEFORE] Field UI Signing

## [AFTER] Field UI Signing

## [BEFORE] Signing a checkbox


## [AFTER] Signing a checkbox


## [BEFORE] What a 2nd recipient sees once someone else signed a
document

## [AFTER] What a 2nd recipient sees once someone else signed a document

## **[BEFORE]** Inserting fields

## **[AFTER]** Inserting fields

## Overflows, multilines and field alignments testing
Debugging borders:
- Red border = The original field placement without any modifications
- Blue border = The available space to overflow
### Single line overflows and field alignments
This is left aligned fields, overflow will always go to the end of the
page and will not wrap

This is center aligned fields, the max width is the closest edge to the
page * 2

This is right aligned text, the width will extend all the way to the
left hand side of the page

### Multiline line overflows and field alignments
These are text fields that can be overflowed

Another example of left aligned text overflows with more text

2025-04-23 21:40:42 +10:00
David Nguyen
063fd32f18
feat: add signature configurations ( #1710 )
...
Add ability to enable or disable allowed signature types:
- Drawn
- Typed
- Uploaded
**Tabbed style signature dialog**

**Document settings**

**Team preferences**

- Add multiselect to select allowed signatures in document and templates
settings tab
- Add multiselect to select allowed signatures in teams preferences
- Removed "Enable typed signatures" from document/template edit page
- Refactored signature pad to use tabs instead of an all in one
signature pad
Added E2E tests to check settings are applied correctly for documents
and templates
2025-03-24 17:13:11 +11:00