From 915b31eba1d14697d82d4fb6b62e3834d43839bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Pa=C5=BAdziurek?= Date: Tue, 5 May 2026 15:58:55 +0200 Subject: [PATCH] feat: add DeepLink "support" --- package.json | 2 +- src/apm/API.ts | 20 +++++++++++++++++++- src/apm/views/Redirect.ts | 6 ++++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 71c5e1c..a4a8b86 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "processout.js", - "version": "1.9.2", + "version": "1.9.3", "description": "ProcessOut.js is a JavaScript library for ProcessOut's payment processing API.", "scripts": { "build:processout": "tsc -p src/processout && uglifyjs --compress --keep-fnames --ie8 dist/processout.js -o dist/processout.js", diff --git a/src/apm/API.ts b/src/apm/API.ts index 64dbedb..2c102d1 100644 --- a/src/apm/API.ts +++ b/src/apm/API.ts @@ -109,6 +109,8 @@ module ProcessOut { redirect?: { hint: string, url: string, + type?: 'web' | 'deep_link', + confirmation_required?: boolean, } } @@ -123,6 +125,8 @@ module ProcessOut { redirect: { hint: string, url: string, + type?: 'web' | 'deep_link', + confirmation_required?: boolean, } } @@ -350,11 +354,21 @@ module ProcessOut { gateway_configuration_id: context.gatewayConfigurationId, submit_data: { parameters: formData } }; - + return this.post(data, options) } } + public static sendRedirectResult(success: boolean) { + return (options: APIOptions) => { + const context = ContextImpl.context; + return this.post({ + gateway_configuration_id: context.gatewayConfigurationId, + redirect: { success }, + }, options) + } + } + private static get( pathOrOptions: string | APIOptions = '', options: APIOptions = {} @@ -553,6 +567,10 @@ module ProcessOut { } if (apiResponse.state === 'NEXT_STEP_REQUIRED' && apiResponse.redirect) { + if (apiResponse.redirect.type === 'deep_link') { + ContextImpl.context.page.load(APIImpl.sendRedirectResult(false)); + return; + } internalOptions.onSuccess && internalOptions.onSuccess(this.transformResponse( { ...apiResponse, diff --git a/src/apm/views/Redirect.ts b/src/apm/views/Redirect.ts index e8c6c5b..6d9bea7 100644 --- a/src/apm/views/Redirect.ts +++ b/src/apm/views/Redirect.ts @@ -147,7 +147,9 @@ module ProcessOut { return page({ className: 'redirect-headless-empty', 'aria-hidden': 'true' }) } - const redirectLabel = `Pay ${formatCurrency(this.props.config.invoice.amount, this.props.config.invoice.currency)}`; + const redirectLabel = this.props.config.invoice + ? `Pay ${formatCurrency(this.props.config.invoice.amount, this.props.config.invoice.currency)}` + : (this.props.config.redirect?.hint ?? `Continue`); return ( Main({ config: this.props.config, @@ -172,4 +174,4 @@ module ProcessOut { ) } } -} \ No newline at end of file +}