๐Ÿ“ฆ manideepk90 / react-native-hyperswitch-sdk

๐Ÿ“„ Transaction.swift ยท 147 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147//
//  Transaction.swift
//  AuthenticationSdk
//
//  Created by Shivam Nan on 01/09/25.
//

import Foundation
import UIKit

public final class Transaction {
    private let messageVersion: String
    private let directoryServerId: String?
    private let cardNetwork: String?
    private let transactionProvider: ThreeDSTransactionProvider
    
    init(messageVersion: String, directoryServerId: String? = nil, cardNetwork: String? = nil, transactionProvider: ThreeDSTransactionProvider) {
        self.messageVersion = messageVersion
        self.directoryServerId = directoryServerId
        self.cardNetwork = cardNetwork
        self.transactionProvider = transactionProvider
    }
    
    public func getAuthenticationRequestParameters() async throws -> AuthenticationRequestParameters {
        return try await transactionProvider.getAuthenticationRequestParameters()
    }
    
    public func doChallenge(
        viewController: UIViewController,
        challengeParameters: ChallengeParameters,
        challengeStatusReceiver: ChallengeStatusReceiver,
        timeOut: Int
    ) throws {
        try transactionProvider.doChallenge(
            viewController: viewController,
            challengeParameters: challengeParameters,
            challengeStatusReceiver: challengeStatusReceiver,
            timeOut: timeOut
        )
    }
    
    public func getProgressView() throws -> ProgressDialog {
        // Return a default ProgressDialog since getProgressView is not available in the provider protocol
        // TODO: implementation
        return ProgressDialog()
    }
    
    public func close() {
        transactionProvider.close()
    }
}

public class ProgressDialog {
    public func start() {}
    public func stop() {}
}

public class AuthenticationRequestParameters {
    final public let sdkTransactionID: String?
    final public let deviceData: String?
    final public let sdkEphemeralPublicKey: String?
    final public let sdkAppID: String?
    final public let sdkReferenceNumber: String?
    final public let messageVersion: String?
    final public let sdkEncryptedData: String?
    
    init(
        sdkTransactionID: String?,
        deviceData: String?,
        sdkEphemeralPublicKey: String?,
        sdkAppID: String?,
        sdkReferenceNumber: String?,
        messageVersion: String?,
        sdkEncryptedData: String?
    ) {
        self.deviceData = deviceData
        self.sdkTransactionID = sdkTransactionID
        self.sdkEphemeralPublicKey = sdkEphemeralPublicKey
        self.sdkAppID = sdkAppID
        self.sdkReferenceNumber = sdkReferenceNumber
        self.messageVersion = messageVersion
        self.sdkEncryptedData = sdkEncryptedData
    }
}

public class ChallengeParameters {
    public let threeDSServerTransactionID: String
    public let acsTransactionID: String
    public let acsRefNumber: String
    public let acsSignedContent: String
    public let threeDSRequestorAppURL: String?
    
    public init(threeDSServerTransactionID: String, acsTransactionID: String, acsRefNumber: String, acsSignedContent: String, threeDSRequestorAppURL: String? = nil) {
        self.threeDSServerTransactionID = threeDSServerTransactionID
        self.acsTransactionID = acsTransactionID
        self.acsRefNumber = acsRefNumber
        self.acsSignedContent = acsSignedContent
        self.threeDSRequestorAppURL = threeDSRequestorAppURL
    }
}

public class CompletionEvent {
    public init() {}
}

public class ProtocolErrorEvent {
    private let errorMessage: String
    
    public init(errorMessage: String) {
        self.errorMessage = errorMessage
    }
    
    public func getErrorMessage() -> String {
        return errorMessage
    }
}

public class RuntimeErrorEvent {
    private let errorMessage: String
    private let errorCode: String?
    
    public init(errorMessage: String, errorCode: String? = nil) {
        self.errorMessage = errorMessage
        self.errorCode = errorCode
    }
    
    public func getErrorMessage() -> String {
        return errorMessage
    }
    
    public func getErrorCode() -> String? {
        return errorCode
    }
}

public protocol ChallengeStatusReceiver {
    func completed(_ completionEvent: CompletionEvent)
    
    func cancelled()
    
    func timedout()
    
    func protocolError(_ protocolErrorEvent: ProtocolErrorEvent)
    
    func runtimeError(_ runtimeErrorEvent: RuntimeErrorEvent)
}