Skip to content

Commit 06c6a87

Browse files
authored
Backport: Add start_verification_session_url field to custom onsite payments schema (#6491)
Add start_verification_session_url field to custom onsite payments schema
1 parent 2f56ec0 commit 06c6a87

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed

.changeset/big-radios-wash.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@shopify/app': patch
3+
---
4+
5+
Add verification support to alternative payment extensions (closed beta).

packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_onsite_payments_app_extension_schema.test.ts

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,72 @@ describe('CustomOnsitePaymentsAppExtensionSchema', () => {
111111
]),
112112
)
113113
})
114+
115+
test('validates a configuration with valid start_verification_session_url', async () => {
116+
// Given
117+
const configWithVerificationUrl = {
118+
...config,
119+
start_verification_session_url: 'https://example.com/verify',
120+
}
121+
122+
// When
123+
const {success} = CustomOnsitePaymentsAppExtensionSchema.safeParse(configWithVerificationUrl)
124+
125+
// Then
126+
expect(success).toBe(true)
127+
})
128+
129+
test('validates a configuration without start_verification_session_url', async () => {
130+
// Given
131+
const configWithoutVerificationUrl = {
132+
...config,
133+
start_verification_session_url: undefined,
134+
}
135+
136+
// When
137+
const {success} = CustomOnsitePaymentsAppExtensionSchema.safeParse(configWithoutVerificationUrl)
138+
139+
// Then
140+
expect(success).toBe(true)
141+
})
142+
143+
test('returns an error if start_verification_session_url is not a valid URL', async () => {
144+
// When/Then
145+
expect(() =>
146+
CustomOnsitePaymentsAppExtensionSchema.parse({
147+
...config,
148+
start_verification_session_url: 'not-a-valid-url',
149+
}),
150+
).toThrowError(
151+
new zod.ZodError([
152+
{
153+
validation: 'url',
154+
code: zod.ZodIssueCode.invalid_string,
155+
message: 'Invalid url',
156+
path: ['start_verification_session_url'],
157+
},
158+
]),
159+
)
160+
})
161+
162+
test('returns an error if start_verification_session_url is an empty string', async () => {
163+
// When/Then
164+
expect(() =>
165+
CustomOnsitePaymentsAppExtensionSchema.parse({
166+
...config,
167+
start_verification_session_url: '',
168+
}),
169+
).toThrowError(
170+
new zod.ZodError([
171+
{
172+
validation: 'url',
173+
code: zod.ZodIssueCode.invalid_string,
174+
message: 'Invalid url',
175+
path: ['start_verification_session_url'],
176+
},
177+
]),
178+
)
179+
})
114180
})
115181

116182
describe('customOnsitePaymentsAppExtensionDeployConfig', () => {
@@ -144,4 +210,36 @@ describe('customOnsitePaymentsAppExtensionDeployConfig', () => {
144210
ui_extension_handle: config.ui_extension_handle,
145211
})
146212
})
213+
214+
test('maps start_verification_session_url when provided in extension configuration', async () => {
215+
// Given
216+
const configWithVerificationUrl = {
217+
...config,
218+
start_verification_session_url: 'https://example.com/verify',
219+
}
220+
221+
// When
222+
const result = await customOnsitePaymentsAppExtensionDeployConfig(configWithVerificationUrl)
223+
224+
// Then
225+
expect(result).toMatchObject({
226+
start_verification_session_url: 'https://example.com/verify',
227+
})
228+
})
229+
230+
test('does not include start_verification_session_url when not provided in extension configuration', async () => {
231+
// Given
232+
const configWithoutVerificationUrl = {
233+
...config,
234+
start_verification_session_url: undefined,
235+
}
236+
237+
// When
238+
const result = await customOnsitePaymentsAppExtensionDeployConfig(configWithoutVerificationUrl)
239+
240+
// Then
241+
expect(result).toMatchObject({
242+
start_verification_session_url: undefined,
243+
})
244+
})
147245
})

packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_onsite_payments_app_extension_schema.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export const CustomOnsitePaymentsAppExtensionSchema = BasePaymentsAppExtensionSc
2626
supports_oversell_protection: zod.boolean().optional(),
2727
modal_payment_method_fields: zod.array(zod.object({})).optional(),
2828
ui_extension_handle: zod.string().optional(),
29+
start_verification_session_url: zod.string().url().optional(),
2930
checkout_payment_method_fields: zod
3031
.array(
3132
zod.object({
@@ -58,6 +59,7 @@ export interface CustomOnsitePaymentsAppExtensionDeployConfigType extends BasePa
5859
supports_3ds: boolean
5960

6061
// CustomOnsite-specific fields
62+
start_verification_session_url?: string
6163
update_payment_session_url?: string
6264
multiple_capture?: boolean
6365
supports_oversell_protection?: boolean
@@ -85,6 +87,7 @@ export function customOnsiteDeployConfigToCLIConfig(
8587
void_session_url: config.start_void_session_url,
8688
confirmation_callback_url: config.confirmation_callback_url,
8789
update_payment_session_url: config.update_payment_session_url,
90+
start_verification_session_url: config.start_verification_session_url,
8891
merchant_label: config.merchant_label,
8992
supports_oversell_protection: config.supports_oversell_protection,
9093
supports_3ds: config.supports_3ds,
@@ -114,6 +117,7 @@ export async function customOnsitePaymentsAppExtensionDeployConfig(
114117
start_void_session_url: config.void_session_url,
115118
confirmation_callback_url: config.confirmation_callback_url,
116119
update_payment_session_url: config.update_payment_session_url,
120+
start_verification_session_url: config.start_verification_session_url,
117121
merchant_label: config.merchant_label,
118122
supports_oversell_protection: config.supports_oversell_protection,
119123
supports_3ds: config.supports_3ds,

0 commit comments

Comments
 (0)