Skip to content

add a context signing helper - #149

Merged
bpapillon merged 1 commit into
mainfrom
chris/sch-7982-schematic-python-add-a-context-signing-helper
Oct 30, 2026
Merged

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

Conversation

@cbrady

@cbrady cbrady commented Oct 27, 2026

Copy link
Copy Markdown
Collaborator

Adds sign_context, 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; lifetime_seconds accepts up to the API's one-hour maximum, and issued_at sets the start time. It matches the Go and Node helpers (SchematicHQ/schematic-go#263, SchematicHQ/schematic-node#216).

json.dumps(ensure_ascii=False) matches the API except on U+2028 and U+2029, which the helper escapes afterwards. A Python string can hold a lone surrogate, or a surrogate pair as two separate characters, so the helper turns lone surrogates into U+FFFD and joins pairs, the way the API reads them. It raises ContextSignatureError for a key or value that isn't a string, and for a bool lifetime.

The tests run the shared vectors from the API (SchematicHQ/schematic-api#9729), copied into tests/context_signature/. 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 15:17
@cbrady
cbrady requested a review from a team as a code owner October 30, 2026 15:17
@bpapillon
bpapillon merged commit 8a42a98 into main Oct 30, 2026
6 checks passed
@bpapillon
bpapillon deleted the chris/sch-7982-schematic-python-add-a-context-signing-helper branch October 30, 2026 19:21
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