Web consumes protocol#393
Open
markmur wants to merge 4 commits into
Open
Conversation
Package Size
Measured from the PR base SHA and PR head SHA. This comment reports package artifact sizes only; it is not a final app binary-size report. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The web component now consumes the shared
@shopify/checkout-kit-protocolpackage instead of its own hand-rolled wire types and JSON-RPC parser (ucp-embed-types.ts). The public element API — the<shopify-checkout>tag, its attributes, methods (open()/close()), and theec.*events — is unchanged. What changes for consumers is the shape of the payload types: the exported type names and the casing of the fields on the checkout/error objects.Breaking changes
1. Renamed exported types
Four domain types exported from
@shopify/checkout-kitwere renamed to the canonical names from the protocol package:CheckoutLineItemLineItemCheckoutMessageMessageTotalCheckoutTotalUcpErrorResponseErrorResponseBuyer,Checkout, andOrderConfirmationkeep their names.2. Payload fields are now camelCase
Payloads are decoded through the shared protocol package, which converts wire
snake_casetocamelCase. This affects every field you read off the full checkout/error objects —event.detail.checkout,event.detail.order,event.detail.error, and theelement.checkout/element.errormirrors.Note: the change-event wrapper fields (
event.detail.lineItems,.totals,.messages) were already camelCase and are unaffected. Only the nested objects change.Representative field renames:
Checkoutline_itemslineItemsCheckoutcontinue_urlcontinueUrlCheckoutexpires_atexpiresAtLineItemparent_idparentIdMessagecontent_typecontentTypeErrorResponsecontinue_urlcontinueUrlMigration
snake_casefield access oncheckout/order/errorobjects withcamelCase. TypeScript consumers get compile errors at each site; the field names map 1:1 (foo_bar→fooBar).Why
The web component maintained a private copy of the UCP embedded-checkout wire types and a bespoke JSON-RPC parse/dispatch/encode loop, duplicating the contract already defined in
@shopify/checkout-kit-protocoland drifting from the other platforms. This wires web onto the sharedEmbeddedCheckoutProtocol.Client, which decodes payloads, routes them to per-event handlers, and encodes JSON-RPC responses. URL negotiation goes throughEmbeddedCheckoutProtocol.url, andwindow.openresults are built via the sharedwindowOpenSuccess/windowOpenRejectedfactories.Focus review on
platforms/web/src/checkout.ts(handler wiring and the#dispatchProtocolMessage/#handleWindowOpenflow). Rundev web testto exercise the reworked message handling, which asserts against decoded payloads and the shared response envelopes.