Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

COIOS-802: Identify native redirect flow (v5) #1879

Open
wants to merge 23 commits into
base: develop
Choose a base branch
from

Conversation

nauaros
Copy link
Contributor

@nauaros nauaros commented Oct 25, 2024

Summary

This development enables us to differentiate between regular and native redirects. To handle cases where native redirects fail (indicated by nativeRedirectData being nil), it's essential to track the originating flow type of each redirect.

Motivation

Native redirect flows can occasionally fail if nativeRedirectData is nil within the action object. Currently, we handle this by discarding the native redirect (checking if nativeRedirectData is nil), and defaulting to a "direct issuer flow" using a /details call.

To avoid the additional steps of the "direct issuer flow," we can address this issue on the backend. By identifying the native redirect flow, we can still retrieve the native redirect result directly.

Release notes

  • TBD

Ticket

COIOS-802

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This pull request does not contain a valid label. Please add one of the following labels: ['new', 'changed', 'fixed', 'removed', 'deprecated', 'chore', 'improvement']

@nauaros nauaros added the new a pull request that adds a new feature label Oct 25, 2024
github-actions[bot]
github-actions bot previously approved these changes Oct 25, 2024
@nauaros nauaros marked this pull request as draft October 25, 2024 15:03
github-actions[bot]
github-actions bot previously approved these changes Oct 28, 2024
github-actions[bot]
github-actions bot previously approved these changes Oct 28, 2024
github-actions[bot]
github-actions bot previously approved these changes Oct 29, 2024
github-actions[bot]
github-actions bot previously approved these changes Oct 29, 2024
github-actions[bot]
github-actions bot previously approved these changes Oct 29, 2024
github-actions[bot]
github-actions bot previously approved these changes Oct 29, 2024
github-actions[bot]
github-actions bot previously approved these changes Nov 1, 2024
github-actions[bot]
github-actions bot previously approved these changes Nov 4, 2024
@nauaros nauaros self-assigned this Nov 5, 2024
@goergisn goergisn self-requested a review November 14, 2024 15:15
goergisn
goergisn previously approved these changes Nov 19, 2024
@nauaros nauaros dismissed stale reviews from goergisn and github-actions[bot] via 7f206e2 January 14, 2025 11:02
@nauaros nauaros marked this pull request as ready for review January 14, 2025 11:02
github-actions[bot]
github-actions bot previously approved these changes Jan 14, 2025
Copy link
Contributor

⚠️ 2 public changes detected ⚠️

Comparing COIOS-802_identify_native_redirect_flow to develop

❇️1 Addition
🔀1 Modification

AdyenActions

RedirectAction

❇️ Added

public enum RedirectType: Swift.Decodable, Swift.Equatable, Swift.Hashable, Swift.RawRepresentable, Swift.String {
  case nativeRedirect
  case redirect
  public init(from decoder: any Swift.Decoder) throws
  public init?(rawValue: Swift.String)
  public typealias RawValue = Swift.String
  public var rawValue: Swift.String { get }
}

🔀 Modified

// From
public init(
  url: Foundation.URL,
  paymentData: Swift.String?,
  nativeRedirectData: Swift.String? = nil,
  paymentMethodType: Swift.String? = nil
)

// To
public init(
  url: Foundation.URL,
  paymentData: Swift.String?,
  type: AdyenActions.RedirectAction.RedirectType = .redirect,
  nativeRedirectData: Swift.String? = nil,
  paymentMethodType: Swift.String? = nil
)

/**
Changes:
- Added parameter `type: AdyenActions.RedirectAction.RedirectType = .redirect`
*/

Analyzed targets: Adyen, AdyenActions, AdyenCard, AdyenCashAppPay, AdyenComponents, AdyenDelegatedAuthentication, AdyenEncryption, AdyenSession, AdyenSwiftUI, AdyenTwint, AdyenWeChatPay

let container = try decoder.container(keyedBy: CodingKeys.self)
self.url = try container.decode(URL.self, forKey: .url)
self.paymentData = try container.decodeIfPresent(String.self, forKey: .paymentData)
self.type = try container.decode(RedirectType.self, forKey: .type)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are we sure the RedirectType will always be returned?

otherwise we could do:

Suggested change
self.type = try container.decode(RedirectType.self, forKey: .type)
self.type = (try? container.decode(RedirectType.self, forKey: .type)) ?? FALLBACK_VALUE

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -9,12 +9,27 @@ import Foundation
/// Describes an action in which the user is redirected to a URL.
public struct RedirectAction: Decodable {

/// Defines the type of redirect flow utilized by the `RedirectAction` object.
public enum RedirectType: String, Decodable {
// swiftlint:disable redundant_string_enum_value
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need to add the string values when they are matching?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just a guess - to not break anything if someone decides to rename enum case in the future?

url: URL(string: "https://google.com")!,
paymentData: nil,
type: .nativeRedirect,
nativeRedirectData: "test_nativeRedirectData"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Documentation says it's just a string with no further explanation. Is this an URL or anything else? Should we have tests for this string?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new a pull request that adds a new feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants