Skip to content

fix(eve): expose Linear webhook timestamp skew - #1733

Open
vercel-gh-bot-5[bot] wants to merge 1 commit into
mainfrom
e0/59deed68-a333-4961-bdb9-88406c633e73
Open

fix(eve): expose Linear webhook timestamp skew#1733
vercel-gh-bot-5[bot] wants to merge 1 commit into
mainfrom
e0/59deed68-a333-4961-bdb9-88406c633e73

Conversation

@vercel-gh-bot-5

Copy link
Copy Markdown

Linear retries preserve the original webhookTimestamp, but linearChannel always used the verifier's 60-second default. Delayed retries returned 401 even though verifyLinearRequest already supported a configurable window.

Hypothesis

Because the channel drops the existing maxSkewMs option, forwarding an opt-in value should accept intended retries without weakening the default replay protection.

Changes

  • expose maxSkewMs on LinearChannelConfig and forward it to HMAC verification
  • reject negative and non-finite values that could disable timestamp checks
  • document the retry and custom-verifier security boundaries

Fixes #1570

Validation

  • repro test returned 401 before the fix and 200 after it
  • Linear channel unit tests: 31 passed
  • eve typecheck passed
  • focused lint, formatting, docs checks, changeset status, and invariant guards passed
  • the full eve unit suite had one unrelated 5-second timeout in normalizeDevelopmentServerClientUrl; its isolated rerun passed

Requested by: colton.padden

Slack username: colton.padden
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
eve-docs Ready Ready Preview Aug 6, 2026 7:26pm
eve-docs-4759 Ready Ready Preview, v0 Aug 6, 2026 7:26pm

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.

linearChannel: Linear webhook retries always fail the 60s webhookTimestamp skew check, and maxSkewMs is unreachable

0 participants