From d5dd478510872cc7711221887dda743a3cb897dd Mon Sep 17 00:00:00 2001 From: Aaron Schubert Date: Tue, 11 Aug 2026 13:35:31 +0100 Subject: [PATCH 1/3] feat(point-of-sale): add paymentmethodselected intercept types Assisted-By: devx/815595f2-0ce0-49e1-87fc-903983c87fa6 --- .changeset/pos-intercept-payment-method.md | 5 +++ .../src/surfaces/point-of-sale/events.ts | 41 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 .changeset/pos-intercept-payment-method.md diff --git a/.changeset/pos-intercept-payment-method.md b/.changeset/pos-intercept-payment-method.md new file mode 100644 index 0000000000..cd56071139 --- /dev/null +++ b/.changeset/pos-intercept-payment-method.md @@ -0,0 +1,5 @@ +--- +'@shopify/ui-extensions': minor +--- + +Add `paymentmethodselected` intercept types for POS payment blocking workflows. diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/events.ts b/packages/ui-extensions/src/surfaces/point-of-sale/events.ts index 85894cc601..6681289ec0 100644 --- a/packages/ui-extensions/src/surfaces/point-of-sale/events.ts +++ b/packages/ui-extensions/src/surfaces/point-of-sale/events.ts @@ -4,6 +4,7 @@ import type { CashTrackingSessionCompleteEvent, } from './events/cash-tracking-session-events'; import type {Cart} from './types/cart'; +import type {MoneyV2} from './types/money'; /** * Canonical event-name constants for POS host events. Prefer these over string @@ -25,6 +26,7 @@ export const POS_EVENT_NAMES = { */ export const POS_INTERCEPT_NAMES = { BEFORE_CHECKOUT: 'beforecheckout', + PAYMENT_METHOD_SELECTED: 'paymentmethodselected', } as const; /** @@ -56,6 +58,7 @@ export interface ShopifyEventMap { */ export interface ShopifyInterceptMap { [POS_INTERCEPT_NAMES.BEFORE_CHECKOUT]: BeforeCheckoutEvent; + [POS_INTERCEPT_NAMES.PAYMENT_METHOD_SELECTED]: PaymentMethodSelectedEvent; } /** @@ -69,6 +72,44 @@ export interface BeforeCheckoutEvent extends Event { readonly cart: Cart; } +/** + * The kind of payment method being attempted. + * + * @private + */ +export type InterceptedPaymentMethodType = 'cash'; + +/** + * Identifies the payment method being attempted. + * + * `type` alone identifies singleton methods (for example `cash`). `identifier` + * disambiguates method types a shop can have several of (for example custom + * payment methods) as they become interceptable. + * + * @private + */ +export interface InterceptedPaymentMethod { + readonly type: InterceptedPaymentMethodType; + + /** Present when `type` alone is ambiguous. Matching is exact on the pair. */ + readonly identifier?: string; +} + +/** + * Dispatched when staff selects a payment method on the payments screen. + * + * @private + */ +export interface PaymentMethodSelectedEvent extends Event { + readonly type: typeof POS_INTERCEPT_NAMES.PAYMENT_METHOD_SELECTED; + + /** The payment method staff selected. */ + readonly paymentMethod: InterceptedPaymentMethod; + + /** The amount this tender would charge, in presentment currency. */ + readonly amount: MoneyV2; +} + /** @private */ export type ShopifyInterceptor = ( event: TEvent, From d8b03c99ac71e227d55743a5da657b94575e31b7 Mon Sep 17 00:00:00 2001 From: Aaron Schubert Date: Fri, 14 Aug 2026 13:55:31 +0100 Subject: [PATCH 2/3] refactor(point-of-sale): rename paymentmethodselected intercept to paymentvalidations Assisted-By: devx/8f5f2569-f126-402e-ae95-8081edfa5d81 --- .changeset/pos-intercept-payment-method.md | 5 ----- .changeset/pos-intercept-payment-validations.md | 5 +++++ .../ui-extensions/src/surfaces/point-of-sale/events.ts | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 .changeset/pos-intercept-payment-method.md create mode 100644 .changeset/pos-intercept-payment-validations.md diff --git a/.changeset/pos-intercept-payment-method.md b/.changeset/pos-intercept-payment-method.md deleted file mode 100644 index cd56071139..0000000000 --- a/.changeset/pos-intercept-payment-method.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@shopify/ui-extensions': minor ---- - -Add `paymentmethodselected` intercept types for POS payment blocking workflows. diff --git a/.changeset/pos-intercept-payment-validations.md b/.changeset/pos-intercept-payment-validations.md new file mode 100644 index 0000000000..9f3b4dce99 --- /dev/null +++ b/.changeset/pos-intercept-payment-validations.md @@ -0,0 +1,5 @@ +--- +'@shopify/ui-extensions': minor +--- + +Add `paymentvalidations` intercept types for POS payment blocking workflows. diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/events.ts b/packages/ui-extensions/src/surfaces/point-of-sale/events.ts index 6681289ec0..e57171163c 100644 --- a/packages/ui-extensions/src/surfaces/point-of-sale/events.ts +++ b/packages/ui-extensions/src/surfaces/point-of-sale/events.ts @@ -26,7 +26,7 @@ export const POS_EVENT_NAMES = { */ export const POS_INTERCEPT_NAMES = { BEFORE_CHECKOUT: 'beforecheckout', - PAYMENT_METHOD_SELECTED: 'paymentmethodselected', + PAYMENT_VALIDATIONS: 'paymentvalidations', } as const; /** @@ -58,7 +58,7 @@ export interface ShopifyEventMap { */ export interface ShopifyInterceptMap { [POS_INTERCEPT_NAMES.BEFORE_CHECKOUT]: BeforeCheckoutEvent; - [POS_INTERCEPT_NAMES.PAYMENT_METHOD_SELECTED]: PaymentMethodSelectedEvent; + [POS_INTERCEPT_NAMES.PAYMENT_VALIDATIONS]: PaymentValidationsEvent; } /** @@ -100,8 +100,8 @@ export interface InterceptedPaymentMethod { * * @private */ -export interface PaymentMethodSelectedEvent extends Event { - readonly type: typeof POS_INTERCEPT_NAMES.PAYMENT_METHOD_SELECTED; +export interface PaymentValidationsEvent extends Event { + readonly type: typeof POS_INTERCEPT_NAMES.PAYMENT_VALIDATIONS; /** The payment method staff selected. */ readonly paymentMethod: InterceptedPaymentMethod; From 576635eb78c7a85aa5a5bc8ed1bdf6cfeedc1616 Mon Sep 17 00:00:00 2001 From: Aaron Schubert Date: Fri, 14 Aug 2026 14:20:50 +0100 Subject: [PATCH 3/3] refactor(point-of-sale): rename beforecheckout intercept to cartvalidations Assisted-By: devx/ec0d35cb-d0dc-42cc-bac7-60ff45d75c7c --- .changeset/pos-intercept-payment-validations.md | 2 +- .../ui-extensions/src/surfaces/point-of-sale/events.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.changeset/pos-intercept-payment-validations.md b/.changeset/pos-intercept-payment-validations.md index 9f3b4dce99..eeec843d6b 100644 --- a/.changeset/pos-intercept-payment-validations.md +++ b/.changeset/pos-intercept-payment-validations.md @@ -2,4 +2,4 @@ '@shopify/ui-extensions': minor --- -Add `paymentvalidations` intercept types for POS payment blocking workflows. +Add `paymentvalidations` intercept types for POS payment blocking workflows, and rename the `beforecheckout` intercept to `cartvalidations` so both interceptable workflows follow one naming scheme. diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/events.ts b/packages/ui-extensions/src/surfaces/point-of-sale/events.ts index e57171163c..35daaebb83 100644 --- a/packages/ui-extensions/src/surfaces/point-of-sale/events.ts +++ b/packages/ui-extensions/src/surfaces/point-of-sale/events.ts @@ -25,7 +25,7 @@ export const POS_EVENT_NAMES = { * @private */ export const POS_INTERCEPT_NAMES = { - BEFORE_CHECKOUT: 'beforecheckout', + CART_VALIDATIONS: 'cartvalidations', PAYMENT_VALIDATIONS: 'paymentvalidations', } as const; @@ -57,7 +57,7 @@ export interface ShopifyEventMap { * @private */ export interface ShopifyInterceptMap { - [POS_INTERCEPT_NAMES.BEFORE_CHECKOUT]: BeforeCheckoutEvent; + [POS_INTERCEPT_NAMES.CART_VALIDATIONS]: CartValidationsEvent; [POS_INTERCEPT_NAMES.PAYMENT_VALIDATIONS]: PaymentValidationsEvent; } @@ -66,8 +66,8 @@ export interface ShopifyInterceptMap { * * @private */ -export interface BeforeCheckoutEvent extends Event { - readonly type: typeof POS_INTERCEPT_NAMES.BEFORE_CHECKOUT; +export interface CartValidationsEvent extends Event { + readonly type: typeof POS_INTERCEPT_NAMES.CART_VALIDATIONS; /** The POS cart at the point checkout was requested. */ readonly cart: Cart; }