Repository navigation
docs(turbosign): fix webhook verification samples, idempotency key, retries, HTTPS and URL limit - #227
Conversation
|
Self-review (author): ready to merge. CI green, no conflicts with
|
…review of #227) - The Ruby tab now carries the same note the embedded-signing guides use: the turbodocx-sdk gem is not on RubyGems yet, install it from the SDK repo (the Ruby SDK pages are still hidden drafts, so no link to them). - Troubleshooting said header names must be lowercase; they are case-insensitive and the Go/Java samples use canonical case. - Delivery behavior: redirects (3xx) are not followed and count as a failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Independent review (second pass): found 3 more things, all fixed in Found and fixed:
Re-confirmed against the SDKs:
Re-confirmed against the delivery behaviour:
Deliberately left as is:
Rebuilt: |
…nt_id note, UI and alt-text fixes (review of #227) - Go sample is now a complete program (func main + log import): it built with go vet but not go build when copied verbatim. - Delivery Object matches the API response (no webhookId; adds responseBody, nextRetryAt, errorMessage, status) and explains the status values. - A manual replay keeps the same event_id; say so next to the dedupe advice. - Point to the SDK's testWebhook for sending a sample event. - "Webhooks" is a left-menu item in E-Signature Settings, not a tab. - regenerateWebhookSecret, not rotateSecret. - Real alt text on three images that all said "Get It Signed button". - Ruby caveat uses the same :::note admonition as the embedded-signing guide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Third review (independent, every sample run): ready to merge. It found more accuracy issues on the page, all fixed in
The reviewer ran every sample:
Every fact checked against the delivery behaviour and the settings screen:
Rebuilt: Out of scope, FYI:
|
…very-id vs id, UI wording (4th review of #227) - Step 3 heading and an alt text still said "Webhooks tab"; it's a left-menu item. - testWebhook payloads are sample data (placeholder ids, evt_test_ event_id, a few differing fields) and the call blocks for all retries (~6 min) if the endpoint fails; say so. - X-TurboDocx-Delivery-Id is not the delivery id the API/Delivery History uses (replay takes the UUID id). - Webhook and Delivery Objects match the API: UUID ids, isActive / isDelivered returned as 1/0, plus metadata, createdBy and deliveryStats; availableEvents noted. - Delivery History: timestamps are per delivery, and any delivery can be replayed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Fourth review (a new developer relying on every sentence, checked against the live API): fixes in The reviewer test-fired all seven events, replayed a delivery, fetched the webhook and delivery objects, and crawled every link. Confirmed correct:
Found and fixed:
Rebuilt: Out of scope, FYI:
|
Review summary (4 rounds): found, fixed, false alarmsFound and fixed
False alarms / deliberately not changed
Real, but outside #211 (not changed here)
Status: |
…review of #227) - The Ruby tab now carries the same note the embedded-signing guides use: the turbodocx-sdk gem is not on RubyGems yet, install it from the SDK repo (the Ruby SDK pages are still hidden drafts, so no link to them). - Troubleshooting said header names must be lowercase; they are case-insensitive and the Go/Java samples use canonical case. - Delivery behavior: redirects (3xx) are not followed and count as a failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
590695d to
3aa10ed
Compare
…nt_id note, UI and alt-text fixes (review of #227) - Go sample is now a complete program (func main + log import): it built with go vet but not go build when copied verbatim. - Delivery Object matches the API response (no webhookId; adds responseBody, nextRetryAt, errorMessage, status) and explains the status values. - A manual replay keeps the same event_id; say so next to the dedupe advice. - Point to the SDK's testWebhook for sending a sample event. - "Webhooks" is a left-menu item in E-Signature Settings, not a tab. - regenerateWebhookSecret, not rotateSecret. - Real alt text on three images that all said "Get It Signed button". - Ruby caveat uses the same :::note admonition as the embedded-signing guide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…very-id vs id, UI wording (4th review of #227) - Step 3 heading and an alt text still said "Webhooks tab"; it's a left-menu item. - testWebhook payloads are sample data (placeholder ids, evt_test_ event_id, a few differing fields) and the call blocks for all retries (~6 min) if the endpoint fails; say so. - X-TurboDocx-Delivery-Id is not the delivery id the API/Delivery History uses (replay takes the UUID id). - Webhook and Delivery Objects match the API: UUID ids, isActive / isDelivered returned as 1/0, plus metadata, createdBy and deliveryStats; availableEvents noted. - Delivery History: timestamps are per delivery, and any delivery can be replayed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…etries, HTTPS and URL limit (#211) - Rewrite the SDK verification samples against the real SDK signatures: JS passed one object (rejects every delivery), Python imported a non-existent turbodocx module with wrong keyword names, Go had the wrong argument order and didn't compile, and .NET used an API no SDK provides. Tabs are now JS, Python, PHP, Go, Java and Ruby. - Dedupe on the payload's event_id: X-TurboDocx-Delivery-Id is new on every attempt, so it can't catch retries. - 3 attempts in total (2 retries), with the real 1 min / 5 min backoff. - Webhook URLs must be HTTPS even for testing; up to 10 URLs, not 5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…review of #227) - The Ruby tab now carries the same note the embedded-signing guides use: the turbodocx-sdk gem is not on RubyGems yet, install it from the SDK repo (the Ruby SDK pages are still hidden drafts, so no link to them). - Troubleshooting said header names must be lowercase; they are case-insensitive and the Go/Java samples use canonical case. - Delivery behavior: redirects (3xx) are not followed and count as a failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nt_id note, UI and alt-text fixes (review of #227) - Go sample is now a complete program (func main + log import): it built with go vet but not go build when copied verbatim. - Delivery Object matches the API response (no webhookId; adds responseBody, nextRetryAt, errorMessage, status) and explains the status values. - A manual replay keeps the same event_id; say so next to the dedupe advice. - Point to the SDK's testWebhook for sending a sample event. - "Webhooks" is a left-menu item in E-Signature Settings, not a tab. - regenerateWebhookSecret, not rotateSecret. - Real alt text on three images that all said "Get It Signed button". - Ruby caveat uses the same :::note admonition as the embedded-signing guide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…very-id vs id, UI wording (4th review of #227) - Step 3 heading and an alt text still said "Webhooks tab"; it's a left-menu item. - testWebhook payloads are sample data (placeholder ids, evt_test_ event_id, a few differing fields) and the call blocks for all retries (~6 min) if the endpoint fails; say so. - X-TurboDocx-Delivery-Id is not the delivery id the API/Delivery History uses (replay takes the UUID id). - Webhook and Delivery Objects match the API: UUID ids, isActive / isDelivered returned as 1/0, plus metadata, createdBy and deliveryStats; availableEvents noted. - Delivery History: timestamps are per delivery, and any delivery can be replayed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3aa10ed to
9bd658d
Compare
…/SDK#45) The turbodocx-sdk gem is on RubyGems (0.9.0), so the Ruby pages hidden in July come back, in the current design: one tabbed page per product plus a setup page per language, the same way the other five languages were merged. - turbosign, deliverable, quote, webhooks: a Ruby tab (after Java) in every language tab group, from the old Ruby pages, with shared text kept outside the tabs. Ruby-only sections (file upload by path or IO, Rails and Sinatra examples) get their own Ruby group. - Ruby text brought up to date with what the other languages got while it was hidden: conditional field metadata, the error-handling rewrite (one canonical error reference on the TurboSign page), the reminder/expiration and fileName request keys, and the wording fixes. Every Ruby call checked against the 0.9.0 gem. - ruby.md is now a setup page like python.md, listed under Install & configure. partner-ruby.md is unlisted like its siblings. - deliverable-ruby, quote-ruby and webhooks-ruby are folded into the tabs and 301 to ?language=ruby; old /docs/SDKs/ruby#section links hop to the TurboSign page. - Ruby rows and tabs on the SDKs overview; "not on RubyGems yet" notes removed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Closes #211
Why
docs/TurboSign/Webhooks.mdhad a broken verification sample and four statements the API contradicts. Checking every tab against the real SDKs showed it wasn't only the JS one:verifyWebhookSignaturetakes positional args. A genuine delivery got 401.from turbodocx import …:ModuleNotFoundError(the package isturbodocx_sdk); wrong keyword names.not enough arguments in call to sdk.VerifyWebhookSignature.What
event,event_idanddata.event_id.X-TurboDocx-Delivery-Idis new on every attempt.Verified (against a live TurboDocx API)
true, andfalsefor a tampered body.event_id.http://URL was rejected ("must be a valid uri with a scheme matching the https pattern"), 11 URLs were rejected ("Maximum 10 webhook URLs allowed"), and 10 were accepted.docusaurus buildpasses. Its broken-anchor warnings are all on other pages.Not changed: the "Try it Now" standalone HMAC samples (including C#/PowerShell). They build the signed string correctly and give no delivery-ID advice.
Review follow-up
turbodocx-sdkgem isn't on RubyGems yet. The Ruby SDK pages are still hidden drafts, so the tab doesn't link to them.Third-pass follow-up
func mainplus thelogimport). It used to passgo vetbut failgo buildwhen copied verbatim. It now builds as-is, and it accepted a real delivery and rejected a tampered one.webhookId, andresponseBody,nextRetryAt,errorMessageandstatusare added, with the status values explained.event_id, so the dedupe advice now says so.testWebhookfor sending a sample event.regenerateWebhookSecretreplaces the nonexistentrotateSecret.:::noteadmonition.Fourth-pass follow-up
isActiveandisDeliveredreturned as1/0, with a note to treat them as truthymetadata,createdByanddeliveryStatsaddedX-TurboDocx-Delivery-Idis not the deliveryid. Replay takes the UUIDid.testWebhook: payloads are sample data (placeholder ids,evt_test_event ids, a few differing fields), and the call waits for all retries if the endpoint fails.🤖 Generated with Claude Code
Also in this PR: the Ruby SDK is back (TurboDocx/SDK#45)
The
turbodocx-sdkgem is now on RubyGems (0.9.0), so the Ruby SDK docs that were hidden in July come back, in the current SDK docs design (one tabbed page per product plus a setup page per language). Commit960194c. Part of TurboDocx/SDK#45; close that issue once this merges.turbosign,deliverable,quote,webhooks): a Ruby tab, after Java, in every language tab group: 36 + 31 + 45 + 28 tabs. Text comes from the old Ruby pages, with text shared by every language kept outside the tabs, as in the original merge. Ruby-only sections (file upload by path or IO, the Rails and Sinatra / Rack examples) get their own Ruby group.fileNamerequest keys,get_statusdeadline note, and the wording fixes.TurboSign/Deliverable/TurboQuote/TurboWebhooks/TurboPartnercall exists with matching arguments, every public method the gem has is documented where the other languages document it, the error codes and tolerance rules match, and the quote constants exist.ruby.mdis now a setup page likepython.md(Installation, Requirements, Configuration, Product guides, Resources) and is listed under Install & configure.partner-ruby.mdisunlisted: true, like its siblings.deliverable-ruby,quote-rubyandwebhooks-rubyare folded into the tabs;static/_redirects301s each (plain,/,.html) to?language=ruby. Old/docs/SDKs/ruby#<section>links hop to the TurboSign page's Ruby tab (src/theme/Root.js).