From e0755744a7516ab139848fb76067e15e6aa9187d Mon Sep 17 00:00:00 2001 From: Henry Stelle Date: Mon, 17 Aug 2026 12:05:06 -0700 Subject: [PATCH] Support the intercepts target capability Assisted-By: devx/e5cddb80-0e3c-436a-875b-f96ba8a73082 --- .changeset/add-intercepts-capability.md | 5 +++++ packages/app/src/cli/models/extensions/schemas.ts | 1 + .../extensions/specifications/ui_extension.test.ts | 14 +++++++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 .changeset/add-intercepts-capability.md diff --git a/.changeset/add-intercepts-capability.md b/.changeset/add-intercepts-capability.md new file mode 100644 index 00000000000..c046ded2e19 --- /dev/null +++ b/.changeset/add-intercepts-capability.md @@ -0,0 +1,5 @@ +--- +'@shopify/app': minor +--- + +Add support for the `intercepts` UI extension target capability. diff --git a/packages/app/src/cli/models/extensions/schemas.ts b/packages/app/src/cli/models/extensions/schemas.ts index 04978437b76..ae70aba6258 100644 --- a/packages/app/src/cli/models/extensions/schemas.ts +++ b/packages/app/src/cli/models/extensions/schemas.ts @@ -39,6 +39,7 @@ export const ExtensionsArraySchema = zod.object({ const TargetCapabilitiesSchema = zod.object({ allow_direct_linking: zod.boolean().optional(), + intercepts: zod.any().optional(), }) const ShouldRenderSchema = zod.object({ diff --git a/packages/app/src/cli/models/extensions/specifications/ui_extension.test.ts b/packages/app/src/cli/models/extensions/specifications/ui_extension.test.ts index 3d5d5f6f1a1..d288b5de0a1 100644 --- a/packages/app/src/cli/models/extensions/specifications/ui_extension.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/ui_extension.test.ts @@ -241,15 +241,23 @@ describe('ui_extension', async () => { ]) }) - test('targeting object accepts allow_direct_linking for target capabilities', async () => { + test('targeting object accepts typed and arbitrary JSON target capabilities', async () => { const allSpecs = await loadLocalExtensionsSpecifications() const specification = allSpecs.find((spec) => spec.identifier === 'ui_extension')! + const intercepts = [ + { + event: 'paymentvalidations', + blocking: true, + applies_to: ['cash'], + future_options: {enabled: true, values: ['one', 2, null]}, + }, + ] const configuration = { targeting: [ { target: 'EXTENSION::POINT::A', module: './src/ExtensionPointA.js', - capabilities: {allow_direct_linking: true}, + capabilities: {allow_direct_linking: true, intercepts}, }, ], api_version: '2023-01' as const, @@ -292,7 +300,7 @@ describe('ui_extension', async () => { metafields: [], urls: {}, default_placement_reference: undefined, - capabilities: {allow_direct_linking: true}, + capabilities: {allow_direct_linking: true, intercepts}, preloads: {}, build_manifest: { assets: {