Skip to content

add a context signing helper - #215

Merged
bpapillon merged 1 commit into
mainfrom
chris/sch-7985-schematic-csharp-add-a-context-signing-helper
Nov 3, 2026
Merged

bpapillon merged 1 commit into
mainfrom
chris/sch-7985-schematic-csharp-add-a-context-signing-helper

Conversation

@cbrady

@cbrady cbrady commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

Adds ContextSignature.Sign, which a customer's backend calls to sign the company and user a browser SDK sends with a publishable key, for environments that require context signatures. It returns the X-Schematic-Context-Sig value the JS SDK's getContextSignature expects. A signature lasts 10 minutes by default; ContextSignatureOptions.Lifetime accepts up to the API's one-hour maximum, and IssuedAt sets the start time. It matches the Go and Node helpers (SchematicHQ/schematic-go#263, SchematicHQ/schematic-node#216).

The JSON is built by hand rather than with System.Text.Json, whose encoders escape differently from the API. Keys sort by code point, since ordinal comparison is UTF-16 order; U+2028 and U+2029 are escaped, and lone surrogates become U+FFFD as the API reads them. Base64url is done by hand so net8.0 doesn't need Base64Url.

The tests run the shared vectors from the API (SchematicHQ/schematic-api#9729), copied into the test project and to its output. They ran on net9.0, the only framework the test project targets. Merge after #9729, and refresh the copy if the vectors change there.

@cbrady
cbrady marked this pull request as ready for review October 30, 2026 14:18
@cbrady
cbrady requested a review from a team as a code owner October 30, 2026 14:18
@bpapillon
bpapillon merged commit 8a87fb4 into main Nov 3, 2026
3 checks passed
@bpapillon
bpapillon deleted the chris/sch-7985-schematic-csharp-add-a-context-signing-helper branch November 3, 2026 00:03
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.

2 participants