Skip to content

add a context signing helper - #81

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

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

Conversation

@cbrady

@cbrady cbrady commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

Adds Schematic::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; 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).

The stdlib JSON generator matches the API except on U+2028 and U+2029, which the helper escapes afterwards, and it raises on invalid UTF-8, which the helper replaces with U+FFFD as the API does. Base64url uses pack("m0") rather than the Base64 module, because Ruby 3.4 no longer bundles the base64 gem and the gemspec doesn't depend on it. Key names may be symbols; values must be strings.

The tests run the shared vectors from the API (SchematicHQ/schematic-api#9729), copied into test/testdata/. They ran locally on Ruby 4.0.4; CI runs 3.3. 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
@bpapillon
bpapillon merged commit 6d68243 into main Oct 30, 2026
5 checks passed
@bpapillon
bpapillon deleted the chris/sch-7983-schematic-ruby-add-a-context-signing-helper branch October 30, 2026 18:23
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